Forum: Mikrocontroller und Digitale Elektronik USART - Mega8 - recive/parity Problem


von Andreas K. (ergoproxy)


Angehängte Dateien:

Lesenswert?

Hi ist mir fast etwas peinlich aber ich hab ein Problem mit dem USART 
des Mega8 und bin langsam am verzweifeln weil ich einfach keine Idee 
mehr hab woran es liegen könnte:

Problembeschreibung:
Ich kann mit dem Mega8 über USART senden (konstante Zeichen) die auch 
ankommen aber nicht im Richtigen format. Irgendwas ist da nicht in 
Ordnung mit der Parität und ich bekomme von den Terminalprogrammen 
Fehler in der Übertragung angezeigt. Trotzdem kann ich die Zeichen lesen 
bzw wenn ich Parity auf Space stelle bekomme ich alles Richtig ohne 
Fehler.
Empfangen vom Pc aus geht auch, wenn ich keinen Interrupt verwende. Also 
dauernd Statusbit überprüfen und dann das Empfangsregister zurücksenden 
geht ohne Probleme, wenn ich aber den Interrupt verwende geht er wohl 
nich in die ISR - Warum weiß ich nicht. Im Code ist sowohl der 
RX-Interrupt enabled, sowie der globale ( sei(); ). Den nicht 
funktionierenden Code stelle ich in den Anhang. Irgendetwas simples muss 
es eigendlich sein da ich früher auch Programme hatte die vollständig 
mit Interrupts gingen.

Zur Hardware:
Ich hab mir für meinen Laptop einen USB-RS232 
(USB-FT232RL-MAX232-STK500) gebaut der mit dem STK500 auch funktioniert. 
Ich kann alle Funktionen des STK nutzen, weshalb ich den Wandler für in 
Ordnung halte. Das Programm hab ich sowohl mit diesem Wandler als auch 
mit einem normalen PC mit RS232 Schnittstelle ausprobiert. Beide zeigen 
die selben "Probleme".

Der µC lauft mit einem externen Quarz auf dem STK500 (12Mhz). Vorher 
hatte ich es mit dem STK500 Takt versucht (3686400 Hz). Die Fuses sind 
deffinitiv auf externenm Takt (längste Verzögerung). Hab es sogar mal 
mit dem internen probiert, womit es noch weniger ging.
Spannung ist 5V und der Mega8 ist ein 16PU. Hab auch einen neuen 
probiert. ( Fuses auch wieder angepasst )

Mir gehen leider die Ideen aus wo ein Fehler sein könnte. Ich hoffe ich 
seh den Wald nur vor lauter Bäumen nicht. Da USART mit Interupt für 
meine nächsten Programme schöner sind als das Prüfen in der main.

Ich hoffe jemand kann mir helfen oder auch nur nen Hinweis geben was ich 
noch probieren könnte. Falls irgend eine Info fehlt bitte sagen.

Gruß ErgoProxy

von Stefan E. (sternst)


Lesenswert?

1
  UCSRB |= (RXCIE<<1);
->
1
  UCSRB |= (1<<RXCIE);

von Andreas K. (ergoproxy)


Lesenswert?

(Vielen Dank)^googleplexplex

Ich weiß nicht wie ich so doof sein konnte. Kein wunder das das macht 
was es will, wenn ich die 1 ned an sechste Stelle schiebe sondern eine 6 
um eine Stelle ins Register

Gruß ErgoProxy der seine Augen wohl mal besser ne zeitlang schließt

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.