www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Mein UART spinnt


Autor: POI (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: POI (Gast)
Datum:

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

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: POI (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: POI (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: POI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
melde mich nach einigen h wieder, Grüße

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  POI (Gast)

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

Ist das eine Drohung? ;-)

MFG
Falk

Autor: POI (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK passt pause braucht die UARt danke vielmals

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.