Forum: Mikrocontroller und Digitale Elektronik Was macht ein ATMega48V mit internen Oszi, gefused auf 8MHz bei zu wenig Spannung?


von Thomas M. (schwuuuuup)


Lesenswert?

Hi,

ich habe eine seltsame Beobachtung gemacht, und wollte nur mal hören ob 
ihr mir das bestätigen könnt, oder ob ich noch einen weiteren Fehler 
gemacht habe, bzw. ob ich mich in Zukunft auf das Beobachtete Verhalten 
verlassen kann:

Ich habe eine Schaltung mit einem ATMega48V, dieser ist so gefused, dass 
er seinen internen Oszillator verwendet:
1
  low_fuses=0xE2
2
  high_fuses=0xDF

Das funktioniert auch, aber es macht keinen unterschied, ob ich den 
CKDIV8 gesetzt habe oder nicht, er arbeitet immer mit 1MHz, der Divider 
ist also immer an.
Irgendwann war mir dann aufgefallen, dass der µC mit 2,5V betrieben 
wird, 8MHz aber erst ab 2,7V zur Verfügung stehen.

Eigentlich hätte ich erwartet, dass er dann bei 2,5V versucht 8MHz zu 
machen, die aber nicht hinbekommt und der µC dann gar nicht mehr läuft.

Ich kann wegen ein paar kritischen Teilen in der Schaltung nicht mal 
eben die Spannung auf 2,7V erhöhen und testen, ob er dann korrekt mit 
8MHz laufen würde.

Deswegen meine Frage: Ist das normales verhalten des ATMega bei zu 
kleiner Versorgungsspannung sicher in den langsameren Takt zu verfallen?
Oder muss ich meinen Fehler woanders suchen und es gibt noch andere 
Gründe, warum er (nicht mal instabil) die 8MHz annimmt?

Bei Google und in den Datenblättern habe ich keinen Hinweis gefunden. 
Ich hoffe ich war nicht nur zu blind die richtige Stelle zu lesen.

von Achim M. (minifloat)


Lesenswert?

Wer zwingt dich, die V-Variante zu nehmen?
Der normale 48er geht wesentlich schneller.
Das mit Clockdiv8 glaube ich dir nicht.

mfg mf

von Ulrich (Gast)


Lesenswert?

Nach dem Datenblatt sollte der Mega48V (oder Mega48PA) ab 2,4 V auch mit 
8 MHz stabil laufen. Ich kann mir kaum vorstellen das da das Fusebit für 
CLKdiv8 einfach bei 2,5 V ignoriert wird. Die Funktion CLKdiv8 sollte 
unabhängig von der Spannung sein, schon wegen der nicht vorhandenen 
genauen Ref. Spannung um die Umschaltung zu realisieren.  Nur bei ganz 
kleiner Spannung (unter 1,8 V), also außerhalb der Spezifikation, wird 
ggf. der RC Takt langsamer - das hatte ich jedenfalls schon mal.

Der Taktteiler lässt sich ggf. auch zur Laufzeit einstellen, auch auf 4 
MHz falls 8 MHz doch etwas zu schnell ist.

Die Normale und die V Version unterscheiden sich nicht viel - gerade im 
Grenzbereich wie hier ist da kein Unterschied. Da sind beide für 10 MHz 
bei 2,7 V gut. Die V-Version ist noch für weniger Takt bei weniger 
Spannung spezifiziert, die normale Version für mehr Takt bei mehr 
Spannung. Die V Version ist also schon die richtige Wahl. Beim neueren 
Mega48PA erübrigt sich die Unterscheidung nach normal und V Version dann 
ganz.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Aktivier mal die "Clock output on PORTB0; [CKOUT=0]" Fuse wenn der Pin 
frei is und halts Oszi ran.

Woher weiste denn, dass er mit 1Mhz rennt?

von Thomas M. (schwuuuuup)


Lesenswert?

Hi,

der 48V ist nun mal verbaut in der Schaltung die ich modifizieren will.



dass er auf 1MHz läuft "weiß" ich, weil ich einfach mal per Arduino-IDE 
ein Blink-Skript draufgespielt habe, welches mit einem delay von 1sek 
arbeitet.

Mein Oszilloskop ist leider gerade 80KM von mir weg, das sehe ich erst 
am Wochenende wieder...
Wenn ich dort für das Board die CPU-Frequenz mit 1MHz angebe, blinkt die 
LED tatsächlich einmal pro Sekunde, gebe ich 8MHz an, blinkt sie nur 
alle 8 Sekunden.
Dies ändert sich auch dann nicht, wenn ich absichtlich den Divider 
einschalte.


das mit den 2,7V habe ich folgender Zeile aus dem Datenblatt entnommen:
ATmega48V/88V/168V: 0 - 4MHz @ 1.8V - 5.5V, 0 - 10MHz @ 2.7V - 5.5V

Aber offenbar habe ich da einen Denkfehler gemacht. Diese Zeile enthält 
wohn nicht die ganze Wahrheit, denn hinten im Datenblatt habe ich 
inzwischen Kurven gesehen, die für 8MHz-Betrieb den Stromverbrauch 
angeben bis runter unter 2V.

Tja dann weiß ich leider auch nicht warum meine Fuses nur 1MHz 
hervorbringen und nicht 8

von bitte löschen (Gast)


Lesenswert?

Baue doch mal die relevanten Teile (LED und mega48) auf einem Steckbrett 
so nach, wie sie auch in der Schaltung verbunden sind, und schaue, ob 
sich dieses Verhalten reproduzieren lässt. Dann kannst Du frei mit der 
Versorgungsspannung herumspielen und hast andere Fehlerquellen erst mal 
ausgeschlossen. Damit hast Du eine Basis, um das Problem einzukreisen.

von Mw E. (Firma: fritzler-avr.de) (fritzler)


Lesenswert?

Check nochmal die Fuses, vllt haste die nicht richtig geflasht.
Hab eben mal nen m168 getestet mit den fuses, läuft bis 1,5V auf 8MHz 
und kackt dann ab.

von Martin H. (martin_h85)


Lesenswert?

Guten Abend,

Wenn du die Arduino IDE nutzt musst du darauf achten was das Makefile 
tut. Nehm zum testen lieber AVR GCC.
Es kann sein das die Timer Initialisierung sich nach dem FCPU Wert 
richtet.



Gruß Martin

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.