www.mikrocontroller.net

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


Autor: Andreas K. (ergoproxy)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Stefan Ernst (sternst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
  UCSRB |= (RXCIE<<1);
->
  UCSRB |= (1<<RXCIE);

Autor: Andreas K. (ergoproxy)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.