Forum: Mikrocontroller und Digitale Elektronik UART sendet Byte beim einschalten?


von HaPe (Gast)


Lesenswert?

Hallo zusammen,

ich habe ein Problem mit meinem USART beim Atmega8. Ich muss den 
Transmitter und Receiver oft an und aus schalten. Beim einschaltet 
sendet das USART immer ein Byte und ich kann mir nicht erklären warum 
bzw. finde im Datenblatt nichts dergleichen. Hier ist mal ein 
Programschnipsel mit dem ich das Ganze test.

while(1)                          {
 while(1){
  UCSRB  &= ~((1<<RXEN) | (1<<RXCIE) | (1<<TXEN));        deaktivate 
UART TXD and RXD
  _delay_ms(1000);
  UCSRB |= (1<<RXEN) | (1<<TXEN) | (1<<RXCIE);
  _delay_ms(1000);
  }

Vielleicht kann mir ja jemand weiterhelfen.

von Anja (Gast)


Lesenswert?

HaPe schrieb:
> Hier ist mal ein
> Programschnipsel mit dem ich das Ganze test.

Das Problem ist der Programmteil den du uns nicht zeigtst.
(Vermutlich vergessen den Port-Pin auf "High" zu initialisieren).

Gruß Anja

von HaPe (Gast)


Lesenswert?

das ist die Initialisierung und senden und empfangen funktioniert

DDRD  =  0b00000011;
PORTD =  0b11110000;

ich bin mir nicht sicher ob es daran liegt...

von holger (Gast)


Lesenswert?

>  UCSRB  &= ~((1<<RXEN) | (1<<RXCIE) | (1<<TXEN));        deaktivate
>UART TXD and RXD

Setz vorher den Portpin auf dem TX liegt auf High.
Sonst erkennt dein Pc oder was auch immer da dran hängt
ein Startbit weil der Pin beim deaktivieren sonst auf
low geht.

von HaPe (Gast)


Lesenswert?

Hab ich probiert, funktioniert aber leider nicht .

Es wird erst eine "0" gesendet wenn ich TXD wieder aktiviere.

von Karl H. (kbuchegg)


Lesenswert?

HaPe schrieb:

> Es wird erst eine "0" gesendet wenn ich TXD wieder aktiviere.

?
mglw. hast du dich da jetzt missverständlich ausgedrückt.
Aber ich würde sagen, dass das irgendwie Sinn der Sache ist, dass eine 
UART nichts sendet, solange der Transmitter abgeschaltet ist.

Zeig dich bitte deinen ganzen Testcode. Sonst stochern wir hier noch 3 
Stunden im Nebel rum.

zb: hast du auch daran gedacht, dass du den Transmitter erst dann 
abschalten darfst, nachdem das Byte komplett ausgegeben wurde?


Und überhaupt: wozu soll das eigentlich gut sein, dass du die UART 
ständig ein/ausschaltest? Das bringt doch nix.

von HaPe (Gast)


Angehängte Dateien:

Lesenswert?

Der Ganze Code und der Zweck dafür ist ziemlich komplex...hauptsächlich 
geht es darum den MC aus dem Powerdown oder Idle Sleep Mode zu wecken. 
Mein USB serial Interface hat einen VCC Pin an dem 5 Volt anliegen wenn 
USB an den PC angeschlossen ist. Wenn der PC nicht damit verbunden ist 
müssen auch RXD und TXD vom MC low sein damit der VCC Pin vom USB 
interface auch low ist. Dieses low Signal signalisert das ich jetzt 
wieder den Power Down Sleep Mode benutzen kann...während ein High Pegel 
den IDLE Sleep Mode aktiviert den man ja auch mit einem empfangen Byte 
wecken kann.

die Schleife dazu ist im Anhang. Ich glaube der ganze Code ist 
verwirrend

von HaPe (Gast)


Lesenswert?

An PIND 3 liegen übrigens die 5V bzw 0V vom USB Interface an. ( Über 
einen Transistor, also high am USB Interface entspricht low an PIND 3) 
Mit dem low Signal an PIND3 kann man den MC aus dem power down sleep 
mode wecken.

von holger (Gast)


Lesenswert?

Sourcecode als PNG. Oh man.

> Es wird erst eine "0" gesendet wenn ich TXD wieder aktiviere.

Dann leb halt damit. Wenn ich was unbestimmtes an meine
RS232 draufstecke dann kommt auch erst mal Schrott.
Den musst du halt per Software wegfiltern.

von HaPe (Gast)


Lesenswert?

Holger du hattest recht...es reicht aus den TXD Pin auf low zu schalten 
und mein USB Interface denkt, dass ein Byte kommt. Eigentlicch folgt ja 
kein Stopbit deswegen wundert es mich das HTerm trotzdem eine "0" 
erkennt.

Also funktioniert das alles nicht so wie ich dachte.

von HaPe (Gast)


Lesenswert?

ja so werde ich es auch machen...

Danke für deine bzw eure Hilfe

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.