atmega32 - uart -

Gast #1180430
Lesenswert?

Hallo Forum,

ich bin neu hier und habe eine Frage zum UART beim Atmega32. Ich weiß, 
leidiges Thema. Das Problem bei mir ist jedoch nicht, dass es nicht 
funktioniert, sondern, dass es mich verwirrt wie es funktioniert. Ich 
benutze unten stehenden Codeabschnitt zur Initialisiertung und zum Test 
des UART.

Laut Avr-Gcc-Tutorial müsste der Modus(?) auf 8N1 gesetzt sein. Wenn ich 
aber in meinem Terminalprogramm(GtkTerm) 8N1 einstelle, kommt nur Quark 
raus. Stelle ich das aber auf 7N1 funktioniert alles perfekt. Ich 
verstehe nicht warum das so ist?

Ach ja, Baudrate ist 9600 und Frequenz 16MHz.


1
  UBRRH=0;
2
  UBRRL=103;
3
  UCSRB |= (1<<TXEN);                            
4
  UCSRC |= (1<<URSEL)|(1 << UCSZ1)|(1 << UCSZ0); // Asynchron 8N1 
5
  
6

7
  while(1)
8
  {
9
    while (!(UCSRA & (1<<UDRE)))  
10
    {
11
    }
12
    UDR = 'a'; 
13
    while (!(UCSRA & (1<<UDRE)))  
14
    {
15
    }
16
    UDR = 'b'; 
17
    setGreen(1);
18
  }

Gruß Tobias
#1180501
Lesenswert?

Tobias wrote:
> Ok, ich hab die das "|" rausgenommen, keine Veränderung. Bin noch nicht
> so fit mit C.
Mit dem "|=" werden eventuell bereits gesetzte Bits beibehalten. Wenn am 
Register sonst noch nichts gemacht wurde, sollten zwar alle Bits 0 sein, 
aber sicher ist sicher. In so einem Fall ist das "|=" nicht ratsam 
(zumal es auch noch mehr Code erzeugt als ein einfaches "=").
#1180532
Lesenswert?

Wenn Du hast, nimm einen Ossi und messe mal die Bitzeit, sollte bei 9600 
Baud 104us sein.
Dann sende ein 'U' = 0x55 = 0b01010101.
Es sollte also 4 Null-Bits und 4 EINS-Bits + Startbit und Stopbit 
erscheinen.
Wenn er tatsächlich nur 7 Bits übertragt, dann fehlt ein Null-Bit.

Gruß 900ss

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