Forum: Mikrocontroller und Digitale Elektronik Uart kann keine 0 übermitteln


von Ralf R. (rralf)


Lesenswert?

Moin.

Mein AVR schaffts absolut nicht ne "echte 0" auf den PC zu übertragen. 
Am PC kommt alles mögliche an, nur keine null.

An was kann das liegen?

Noch n bisschen Code:


Initialisierung der Uarts:
1
        UCSRB |= (1<<TXEN)|(1<<RXEN)|(1<<RXCIE);
2
        UCSRC |= (1<<URSEL)|(3<<UCSZ0);
3
        UBRRH=(uint8_t)(UART_BAUD_CALC(UART_BAUD_RATE,F_OSC)>>8);
4
        UBRRL=(uint8_t)UART_BAUD_CALC(UART_BAUD_RATE,F_OSC);
Und ich mach zu Testzwecken im Moment folgendes:
1
for(;;) uart_send(0)

Konfiguration: ATMega32, 16MhZ Quarz

Egal welche Baudraten ich verwende, es kommt nur Käse an.
Alle anderen Zahlen von werden korrekt übermittelt.
Habt ihr ne Idee?

Danke schonmal!

Ralf

von Werner B. (werner-b)


Lesenswert?

Das Problem dürfte der PC sein...

von Michael U. (amiga)


Lesenswert?

Hallo,

die erste Frage wäre: welches Terminalprogramm am PC?
0 ist ja schließlich ein Steuercode, der in üblichen Terminalemulationen 
"nichts" bedeutet und das macht das Terminalprogramm dann auch.
HTerm könnte dann weiterhelfen.

Gruß aus Berlin
Michael

von gast (Gast)


Lesenswert?

wenn es HEX 0x00 ist ... das ist meist ein stringterminierungszeichen

vlt dadurch

von Ralf R. (rralf)


Lesenswert?

Terminalprogramm ist gtkterm, der mir direkt alle Zeichen als Hexzahlen 
anzeigen kann, von demher kanns also nicht als Steuerzeichen 
interpretiert werden, was auch irgendwo keinen Sinn macht weil es kommen 
ständig von null verschiedene Werte, und nicht nur ein Wert, der von 0 
verschieden ist.

Achja und ich verwende nen USB-RS232 Wandler

von UART (Gast)


Lesenswert?

Hallo,

da die Quellen von  "uart_send(0)" nicht vorliegen sagt meine 
Kristallkugel ein "überfahren" des Senderegisters voraus.

MfG

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Schick doch mal eine 0 aus dem PC raus und mach eine Brücke zwischen Pin 
2 und 3 am Sub-D...
Was passiert dann?

von Ralf R. (rralf)


Lesenswert?

void uart_send(char c){
        while (!(UCSRA & (1 << UDRE)));
        UDR = c;
}


Wenn ich ne Brücke reinhänge und 0 übermittle kommt sie richtig zurück

Bin verwirrt....

von UART (Gast)


Lesenswert?

Wie passen die 16Mhz zur Baudrate (Fehlertoleranz)?

von Ralf R. (rralf)


Lesenswert?

Hab 9600bps, kann mir nicht vorstellen dass es daran liegt, weil alle 
anderen zeichen gehen ja

Im moment versuch ich das hier:

uart_send(10);
uart_send(20);
uart_send(30);
uart_send(40);
uart_send(50);
uart_send(60);
uart_send(0);


10-60 kommt richtig an, bei der 0 kommt was er gerade will:)

von UART (Gast)


Lesenswert?

Datenblatt zum Mega32 ab Siete 140 könnte helfen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> bei der 0 kommt was er gerade will:)
Dann wackle doch mal mit den hinteren Bits: 0x01, 0x02, 0x04...

von Ralf R. (rralf)


Lesenswert?

Also hab rausgefunden dass anscheinend wirklich am Terminal Programm 
liegt

wenn ich mit hexdump -C /dev/ttyUSB0 rangeh zeigt er mir alles richtig 
an.

Aber ich versteh trotzdem nicht wieso er erst lauter Kram rauslässt.

von Urbs (Gast)


Lesenswert?

>Aber ich versteh trotzdem nicht wieso er erst lauter Kram rauslässt.
Kannst Du das mal näher erläutern? Ich meine gelesen zu haben, das die 
Null garnicht rüberkkommt. Dann scheint doch etwas rüberzukommen, aber 
statt der gesendeten Null irgendwelche Zufallsbits.
>bei der 0 kommt was er gerade will

Oder der Satz
>Am PC kommt alles mögliche an, nur keine null.
bedeutet, das entweder statt der Null nichts oder ein anderer Wert 
kommt.
Das wäre schon wichtig zu wissen.

Aus der Verwendung von Am gtkterm folgere ich, das Du unter *n*x 
arbeitest. Was gibt denn stty aus?

Ich habe kürzlich ein ähnliches Problem mit einem Perl Programm gehabt. 
Da musste ich mit stty rumspielen.

Das
>wenn ich mit hexdump -C /dev/ttyUSB0 rangeh zeigt er mir alles richtig
>an.
spricht wiederrum gegen ein Problem, das mit stty zu lösen wäre. Aber 
vielleicht ändert gtkterm ja die Einstellungen. Andererseits wundert 
mich, das hexdump das richtig ausgibt. Vor allem ohne "<" oder so.

Ausserdem ist neu, das Du die serielle Schnittstelle über USB 
angeschlossen hast. Was ist das für ein Konverter? Das kann manchmal 
auch Probleme geben.

von Hegy (Gast)


Lesenswert?

Mit dem gtkterm 0.99.5 und der fehlenden 0.....
Das ist definitiv ein Bug in gtkterm.
Das habe ich vor einiger Zeit schonmal erforscht, kukkkst du mal hier:

Beitrag "Bug in GTKTerm 0.99.5"

von Ralf R. (rralf)


Lesenswert?

Genau das selbe hatte ich auch

Schon lustig, ich kram ewig rum bis ich den Fehler gefunden habe ;)

von Patrick (Gast)


Lesenswert?

Kann es vielleicht daran liegen, dass in der ASCII-Tabelle die "0" nicht 
"0", sondern "NUL" bedeutet? Eine echte "0" hat den Wert 48.

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.