PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : flexibler takt?



X-917
08.04.2009, 14:43
hallo,
Ich hatte gerade eine idee. Ich weiss nicht, ob jemand so etwas schon gemacht hat, habe auch noch nicht wirklich gesucht...
Also: einen digital-frequenz-converter an den takteingang eines avr, sodass der avr (mit dem abgleich in der software) seinen takt regeln kann. (strom sparen bei inaktivität)
Selbstkritik(damit ihr nicht so viel schreiben müsst xD):
-wird der stromverbrauch besser, oder wiegt der dfc das wieder auf?
-macht der avr so etwas schon selbst in einem sleep-mode?
Und noch eine abschliessende frage: wie tief kann man mit dem systemtakt runtergehen?
Danke fürs lesen

MeckPommER
08.04.2009, 14:53
Die AVRs können meines Wissens nach bis 0 runter, es gibt keine Mindestfrequenz.
Die AVRs haben verschiedene Stromsparmodi, mit denen der Stromverbrauch extrem gesenkt werden kann. Es können in diesen Modi bestimmte Funktionsteile des µC lahmgelegt werden oder der µC angehalten werden, bis z.B: ein Interrupt von aussen kommt.

Gruß MeckPommER

Besserwessi
08.04.2009, 17:47
Es gibt keinen mindesttakt, aber die Frequenz darf sich nicht abrupt ändern. Das erschwert eine externen variation des Taktes. Viel der neueren AVRs haben ein Register mit dem man den Takt vom Quarz oder RC Oszillator teilen kann und diesen Teiler kann man auch zu laufzeit verändern. Es geht also ganz ohne externe hardware.
Der Stromverbrauch ist etwa proportional zur taktfrequenz. Einen zusätzlichen Gewinn erhält man, wenn man wegen einer niedrigernen taktfrequenz auch die Spannung verringern kann, was aber zur Laufzeit eher wenig sinn macht.

Mit den Slepp mode (Powerdown) kann man parktisch genausoviel Strom sparen wie durch den niedriegeren Takt, nur die Nutzung ist flexibler, man ist aber auf einige weniger Möglichkeiten zum wieder aufwecken gebunden.

X-917
08.04.2009, 23:20
danke für die antworten! Ich denke, mit software ist wirklich besser. Ich will ein thermometer bauen, das mit 3 AAA batterien 1 jahr hält. Schaff ich schon...:-p
Und wenn mein keylogger und mein rs-232 eeprom programmer fertig sind, stell ich vielleicht auch noch ne anleitung rein
Mfg

Besserwessi
09.04.2009, 00:20
Für geringen Stromverbrauch wären 2 Zellen vermutlich besser. Für sehr sparsamen Betrieb, nutzt man den Power save sleep mode und wacht nur eher selten auf. Als Takt geht da z.B. eine 32 kHz Uhrenquarz beim Schlafen und der interne RC zwischendurch, wenn wirklich mal gerechnet werden soll und der AD Aktiv sein soll.

X-917
09.04.2009, 06:51
achja, stimmt! Man kann die fuses sogar im betrieb setzen.

Besserwessi
09.04.2009, 11:46
Die Fuses kann man nicht im Betrieb ändern, aber das register kann man ändern. Die Fuses geben nur einen Wert nach dem Reset vor. Soweit ich weiss hat man da aber nur die Wahl :1 oder :8.

X-917
09.04.2009, 12:47
also das verstehe ich jetzt nicht...
Ich kann doch IM programm z.b. Das jtag-interface Deaktivieren?! das ist zwar keine fuse-änderung sondern nur software aber kann man soetwas auch mit dem takt machen?

MCUSR |= (1<<JTD);
MCUSR |= (1<<JTD);

Besserwessi
09.04.2009, 13:09
Klar kann man das Register CLKPR zur Laufzeit verändern und dadurch den Takt verändern. Wie sollte man sonst auch andere Teiler als 1 oder 8 einstellen ? Man kann nur das dazugehörig FUSEBIT nicht ändern, das den Wert für CLKPR direkt nach dem Reset vorgibt nicht ändern.
das CLKPR Register gibt es aber nur bei neueren Chips (z.B. Mega48, Tiny2313, Tiny261). Der Tiny26, Mega8 oder
Mega16 haben die Funktion noch nicht.

Das ist so ähnlich wie beim JATG interface: abschalten geht in software, aber nur temporär. Nach den Rest fängt man erst mal mit JTAG an, wenn man das nicht per Fusebit abgestellt hat. Ich glabe aber man kann JTAG nicht per Software einschalten, wenn es per Fuse abgestellt war.

thewulf00
09.04.2009, 13:12
Ja, aber ändert dadurch nicht die Fuses. Besserwessi hat schon recht.

Das bedeutet, Du müsstest das JTAG-Interface bei JEDEM Programmstart abschalten, weil der Standardwert aus den FUSES ja die Aktivierung beinhaltet.

Edit: Irgendwer war da schneller ... ](*,)