mikrocontroller.net

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


Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Sepp -o- (sepp_o)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: peter dannegger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, das geht.

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


Peter

Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Thomas B. (yahp) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas B. (yahp) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Fritz Ganter (fritzg)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas B. (yahp) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Läubi (Gast)
Datum:

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

Autor: Marian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Fritz Ganter (fritzg)
Datum:

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

Autor: Sebastian Heyn (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.