Hallo zusammen,
ich benutze das mySmart USB MK2, Atmega32L und myAVR Work Pad und
versuche über UART Zeichen zu senden. Als Verbindung vom µC zum PC,
verwende ich UART und das als Progammer verwendete mySmart USB MK2. Mein
Test-Code sieht so aus :
Wenn ich jetzt ich die Testfunktion der Software benutze, scheint der µC
wirklich Zeichen zu senden. Egal welche Einstellungen ich an der
Baud-rate änder, die zeichen ändern sich zwar bleiben jedoch immer
Hieroglypohen.
Was mache ich falsch ???
Gruss
Peter
>Was mache ich falsch ???
Ein
#define F_CPU 3686400
Stellt noch lange nicht den Takt für die CPU ein.
Dazu müsstest du die Fuses auf Crystal Osc. oder so
ähnlich einstellen.
Versuch doch mal
#define F_CPU 1000000
Das ist der Takt mit dem dein uC wahrscheinlich läuft.
Das habe ich auch schon alles probiert, ohne Erfolg. Nur mit den Fuses
habe ich das noch nicht so ganz begriffen. Was muss ich denn das
umstellen ? Unter Crystal Osc hab ich 30 unterschiedliche zur Auswahl.
Gruss
Ach noch was... ich benutze doch ein ATmega 32L, und laut Datenblatt
kann der doch nur 8 MHz oder ? Also, wenn ich jetzt genau 1 MHz
benutzten möchte, und im Code "#define F_CPU 1000000" schreibe, was muss
ich noch tun damit der µC auch wirklich mit den Takt läuft ?
Gruss
Peter F. schrieb:> Das habe ich auch schon alles probiert, ohne Erfolg. Nur mit den Fuses> habe ich das noch nicht so ganz begriffen. Was muss ich denn das> umstellen ? Unter Crystal Osc hab ich 30 unterschiedliche zur Auswahl.
Wenn du dir die Tabelle mal genauer ansiehst, dann merkst du dass die
vielen Varianten nur dadurch entstehen, dass das alle möglichen
Kombinationen von 3 Werten sind
* low Frequency / middle Frequency / high Frequency
* STartup Time, wobei die wieder in ein paar Möglichkeiten
für die Takte und eine fixe Zeit zerfällt.
Im Datenblatt zum Mega32 findet sich eine Tabelle, bis zu welcher
Frequenz low, niddle und high anzusehen sind. Wobei das nicht ganz so
kritisch ist. 3.6Mhz kann man schon die High Einstellung nehmen.
Und für die Startup Zeit: da nimmst du einfach die längste.
Peter F. schrieb:> Ach noch was... ich benutze doch ein ATmega 32L, und laut Datenblatt> kann der doch nur 8 MHz oder ? Also, wenn ich jetzt genau 1 MHz> benutzten möchte, und im Code "#define F_CPU 1000000" schreibe, was muss> ich noch tun damit der µC auch wirklich mit den Takt läuft ?
Gar nix.
Atmel liefert seine Prozessoren so aus, dass jeder mit dem internen Takt
auf 1Mhz kommt. Nur ist der nicht besonders genau. Wenn du einen Quarz
am Board hast, solltest du den auch aktivieren.
Tut mir leid, ich kapier das nicht.
Also ich hab ein Atmega32L (8 MHz !), was muss ich denn jetzt genau
einstellen, damit das UART auch das richtige ausgibt.
1
#define F_CPU ?????
2
...
3
UBRRL=?????;//23 = 9600 Baud bei 3,6864 MHz lt. SiSy-Hilfe
Und bei den Fuses, gibt es 30 verschiedene Einstellungen, Int. RC Osc.,
Ext. RC OSC., Ext. Low-Freq., Ext. Crystal/Resonator ???????
Ausprobieren geht ja wohl schlecht, des wegen funktioniert der
Controller jetzt auch nicht mehr.
Gruss
Peter
Peter F. schrieb:> Ausprobieren geht ja wohl schlecht, des wegen funktioniert der> Controller jetzt auch nicht mehr.
Ok, der Controller geht wieder. Hab mit einen anderen Controller eine
Frequenz auf XTAL1 gelegt und die Fuses reset. Die Fragen bleiben
trotzdem offen.
Bitte helft mir.
Gruss
Peter
Peter F. schrieb:> Tut mir leid, ich kapier das nicht.>> Also ich hab ein Atmega32L (8 MHz !),
das wichtigste zuerst.
Läuft der auch mit 8Mhz?
Hast du das getestet?
> was muss ich denn jetzt genau> einstellen, damit das UART auch das richtige ausgibt.>> #define F_CPU ?????
Wenn dein µC mit 8Mhz läuft, dann logischerweise 8000000.
Du willst ja schliesslich deinen Compiler nicht anlügen
> ...> UBRRL = ?????; //23 = 9600 Baud bei 3,6864 MHz lt. SiSy-Hilfe
Das lässt du den Compiler ausrechnen, was da rein muss.
Im AVR-GCC-Tutorial findest du Code für die UART.
Dort kannst du dir ansehen, wie das gemacht wird, so dass der Compiler
die meiste Arbeit erledigt.
Aber: Dazu MUSS dein Mega auch wirklich mit 8Mhz laufen!
Nur weil du bei F_CPU 8Mhz reinschreibst, tut er das nicht!
>> Und bei den Fuses, gibt es 30 verschiedene Einstellungen, Int. RC Osc.,> Ext. RC OSC., Ext. Low-Freq., Ext. Crystal/Resonator ???????>> Ausprobieren geht ja wohl schlecht, des wegen funktioniert der> Controller jetzt auch nicht mehr.
Bischen nachdenken?
Was hast du?
Hast du einen Quarz?
Oder hast du einen Quarzoszillator?
Oder hast du extern ein RC_Glied drann?
Also reduziert sich deine Tabelle schon mal gewaltig.
Weiter oben hab ich dir gesagt, dass man bei 3.6Mhz laut Datenblatt
durchaus schon High-Frequency benutzen kann.
Und schon reduziert sich das Angebot schon wieder enorm
Und dann kannst du auch noch die längste Startup Zeit einstellen.
Und wieder reduziert sich das Angebot.
Ooops. Jetz bleibt nur noch 1 Möglichkeit übrig
> Ausprobieren geht ja wohl schlecht, des wegen funktioniert der> Controller jetzt auch nicht mehr.
Irgendwann muss man mal ins kalte Wasser springen und schwimmen lernen.
http://www.mikrocontroller.net/articles/AVR_Checkliste#UART.2FUSART
Hallo Karl heinz,
danke dür die Infos.
Vorab schonmal, ich habs gestern abend doch noch hinbekommen anständige
Zeichen aus dem UART zu lesen, aber leider nur mit einem interen Takt
und der entsprechenden UBRRL. Um den Wert für UBRRL zu errechenen habe
ich mich eines kleinen Tools im Internet bedient, der mir die
Einstellung je nach Frequenz anzeigt. Den extern beschalteten Quarz hab
ich nicht zum laufen bekommen.
Karl heinz Buchegger schrieb:> Läuft der auch mit 8Mhz?> Hast du das getestet?
Mit 1 Mhz, läuft er. Ein Programm das die Ports toggeln lässt und mit
LED anzeigt, zeigt es.
Karl heinz Buchegger schrieb:> Wenn dein µC mit 8Mhz läuft, dann logischerweise 8000000.> Du willst ja schliesslich deinen Compiler nicht anlügen
Den #define F_CPU brauche ich aber nur, wenn ich den Wert für UBRRL
ausrechnen lasse, richtig ?
Karl heinz Buchegger schrieb:> Das lässt du den Compiler ausrechnen, was da rein muss
Wie gesagt, hab ich erstmal nen festen Wert in UBRRL eingetragen, die
Ausrechnunggeschichte werde ich mir jetzt auch zur Brust nehmen.
Karl heinz Buchegger schrieb:> Bischen nachdenken?>> Was hast du?> Hast du einen Quarz?> Oder hast du einen Quarzoszillator?> Oder hast du extern ein RC_Glied drann?
Stimmt, wo finde ich das im Datenblatt.
Karl heinz Buchegger schrieb:> Und dann kannst du auch noch die längste Startup Zeit einstellen.
Was sagt die Startup Zeit aus ? Verzögerung oder wie soll ich das
verstehen.
Karl heinz Buchegger schrieb:> Irgendwann muss man mal ins kalte Wasser springen und schwimmen lernen.
Das Problem ist, wenn ich was falsches einstelle kann es passieren, dass
ich den Controller gar nicht mehr programmieren kann, deswegen ist auch
mit ausprobieren schlecht, es sei denn ich hab eine ganze LKW-Ladung
davon. Aber jetzt weiß ich ja wie ich den doch wieder ansprechen kann
und hoffe, dass das ganze bei den anderen falschen Einstellungen auch so
einfach geht.
Gruss
Hallo Peter,
die Sache stellt sich am Anfang viel verwirrender dar, wie sie ist.
Zuerstmal zu den Fuses: Solange Du nicht Reset abschältst, kommst Du
immer wieder an den uC dran. Hast ja selbst schon einen ext. Take
angelegt. Der mysmart USB kann den Takt auch liefern, Beschreibung hab
ich irgendwo auf myavr.de gefunden. Ich hab die Doku leider zuhause,
"Recovery" war glaub ich das Stichwort.
Ok, nächste Thema ust F_CPU. Im Prozessor läuft der internen R-C auf
8MHz, das wird über den Prescaler durch 8 geteilt. Letztlich kommen dann
für den Prozessor 1 MHz raus. Wenn Du ein 24MHz ext. Quarz anschließt,
und nur die Fuses umstellst auf ext. Quarz, dann läuft die Kiste mit
3MHz.Wenn Du dann noch den Prescaler auf 1:1 setzt, kommen 24 MHz
zusammen. Es ist also ein Zusammenspiel aus Taktquelle, Frequenz der
Quelle und Prescaler/Vorteiler.
Die Boot-Time ist tatsächlich eine Wartezeit, bei PowerOn wird erstmal
nix gemacht, bis sich die Elektronik eingespielt hat. Solange Du nichts
hyper-zeitkritisches unternimmst, bist Du mit der höchsten BootUp-Time
gut beraten. (Ok, frag jetzt aber nicht, wenn er schon erst einschwingen
muß, wie er dann genau ermittelt, wann 64ms rum sind)
Wichtig ist dann noch der Unterschied Quarz zu Quarz-Oszillator. Das
Quarz ist eine Blechkiste mit 2 Pins, der Q-Osc eine größere Kiste mit 4
Pins. Letztlich sind im Q-Osc. gleich die Kondensatoren mit drin, soweit
ich weiß sind die auch etwas genauer.
Gruß
Ralf
Hallo,
dreilira schrieb:> Der mysmart USB kann den Takt auch liefern, Beschreibung hab> ich irgendwo auf myavr.de gefunden.
Du meinst den myMultiBoard MK2, soviel ich weiß kann der mySmart USB MK2
das nicht, hab mich gestern noch schlau gemacht.
dreilira schrieb:> Prescaler
Denn hab ich bei mir nicht. Wenn dann würde ich Ihn im Code sehen, nicht
in den Fuses, richtig ?
dreilira schrieb:> Es ist also ein Zusammenspiel aus Taktquelle, Frequenz der> Quelle und Prescaler/Vorteiler
Achso, ich glaube ich hab das jetzt geschnallt, jetzt muss ich das ganze
nur noch in der Hardware umsetzten. Ich hab das jetzt so verstanden:
1. Wenn ich in den Fuses einen interen Takt 1Mhz einstelle, läuft der µC
mit ca. 1Mhz, egal ob ich einen Quarz an XTAL1 und XTAL 2 anschliessen.
Ob im Code jetzt noch '#define F_OSC 8000000' steht, spielt dabei keine
Rolle.
2. Wenn ich in den Fuses ein externen Quarz von 6Mhz einstelle, erwartet
der µC eine externe Beschaltung um auf die 6Mhz zukommen. Ob im Code
jetzt wieder '#define F_OSC 8000000' steht, spielt dabei auch keine
Rolle.
3. Mit dem Vorteiler kann ich den Takt dann im Code nochmal reduzieren.
Hab ich das soweit richtig verstanden ?
dreilira schrieb:> Das> Quarz ist eine Blechkiste mit 2 Pins, der Q-Osc eine größere Kiste mit 4> Pins.
Das hab ich auch mittlerweile auch heraus gefunden, danke.
Danke für die Hilfe.
Gruss