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...
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.
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.
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.
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.
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.