Forum: Mikrocontroller und Digitale Elektronik AVR UART Disable Transmitter


von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

Hallo.

Wenn ich beim ATMega644 den UART Transmitter disable (UCSR0B &= 
~_BV(TXEN0), wird noch ein Zeichen geschickt.

Warum, und wie kann ich das verhindern?

Danke im voraus,
Gerhard

von Michael U. (amiga)


Lesenswert?

Hallo,

es wird vermutlich kein Zeichen geschickt, allerdings erkennt ein 
Empfänger den Beginn eines Startbits, wenn der Port Ausgang und L ist.
Port als Ausgang und H setzen und dann abschalten sollte helfen.

Gruß aus Berlin
Michael

von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

Das könnte sein.
Nur kann ich auf den Port nichts schreiben, solange TXEN0 sitzt. Das 
overruled die port settings.

von Sascha W. (sascha-w)


Lesenswert?

du kannst die DDR und PORT Register immer beschreiben, nur das der dort 
vorgegebene Zustand für das TX-PIN erst bei TXEN = 0 wirksam wird - und 
genau das brauchst du ja!

Sascha

von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

Ok, hat funktioniert, danke.

Jetzt kommen jedoch nach jedem transmit noch 3 Zeichen (0x00) hinten 
nach.
Ich mach folgendes:
- aufwachen aus power - save
- TXEN und transmit
- flush/warten bis alles übertragen
- Uart abdrehen (PORT hi und TXEN = 0)
- power save

von Sascha W. (sascha-w)


Lesenswert?

?? nachdem Übertragen der Daten und Power save kommen am Empfänger noch 
3 Bytes an ??

hast du den TX-PIN im DDR auch auf Ausgang gesetzt?

Sascha

von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

So ähnlich.
1 Byte kommt glaub ich vor sleep und 2 nachdem wieder aufgewacht wurde.

DDR hab ich richtig gesetzt.

Gerhard

von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

Ein Problem ist (und möglicherweise die Ursache), dass das letzte byte 
nicht richtig übertragen wird, wenn nach flush in power save Modus 
gewechselt wird.

Gerhard

von Sascha W. (sascha-w)


Lesenswert?

das kann sein - wie sieht dein flush/warten aus ??
- wenn du auf UDRE0 wartest wird das letzte Byte noch gesendet, wenn 
UDRE schon 1 ist
- sonst mit TXC0 warten - löschen aber nicht vergessen
- oder ne Pause nach UDRE0=1 machen die dafür sorgt, das das letzte Byte 
noch raus geht

Sascha

von Gerhard T. (Firma: H&T) (gerard)


Lesenswert?

Ok, das war's.
Warte jetzt beim flush auf TXC0, und es haut hin.
Das war eine schwere Geburt.

Vielen Dank!

Gerhard

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.