Forum: Mikrocontroller und Digitale Elektronik AVR taktquelle im laufendem Programm ändern?


von Sebastian Heyn (Gast)


Lesenswert?

hallo, gibt es die möglichkeit wenn ich zb einen AVR bei 16mhz laufen
lasse ihn irgendwann im programm auf 1mhz zu "drosseln"? (interner rc
zb)

von Sepp -. (sepp_o)


Lesenswert?

Salve

Soviel ich weis geht dass nicht, da dafür die Flags bei der
Programierung gesetzt werden müssen.

Wenn dir's ums Stromspahren geht kannst du den Mikrokontroller
zeitweise schlafen legen.

Wenn nicht, dann schreib mal wiso du die Taktquelle wechseln willst.
Eventuell kennt jemand eine bessere Lösung.

mfg Sepp

von peter dannegger (Gast)


Lesenswert?

Ja, das geht.

Z.B. beim ATMega162 kann man eine Prescaler setzen (1, 2, 4, .. 256).


Peter

von Sebastian Heyn (Gast)


Lesenswert?

also ich habe ein signal an einem beliebigen pin des controllers, je
nach zustand hätte ich gern eine art stromsparmodus. da problem. Wenn
ich sleep o.ä benutze brauch ich nen interrupt. reset kann ich nicht
nutzen, da ich die daten im SRAM benötige, und ich mir die arbeit mit
dem eeprom sparen will.
Der benutzte AVR ist ein mega32. Ich könnte das layout natürlich
ändern, aber meine anforderung an das programm ist, dass alles (bis auf
zwei funktione) ohne interrupte bzw hardwareschnittstellen auskommt,
damit es weitgehenst frei belegbar bleibt. Ich lese I2C per software,
rechne ein bisschen, gebe es per SPI aus, daneben wird über die
hardware PWM erzeugt, und per interrupt fernbedienungssignale
eingelesen. Jetzt hat das ganze ne Schalt-plus leitung, die die
schaltung ausser betrieb nimmt

(licht wird ausgeschalten, display geht aus und controller soll so
wenig strom wie möglich verbrauchen)

von Thomas B. (yahp) Benutzerseite


Lesenswert?

Hoi!

wenn das "Stromspar"-Signal an dem willkürlichem Pin quasistatisch
ist und du einige Zeit zum Auslesen hast, dann kannst du den Controller
in den Schlafmodus versetzen und per Timer zurückkehren, um alle paar
Millisekunden den Pin zu pollen und evtl. weiterzuschlafen. Der Mega32
unterstütz ja wohl leider keine externen Interrupts auf beliebigen
Pins.
Ist aber eine Frage der konkreten Bedingungen. Warum kannst du für dein
Signal keinen Interruptpin verwenden?

Gruß, Thomas

von Sebastian Heyn (Gast)


Lesenswert?

weil das design fürs board schon sogut wie fertig ist. aber mit dem
timer. das ist ne gute idee...

also könnte ich doch zb wenn ich den 16bit-timer nehme den auch
umkonfigurieren (von pwm auf timer)

von Stefan Kleinwort (Gast)


Lesenswert?

mega 324 wäre eine Alternative, wenn das Layout schon fertig ist.
Irgendwann wird der den 32er eh ablösen.
Der 324 hat pin-on-change Interrupts für alle Pins.

Gruß, Stefan

von Thomas B. (yahp) Benutzerseite


Lesenswert?

Hoi,

wahrscheinlich musst du den Timer 2 verwenden, aber du brauchst dafür
auch keine 16 Bit ;-)
Beim Stromsparen auch immer dran denken unbenutzte Dinge auszuschalten:
ADC, AC, Watchdog ...

Gruß, Thomas

von Sebastian Heyn (Gast)


Lesenswert?

sind die standardmäßig an, wenn ich sie nicht aktiviere?


mit dem 324 - ich benutze bascom (WIE KANNST DU NUR!!) ich weiss nicht
ob der schon unterstützt wird...

von Fritz G. (fritzg)


Lesenswert?

Wenn du Timer brauchst, dann kommst aber nur in den idle Modus, der
braucht im Vergleich zu Standby usw. noch recht viel Strom.
In den besseren Modi gibts keinen clock mehr, und daher auch keine
Timer. Ausser du hängst einen  Quarz an TOSC1 und TOSC2 rein und setzt
das ASSR bit.

von Stefan Kleinwort (Gast)


Lesenswert?

Schon wieder ich mit dem 324 ...
Beim 324 kann der Watchdog-Timer auch einen Interrupt auslösen. D.h.
man hat auch in den besseren Stromsparmodi eine interne
Aufweckmöglichkeit.
Beim mega32 lässt sich der Watchdog auch benutzen, um den mc zyklisch
zu wecken - durch einen WDG-Reset (... nicht so toll).

Leider ist Atmel mit dem 324 erst in den Startlöchern.

Frag doch einfach die BASCOM-Leute, ob die den 164/324/644 schon
unterstützen. Jörg Wunsch hat das für den gcc jedenfalls schon
hingekriegt (aber der macht das ja in seiner Freizeit, und weil man
heutzutage davon soviel hat, sind die OS-Leute halt immer etwas
schneller ;-))

Gruß, Stefan

von Thomas B. (yahp) Benutzerseite


Lesenswert?

Hi,

leider scheint das beim m32 nur mit asynchronem Timer2 zu gehen und
dafür brauchts dann noch nen weiteren Quarz. Mit nem Reset durch den
Watchdog zurückzukehren ist wohl auch nicht, was du willst und
pin-change Interrupts hat er nicht. Überleg dir noch mal ganz genau,
dass du wirklich keinen der echten Interrupteingänge verwenden willst,
wäre bei dem gegebenen µC die beste Lösung...

Gruß, Thomas

von Läubi (Gast)


Lesenswert?

Ich würde mich vorallem mal fragen, ob du die 16mhz wirklich brauchst.
Kommst du nicht sowieso mit 1mhz internem Takt aus?

von Marian (Gast)


Lesenswert?

Es gibt doch dieses Kalibrationsregister (OSCCAL) für den Internen
RC-Oszi, damit könnte man doch zumindest in einem mittleren Bereich von
75%-150% der voreingestellten frequenz den Takt verstellen (für maximale
Effizienz dann ein niedrigeren Takt nehmen, auf 150% 'kalibrieren'
(normaler Betrieb) und zum Stromsparen auf 75% runterschalten, das ist
dann nur noch die Hälfte vom ursprünglich vorgesehen Takt)...
allerdings muss man dann die ungenauigkeit des internen RC-Oszis
hinnehmen... oder halt ein anderen MC (siehe Peter Danneggers Post)
benutzen....

Marian

von Sebastian Heyn (Gast)


Lesenswert?

ja also 1) brauche ich die 16mhz, weil ich über software i2c nen string
einlese, diesen so schnell wie möglich umrechnen und dann wieder
ausgeben muss. dazu lese ich infrarot signale ein, rechne sie um und
gebe sie wieder raus.

ich habe gemessen, dass die ganze schaltung, wenn ich das display
ausschalte nur noch 20mA zieht was ich für völlig vertretbar halte.

nächste woche schau ich nochmal über das layout...

von Fritz G. (fritzg)


Lesenswert?

Wenn du auf i2c warten musst, dann kannst ihn auch schlafen schicken,
i2c kann ihn aufwecken.

von Sebastian Heyn (Gast)


Lesenswert?

nein ich habe oben geschrieben, dass sogut wie alle ansteuerungen per
software sein sollen. das macht das layout und auch eine evtl.
protierung auf andere controller einfacher.

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.