DMX on 250000 baud receive


Closed Thread
Results 1 to 17 of 17

Hybrid View

  1. #1
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by syscoder View Post
    Which command we have to use here "Pulsin" or " Hserin" ? u use here pulsin

    counter = 1 'just a dummy variable
    pulsin portB.1,0,counter --->>>>>>>'here I'm looking for the break signal<<<<<-------

    'otherwise, a valid break was found and it's time to read the start code
    dummy = RCREG 'clear out any garbage which may be in the USART
    dummy = RCREG
    SPBRG = 0
    TXSTA.2 = 0 'brgh = 0
    TXSTA.4 = 0
    RCSTA.7 = 1
    RCSTA.6 = 0 'setting 8 bit receive mode, no parity, etc
    RCSTA.4 = 0 'check the datasheet to see what all these bits do
    RCSTA.4 = 1 'now, the USART is on and ready to receive
    while RCIF = 0:wend 'hover here after break, before start code
    startcode = RCREG 'This is the first byte received after the break
    if startcode <> 0 then checkdmx 'do your own stuff here on a non-zero code
    aminus = adresse_grada - 1 'address1 is my target address
    for x = 1 to aminus 'set up a loop to count almost to the address
    while RCIF = 0:WEND 'sit here until a byte is received
    dummy = RCREG 'stash the byte somewhere unimportant
    next x
    newlevel1 = RCREG 'This is your target channel data
    portA.2 = newlevel1 'i want dimming a LED on PORTA.2
    RCSTA.7 = 0 'turn off the USART

    goto checkdmx
    return
    Just like the code above says...pulsin is used to find the 'break', and the code reads the serial port receive register directly...

  2. #2
    Join Date
    Mar 2007
    Posts
    16


    Did you find this post helpful? Yes | No

    Default hserin

    yes i now it.

    but i want to know how to use "hsein" command to receive for dmxsginal

    is everything true here in the code?can i use it for dimming a led ?
    Last edited by syscoder; - 5th March 2007 at 15:45. Reason: missing

  3. #3
    skimask's Avatar
    skimask Guest


    Did you find this post helpful? Yes | No

    Default

    Quote Originally Posted by syscoder View Post
    yes i now it.

    but i want to know how to use "hsein" command to receive for dmxsginal

    is everything true here in the code?can i use it for dimming a led ?
    PBP manual, page 75-81. Whether or not the code is accurate or correct for DMX512...well, quite frankly, this is posted in the "MELabs PICBASICPro" forums, not the "DMX512 Questions" forum.

  4. #4
    Join Date
    Nov 2004
    Posts
    61


    Did you find this post helpful? Yes | No

    Default

    Heh...

    That's my code snipped from a year or so ago.

    It does work, and it's dead stable. But you need to understand that it's only a subroutine, called from the main program loop. You get to write the main loop.

    The reason for not using HSERIN is that I found there was a slight startup delay when using the command. Using PULSIN to find the break, then calling HSERIN took too long and I was losing data. As you may know, the make-after-break signal can in some cases only be a few microseconds long.

    At 20 MHz, you get 5 assembly instructions per microsecond, which may not be enough.

    When I first wrote the code I didn't dig too deeply in PBP's internals to see what exactly was happening when HSERIN was invoked. But it seemed like an overhead issue within the command.

    And note that the 'skip' function which can be used as part of HSERIN is only byte sized. So 'skip 254' works but 'skip 257' doesn't.

    It was easier to access the registers directly and be assured that everything was being received properly.

    Note that there's absolutely no guarantee that each and every packet coming down the wire is exclusively dimmer data.

    JEC

  5. #5
    Join Date
    Jun 2005
    Location
    Wisconsin
    Posts
    382


    Did you find this post helpful? Yes | No

    Default

    Like most things there is more than one way to accomplish a task. Last year I saw the post from JEC about DMX. While it was nice to hear that DMX was possible with PICBasic I really wanted something that was interrupt based.

    After doing some research I found that all you need to do is look for a framing error, after which should be the start code (there may be several framing errors in a row). Over the last few days I have created the interrupt code snip below. While I haven't tested it exhaustively it seems to work.

    Code:
    DimmerCount	VAR WORD  ; Location in DMX string
    DMXStartAddr	VAR WORD  ; DMX start address
    DMXStartCode	VAR BYTE  ; DMX Start code (Dimmer=0)
    Dummy		VAR BYTE
    DMX_State	VAR BYTE  ; Stage of DMX reception     
    
    Valid_Break     CON 1
    Valid_SC        CON 2
    Valid_Data     CON 3
    
    Disable
    
    INTERRUPT_SUB:
    	IF OERR Then 						
    		CREN = 0
    		CREN = 1    			; Clear Overrun Errors
    		High Err_LED			; Notify user of overrun error
    		DMX_State=0
    		EndIF
    
    	IF FERR Then
            	FERR = 0
    		DMX_State=Valid_Break
    	Else
    		GoSub RX_DMX_Data							
         	EndIF
         	
        	Dummy=RCREG				; Empty UART of junk data
    	Resume	
    
    RX_DMX_Data: 
    	IF DMX_State=Valid_Break Then
    		HSerin 20,NoData,[DMXStartCode]	; Start code of 0 = dimmer data
    		
    		IF DMXStartCode=0 Then 
    			DMX_State=Valid_SC
    		Else
    			High Err_LED		; Notify user of Error in Start Code
    			DMX_State=0 
    			EndIF
    		EndIF
    		
    	IF DMX_State=Valid_SC Then
    		For DimmerCount=0 TO DMXStartAddr; Count incoming data bytes (frames) 
    			Dummy=RCREG		; Read unwanted values
    			Next DimmerCount
    		DMX_State=Valid_Data
    		EndIF
    		
    	IF DMX_State=Valid_Data Then
    		HSerin 20,NoData,[STR DataBuffer\Number_Of_Channels]
    		DMX_State=0
    		EndIF
    		
    	IF DMX_State=0 Then
    		Resume
    		EndIF
    	
    GoTo RX_DMX_Data
    	
    NoData:
    	DMX_State=0
    	Resume
    		
    Enable
    End
    Last edited by DynamoBen; - 8th March 2007 at 05:17.

  6. #6
    Join Date
    Nov 2004
    Posts
    61


    Did you find this post helpful? Yes | No

    Default

    Very elegant. Nice job, DynamoBen.

  7. #7
    Join Date
    Jul 2003
    Location
    Colorado Springs
    Posts
    4,959


    Did you find this post helpful? Yes | No

    Default

    Well, I can see some potential problems with that program.

    So be ready for some more questions from programmer07, oops, I mean syscoder.
    <br>
    DT

Similar Threads

  1. DMX receive issue
    By NoahLD in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 27th August 2014, 13:51
  2. A Serial GLCD 128x64 Simple Project
    By Oldspring in forum Off Topic
    Replies: 0
    Last Post: - 8th March 2010, 20:58
  3. Big Problem in PBP To receive DMX
    By programmer07 in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 4th March 2007, 18:49
  4. Auto Baud Rate Detection
    By mytekcontrols in forum Serial
    Replies: 10
    Last Post: - 31st October 2005, 02:17
  5. Baud Rate and Timing Calculator
    By picnaut in forum General
    Replies: 3
    Last Post: - 23rd January 2004, 16:48

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