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)
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
Ja, das geht. Z.B. beim ATMega162 kann man eine Prescaler setzen (1, 2, 4, .. 256). Peter
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)
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
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)
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
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
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...
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.
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
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
Ich würde mich vorallem mal fragen, ob du die 16mhz wirklich brauchst. Kommst du nicht sowieso mit 1mhz internem Takt aus?
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
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...
Wenn du auf i2c warten musst, dann kannst ihn auch schlafen schicken, i2c kann ihn aufwecken.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.