Forum: Mikrocontroller und Digitale Elektronik UART Verständnisssfrage/n


von Dshing S. (dshing)


Lesenswert?

Hi,
ich hab das mit dem UART noch nicht ganz verstanden, wenn ich was in das 
USART Data I/O Register schreibe und die entsprechenden Bits in den UCSR 
Registern setze, was passiert dann am TX Pin genau?
sendet er das Zeichen aus dem USART Data I/O Register schon und wenn ja 
ein mal oder solange bis das Register wieder leer ist? Kommen die 
Stopp-Bits ect. , wenn sie gesetzt sind automatisch?

von Achim M. (minifloat)


Lesenswert?

Dshing Sung schrieb:
> Kommen die
> Stopp-Bits ect. , wenn sie gesetzt sind automatisch?

Das macht die Hardware automatisch dazu.
Im Betrieb also einfach ein Byte in UDR "rein werfen", und es wird mit 
allem drum und dran an TX rausgeschoben.
Das funktioniert wie ein Gartenhäcksler. Zweige rein, Schnipsel raus.

Für das nächste Byte musst du warten, bis du wieder Senden 
kannst(nächstes Byte rein werfen) oder Interruptgetrieben(TX-Interrupt 
und gepuffert) arbeiten.
mfg mf

Dshing Sung schrieb:
> und die entsprechenden Bits in den UCSR
> Registern setze

Das macht man normalerweise anders herum. Erst den UART konfigurieren, 
dann nur noch z.B. mit dem hier
1
//send one char
2
void uart_putc(uint8_t character)
3
{
4
   while ( !(UCSRA & (1<<UDRE)) )
5
      ;
6
   UDR = character;
7
}
umgehen müssen.

von Dshing S. (dshing)


Lesenswert?

Also der Gartenhäcksler Metapher entnehme ich das es nur einmal gesendet 
wird. Wenn ich also
1
 while (!(UCSRA & (1<<UDRE)));
2
    
3
 
4
    UDR = 0b10101010;
schreibe, dann hab ich an dem TX PIN bzgl. GND: 0V +5V 0V +5V 0V +5V 0V 
+5V 0V +5V....+5V....+5V... bis wieder gesendet wird bleibt es bei +5V 
!?
Wenn das dann an irgend einem RX PIN ankommt, dann ist die erste 0 das 
Signal das es jetzt los geht und die nächsten 8 Baudzyklen werden dann 
ins UDR geschreiben und der Stopbit ist nur zum überprüfen das jetzt 
wirklich Schluss ist?

von Tom M. (tomm) Benutzerseite


Lesenswert?

Dshing Sung schrieb:
> schreibe, dann hab ich an dem TX PIN bzgl. GND: 0V +5V 0V +5V 0V +5V 0V
> +5V 0V +5V....+5V....+5V... bis wieder gesendet wird bleibt es bei +5V
> !?

High im "Leerlauf", dann Startbit Low. Steht alles im Datenblatt des 
MCs, zusammen mit schmucken Diagrammen.

von Achim M. (minifloat)


Lesenswert?

Dshing Sung schrieb:
> 0V +5V 0V +5V 0V +5V 0V
> +5V 0V +5V....+5V....+5V...
1
0xAA im Format "8N1":
2
 ....__   _   _   _   _   ____....
3
       |_| |_| |_| |_| |_|
4
Bit No. S 7 6 5 4 3 2 1 0 P
5
Bit Val.  1 0 1 0 1 0 1 0

Dshing Sung schrieb:
> wenn das dann an irgend einem RX PIN ankommt, dann ist die erste 0 das
> Signal das es jetzt los geht und die nächsten 8 Baudzyklen werden dann
> ins UDR geschreiben und der Stopbit ist nur zum überprüfen das jetzt
> wirklich Schluss ist?

genau! Stoppbit auch als Trennung zum nächsten Byte.

mfg mf

von Daniel -. (root)


Lesenswert?

@ Mini Float

ist UART nicht least significant bit first?
0xAA = 0b10101010
                ^
           first bit sent

von Daniel -. (root)


Lesenswert?

in anderen Worten .. um schönen Rechtecktakt hinzubekommen

while(1)
    uart_put(0x55);

von Dshing S. (dshing)


Lesenswert?

@dobross
sorry hab kein Auto???
@ alle andern
wiedermal danke, jetzt weiß ich beschied und komme besser zurecht.

von Achim M. (minifloat)


Lesenswert?

Daniel -------- schrieb:
> ist UART nicht least significant bit first

Nicht generell, aber im Fall von RS232 hast du wohl recht:
http://de.wikipedia.org/wiki/RS-232#Datenrahmen_und_Timing

mea culpa. mfg mf

PS: tut dem generellen Verständnis offenbar auch keinen Abbruch.

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.