Hallo! Ist es eigentlich möglich einen AVR z.B. wenn er von der Batterie versorgt wird 2MHz und wenn er vom Netz versorgt wird 8MHz ohne das er einen Reset macht?? Wenn ja, wie macht man denn sowas? Wäre es möglich mit einem Relay an einem Port, das zwischen einem 8MHz und einem 2MHz Quarz schaltet? Danke im Voraus Melzer
Wenn der Quarz mit der Kapazität der Relaiskontakte noch schwingt? Kommt auf Relais und Quarz an, also ausprobieren...
wäre ein/zwei quarzoszillator/en mit analogschalter da nicht besser? wie genau ist ein vco?
Der Quarzoszillator im AVR wird über ein Umschalten des angeschlossenen Quarzes wenig erfreut sein; schließlich muss der neu anschwingen, was eine gewisse Zeit lang ein seltsames Verhalten zur Folge haben dürfte. Einfacher wäre ein Festfrequenzoszillator, der durch einen digital umschaltbaren Teiler mit dem AVR verbunden ist. Da läuft zwar der Oszillator immer mit vollem Takt, ebenso der Teiler, aber der AVR bekommt ein sauberes Taktsignal, ohne daß im Umschaltmoment ein Oszillator neu anschwingen müsste. Das dürfte dem leicht erhöhten Leistungsbedarf gegenüber ein eindeutiger Vorteil sein.
Da hier kein konkreter AVR genannt wurde, möchte ich anmerken, das die neueren AVRs einen "System Clock Prescaler" haben. Beispielsweise die neuen Mega48/88/168 und der Mega162, aber auch die aktuellen Tinys, wie Tiny13 oder 2313. Feine Sache das, einfach mal den Takt zu Laufzeit runtersetzen, um z.B. Strom zu sparen. Gruß Ingo
Wäre es nicht sinnvoller, den Takt intern umzuschalten? Können aber nicht alle Modelle, also vorher kontrollieren ob das geht. Markus
Noch eine Anmerkung nebenher weil da öfters mal welche hereinfallen. Natürlich kann man den Takt wechseln wie man will (Wie es geht steht ja oben schon) aber es bleibt da ein kleines Problem. Die Soft auf dem Controller sollte auch darauf ausgelegt sein mit unterschiedlichen Takten zu arbeiten und diese auch angezeigt bekommen da Programmablauf und auch angeschlossene Hardware eventuell abhängig vom takt sind.
Mit einem VCO sehe ich eine Probleme mit dem Einschwingen, schließlich läßt sich die Steuerspannung soweit tiefpaßfiltern, daß der AVR folgen kann. Mit einem NCO geht das natürlich auch. Da wird es dann aber wichtig zu wissen, um welche Anwendung es geht! Wenn zu einem zeitpunkt eine definierte Taktrate herrschen muß wegen zeitkritscher Routinen, macht das natürlich wenig Spaß. Wenn es eher so ist, daß mal mehr, mal weniger Last anfällt, ohne plötzliche Wechsel, finde ich die Realisierung durchaus pratikabel. Ein Beispiel? Bei einem Bordcomputer ist die Last (GPS-Auswertung, LCD-Darstellung) etwa geschwindigkeitspropotional. Und ein AVR kommt schneller von "null auf hundert" als ein Ferrari! (-;
@Michael: Deine Schaltung ist keine Lösung. Einerseits ist nicht klar, ob die Treiberleistung eines Portpins bzw. des verwendeten Inverters genügt, um als Versorgungsspannung für einen Oszillator verwendet zu werden, andererseits ist das Anschwingverhalten und Ausschwingverhalten zum Zeitpunkt des Umschaltens höchst undefiniert. Der Controller wird einige Millisekunden lang mit gequirltem Quark anstelle eines Taktsignales versorgt werden. Auch will so ein Oszillator mit Versorgungsspannungspegeln statt des müden "high" eines Portpins versorgt werden. Nein, entweder einen Quarzoszillator mit eingebautem programmierbaren Teiler verwenden (EXO-3*), oder aber einen Vorteiler verwenden und zwischen dessen Ausgängen umschalten (Aus der CMOS-Reihe 4040 oder ähnliches; wenn ich mich recht entsinne, gab's da doch auch einen mit integrierter Oszillatorschaltung?). Besser allerdings ist der Hinweis von I. Henze einige Posts weiter oben. Zuletzt noch: Lohnt der ganze Aufriss überhaupt? Die Leistungsersparnis durch reduzierten Takt ließe sich schließlich auch durch geschickte Programmierung unter Ausnutzung der verschiedenen Stromsparmodi des Prozessors nutzen - Nutzung von Interrupts statt zyklischem Pollen etc. Das Datenblatt des Mega128 verrät ab Seite 42 einiges interessantes. *) http://www1.odn.ne.jp/~aal22410/pdf/PDF005.pdf
Ja, das mit einem 4060 hatte ich auch probiert. An sich ein nettes Teil, wahlweise als RC- oder Quarzoszillator zu betreiben und mit integriertem 14-Bit Binärteiler (die Stufen Q3 bis Q13 sind jeweils herausgeführt). Erschreckend für mich war dann aber doch der recht hohe Stromverbrauch der ganzen Sache, der weit über dem lag, was ich beim AVR durch den verringerten Takt eingespart hätte. Kurz und gut, ich habe das Projekt "Externe Taktversorgung mit Taktumschaltung" schnell wieder fallen gelassen und bin nun mit einem Mega48 glücklich :-) Gruß Ingo
Bin auch der Meinung, dass das alles Heck-Meck ist. Mit der Geschwindigkeit laufen lassen, die nötig ist, bleibt dennoch Zeit (z.B. weil im Batteriebetrieb weniger zu tun ist) schlafen legen, dass spart mehr Strom als mit reduzierte Taktrate im Kreis springen lassen.
Wie genau soll der Takt denn sein? Eine einfach Lösung wäre: Externer RC-Oszilator zu verwenden, und wenn der Takt schneller laufen soll (bei Netzbetrieb) über einen Portpin einen zweiten Widerstand dazuschalten. Also Widerstand und Kondensator für Frequenz bei Batteriebetrieb berechnen, dann einen zweiten Widerstand so berechnen, dass bei Parallelschaltung der beiden Widerstände der Oszilator mit der gewünschten höheren Frequenz schwingt.
Wenns nur aufs Stromsparen ankommt, z.B. den Mega8 mit 32kHz Quarz betreiben + internen 8MHz RC-Oszillator. Und dann beim Batteriebetrieb immer zyklisch schlafen legen und durch die 32kHz aufwecken lassen (T2 Interrupt). Die Stromersparnis ist die gleiche, egal ob man alles langsam macht oder schnell auf einen Ruck und dann den Rest der Zeit schlafen geht. Peter
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.