Hi Leute, ich suche einen extrem sparsamen uC mit Timer Funktion. In meiner Anwendung muss der Timer gestartet und gestoppt werden können. Das Resultat kann ich notfalls auch über ein paar io-Pinne übertragen. Es muss auch nicht ein uC sein, vielleicht gibt es ja sowas wie einen Timer-Baustein bzw Timer-Slave, das würde ausreichen. Nur muss dieser sehr wenig Strom verbrauchen. Für die Zeit brauche ich eine Auflösung von 1ms. Mein Ansatz ist bis dato einen uC mit RC-Oszillator zu nehmen. Kennt dir da welche ? Vielen Dank schon mal für eure Hilfe.
...und zum Thema: Sven schrieb: > In meiner > Anwendung muss der Timer gestartet und gestoppt werden können. ...hat was zu bedeuten? Wäre schön, wenn du das mehr detaillierst...
Das hat zu bedeuten das der Haupt-uC einen Pin HIGH bzw LOW setzen kann, damit der uC mit RC Oszillator die Timer Funktion startet bzw stoppt.
Sven schrieb: > Das hat zu bedeuten das der Haupt-uC einen Pin HIGH bzw LOW setzen > kann, > damit der uC mit RC Oszillator die Timer Funktion startet bzw stoppt. Und was sind deine Anforderungen and "sparsam"?
Sven schrieb: > Kennt dir da welche ? Im Prinzip jeden und keinen, da du KEIN Wort üer 'wie sparsam' (wieviel Mikroampere), kein Wort über 'wie genau' (RC ist ja wohl nicht besonders genau), kein Wort über die Art der Zeiteinstellung (Poti? fest programmiert?) genannt hast. Vielleicht tut es ein CD4536.
Der Haut-uC startet die Zeitmessung des RC-Oszillators. Danach muss der Haupt-uC schlafen gehen. Der uC mit RC-Oszillator muss nun im Stande sein mit einem 100uF Stützkondensator eine Zeit von maximal 200ms zu messen. Vielleicht ist sogar ein Frequenzzähler und ein Keramik-Oszillator besser geeignet. Genau darüber wollte ich hier Diskutieren.
Eine Logik kann ich bisher nicht erkennen. Tipp: Beschreibe das Ziel, nicht deinen Weg, auf dem du in die Irre gelaufen bist.
Der ATmega48A braucht mit 32kHz Uhrenquarz <1µA. Das Compareregister auf 32 eingestellt ergibt 1,007ms.
Sven schrieb: > Der Haut-uC startet die Zeitmessung des RC-Oszillators. Danach muss der > Haupt-uC schlafen gehen. Normalerweise macht das der "Haupt-µC" mit einem eigenen Timer. Ist da keiner mehr frei? Welchen µC benutzt du bis jetzt?
Sven schrieb: > Der Haut-uC startet die Zeitmessung des RC-Oszillators. Danach muss der > Haupt-uC schlafen gehen. Der uC mit RC-Oszillator muss nun im Stande > sein mit einem 100uF Stützkondensator eine Zeit von maximal 200ms zu > messen. Unsinn. Beschreibe das Gesamtproblem und nicht deine vermeintliche Lösung, siehe Netiquette. Denn so wie du das beschreibst, kann das fast jeder aktuelle uC selber mit einem seiner Timmer und passendem Sleep Mode machen, da braucht es keinen 2. uC.
Ok. Also dann nochmal anders. Der uC wird mit Strom versorgt macht seine Aufgabe und nach so ca. 30ms ist die Stromzufuhr weg. Es ist kein Strom mehr vorhanden. Nach maximal 200ms bekommt der uC wieder Strom und möchte wissen wie lange er aus war. In der Zeit wo der uC mit Strom versorgt wird kann er einen 47uF Kondensator aufladen, der führ die Zeitmessung (maximal 200ms) zur Verfügung steht. Den uC über diese Zeit am Leben zu lassen ist nicht das Ziel, sondern irgendeine Schaltung zu realisieren die maximal 200ms die Zeit messen kann. Geht diese Zeitschaltung nach 200ms aus (weil 47uF Kondensator leer) dann interessiert der Zeitwert nicht mehr. Ich dachte da an einen Keramik-Oszillator und einen Frequenzzähler. Es muss halt sicher gestellt sein das diese beiden Bauteile mit einem 47uF Stützkondensator mindestens 200ms lang die Zeit messen können.
Sven schrieb: > Ok. Also dann nochmal anders. > > Der uC wird mit Strom versorgt macht seine Aufgabe und nach so ca. 30ms > ist die Stromzufuhr weg. Es ist kein Strom mehr vorhanden. Und warum? > Nach maximal > 200ms bekommt der uC wieder Strom und möchte wissen wie lange er aus > war. Dann muss er 200ms im Sleep Mode aushalten. Da kann man einen Timer laufen lassen, das braucht nur ein paar uA. > In der Zeit wo der uC mit Strom versorgt wird kann er einen 47uF > Kondensator aufladen, der führ die Zeitmessung (maximal 200ms) zur > Verfügung steht. > Den uC über diese Zeit am Leben zu lassen ist nicht das Ziel, Warum nicht? Heutige Mikrocontroller können das spielend. Wenn wir mal mit 5uA rechnen sind das C = I * t / U -> U = I * t / C = 5uA * 200ms / 47uF ~ 20mV D.h. ein Controller mit 5uA Stromaufnahme entlädt den vollen 47uF Kondensator in 200ms um 20mV. Das ist praktisch gar nichts, selbst 200mV wären unkritisch. Und während dieser Zeit läuf ein Timer im uC weiter und damit weiß er, wie lange der Strom weg war. > Ich dachte da an einen Keramik-Oszillator und einen Frequenzzähler. Es > muss halt sicher gestellt sein das diese beiden Bauteile mit einem 47uF > Stützkondensator mindestens 200ms lang die Zeit messen können. Dazu reicht ein 74HC4060 mit Keramikoszillator. Dann muss man den aber noch auslesen. Eine Echtzeituhr mit Uhrenquarz und I2C ist da einfacher handhabbar. Aber auch die ist überflüssig, siehe oben.
Der uC ist ein MSP430. Wenn ich diesen im Low Power Modus versetze benötigt er 100uA. Die Taktfrequenz des DCOs kann ich maximal auf 1MHz runter setzen. Leider kenne ich keine Möglichkeit die Stromaufnahme weiter zu reduzieren und den Timer im MSP weiter laufen zu lassen.
Sven schrieb: > Der Haut-uC startet die Zeitmessung des RC-Oszillators. Danach muss der > Haupt-uC schlafen gehen. Der uC mit RC-Oszillator muss nun im Stande > sein mit einem 100uF Stützkondensator eine Zeit von maximal 200ms zu > messen. Immer noch das Problem, welches du mit einer Kondensatorentladung am A/D-Wandler lösen wolltest. Erstmal Grundlagen rechnen: 100uF für 0.2s erlauben 500uA wenn die Spannung um 1V abfallen darf. Das ist üppig. Ein CD4536 benötigt 1/100 davon. Schalte den CD4536 mit RC Kombination als 1kHz (oder besser 10kHz) Oszillator. So lange deine Stromversorgung steht, bleibt er RESETgesetzt und INHibited. Fällt die Versorgung aus, wird INHibit freigegeben und der IC zählt die Taktimpulse, in 2ms bis 2000 also bei 10kHz. Kommt die Spannung wieder, braucht der Haupt-uC 3 Pins: Ein Eingang überwacht DECODE OUT, einer OUT (Taktsignal) ein Ausgang taktet INHibit. Beim Wiederkommen der Versogung wir INHibit so lange aktiviert, bis DECODE OUT einen Überlauf meldet, die noch fehlenden Impulse an OUT werden gezählt. Zählt man 48, dauerte die Pause 200ms, zählt man 1048, dauerte sie 100ms, zählt man noch fehlende 2038, dauertesie 1ms. Statt 100uF tun es also auch 1uF, oder die Zeit darf bei 100uF bis 20s betragen.
Sven schrieb: > Der uC ist ein MSP430. Welcher Typ genau? > Wenn ich diesen im Low Power Modus versetze > benötigt er 100uA. Da geht sicher noch deutlich weniger, denn TI bewirbt die u.a. als Ultra Low Power uC. Vermutlich hast du noch andere Dinge nicht beachtet und hast deswegen eine so hohe Stromaufnahme. > Die Taktfrequenz des DCOs kann ich maximal auf 1MHz > runter setzen. Leider kenne ich keine Möglichkeit die Stromaufnahme > weiter zu reduzieren und den Timer im MSP weiter laufen zu lassen. Das kann man ändern.
Sven schrieb: > Der uC ist ein MSP430. Was für einer? Und dort ist kein Timer frei, der im sleep läuft? Notfalls externer Takt? Btw: ein Uhrenbaustein könnte da noch einfacher sein, weil er die absolute Zeit hat. Sonst gibt es oft Schwierigkeiten, kurzzeitig spg. weg und wieder da zu händeln.
Es ist ein MSP430FR5992. Wenn man diesen uC in den LPM3 versetzt, zieht er laut Datenblatt nur 5uA. Aber kann man dann noch einen Timer laufen lassen, der mit einer Genauigkeit von 1ms arbeitet?
Sven schrieb: > Der uC ist ein MSP430. Wenn ich diesen im Low Power Modus versetze > benötigt er 100uA. Schau mal in den User Guide deiner MSP430 Sub-Familie, dort findest du ein Abschnitt Operation Modes mit den Sleep Mode. Für dich reicht fast schon LPM0, aber auch LPM2 sollte drin sein.
Sven schrieb: > Es ist ein MSP430FR5992. Wenn man diesen uC in den LPM3 versetzt, zieht > er laut Datenblatt nur 5uA. Aber kann man dann noch einen Timer laufen > lassen, der mit einer Genauigkeit von 1ms arbeitet? Der Timer ist so genau wie die Taktquelle. Im LPM3 ist das ein 32,768kHz Uhrenquarz, der hat im die 10ppm Frequenzfehler, das sind 2us Fehler auf 200ms!
Erstmal vielen Dank für eure Tipps. Ich bin Informatiker und habe mit Elektrotechnik noch nicht viel zu tun gehabt. Daher entschuldigt meine Unkenntnis. Das heißt ich kann den uC in den LPM3 Mode versetzen und trotzdem noch den internen Timer weiter laufen lassen, wenn ich einen Quarz an den uC hänge? Geht auch ein Keramik Oszillator damit die Einschwingzeit reduziert wird?
Sven schrieb: > Das heißt ich kann den uC in den LPM3 Mode versetzen und trotzdem noch > den internen Timer weiter laufen lassen, wenn ich einen Quarz an den uC > hänge? JA! > Geht auch ein Keramik Oszillator damit die Einschwingzeit reduziert > wird? Du bist schon wieder Informatiker! Der Quarz am ACLK läuft DAUERHAFT, da gibt es keine Einschwingzeit.
Wenn der uC aber nach z.b 2 Sekunden aus geht, muss er auch wieder gestartet werden bzw. der Quarz muss sich ja einschwingen.
Sven schrieb: > Wenn der uC aber nach z.b 2 Sekunden aus geht, muss er auch wieder > gestartet werden bzw. der Quarz muss sich ja einschwingen. Das eben dürfte ein Irrtum sein. In der Regel gibt es einen Schlaf Modus, wo "nur" der RealTimeCounter weiter läuft. Und ebenso üblich ist dieser Counter/Oszillator auf niedrigen Stromverbrauch optimiert. So ist es sicherlich auch bei deinem MSP430
Nimm nicht ACLK, sondern VLOCLK; das startet sofort. Ist zwar ungenau, aber du kannst es vor oder nach dem Stromausfall mit einem besseren Clock-Signal kalibrieren.
Arduino Fanboy D. schrieb: > Das eben dürfte ein Irrtum sein. Nein. Wie oben beschrieben, gibt es den Fall, dass der Strom für lange Zeit komplett weg ist, dann für 30 ms da ist, und dann bis zu 200 ms gemessen werden sollen.
:
Bearbeitet durch User
Clemens L. schrieb: > Arduino Fanboy D. schrieb: >> Das eben dürfte ein Irrtum sein. > > Nein. Wie oben beschrieben, gibt es den Fall, dass der Strom für lange > Zeit komplett weg ist, dann für 30 ms da ist, und dann bis zu 200 ms > gemessen werden sollen. Und ein paar Beiträge weiter ging es dann darum, daß der MSP in der spannungslosen Phase mit laufendem Timer in den Schlaf Modus gehen soll, und aufgrund seines geringen Stromverbrauchs in dieser Zeit von einem Kondensator versorgt werden kann.
Clemens L. schrieb: > dann für 30 ms da ist, und dann bis zu 200 ms > gemessen werden sollen. Da mußt Du wohl den praktischen Sinn dahinter erklären. Ich würde da einfach die 30ms als zu kurz deklarieren, d.h. die Spannung ist nie richtig da gewesen. Das sind ja nur 3 Netzhalbwellen. In der Praxis nimmt man Resetzeiten von >=200ms, damit sich Netzteil und CPU stabilisieren können. Ein 32kHz Quarz braucht typisch >1s zum Hochlaufen. Oder man läßt den MC im Power-Save durchlaufen. Mit einem Goldkap 1F kann man z.B. einen ATmega48A >3 Monate als RTC laufen lassen. Über den Pin-Change-Interrupt wacht er innerhalb 6+4CK (= 1,25µs) mit dem internen 8MHz RC-Oszillator auf.
:
Bearbeitet durch User
setzt immer voraus, dass der MSP weiß, wann der Saft weg ist um dann schnell genug in den LPMx Modus zu kommen und den Timer zu starten -> etwas HW Kniffelei notwendig.
Sag mal, bist du in der gleichen Klasse/im gleichen Kurs wie Kurt? Der hat nämlich rein zufällig das selbe Problem. Darum auch hier der Link zu meiner Antwort im anderen Thread. Beitrag "Re: Entladevorgang eines Kondensators messen" Wenn das tatsächlich eine Schulaufgabe ist, dann spiele bitte mit offenen Karten. Denn oft sind Schulaufgaben einfach dämlich gestellt. Da könnt ihr dann nix für.
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.