Forum: Mikrocontroller und Digitale Elektronik UART Databits, Problem.


von HaPe (Gast)


Lesenswert?

Hallo zusammen...

ich habe einen Atmega8 und ein USB serial Interface. Ich kann damit auch 
wunderbar daten zu meinem Terminalprogram oder Excel übertragen(Baud 
9600). Beim Terminal Program und in Excel ist das Setup 8 Databits und 1 
Stopbit. Komischerweise funktioniert die Übertragung nur wenn ich den 
UART im Atmega folgendermaßen konfiguriere.

  UBRRH = (uint8_t) (UBRR_BAUD>>8);
  UBRRL = (uint8_t) (UBRR_BAUD & 0x0ff);
  //UCSRC |= (1<<UCSZ1)| (1<<UCSZ0);//|(1<<USBS)
  UCSRB |= (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);

Sowie ich die dritte Zeile nicht mehr als Kommentar nehme geht nichts 
mehr dabei ist das doch die richtige Einstellung. Außerdem ist komisch 
das mein Terminal Program auch noch Daten senden und empfangen kann wenn 
ich dessen Setup ändere. z.B Bits5 und Stopbit 2.

Das USB Interface ist auch mit 8 Databits und 1 Stopbit eingestellt. 
Kann mir jemand sagen woran das liegen kann?

von Stefan E. (sternst)


Lesenswert?

HaPe schrieb:
> Sowie ich die dritte Zeile nicht mehr als Kommentar nehme geht nichts
> mehr

Logisch, schließlich schreibst du mit der Zeile nach UBRRH und 
veränderst so die Baudrate.

HaPe schrieb:
> dabei ist das doch die richtige Einstellung.

Und welche Einstellung hast du ohne die Zeile?
Die gleiche, denn die beiden Bits sind per Default gesetzt.

von HaPe (Gast)


Lesenswert?

Ok das verstehe ich dann nicht. Wieso verändere ich dadurch die 
Baudrate? UCSRC ist doch ein anderes Register.

von Stefan E. (sternst)


Lesenswert?

HaPe schrieb:
> Ok das verstehe ich dann nicht. Wieso verändere ich dadurch die
> Baudrate? UCSRC ist doch ein anderes Register.

Dann ist genau jetzt der richtige Zeitpunkt, sich im Datenblatt die 
Beschreibung zu dem Register durchzulesen.

von HaPe (Gast)


Lesenswert?

mache ich die ganze Zeit ...

hier das Beispiel aus dem Datenblatt

UBRRH = (unsigned char)(ubrr>>8);
UBRRL = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit */
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);


sieht ganz ähnlich aus ?

von HaPe (Gast)


Lesenswert?

ah habs gefunden

Bit 7 – URSEL: Register Select
This bit selects between accessing the UCSRC or the UBRRH Register. It 
is read as one when
reading UCSRC. The URSEL must be one when writing the UCSRC.

von HaPe (Gast)


Lesenswert?

Danke für die schnelle Hilfe Stefan!

Jetzt ärgere ich mich wieder dafür extra ein neues Thema aufgemacht zu 
haben aber das habe ich die ganze Zeit überlesen.

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.