Forum: Mikrocontroller und Digitale Elektronik Atmega88 UART Parity funktioniert nicht


von Chris R. (emigraen)


Angehängte Dateien:

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

von c-hater (Gast)


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

von Chris R. (emigraen)


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

von Chris R. (emigraen)


Lesenswert?

hat noch jemand eine Idee, wo das Problem liegen könnte?

von chris (Gast)


Lesenswert?

push

von chris (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.