Hallo,
ik ben al een tijdje bezig met een DMX reciever te programmeren echt lukt het me niet om het signaal goed uit te pluizen, ik blijf namelijk hangen bij de startBYTE (adres 0)

http://www.theater-technisch-lab.nl/dmxsign.gif

ik gebruik de ingebouwde UART van de atmega88 en heb een externe 20mhz keramische resonator.
hoe kan ik er voor zorgen dat hij de startbyte niet leest maar adres 1

hieronder het programma waar ik mee bezig ben:


$regfile = "m88def.dat"
$crystal = 20000000
$baud = 250000

Config Lcdpin = Pin , Db4 = Portb.2 , Db5 = Portb.3 , Db6 = Portb.4 , Db7 = Portb.5 , E = Portb.1 , Rs = Portb.0
Config Lcdbus = 4
Config Lcd = 16 * 2

Config Pinc.4 = Output
Config Pinc.5 = Output

Config Pind.2 = Input
Config Pind.3 = Input
Config Pind.4 = Input

Config Timer2 = Timer , Prescale = 1024                     'Timer voor de uart

Dim Recval As Byte                                          ' DMX data
Dim Status As Byte                                          ' Statusbyte
Dim Modus As Byte                                           ' 0 = Ontvanger, 1 = Zender
Dim Aktmodus As Byte                                        ' Actieve mode
Dim Dmx_data As Byte                                        ' DMX Data van het gekozen kanaal 0-255
Dim Proval As Integer                                       ' DMX Data in procent 0-100
Dim Tempchannel As Integer                                  ' Het ingegeven Kanaal
Dim Viewchannel As Integer                                  ' Het weergeven Kanaal
Dim Univers As Byte                                         ' Universumsnummer
Dim Max_dmx_data As Integer                                 ' Maximaal uitgestuurde kanalen
Dim Dmx_count As Integer                                    ' Start counter DMX
Dim X As Integer                                            ' Help variable
Dim Temp As Integer                                         ' Help variable
Dim View_val As Integer                                     ' Weergave variable
Dim Waittime As Integer                                     ' Wachttijd
Dim View_string As String * 6                               ' String met waarden

Receive Alias 1                                             ' Ontvanger modus
Menu Alias 255                                              ' Menu modus

Foundflag Alias Status.0                                    ' Gevonden waarde
Searchflag Alias Status.1                                   ' Gezochte waarde
Waitflag Alias Status.2
View Alias Status.3
Yes Alias 1
No Alias 0
Pressed Alias 1

Dmx_error_led Alias Portc.4
Dmx_led Alias Portc.5

Menuknop Alias Portd.2
Plusknop Alias Portd.3
Minknop Alias Portd.4

Cls
Cursor Off Noblink

Modus = Receive
View = Yes
Aktmodus = 0
Tempchannel = 0
Viewchannel = 5
Univers = 0
Max_dmx_data = 0

Set Ucr.2                                                   ' 9de Bit als 1e Stopbit

Restart:

On Timer2 Timer_int
On Urxc Dmx_receive                                         ' Interruptroutine voor de ontvanger
Enable Timer2                                               ' Interrupt voor de timer starten
Enable Urxc
Enable Interrupts


' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
'                                                                                                                 '
'                                                 Hoofdprogramma                                                  '
'                                                                                                                 '
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '

Do
  If Modus <> Aktmodus Then                                 ' Modus gechaned
    Cls                                                     ' LCD leegmaken
    If Modus = Receive Then                                 ' Receiver mode
      Set Ucr.4                                             ' Switch to Receiving
      Lcd "Adr:"

      Locate 2 , 1
      Lcd "Val:    P:     %"
    End If
    Aktmodus = Modus
  End If

    If View = Yes Then                                      ' LCD inschakelen
      Locate 1 , 7
      View_val = Viewchannel
      Gosub Using
      Lcd View_string ; "/"

      View_val = Max_dmx_data
      Gosub Using
      Lcd View_string

      Locate 2 , 7
      View_val = Dmx_data
      Gosub Using
      Lcd View_string

      Locate 2 , 13
      Proval = 100 * Dmx_data
      Proval = Proval / 255
      View_val = Proval
      Gosub Using
      Lcd View_string

      Cursor Off
    End If
Loop

' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
'                                                                                                                 '
'                                                   Subroutinen                                                   '
'                                                                                                                 '
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '

' Displaynummer goed zetten
Using:
  View_string = "   " + Str(view_val)
  View_string = Right(view_string , 3)
Return

Menu:
Cls
   Locate 1 , 1 : Lcd "Safety adr: " ; Viewchannel
   Do
   Loop Until Menuknop = Pressed
   Cursor On Blink

Return

' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '
'                                                                                                                 '
'                                                 Interruptroutinen                                               '
'                                                                                                                 '
' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - '

Dmx_receive:                                                'Seriele data ontvangen
  Recval = Udr

  If Usr.3 = 1 Then                                         ' Overrun Fout
    Dmx_count = -2

  Elseif Usr.4 = 1 Then                                     ' 88us Break gedetecteerd door een Framing error
    If Ucr.1 = 0 Then                                       ' en 9e Bit = 0
      Max_dmx_data = Dmx_count - 1
      Dmx_count = 0
    End If

  Elseif Dmx_count = -1 Then
    If Recval = Univers Then                                ' Startcode = Univers  (0)
      Dmx_count = 0                                         ' Teller op 0
    Else
      Toggle Dmx_error_led                                  ' Fout gedeelte van bittrein error led aan
      Dmx_count = -2                                        ' Overnieuw proberen
    End If

  Elseif Dmx_count >= 0 Then                                ' Data ontvangen
    Toggle Dmx_led
    Incr Dmx_count                                          ' Adres teller
    If Viewchannel = Dmx_count Then                         ' Adres gevonden dan
      Dmx_data = Recval                                     ' Data opslaan
      If Searchflag = 1 Then                                ' when we are Searching
        If Recval > 0 Then                                  ' en waarde = > 0
          Set Foundflag                                     ' dan gevonden melden
          Reset Searchflag                                  ' en stop zoeken
        Else                                                ' als en nog niets binnen is
          Incr Viewchannel                                  ' een adres verder
          If Viewchannel > Max_dmx_data Then Viewchannel = 1       ' totdat maximale adres is gebruikt
          If Viewchannel = Tempchannel Then                 ' begin dan opnieuw
            Reset Foundflag                                 ' melding niets gevonden
            Reset Searchflag                                ' en stop zoeken
          End If
        End If
      End If
    End If
  End If
Return


Timer_int:                                                  'interrupt voor wachtroutine
  Incr Waittime
Return


End                                                         'einde programma

zou iemand kunnen helpen ?
mvg Stef