mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART Problem mit Baudrate


Autor: Nino K.l. (nino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich bin dabei, das AVR Tutorial durchzuarbeiten und bin derzeit bei der 
UART Schnittstelle. Dummerweise kriege ich nur komische Zeichen auf's 
Display und nichts Sinnvolles.

Bei der Fehlersuche ist mir aufgefallen, daß am Max232-Ausgang das 
Signal nur ca. 2000 Baud hat und nicht 9600. (immer das gleiche Zeichen 
geschickt und dann mit dem Oszi reingeschaut). Hat jemand von Euch eine 
Idee, woran das liegen könnte...?

Konfiguration:
- ATmega8 mit externem Quarzoszillator 3,686400 MHz.
- Das Testprogramm praktisch 1:1 aus dem Tutorial übernommen
  (habe die Zeile .equ F_CPU = 4000000 in .equ F_CPU = 3686400 geändert)

Noch eine Beobachtung - keine Ahnung, ob die was damit zu tun haben 
kann: Auf dem Bild im Anhang sieht man, wie der Ozillator schwingt. Es 
gibt einen großen Unterschied, ob der Ausgang frei ist oder ob er an den 
XTAL1 Pin angeschlossen ist. Ist das normal?

Getestet habe ich das ganze mit dem HyperTerminal und mit dem TeraTerm. 
Es zeigen beide nur Müll. Und an den Porteinstellungen habe ich 
natürlich auch schon "rumgespielt"...

Bin für alle Hinweise dankbar!
lg, Nino.

Autor: Björn Wieck (bwieck)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So wie das auf dem Oszillogrammen aussieht sind die Fuses für den Takt 
falsch gesetzt.

Setz mal auf ext. Clock anstatt ext. Crystal

Grüße
Björn

Autor: Nino K.l. (nino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das war schonmal ein guter Tip, danke! Die Schwingung des Quarzes bleibt 
jetzt quasi gleich, wenn man ihn anschließt - ändert nur ganz 
geringfügig die Amplitude.

Leider hat sich an meinem Baud-Problem damit nichts verändert. Alles 
beim Alten :-(

lg, Nino.

Autor: Michael G. (linuxgeek) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Huhu Nino ;)

Wenn Du immer das selbe Zeichen sendest, wie misst Du denn dann den 
Takt? Stimmen die Pegel denn? (+/- 12V fuer low, high) und hast Du Deine 
USART richtig konfiguriert. Stell mal den Schaltplan ein und ebenfalls 
den Source (bitte als Attachment) dann kann ich mehr sagen. 
Fehlerquellen gibt es viele. Ausserdem solltest Du noch die 
Rahmenbedingungen nennen, also welches Terminal und welchen Zeichensatz 
Du verwendest etc pp.

lieber Gruss,
Michael

Autor: Nino K.l. (nino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
puhu... So viele mögliche Fehlerquellen - ich staune!

Also erstmal der Programmcode, der steht hier: 
http://www.mikrocontroller.net/articles/AVR-Tutorial:_UART im Kapitel 
"Senden von Zeichen". (meine einzige Änderung ist die Taktfrequenz)

Mein Versuchsaufbau ist Eigenbau. Siehe Foto. Die UART-Schnittstelle 
habe ich aus dem gleichen Link wie oben entnommen (Schaltplan ident). 
Allerdings habe ich auf Deinen (Michael) Hinweis hin einen Fehler in 
meiner Beschaltung entdeckt. Ich habe falsche Elkos eingebaut (22uF, 
keine Ahnung warum). Ich nehme an, der Pegel ist deswegen nur ca. +/- 8 
Volt.

Also ich werde das mal ändern und dann melde ich mich wieder mit 
Ergebnissen. Trotzdem beantworte ich noch die weiteren Fragen:

> Wenn Du immer das selbe Zeichen sendest, wie misst Du denn dann den
> Takt?

Also ich habe mir mit dem Oszi angesehen, wie lange das Zeichen, das 
sich wiederholt, dauert. Das waren 0,0005 Sekunden. Ich habe das als 
2.000 Zeichen pro Sekunden interpretiert, also 2.000 Baud. Habe ich da 
was falsch gemacht?

> ...und hast Du Deine USART richtig konfiguriert...

Exakt so wie im o.g. Programmcode. Habe daran nichts geändert. (Gibts da 
etwa noch mehr zu konfigurieren...?)

Die Frage nach dem Zeichensatz kann ich leider (noch) nicht beantworten. 
Aber allgemein sieht es nicht nach einem Zeichensatzproblem aus, denn 
ich erhalte am PC lauter idente Zeichen, auch wenn der ATmega8 
unterschiedliche Zeichen wegschickt.

Ich habe übrigens zwei Terminals getestet, HyperTerminal und TeraTerm. 
Beide liefern praktisch das gleiche Ergebnis. Nicht ganz die gleichen 
Zeichen aber der Effekt ist im großen und ganzen derselbe.

Also, wie oben schon erwähnt, werde ich vorerst mal die Elkos tauschen 
und mich dann wieder melden. Jedenfalls großen Dank für Eure raschen 
Antworten!

lg, Nino.

Autor: risu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

> das Zeichen, das sich wiederholt, dauert. Das waren 0,0005 Sekunden.
> Ich habe das als 2.000 Zeichen pro Sekunden interpretiert, also 2.000
> Baud. Habe ich da was falsch gemacht?

Baud: Bits/s. Bei 8N1 (8 Bits, kein Paritätsbit, 1 Stoppbit) und einem 
Startbit hast Du 10Bits/Zeichen. Wenn Dein Zeichen 2000 mal pro 
Sekunde übertragen wird, liegst Du bei 20000Bd! Bist Du ganz sicher, 
dass Deine Formulierung "Zeichen" in diesem Kontext stimmt?

Wie sind die (Clock-)Fuses gesetzt?

Gruß

  risu

Autor: Nino K.l. (nino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

> Bist Du ganz sicher,
> dass Deine Formulierung "Zeichen" in diesem Kontext stimmt?

Nein, bin ich nicht.

Anbei ein Screenshot von meinem Oszi. Man sieht zwei wie ich es nannte 
"Zeichen" (K). Einstellung ist 0,2ms pro Teilung, die Dauer beider 
"Zeichen" ist zehn Teilungen, also 0,002 Sekunden. Das wären 10.000 
baud. Wenn man ganz genau schaut, ist das letzte Bit eh nicht mehr ganz 
drauf, also sind's. 9.600.
Wenn man es so schulmäßig vorrechnet, dann stimmt auf einmal alles. Tut 
mir leid, daß ich das in einem meiner gestrigen Postings falsch 
geschrieben habe. Ärgere mich soeben selbst darüber. hgrmpf

So, und außerdem noch ein Screenshot meiner fuse bits, frisch ausgelesen 
(Ponyprog: Hakerl = 0). Wie man sieht, habe ich von der Werkseinstellung 
nur die CKSELx geändert. CKSEL=0000.

Eins ist mir noch eingefallen, bevor ich meine Kondensatoren rauslöte, 
um den Pegel von 8 auf 12 Volt zu ändern. Ich könnte auch einen falschen 
Max232 eingebaut haben. Es ist ein MAX232CPE. (Datenblatt folgt gleich) 
Paßt dieser Bauteil?

Danke und schönes Wochenende!
Nino.

Autor: Nino K.l. (nino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Datenblatt MAX232CPE

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>um den Pegel von 8 auf 12 Volt zu ändern.

Vergiss es. 8V sind in Ordnung, 12V werden es nicht werden und stammen 
aus einer Fehlinterpretation der V24. Normgerecht sind Pegel ab +/-3V.

Autor: risu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

OK, Du erzeugts also ein 9600Bd Signal, was ja auch Dein Ziel war.

CKSEL3..0=0 bedeutet, dass Du einen externen Oszillator verwendest 
(sieht auf Deinem Foto auch so aus).

Der Schaltplan fehlt noch, ebenso der Code (auf der von Dir genannten 
Seite stehen mehrere Beispiele; kopiere einfach Deinen Code und stelle 
ihn als Anlage hier ein).

Gruß

 risu

Autor: Nino K.l. (nino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

korrekt: externer Ozsillator (3,686400 MHz). Funktioniert auch.

Hier der Code. (im Anhang)

lg, Nino.

Autor: Nino K.l. (nino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
...und ein Foto vom Quarz auf dem - räusper - high end Steckbrett ;-)

Autor: Nino K.l. (nino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
...und der Schaltplan

Autor: risu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

1. Dein Code ist nicht assemblierbar ("VollesRegíster" und "Zaehler" 
sind nicht definiert) -- also bestimmt nicht das, was auf Deinem 
Controller läuft!
2. Wie sind die "UART-Auswahl"-Brücken gesetzt?

Gruß

  risu

Autor: Nino K.l. (nino)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ooops - alte Version erwischt. Ich hatte da zu Testzwecken eine 
Warteschleife drinnen. Nun der zweite Versuch. Jetzt ist es bestimmt 
das, was auf meinem Controller läuft ;-)

Die Auswahlbrücken JP3 und JP9 sind auf den MAX232 gesetzt (sicher 
korrekt, denn es kommt ja "etwas" bis zum PC) und JP20 
(Spannungsversorgung) ist gesetzt, also "ein".

Grüße, Nino (dankbar)

Autor: risu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Nino,

Code und Schaltplan sollten OK sein. Also noch einmal eine 
Bestandsaufnahme: Laut F_CPU + Code sendest Du tatsächlich mit 9600Bd, 
was ja grob durch das Oszillogramm bestätigt ist. Momentan wiederholst 
Du das zeichen 'T'. Deine letzte Fehlermeldung war aber:

> ich erhalte am PC lauter idente Zeichen, auch wenn der
> ATmega8 unterschiedliche Zeichen wegschickt.

Was kommt denn beim Senden der 'T's an? Ist die Masseverbindung zwischen 
PC und Deinem System (Pin 5 am RS-232 Konnektor) in Ordnung? Wie ist das 
Terminalprogramm konfiguriert (müsste sein: 9600Bd, 8N1) ... und "hängt" 
es am richtigen Port?

Gruß

  risu

Autor: Nino K.l. (nino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Problem gelöst - aber fragts mich bitte nicht wie!

Nachdem ich mein UART-Problem vorerst mal auf die lange Bank geschoben 
hatte, ist mir bei einem anderen Projekt etwas aufgefallen:

Ich habe ein Countdown-Programm für einen Platinenbelichter gemacht 
(macht wahrscheinlich jeder Anfänger mal), und dabei habe ich bemerkt, 
daß der Countdown nicht ganz ident mit der Stoppuhr des Handys gelaufen 
ist. Ich tippte (richtig) auf ein Taktproblem, wußte aber nicht, wo ich 
ansetzen sollte, denn ich hatte alles laut AVR-Tutorial eingestellt. Ich 
vermutete weiter (richtig), daß dieses Taktproblem auch die Ursache für 
mein UART-Problem war.

Folglich habe ich das UART-Testprogramm wieder geladen, an den 
Einstellungen im Programm herumgespielt,  verschiedene Quarze und 
-oszillatoren ausprobiert, bis ich schließlich Erfolg hatte.

Mich verwundert jetzt nur, daß es keinen (für mich erkennbaren) 
Unterschied zur Ausgangssituation gibt :-| (?)

Zusammenfassend möchte ich vermerken, daß ich (Einsteiger) Dank Eurer 
Hilfe viel über Mikrocontroller und diverses "rundherum" gelernt habe 
und bedanke mich für die vielen Tips!

Grüße, Nino.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

> denn ich hatte alles laut AVR-Tutorial eingestellt.

Im Zweifelsfall gilt das Datenblatt.

>  verschiedene Quarze und -oszillatoren ausprobiert, bis ich schließlich >Erfolg 
hatte.

Na ja, auch eine Methode. Willst du das aber immer so machen?

MfG Spess

Autor: Nino K.l. (nino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Na ja, auch eine Methode. Willst du das aber immer so machen?

Die Strategie ist rauszufinden, welche Wirkung es hat, wenn man an 
irgendeinem Schräubchen dreht (das man noch nicht kennt). Funktioniert 
oft recht gut, wenn man sonst grade nicht weiter weiß :-)

lg, N.

Autor: David (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
solange dies nicht zum standartvorgehen wird, sondern eher ein akt der 
verzweiflung kurz vor arbeitsende, ist doch ok...

Autor: Nino K.l. (nino)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kurz vor der Verzweiflung würde ich andere Methoden bevorzugen. Wozu hat 
man denn sonst Vorschlaghammer, Flammenwerfer und Dynamit zuause? Der 
Kreativität sind keine Grenzen gesetzt!

;-) N.

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie Rio Reiser schon sagte:

Macht kaputt, was Euch kaputt macht. ;-)

Youtube-Video "Ton Steine Scherben -- Macht kaputt was euch kaputt macht"

MfG Paul

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.