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.
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
das ist die Initialisierung und senden und empfangen funktioniert DDRD = 0b00000011; PORTD = 0b11110000; ich bin mir nicht sicher ob es daran liegt...
> 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.
Hab ich probiert, funktioniert aber leider nicht . Es wird erst eine "0" gesendet wenn ich TXD wieder aktiviere.
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.
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
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.