Hallo zusammen, ich habe momentan ein Problem mit der UART beim Atmega88A. Ich verwende die UART Library von Peter Fleury und möchte mit dem AVR den Futaba S-BUS auswerten. Dieser ist ein invertiertes UART-Signal mit 100 kBaud, 8 Datenbits und 'even Parity'. Ich invertiere das Signal mit einem Schmitt-Trigger, der Empfang funktioniert soweit auch wunderbar. Jetzt möchte ich aber auch gerne das Parity-Bit auswerten, um evtl. auftretende Übertragungsfehler feststellen zu können. Dazu habe ich die UART Library entsprechend modifiziert: In der uart_init wird der entsprechende Paritätsmodus eingestellt (even) und im Recieve-Interrupt wird auch das Parity-Error-Flag mit ausgewertet. Die Parity-Einstellung funktioniert zum Senden auch problemlos (mit Oszi überprüft). Aber ich erhalte nie Parity-Fehler, egal welchen Parity-Mode ich einstelle. Ich habe jetzt statt dem S-Bus mit einem zweiten AVR eine UART eingerichtet und sende damit zum ersten AVR. Aber auch hier kann ich keinen Parity Error erzeugen. Ich habe meinen Code jetzt auch schon mehrfach durchforstet aber ich finde den Fehler nicht. Mich wundert eben, dass es beim Senden funktioniert, also stimmt die Parity-Einstellung offensichtlich. Das Problem muss also bei der Auswertung des Flags liegen - oder aber das Flag wird nicht gesetzt. Im Anhang findet ihr meinen Code. Vielen Dank schonmal für Hilfe ;) lg Chris
Chris R. schrieb: > ich habe momentan ein Problem mit der UART beim Atmega88A. Ja, du behauptest im Subject, das beim Mega88 die Parity-Auswertung nicht funktionieren würde. Tatsächlich funktioniert aber nur deine Auswertung selbiger nicht. Der Fehler steckt also nicht im Mega88, sondern (wie fast immer) im Hauptproblem 30cm vor dem Monitor. > lastRxError = (usr & (_BV(FE0)|_BV(DOR0)|(1<<UPE0)) ); Klammersetzung grob falsch. Außerdem ein Stilbruch, der selbst auf mich als grundsätzlichen C-Hasser noch wirkt wie ein Nagel im Kopf: mal _BV-Macro, mal ausgeschrieben. Was soll der Quatsch? Ent- oder weder! Wenn du den Stilbruch nicht begangen hättest, hätte dir das natürliche Musterempfinden des Menschen wahrscheinlich helfen können, den Fehler selbst zu finden...
c-hater schrieb: > Der Fehler steckt also nicht im Mega88, > sondern (wie fast immer) im Hauptproblem 30cm vor dem Monitor. das möchte ich garnicht bestreiten ;) c-hater schrieb: > Klammersetzung grob falsch. das äußerste Klammerpaar könnte man natürlich weglassen, aber wieso ist deiner Meinung nach die Klammersetzung falsch? die Bitmaske ist komplett eingeklammert und wird dann mit usr verundet, sollte doch also passen?? lastRxError = usr & ( _BV(FE0)|_BV(DOR0)|(1<<UPE0) ) ; c-hater schrieb: > mal > _BV-Macro, mal ausgeschrieben. Was soll der Quatsch? Ent- oder weder! da hast du Recht. Das Durcheinander kommt daher, dass ich es erst mit _BV drin hatte, aber dann probeweise geändert habe auf (1<<UPE0).
hat noch jemand eine Idee, wo das Problem liegen könnte?
hat denn keiner eine Idee? Oder bin ich der einzige, der bei UART den Parity Modus nutzen möchte? lg Chris
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.