DMX on 250000 baud receive


Results 1 to 17 of 17

Threaded View

  1. #6
    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.

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