Forum: Mikrocontroller und Digitale Elektronik ATmega8 USART Problem


von S. Grifs (Gast)


Angehängte Dateien:

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

von dds5 (Gast)


Lesenswert?

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

Dieter

von S. Grifs (Gast)


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

von Rahul (Gast)


Lesenswert?

ist der interne Oszillator des Mega8 vielleicht aktiviert?

von Beier (Gast)


Lesenswert?

hmm, wie kann man den aktivieren bzw. deaktivieren?

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

von S. Grifs (Gast)


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?

von A.K. (Gast)


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.

von S. Grifs (Gast)


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?

von andi (Gast)


Lesenswert?

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

mfg andi

von A.K. (Gast)


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.

von Rahul (Gast)


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

von S. Grifs (Gast)


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....

von Rahul (Gast)


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!

von Gast (Gast)


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.

von marcel (Gast)


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

von S. Grifs (Gast)


Lesenswert?

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

von Simon Küppers (Gast)


Lesenswert?

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

von S. Grifs (Gast)


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.

von JojoS (Gast)


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.

von TravelRec. (Gast)


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...

von marcel (Gast)


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.

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.