Forum: Mikrocontroller und Digitale Elektronik ATMega32 Uart - Anzeige falscher Zeichen


von SWERP (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

wir haben zur Zeit ein Problem mit der Datenübertragung vom ATMega32 zum 
PC.
Die Spezifikationen sind im Anhang angegeben.
Statt einem A kommt im Terminalprogramm(Cutecom) Hex: 0e c0 fe
--> ASCI: Àþ
Wir nutzen den FTDI-Chip 232.

Kann uns jemand sagen wo unser Fehler liegt?

von (prx) A. K. (prx)


Lesenswert?

1MHz heisst vermutlich interner Takt. Der ist nicht genau genug, für 
egal welche Baudrate.

von Stefan E. (sternst)


Lesenswert?

Das ist praktisch immer das Resultat einer falschen Baudrate. Und die 
resultiert wiederum fast immer aus einem falschen Takt. "Falsch" 
entweder im Sinne von "zu ungenau" (interner Oszillator?) oder von 
"andere Taktquelle als erwartet" (Fuses?).

von Karl H. (kbuchegg)


Lesenswert?

Kann man eigentlich mit dem FTDI-Chip 232 in jeder belibigen Baudrate 
sprechen. Sprich: erkennt der die Baudrate selbsttätig?


Edit:
mitlerweile nachgegoogelt. Der FT-232 wird per USB auf die Baudrate 
eingestellt.

  usart_init(600UL); // init USART


600 Baud ist eine unübliche Baudrate. Sicher, dass ihr den Chip auf 
diese Baudrate konfiguriert habt?

Warum ich frage:
Klar, der interne Oszillator ist nicht so genau. Aber so daneben ist er 
auch wieder nicht, dass aus 1 gesendetem Byte 3 Bytes auf der 
Empfangsseite werden.

von SWERP (Gast)


Lesenswert?

Also,

nachdem wir du Fuses falschgesetzt hatten ging erstmal gar nichts mehr.
Zuhause habe ich jetzt, das ganze mit dem STK500 behoben und den Takt 
intern auf 4MHz gestellt.

Als Baudraten wurden 300, 1200 und 2400 ausprobiert.
Bei allen kommt auf dem Terminel Hex: FF --> ASCI: ÿ an.

Die Baudraten wird im Terminalprogramm natürlich auf den selben Wert 
geschalten.

von (prx) A. K. (prx)


Lesenswert?

0x41 => 0x0E,0xC0,0xFE entspricht grob Faktor 2 bei der Baudrate
(Sender > Empfänger).

0x41 => 0xFF heisst, dass die Baudrate des Senders eine Grössenordnung 
unter der des Empfängers liegt.

von Stefan E. (sternst)


Lesenswert?

A. K. schrieb:

> 0x41 => 0xFF heisst, dass die Baudrate des Senders eine Grössenordnung
> unter der des Empfängers liegt.

Argumentation? Ich würde nämlich eher sagen, dass dann die Baudrate des 
Senders eine Größenordnung über der des Empfängers ist.

von (prx) A. K. (prx)


Lesenswert?

Ja, in beiden Fällen ist es grad andersrum ;-). Zeiten im Kopf und 
Frequenzen in den Fingern gibt Unsinn.

von Stefan E. (sternst)


Lesenswert?

Ok, also damit keine Missverständnisse aufkommen:
0x41 => 0xFF = Sender ist viel schneller als der Empfänger.

von SWERP (Gast)


Lesenswert?

So dass Programm oben läuft jetzt. Hab alle einstellungen im Compiler 
nochmals übernommen und die Baudrate auf beiden Seiten überprüft.

Wenn ich das ganze jetzt aber auf 2 Dateien aufteile (also usart_init 
und usart_putc in eine Datei namens uart.c den Rest in microc.c) und das 
ganze wie folgt kompiliere:

avr-gcc -mmcu=atmega32 -O0 -c microc.c -o microc.o
avr-gcc -mmcu=atmega32 -O0 -c uart.c -o uart.o
avr-gcc microc.o uart.o -mmcu=atmega32 -o project.out 
-Wl,-Map,project.map
avr-objcopy -P .eeprom -O ihex project.out project.hex

und die project.hex dann flashe, dann kommt wieder ein falsches 
ergebnis. Setze ich die beiden Dateien falsch zusammen?

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.