Also der Code funktioniert ohne Änderungen, von SIGNAL abgesehen.
Ich hatte einen Fehler in der UART-Ausgabe.
In der UART-Ausgabe ist natürlich auch noch die Konvertierung auf ASCII mit itoa notwendig.
Hier liegt ein Timingfehler vor, entweder ist dein Prozessor falsch getaktet oder deine Fernbedienung sendet kein RC5. Im Code springst du nämlich nur die Zeilen für einen ungültigen RC5 Code an.
mfg
Also der Code funktioniert ohne Änderungen, von SIGNAL abgesehen.
Ich hatte einen Fehler in der UART-Ausgabe.
In der UART-Ausgabe ist natürlich auch noch die Konvertierung auf ASCII mit itoa notwendig.
Die Fernbediehnung müsste eigentlich alles richtig machen, hab eine Loewe Control 150 TV die folgenden Frame aussendet bei der Power Taste: (14 Bit )
- - - Aktualisiert - - -
Was bedeutet das ( für einen Anfänger)?In der UART-Ausgabe ist natürlich auch noch die Konvertierung auf ASCII mit itoa notwendig.
Ich habe leider keinen schimmer wie ich dem besagten Timingfehler auf die Spur kommen sollen.. Mehr als den CPU takt mit F_CPU vorgeben kann man doch nicht, oder?
Auf deinem Terminal möchtest du ja das ASCII-Zeichen sehen und nicht das binäre.
Das habe ich mal auf die schnelle dazugepfriemelt.Code:uint8_t code = rc5.code; uint8_t addr = rc5.addr; char codea[2]; char addra[2]; //FB Code senden! itoa(code,codea,10); itoa(addr,addra,10); uart_puts(codea); uart_putc(' '); uart_puts(addra); uart_puts( "\n\r" ); /* und auf naechstes Zeichen warten */ rc5.flip = -1;
Vor dem while(1) habe ich noch uart_puts("Start"); eingefügt, damit man sieht ob die UART-Ausgabe überhaupt funktioniert.
Für dich uninteressant solange der Empfang nicht mal funktioniert.Was bedeutet das ( für einen Anfänger)?
Doch, du musst die Fuses im Controller so setzen wenn du eine externe Clock verwendest!! F_CPU sagt dem Compiler nur, wie schnell der Controller getaktet ist, setzt aber nicht den Wert selbst im Controller.Ich habe leider keinen schimmer wie ich dem besagten Timingfehler auf die Spur kommen sollen.. Mehr als den CPU takt mit F_CPU vorgeben kann man doch nicht, oder?
mfg
Wie schon geschrieben gibst du mit FCPU nur dem Compiler vor wie schnell der µC in der Schaltung takten wird damit dieser das Programm richtig übersetzen kann (wird u.A. bei "wait_ms()" benötigt).
Wenn du im Programm 1MHz vorgibst musst du dem Controller auch eine Takt von 1MHz vorgeben. Die µC haben meist einen internen 8MHz RC Oszillator und einen eingestellten Teiler durch 8, dadurch läuft der µC im Urzustand mit 1MHz.
Du hast dem Compiler vorgegeben das du einen 16MHz Takt verwendest. Du musst also einen 16MHz Takt irgendwie dem µC zur verfügung stellen (entweder Takt oder Quarz) und die Fuses dementsprechend einstellen. Eventuell funktioniert es auch wenn du FCPU auf 8MHz stellst (Interner RC-Oszillator).
MfG Hannes
SO!! Dank euer Unterstützung habe ich das Problem nun endlich gelöst. Wie 021aet04 schon sagt, das Fuse Bit für den internen Takt muss auf F_CPU abgelichen werden!
Habe nun das Fusebit auf 8 MHz intern, und F_CPU dementsprechend auf 8000000 angeglichen, nun funktioniert der Code so wie er soll
Viele Dank an Euch!
gruß wolf7272
Herzlichen Glückwunsch, schön das es jetzt funktioniert.
MfG Hannes
Lesezeichen