www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega8 USART Problem


Autor: S. Grifs (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

habe heute meinen neuen ATmega8 ausprobiert. Benutze das STK500 und
programmiere mit CodeVisionAVR. Habe den Code aber auch schon für
WinAVR abgewandelt und es kam zum selben fehlerhaften Ergebnis.

Kurzer Überblick (Code im Anhang):
ATmega8
Oszi vom STK500: 3,6864 MHz
USART Transmitter an
Asynchrone Übertragung
115200 Baudrate
8 Bit, 1 Stop, no Parity
Terminal von CodeVisionAVR und RS232 Com-Terminal getestet

Fehlerbeschreibung: beim Senden von "UDR=48" oder eine printf
Anweisung kommt immer nur "8888" beim Terminalprogramm an.

Habe schon ein wenig rumgespielt bei den Einstellungen...ohne Erfolg!
Wo liegt hier der Fehler???

Vielen Dank!
MfG
S. Grifs

Autor: dds5 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bitte mal das Datenblatt zur Baudratenberechnung befragen.
Wenn ich mich nicht irre ist bei 3,6864MHz nur 57600 Baud möglich.

Dieter

Autor: S. Grifs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

115200 ist auch möglich.

Habe jetzt mal alle gängigen Baudraten von 4800 bis 115200 getestet.

folgendes Ergebnis:
4800 88888
9600 x8x88
14400 xxxxx
19200 88888
38400 888xx
56000 xxxxx
57600 xxxxx
115200 88888 (oben beim Beitrag habe ich eine 8 vergessen)

Nun, kannmir vielleicht jemand sagen, woran dieses Problem liegt? Bin
langsam am verzweifeln. Mit meinem AT90S4433 hat es immer prima
geklappt.

Danke

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ist der interne Oszillator des Mega8 vielleicht aktiviert?

Autor: Beier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm, wie kann man den aktivieren bzw. deaktivieren?

Hat der AT90s4433 auch einen internen Oszi? denn da klappt es ja immer.

Autor: S. Grifs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe meine anderen mega Mikrocontroller jetzt auch probiert...Habe bei
allen das selbe Problem. Irgendwie wollen die nicht das richtige
ausgeben.

Weiß jemand was dazu?

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
"Mit meinem AT90S4433 hat es immer prima geklappt"

Oh Wunder. Der kann garnicht anders, als auf den externen Oszillator
hören, einen internen hat er nicht. Der Mega8 hingegen läuft erst mit
den 3,6MHz, wenn er mit der entsprechenden Fuse darauf hingewiesen
wird. Bis dahin läuft er mit 1MHz.

Habe leider keine Ahnung wie das beim CV läuft.

Autor: S. Grifs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ist nicht weiter wichtig mit Codevision.

Wie geht es denn mit WinAVR bzw. dem Atmel Studio 4. Benutze ich
genauso, bekomme es auch dort nicht hin. Wie muss ich dort die Fuses
setzen?

Autor: andi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
auf externen takt natürlich! musst halt schaun wies genau heißt - ich
weiß es nicht auswendig!

mfg andi

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hätte jetzt gedacht, dass die Fuses im AVR Studio kaum zu übersehen
und praktisch narrensicher sind weil's sehr deutlich dransteht was
jede bedeutet. Tja, man lernt nie aus.

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@A.K.:
Wer lesen kann, ist klar im Vorteil...
Wer sich den Mega8 als erstes Projekt aussucht, weil er so klein und
"unschludig" wirkt, heimst sich ganz schnell Probleme ein, wenn er
nicht lesen kann...

"Reicht ja!" ist da irgendwie nicht die richtige Aussage. Ich finde
es besser, mit einem Controller anzufangen, der vielleicht wesentlich
mehr kann, als ich erst mal brauche, der aber im Umgang einfacher ist.

Wo könnte man so eine Warnung anbringen?

Gruß Rahul

Autor: S. Grifs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falls du mich jetzt meinst....

habe bisher immer mit dem at90s4433 gearbeitet, aber für die nächsten
Projekte reicht er einfach nicht aus. Muss mich in Hardware I2C
einarbeiten und später soll sogar ein CAN Netzwerk aufgebaut werden.

Leider scheiter ich an allen ATmega, die ich bisher probiert habe. Ich
denke mal, dass ich mit den fuses langsam besser klar komme. Ich kann
ja nicht allen MC aus dem Weg gehen, die einen internen Takt haben....

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt ja auch keine mehr.
War auch nicht ganz so böse gemeint, wie es klingt.
Wie Peter Dannegger immer zu sagen pflegt: Das Datenblatt ist dein
Freund!

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du ein Oszilloskop hast, dann kannst du auf dem Avr in einer
Endlosschleife einen Buchstaben senden und mit dem Oszi untersuchen, ob
korrekte Signale übertragen werden.

Autor: marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
für avrs gilt im allgemeinen: rtfm!

da steht dann auch drin, dass die atmegas bei auslieferung auf den
internen 1Mhz RC-Generator programmiert sind...

2 ideen:

1.
schreib mal ein programm in assembler, dass eine led blinken lässt,
dass bremst du dann mit nop (deshalb assembler) auf rechnerische 10hz
oder langsamer aus (gehe dabei von 1Mhz bus-takt aus)
brenne das programm dann und schaue, wie schnell die led wirklich
blinkt, wenn sie dann die errechnete frequenz (oder weniger) macht,
dann sind da 1Mhz eingestellt.

2.
wenn du ein steckbrett hast, dann bau da mal die schaltung (atmega mit
led) auf dem steckbrett ohne quarz auf. anschalten und schauen, ab die
led blinkt (für diesen test kannst du auch c nehmen - die zeiten sind
egal.) wenn die led blinkt, dann ist der interne oszilator aktiviert,
wenn nicht, ist auf einen quarz programmiert

Autor: S. Grifs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für alle Tipps. Habe es tatsächlich geschafft alles zum Laufen zu
bekommen.

Autor: Simon Küppers (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und deine Lösung wüssten wir auch alle gerne.. Könnte man nämlich noch
was raus lernen

Autor: S. Grifs (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
War letztendlich ganz einfach. Habe den Controller im AVR Programmer im
AVR Studio 4 ausgewählt und dann die fuses von "Int. RC Osc." auf
"Ext. Clock" umgestellt und zwar jene mit CKSEL=0000 SUT=00. Fragt
mich nicht, warum genau das mit SUT=00. "Ex. Clock" war aber
notwendig, da das STK500 ja über eine "Ex. Clock", sprich einen
Quarzoszillator verfügt. Es ist aber auch möglich einen "Ext. Crystal
Osc." zu wählen. Dann muss ein Quarz auf das STK500 gesteckt werden
und der Jumper "OSCSEL" umgesteckt (Pins 2+3). Hier darauf achten,
bei den Fuses auch die richtige MHz-Zahl einzustellen.

Beide Varianten haben bei mir funktioniert.

Autor: JojoS (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ich wundere mich das die oft zitierten Fuses nicht in der AVR-Checklist
zu finden waren. Habe die deshalb mal in die Checklist eingetragen.
Wenn was falsch war verzeiht mir, war mein erster Beitrag in den Wiki
Seiten.

Autor: TravelRec. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja, dann später nur nicht vergessen, die Fuses auf externen Oszillator
umzustellen (falls Du einen Quarz verwendest), bevor Du den Prozessor
auf ein anderes Board lötest, sonst mag er nicht mal mehr ISP (weil
kein Takt...) und Du mußt ihn dann wieder auslöten und
umfusen...ärgerlich...

Autor: marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder du hast einen isp mit programmierbarem taktgenerator und leitest
den takt an die entsprechende leitung.
wir machen das hier bei einem entwicklungs-board (mit 32kHz Qurz) auch
so (der programmer liefert 4.7xx MHz) - die höhere Frequenz wird dann
einfach auf den Takt-Eingang gelegt. Funzt eigentlich ganz gut.

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.