mikrocontroller.net

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


Autor: HubertB (Gast)
Datum:

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

Autor: Conlost (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo,

mit welchem Takt läuft dein Controller?

Es grüsst,
Arno

Autor: ,,,, (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falsche effektive Baudrate.

Autor: HubertB (Gast)
Datum:

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

Autor: Markus (Gast)
Datum:

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

Autor: HubertB (Gast)
Datum:

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

Autor: Conlost, (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

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

Es grüsst,
Arno

Autor: Pete da Heat (Gast)
Datum:

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

Autor: Pete da Heat (Gast)
Datum:

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

Autor: HubertB (Gast)
Datum:

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

Autor: Conlost (Gast)
Datum:

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

Autor: HubertB (Gast)
Datum:

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

Autor: HubertB (Gast)
Datum:

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

Autor: Ludwig Wagner (lordludwig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
quarzbeinchen über kondensator nach GND geschaltet???

Autor: HubertB (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jawohl, jeweils mit 22pF.

Autor: Ludwig Wagner (lordludwig)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
synchronen übertragungsmodus an???

Autor: Fabian (Gast)
Datum:

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

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
synchronen Übertragungsmodus? Ne Asynchron!

Autor: HubertB (Gast)
Datum:

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

Autor: Ludwig Wagner (lordludwig)
Datum:

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

Autor: HubertB (Gast)
Datum:

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

Autor: HubertB (Gast)
Datum:

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

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.