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