Decoding DMX with picbasic pro


Results 1 to 9 of 9

Threaded View

  1. #2
    Join Date
    Apr 2005
    Posts
    32


    Did you find this post helpful? Yes | No

    Default

    http://www.melabs.com/resources/samples.htm

    here is a program for dimmer may be helpful for you?

    Code:
       ' Lamp dimmer
        ' ===========
        '
        ' File name : LampDim.bas
        ' Company : Mister E 
        ' Programmer : Steve Monfette
        ' Date : 23-12-2004
        ' Device : PIC12F675
        '
        '
        ' This program is use to dim intensity of an AC line load
        ' like lamp, motor and other.  Developped for 60 Hz line.
        '
        ' This allow to increase or decrease intensity.
        ' If the user doesn't held at least 0.5 sec:
        '    1. "Increase" : we will set the output for full brightness
        '    2. "Decrease" : we will turn off the output
        '
        '
        ' The software need :
        '     1. A full wave signal from the AC line on GP4
        '
        ' The software use :
        '     1. TIMER1 overflow to check if pushbutton are hold for
        '        more than 0.5 Sec
        '     2. Interrupt on GP4 (AcLine input) to synchronise Triac
        '
        '
        '        Device programming mode and hardware definition 
        '        ===============================================
                 ' Using Internal Clock, no clock out
                 ' Enable Watch dog timer
                 ' Disable MCLR pin   
                 ' Enable Power-up timer
                 ' Enable Brown-out detect
                 '
    @ __config _INTRC_OSC_NOCLKOUT & _WDT_ON & _MCLRE_OFF & _PWRTE_ON & _BODEN_ON
                 '
                 '
    TRISIO = %11111011
    OPTION_REG.7=0    ' Enable pull-ups
    WPU=%00000011    ' Enable pull-ups on GP0, GP1
    CMCON=7    ' Disable analog comparator
    ANSEL=0    ' Disable analog converter
    
    Pb_Inc    var    GPIO.0 ' Input for INCREMENT/ON push button
    Pb_Dec    var    GPIO.1 ' Input for DECREMENT/OFF push button
    Triac    var    GPIO.2 ' Output to TRIAC gate
    ACLine    var    GPIO.4 ' Input for the FullWave rectify AC line
        '
        '        Software definition
        '        ===================    
                 '
                 '
                 '
    MaxDelay                    var word
    TriacDelay                  var Word
    Debounce_AutoRepeatDelay    var    word
    FullBright                  var bit
        '
        '
        '        Interrupts definition
        '        =====================
                 '
                 '
                 '
    INTCON=%10001000 ' Enable interrupt on GPIO change
    IOCB.4=1         ' Enable interrupt on GP4 change
    PIE1.0=0          ' disable TMR1 overflow interrupt
    T1CON=%00110100  ' Set TIMER1 
                     ' prescaler 1:8
                     ' internal clock (Fosc/4) 1MHZ
                     ' synchro internal
                     ' we will use TIMER1 overflow
                     ' $ffff * 8* (1/(4MHZ / 4)) = 0.524 Sec
    ON INTERRUPT GOTO ACDetect
       '
       '          Hardware and variable initialisation
       '          ====================================
                  '
                  '
    Maxdelay=6000 ' Set Maximum delay (set to 8000 for 50Hz)
    FullBright=0  ' disable Full Brightness flag
    triac=0       ' disable Triac Gate
    triacdelay=0  ' Set delay to minimum
    gosub ResetTimer1 ' reset Timer1
       '
       '      Main
       '      ====
       ' Get entry from user to Increment of Decrement intensity
       '  
       '
    start: 
       '
       ' Test Increment push button
       ' --------------------------
       ' If hold more than .5 Sec, increment triac gate delay by 500 uSec
       ' case else Full brightness at output
       '
    while Pb_inc=0 
        gosub TestTimer1 ' test status of TIMER1
        while (Pb_inc==0) AND (PIR1.0==0) 'loop while holding push button 
                                          'and no TIMER1 overflow
    
        wend
        
        if PIR1.0==1 then ' If timer overflow (pushbutton hold for > 0.5 sec), 
            T1CON.0=0     ' disable TMR1
            gosub Debounce_AutoRepeat
            if (triacdelay<maxdelay) then="">
                triacdelay=triacdelay+500 'increment Triac gate delay
            else
                triacdelay=maxdelay ' if triacDelay>MaxDelay,
                fullbright=1        ' set the full brightness Flag
            endif
        else 
            triacdelay=maxdelay ' If pushButton was hold less than .5 sec
            Fullbright=1 ' Set the full brightness flag
        endif
    wend
    gosub ResetTimer1
       '
       ' Test Decrement push button
       ' --------------------------
       ' If hold more than .5 Sec, increment triac gate delay by 500 uSec
       ' Case else, turn off output
       '
    while Pb_dec=0 
        gosub TestTimer1 ' Test status of TIMER1
        while (Pb_dec==0) AND (PIR1.0==0) 'loop while holding push button 
                                          'and no TIMER1 overflow
    
        wend
        
        if PIR1.0==1 then ' If timer overflow (pushbutton hold for > 0.5 sec), 
            T1CON.0=0 ' disable TIMER1
            gosub Debounce_AutoRepeat
            if (triacdelay>0) then
                Fullbright=0 ' Reset TRIAC always ON flag
                triacdelay=triacdelay-500
            endif
        else
            Fullbright=0 ' Reset TRIAC always ON flag
            triacdelay=0
        endif
    wend
    gosub ResetTimer1
    goto start
        '
        '
        '     TestTimer1
        '     ----------
        '
        ' Enable TIMER1 if :
        '    not enable and not in overflow
        '
    TestTimer1:
        if (T1CON.0==0) AND (PIR1.0==0) then 'if TIMER1 not enable
                                             'and TIMER1 not overflow    
            T1CON.0=1 'enable TIMER1
        endif
        return
        '
        '
        '     ResetTimer1
        '     -----------
        '
        ' Subroutine to clear Timer1
        '    1. Overflow flag
        '    2. Disable Timer
        '    3. Clear counter
        '
    ResetTimer1:
    PIR1.0=0  'clear timer overflow
    T1CON.0=0 'disable timer
    TMR1L=$00 'clear counter
    TMR1H=$00 '
    return
        '
        '
        '     Debounce_AutoRepeat
        '     -------------------
        '
        ' Subroutine to debounce push button.
        ' Also provide kind of auto-repeat when push button
        ' are held down.
        '
        ' each delay = 20 mSec
        ' Use of PAUSEUS to be sure getting ACLine interrupt
        '
    Debounce_AutoRepeat:
    
    for Debounce_AutoRepeatDelay=1 to 2000
        pauseus 10
    next
    return
        '
        '
        '       ACDetect
        '       --------
        '
        ' Interrupt routine called by ACLine (GP4) pin state change
        '
    disable
    ACDetect:
    if ACline==1 then ' Check for rising edge of AC signal
        if triacdelay > 0 then
            Triac=1 ' Activate TRIAC
            if FullBright==0 then   ' In case Brightness flag is not set
                pauseus triacdelay  ' do the selected delay
                triac=0 ' Disable TRIAC
            endif
        else
            triac=0
        endif
    endif
    INTCON.0=0 ' Clear GPIF (interrupt on GP4 change)
    resume
    enable
    </maxdelay)>
    Last edited by ScaleRobotics; - 6th August 2010 at 16:50. Reason: added code tags

Similar Threads

  1. ICD, ICSP and Picbasic Pro
    By mwhatley in forum mel PIC BASIC Pro
    Replies: 17
    Last Post: - 8th August 2024, 21:42
  2. How to configure SPI in PICBASIC PRO?
    By moogle in forum mel PIC BASIC Pro
    Replies: 13
    Last Post: - 15th April 2007, 19:31
  3. Question for all that use MELABS PICBASIC PRO
    By oskuro in forum Off Topic
    Replies: 2
    Last Post: - 24th March 2005, 18:15
  4. DMX & PicBasic coding problem
    By magicmarty in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 20th September 2004, 16:35
  5. PicBasic Pro & PicBasic syntax different
    By Billyc in forum General
    Replies: 5
    Last Post: - 16th April 2004, 22:19

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts