Atmega88 UART Parity funktioniert nicht

#3584629
Lesenswert?

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
Angehängte Dateien:
Gast #3584654
Lesenswert?

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...
#3584686
Lesenswert?

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).

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren