Forum: Mikrocontroller und Digitale Elektronik Mein UART spinnt


von POI (Gast)


Lesenswert?

Betreibe gerade auf dem STK 500 ein kleines Programm, das nur h01 zum 
COM1 schickt. Takt =16Mhz Baud= 38400 mit einem Mega 32. Nur das 
komische ist: wenn ich im Terminalprogramm (habe verschiedene probiert) 
verbinde, kommen einmal lauter 01, es passt also. Dann trenne ich die 
verbindung, und wenn ich sie wiederherstelle, erhalte ich andere Werte, 
tue ich das 5 bis 6 mal so, dann erhalte ich wieder 01sen. Was kann hier 
falsch sein?

Hier der Code

.include"m32def.inc"

.cseg
.org 0

rjmp ini

ini:
;; UART initialisieren

ldi r16,0b00000000
out Ubrrh,r16

ldi r16,0b00011001
out Ubrrl,r16

ldi r16,0b00011000
out UCSRB,r16

ldi r16,0b10000110
out UCSRc,r16


ldi r16,$01 ;Wert laden

trans:
;Übertragen
sbis ucsra,udre
rjmp trans

out udr,r16

rjmp trans

von Falk B. (falk)


Lesenswert?


von POI (Gast)


Lesenswert?

gib mir doch einfach eine Antwort warum das Terminalprogramm immer 
verschiedene Werte ausgibt, das Tutorial habe ich schon einmal 
durchgemacht.

von Michael U. (amiga)


Lesenswert?

Hallo,

0x01 ist ein sogenanntes nichtdruckbares Zeichen in der ASCII-Tabelle, 
also ein Steuercode.

Was ein Terminalprogramm damit macht, hängt von dessen eingesteller 
Emulation ab, ausführen oder wegwefen z.B.

Warum schickst Du 0x01, was erwartest Du für ein Ergebnis im 
Terminalprogramm?

Gruß aus Berlin
Michael

von Falk B. (falk)


Lesenswert?

@  POI (Gast)

>gib mir doch einfach eine Antwort warum das Terminalprogramm immer
>verschiedene Werte ausgibt, das Tutorial habe ich schon einmal
>durchgemacht.

Und warum nimmst du dann nicht den solden Quelltext aus dem Tutorial? 
Dein Qeulltext ist ziemlich schlecht.

Die ganzen Binärwerte, vor allem zur Einstellung des UART kan kein 
Mensch lesen. Wie Michales bereits sagte sendest du den Wert 01, das ist 
kein lesbares Steuerzeichen. Um lesbaren Text bzw. Zahlen zu senden, 
musst du ASCII Codes senden. Siehe Link.

> Dann trenne ich die
>verbindung, und wenn ich sie wiederherstelle, erhalte ich andere Werte,
>tue ich das 5 bis 6 mal so, dann erhalte ich wieder 01sen. Was kann hier
>falsch sein?

Das Problem ist, dass du ununterbrochen sendest. Damit hat der PC nach 
dem trennen und wieder anstecken keine Möglichkeit, sich auf den Anfange 
eines Bytes zu synchronisieren. Also musst du irgendwann mal eine 
Sendepause machen, die mindestens ein Zeichen lang ist.

MFG
Falk

von POI (Gast)


Lesenswert?

Naja ich erwarte, dass er 01 anzeigt, das tut er ja auch wunderbar. Nur 
nach einmal trennen und wieder verbinden zeigt er mal 50 mal 40 mal A0 
mal 0A mal 28 mal 14 an. Und zwar die ganze Zeit. Ich habe ihn einmal 
nur einmal 01 senden lassen und es hat prima funktioniert auch nach 
trennen und neu verbinden. In der Schleife hat er aber ein Problem. Es 
ist doch wirklich mehr als merkwürdig, dass er Zeichen immer wieder 
wechselt. Fuses gecheckt: all ok, Hardware auch.

von POI (Gast)


Lesenswert?

Ich glaube das mit der Pause ist eine gute Idee, probiere ich dann mal 
aus, jetzt mache ich eine Pause nach ca 2 h debuggerei

>Die ganzen Binärwerte, vor allem zur Einstellung des UART kan kein
>Mensch lesen.

Die sind zu 10000% richtig

von POI (Gast)


Lesenswert?

melde mich nach einigen h wieder, Grüße

von Falk B. (falk)


Lesenswert?

@  POI (Gast)

>melde mich nach einigen h wieder, Grüße

Ist das eine Drohung? ;-)

MFG
Falk

von POI (Gast)


Lesenswert?

OK passt pause braucht die UARt danke vielmals

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.