-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 16

Thema: Probleme mit RS232 und dem Empfang

  1. #1
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318

    Probleme mit RS232 und dem Empfang

    Anzeige

    Hallo,

    ich versuche mir gerade ein "Ambilight" zu bauen. Dafür gibt es eine Software, die den Bildschirminhalt ausliest und die Werte ( Hex ) an die serielle Schnittstelle sendet. Ein String davon sieht so aus:

    BE 00 00 03 FF FF FF

    Wobei nur die letzen 3 Hex Werte ( R G B ) interessant sind. Dies ist ein Beispiel für einen Kanal. Für 2 Kanäle sieht der String so aus:

    BE 00 00 06 FF FF FF FF FF FF

    Auch hier sind wieder nur die letzten 6 Werte ( RGB RGB ) interessant. Zum einlesen benutze ich folgenden Code:

    Code:
    '--- Regfile ---
    $regfile = "m88def.dat"
    $crystal = 18432000
    $baud = 38400
    
    '--- interrupt ---
    On Urxc Onrxd
    Enable Urxc
    Enable Interrupts
    
    
    '--- Dim ---
    Dim Inputstring As Byte
    Dim Myarr(13) As Byte
    Dim Arridx As Byte
    Dim I As Byte
    
    Dim Rot_top As Byte
    Dim Gruen_top As Byte
    Dim Blau_top As Byte
    
    Dim Rot_right As Byte
    Dim Gruen_right As Byte
    Dim Blau_right As Byte
    
    Dim Rot_left As Byte
    Dim Gruen_left As Byte
    Dim Blau_left As Byte
    
    Dim Timercount As Word
    
    
    '--- Config ---
    Config Portb.1 = Output
    Config Portb.2 = Output
    Config Portb.3 = Output
    Config Portc.5 = Output
    
    Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 1
    Config Timer2 = Pwm , Pwm = On , Compare A Pwm = Clear Down , Prescale = 1
    Tccr2a = &B10000001
    
    '--- Enable ---
    Enable Timer0
    Enable Timer1
    Enable Timer2
    
    '--- Start / boot ---
    Compare1b = 0
    Compare1a = 0
    Ocr2a = 0
    Timercount = 0
    
    '--- Main ---
    Main:
    
    Compare1b = Gruen_top                                       'Grün ansteuern
    Compare1a = Blau_top                                        'Blau ansteuern
    Ocr2a = Rot_top                                             'Rot ansteuern
    
    Goto Main
    
    
    '--- Interrupt Onrxd ---
    Onrxd:
    
         Inputbin Inputstring                                   'Hex einlesen
    
         If Inputstring = &HBE Then                             'Wenn Sync erkannt, dann starten
             Timercount = 0
             Arridx = 0
        End If
        Incr Arridx
        Myarr(arridx) = Inputstring
    
        Rot_top = Myarr(5)                                      'Werte in Array packen
        Gruen_top = Myarr(6)
        Blau_top = Myarr(7)
    
        Rot_left = Myarr(8)
        Gruen_left = Myarr(9)
        Blau_left = Myarr(10)
    
        Rot_right = Myarr(11)
        Gruen_right = Myarr(12)
        Blau_right = Myarr(13)
    
    
    Return
    Wenn ich die Software auf nur einen Kanal stelle, dann habe ich schöne Übergänge zwischen den einzelnen Farben. Sobald ich aber die Software auf 2 Kanäle umstelle ( Top und Left ), dann zucken die Farben der LED Leiste ab und zu. ( Das Programm im Atmel ist immer das selbe. Nur die Daten, welche über die serielle kommen sind anders ). Beim hoch- oder runterdimmen einer Farbe geht diese dann z.B. dauerhaft an und sofort wieder aus. Es ist nicht reproduzierbar. Ich schließe einen Hardwarefehler momentan mal aus, da mit nur einem Kanal ( Top ) alles funktioniert. Ich sitz hier nun seit 6 Stunden und finde den Fehler einfach nicht. Es wäre nett, wenn Ihr mal drüber schauen könntet. Wo könnte der Fehler sein ?

    Danke im Voraus

    Gruß BlaueLED

  2. #2
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    So wirklich springt mich nix an, ausser, dass du die Array-Werte schon wegschreibst, wenn sie noch garnicht da sind (weil "arridx" fängt ja bei 1 an und muss z.b. "5" überhaupt erstmal erreichen)

    würde ich mal folgendes probieren (tricky):
    Code:
    Dim Inputstring As Byte
    '-------------------------------------------
    Dim x_BE As Byte                     'byte 1
    Dim x_01 As Byte                     'byte 2
    Dim x_03 As Byte                     'byte 3
    Dim cntr  As Byte                     'byte 4
    Dim Rot_top As Byte                 'byte 5
    Dim Gruen_top As Byte             'byte 6
    Dim Blau_top As Byte                'byte 7
    Dim Rot_right As Byte                     'byte 8
    Dim Gruen_right As Byte                     'byte 9
    Dim Blau_right As Byte                     'byte 10
    Dim Rot_left As Byte                     'byte 11
    Dim Gruen_left As Byte                     'byte 12
    Dim Blau_left As Byte                      'byte 13
    Dim Myarr(13) As Byte at x_BE OVERLAY                    
    Dim Arridx As Byte
    Dim I As Byte
    der Interrupt wär dann nurmehr wie folgt
    Code:
    Onrxd:
    
         Inputbin Inputstring                   'Hex einlesen
         If Inputstring = &HBE Then         'Wenn Sync erkannt, dann starten
             Timercount = 0
             Arridx = 0
        End If
        if Arridx < 13 then Incr Arridx   ' sicherheitshalber der Teufel und Murphy schlafen nicht
        Myarr(arridx) = Inputstring  
    
    ' --------------(das genügt)----------------
    Return
    die werte sind dann automatisch im richtigen Feld, aber nur, wenn sie auch kommen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  3. #3
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    Hallo PicNick,

    vielen dank für die Antwort. Habe Deinen Code probiert, aber leider mit dem gleichen Ergebnis. Die Farben zucken genauso.

    Gruß BlaueLed

  4. #4
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Wie genau hast du den Input in allen Varianten analysiert ? (da war doch schon mal ein Thread)
    Weil das Programm oben ist eigentlich schon koscher, aber ohne irgendwelche Checks, ob alles so ist, wie erwartet.
    --> Gibt's Doku von der Software, was die so genau liefert ?
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  5. #5
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    Hi,

    auf dem angehängten Bild sind die Daten zu erkennen, die mir boblight über die serielle Schnittstelle liefert. BE ist die Synchronisation. Erst ab byte 5 fangen die RGB Werte an.

    Es gibt eigentlich keine richtige Doku. Nur eine Homepage.

    http://blogger.xs4all.nl/loosen/articles/420470.aspx

    Gruß BlaueLED
    Miniaturansichten angehängter Grafiken Miniaturansichten angehängter Grafiken boblight_data.jpg  

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    43
    Beiträge
    2.240
    ui ui ui ...

    probiers mal so:

    Code:
    Onrxd:
         Incr Arridx
         Myarr(arridx) = UDR
         If Myarr(arridx) = &HBE Then         'Wenn Sync erkannt, dann starten
             Timercount = 0
             Arridx = 0
        End If
    ' --------------(das genügt)----------------
    Return
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  7. #7
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    mmmmmh.
    Moment, das Zeichen &HBE kann doch jederzeit auch in den RGB-Daten vorkommen ? Das würde das Programm doch ins schleudern bringen.


    Ich versuch mich mal schlau zu machen
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  8. #8
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    Hallo PicNick,

    das kann natürlich sein.

    gruß BlaueLed

  9. #9
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    Tscha, ich würde folgendes versuchen, um die Sache einzukreisen
    Code:
    Onrxd: 
         Inputbin Inputstring                 
         if Arridx = 0  then
                 If Inputstring = &HBE Then   
                         Timercount = 0 
                         Arridx = 1
                 End If 
        else
                Myarr(arridx) = Inputstring  
                Incr Arridx 
                if Arridx > 13 then
                       Arridx = 0
                End If 
        End If 
    Return
    geht darum, erst auf &HBE zu warten, dann aber auf jeden fall immer 12 bytes zu lesen (je nach mode) und erst dann wieder auf das Sync zu warten

    Eleganterweise sollte man die Leseanzahl aus der Message selbst rausfischen ( 3, 6 od. 9) aber für einen ersten Versuch reciht das oben vielleicht schon
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

  10. #10
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    10.03.2005
    Ort
    Schifferstadt
    Alter
    35
    Beiträge
    318
    hi,

    es hat funktioniert. Es zuckt nicht mehr. PicNick Du hattest recht. Das zucken kam bestimmt vom BE während der Übertragung. Jetzt kann ich mein Ambilight genießen.

    Vielen Dank

    Gruß BlaueLed

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •