Forum: Mikrocontroller und Digitale Elektronik UART Tutorial: Zeichenmüsli


von HubertB (Gast)


Lesenswert?

Hallo!
Ich habe das UART Tutorial durchgearbeitet, allerdings empfange ich
statt der Zeichenkette "Test!" nur Zeichenmüsli.

# stty 9600 -parenb cs8 -cstopb cread < /dev/ttyS0
# cat /dev/ttyS0
8?ni]8?ni]8?ni]x?!
wGo!tno!tno!tno!tno!tnwtno!tno!tno!tno!tno!tw
wGo!tno!tno!tno!tno!tnOwtno!tno!tno!tno!tno!tw
wGo!tno!tno!tno!tno!tnw
wGo!tno!tno!tno!tno!t~wGo!tno!tno!tno!w
wGo!tno!tno!tno!tno!tnwtno!tno!tno!tno!tno!tw
wGo!tno!tno!tno!tno!tnOwtno!tno!
...

Was mach ich falsch?

von Conlost (Gast)


Lesenswert?

hallo,

mit welchem Takt läuft dein Controller?

Es grüsst,
Arno

von ,,,, (Gast)


Lesenswert?

Falsche effektive Baudrate.

von HubertB (Gast)


Lesenswert?

Der Controller läuft mit 8 MHz:

.INCLUDE "m16def.inc"
.EQU CLOCK=8000000 ;System Oscillator clock frequency
.EQU BAUD=9600
.EQU UBRRVAL=CLOCK/(16*BAUD)-1 ;Asynchronous Normal Mode (U2X = 0)


@,,,,:
Was ist denn die richtige Baudrate?

von Markus (Gast)


Lesenswert?

Es genügt nicht, einen externen Quarz anzuschließen. Du mußt ihn auch
aktivieren. Tut man das nicht, dann läuft er weiterhin mit dem internen
Oszillator mit 1MHz.

von HubertB (Gast)


Lesenswert?

OK, ich ab da jetzt mal Testweise .EQU CLOCK=1000000 eingestellt, ist
aber immernoch Zeichenmüsli :-(

von Conlost, (Gast)


Lesenswert?

Hallo,

hast du RXD und TXD richtig verdrahtet?
Wenn die vertauscht sind, dann geht auch nichts.

Es grüsst,
Arno

von Pete da Heat (Gast)


Lesenswert?

>>OK, ich ab da jetzt mal Testweise .EQU CLOCK=1000000 eingestellt,
>>ist aber immernoch Zeichenmüsli :-(

Das bringt gar nix, denn der interne Oszillator hat 3% Abweichung, zu
viel für UART, da hilft nur ein externer Quarz. Also: externen Quarz
anschließen und per Fuses aktivieren, dann läuft's auch (am Besten
einen Baudratenquarz nehmen).

Pete

von Pete da Heat (Gast)


Lesenswert?

@Conlost: Wenn die Hardware gar nicht laufen würde, würde er auch gar
nix empfangen (oder nur total Zufälliges Zeug). Die empfangenen Zeichen
lassen aber doch eine gewisse Regelmäßigkeit erkennen, was darauf
hindeutet, dass nur die Takte "verschoben" sind -> falsche Baudrate.
Buchstabensalat ist eher eine Hinweis, dass die Hardware passt, aber
die Baudrate falsch eingestellt ist.

Pete

von HubertB (Gast)


Lesenswert?

Ich denk schon das es richtig verdrahtet ist, hab so nen Pollin
Evaluationsbord.

Vielleicht hab ich auch die falschen Paramter für stty? Hat vielleicht
mal jemand die richtigen Parameter für

Bits pro Sekunde: 9600
Datenbits:        8
Parität:          Keine
Stoppbits:        1
Protokoll:        Kein

für stty zur hand?

von Conlost (Gast)


Lesenswert?

Hallo,

habe grade mal auf dem STK500 getestet.
Interner RC-Oszillator 1MHz und es kam Datenmüsli.

Ich habe dann mal die Baudrate auf 600 statt 9600 gestellt,
da ging es dann.

Das heisst, Pete hat recht.

Es grüsst,
Arno

von HubertB (Gast)


Lesenswert?

Zwischen XTAL1 und XTAL2 hängt nen Quarz (8 MHz), das hat auch nur diese
2 Beinchen.

Könnte ich das als Taktquelle nehmen? Wenn ja, wie würden die Fusebits
dazu aussehen (nicht das hinterher gar nichts mehr geht)?

von HubertB (Gast)


Lesenswert?

Habs mir jetzt anhand der Doku raus gesucht und einfach mal probiert:

--wr_fuse_h=11111111 --wr_fuse_l=0011111111

Diese Einstellungen im Assemblerfile:

.INCLUDE "m16def.inc"
.EQU CLOCK=8000000 ;System Oscillator clock frequency
.EQU BAUD=9600
.EQU UBRRVAL=CLOCK/(16*BAUD)-1 ;Asynchronous Normal Mode (U2X = 0)

Ich bekomm aber immernoch nur Blödsinn, und damit ich diesen Blödsinn
sehe muss ich "stty 9600 raw > /dev/ttyS0" eingeben, sonst seh ich
gar nichts.

Hat noch jemand eine Idee?

von Ludwig W. (lordludwig)


Lesenswert?

quarzbeinchen über kondensator nach GND geschaltet???

von HubertB (Gast)


Lesenswert?

Jawohl, jeweils mit 22pF.

von Ludwig W. (lordludwig)


Lesenswert?

synchronen übertragungsmodus an???

von Fabian (Gast)


Lesenswert?

Benutzt du auch sicher einen normalen MAX kein MAX232A CPE der arbeitet
nämlich glaub mit 100nF Kapazitäten...

von Simon Küppers (Gast)


Lesenswert?

synchronen Übertragungsmodus? Ne Asynchron!

von HubertB (Gast)


Lesenswert?

.EQU UBRRVAL=CLOCK/(16*BAUD)-1 ;Asynchronous Normal Mode (U2X = 0)
Von daher denk ich mal asyncron. Ich versuche auch nur Daten an den PC
zu senden, empfangen soll der Atmel nichts.

Auf dem Baustein steht:
---------
|5AC1CLM|
|MAX232N|
---------

von Ludwig W. (lordludwig)


Lesenswert?

UMSEL=Synchron/Asynchron
U2X=Schneller UART

auch das senden wird mit synchronem Mode ned funktionieren!!! Mein MAX
passt wenn du 1µF ELKOS(richtig gepolt)verwendest!

von HubertB (Gast)


Lesenswert?

An dem MAX hängen (so wie es im Bauplan steht, ist so ein Atmel
Evaluationsboard aus dem Pollin) jeweils 10µF dran. Gepolt sind sie
auch richtig, hab gerade nochmal nachgeschaut.

Was mir gerade noch in den Sinn kommt: Muss ich die Fusebits bei uisp
auch invertieren (so wie bei Ponyprog)?

von HubertB (Gast)


Lesenswert?

Ich hab den Übeltäter gefunden: uisp hat die Fusebits nicht korrekt
gesetzt. Egal was ich als Paramter angegeben habe, die Fusebits wurden
immer auf 0x01 gesetzt, sowohl das High- als auch das Lowbyte.

Ich weis nicht ob es an der Linuxdistri lag (Ubuntu 5.10 mit Vanilla
Kernel 2.6.15.4) oder am uisp (über apt aus dem universe installiert).

Hab jetzt extra um zu testen noch Windows auf den PC installiert: Die
serielle funktioniert.

Danke an alle die mir geholfen haben!

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.