Hallo Programmierer,
ich muss nochmal nerven :-)
Ich habe eine Uhr auf einem ATtiny261 programmiert. Das grobe Programm
sieht so aus (ohne Unterprogramme,Variablen und loader):
Das ganze funktioniert auch sehr gut. Im Programm wird die Zeit nur
angezeigt wenn der Taster (hardware entprellt) gedrückt wird.
Wird kein Taster gedrück also nur gerechnet verbraucht der Chip 0,2mA
bei 3V (Batterie CR2032)!
Der Takt kommt von einem 32,768kHz (low frequency mode)Quarz welcher mit
16&6pF Kondensatoren zu Masse geschaltet ist.
Da das eine Armbanduhr Marke Tokyoflash werden soll muss ich mit dem
Strom noch runter...
Ich multiplexe in dem Programm das klapp genauso gut wie mit einem Takt
bei 2MHz man sieht keinen unterschied (Zeiten über absolute Zeit delay
angegeben).
Nun die FRAGE? Hat jemand eine Idee wie ich hier sinnvoll Strom sparen
kann???
Stromsparfunktion wie IDLE, Power-down usw. werden wohl keinen Erfolg
bringen da ich ständig den chip schlafen schicke und danach wieder
aufwecke?
Auch eine Vorteiler zu nutzen über Fuse bits um die Frquenz auf 4096Hz
zu reduzieren wird wohl nichts bringen...Bei 2MHz hatte ich 0,9mA!?
Weiß jemand wie ich vorgehen kann???
Wie macht das CASIO mit ihren Digitaluhren nur...deren Batterien halt
viele Jahre... vedammte Japanische Genies :-) XD
Danke :-) schomal im Vorraus!!!
Chris Webber schrieb:> Stromsparfunktion wie IDLE, Power-down usw. werden wohl keinen Erfolg> bringen da ich ständig den chip schlafen schicke und danach wieder> aufwecke?
er wird aber zu 99.99% schlafen und 0.01% wach sein, warum sollte man
das also kein Strom sparen?
Chris Webber schrieb:> Hat jemand eine Idee wie ich hier sinnvoll Strom sparen> kann???
Ja, einen ATmega48 nehmen.
Nur die ATmega kennen den Power-Save Modus, d.h. T2 rennt mit dem
Uhrenquarz und verbrauchen dann <1µA.
Die ATtiny können zwar auch 32kHz, aber nur als CPU-Takt und verbrauchen
daher mindestens das 100-fache.
Die Sleep modes musst du schon nutzen! Du kannst innerhalb von wenigen
Takten wieder aufwachen, jenachdem welchen Sleep-Mode du verwendest und
welche Taktquellen du dran hast.
Das bringt schon einiges!
meckerziege schrieb:> Das bringt schon einiges!
Fast nichts bzw. das Gegenteil.
Ich hab mal Versuche mit dem ATtiny25 an 32kHz gemacht.
Der Stromverbrauch im Active mit gesperrten Interrupts (Polling-Loop auf
den Timer) war geringer, als im Idle mit Interrupts enabled. Vermutlich
verbraucht die Interruptlogik bei kleinem Takt den meisten Strom.
Erst hatte ich die _delay_ms in Verdacht, das sind wahre Stromfresser.
Aber ich denke, an PB2 und PB3 hast du die Taster, dann werden diese
Delays nur selten aufgerufen :-(
Sonst stimme ich mit den Vorrednern überein -> anderen Prozessor.
Die Japaner nehmen ASICs, da tun ein paar hundert Transistoren das,
wofür im Atmel zigtausend werkeln. Kannst Dich ja mal mit FPGAs
beschäftigen :-)
Peter Dannegger schrieb:> Nur die ATmega kennen den Power-Save Modus, d.h. T2 rennt mit dem> Uhrenquarz und verbrauchen dann <1µA.>> Die ATtiny können zwar auch 32kHz, aber nur als CPU-Takt und verbrauchen> daher mindestens das 100-fache.
Dieser Schwachsinn wurde doch nun schon mehrfach widerlegt.
Was daran stimmt, ist einzig die Darstellung der Fähigkeiten der Megas.
Was daran nicht stimmt, ist die Darstellung der Fähigkeiten der Tinys.
Nehmen wir als Beispiel einfach mal Tiny2313A/4313, weil ich das
Datenblatt gerade offen habe.
Die beherrschen zwar tatsächlich nichts, was dem PowerSave-Modus der
Megas vergleichbar wäre, aber sie beherrschen den Idle-Modus. Die
Abhängigkeit des Stromverbrauchs vom Takt im Idle-Modus ist in Diagramm
23-6 auf Seite 209 des Datenblatts zu finden, leider nur bis herunter
auf 100kHz, da es sich aber um hübsche Geraden handelt und es keinen
physikalischen Grund gibt, der gegen eine Extrapolation in Richtung
geringerer Frequenzen spricht, kann man sehr leicht ermitteln, daß die
Teile bei 32kHz und 5V wohl so um 5µA ziehen und bei 3.3V was um die
2,5µA.
Das gilt aber natürlich nur für die Zeit, in der der Controller garnix
zu tun hat. Es bleibt der Zeitraum zu betrachten, in dem der µC
tatsächlich etwas tun muß. Der ist natürlich bei gleicher Rechenaufgabe
bei einem mit 32kHz betriebenen Tiny deutlich länger als bei einem mit
8Mhz betriebenen Mega (und dementsprechend kann der Tiny nur weniger
Zeit im Idle verbringen als der Mega im PowerDown), dafür ist aber auch
der Stromverbrauch des Tiny in der "aktiven" Zeit ganz erheblich
geringer.
Für den Tiny ist das entsprechende Diagramm 23-1 auf Seite 207 des DB zu
finden. Wieder schicke Geraden, wieder ist bei 100kHz nach unten Schluß.
Die Extrapolation ergibt ca. 50µA bei 5V und ca. 25µA bei 3.3V.
Schauen wir uns nun mal das entsprechende Diagramm beim von dir
empfohlenen Mega48 an (Diagramm 30-2 auf Seite 316) und stellen wir
fest, daß der auf 8MHz bei 5V ca 5mA zieht und bei 3.3V immer noch 3mA.
Ein Zyklus besteht aus zwei Phasen, der aktiven und der im bestmöglichen
Schlafmodus. Die Zeit, die der µC im aktiven Modus verbringen muß,
ergibt sich aus der Zahl der Takte für die Aufgabe, die er zu erledigen
hat geteilt durch die Taktfrequenz. Nehmen wir nun mal an, der Zyklus
wäre 100Hz (Refresh eines multiplexed Display) und es wären
durchschnittlich etwa 100 Takte Arbeit bei jedem Zyklus zu erledigen.
Das sind beides meiner Meinung nach durchaus realistische Werte, aber du
kannst gern begründete Einwände dagegen einlegen.
Es ergibt sich folgendes (5V-Fall):
Zykluszeit = 10ms
aktive Zeit(M48) 100/8000000 = 12.5µs
aktive Zeit(T2313A) 100/32768 = 3.05ms
PowerDown Zeit(M48) 10ms-12.5µs = 9.9875ms
Idle Zeit(T2313A) 10ms-3.05ms = 6.95ms
Stromaufnahme akt.(M48) 12.5µs*5mA = 62.5nAs
Stromaufnahme akt.(T2313A) 3.05ms*50µA = 152.5nAs
Stromaufnahme PowDn (M48) 9.9875ms*0.7µA = 6.99nAs
Stromaufnahme Idle (T2313A) 6.95ms*5µA = 34.75nAs
So, und nun addieren wir das mal
Stromaufnahme pro Zyklus:
Mega48 62.5nAs+ 6.99nAs = 69.5 nAs
Tiny2313A 152.5nAs+34.75nAs = 187.25 nAs
Wir sind also bei einer um den Faktor 2,7 höheren Energieaufnahme beim
Tiny. OK, das ist zwar einerseits wirklich merklich schlechter als beim
Mega, aber andererseits auch sehr weit entfernt von dem von dir
angegebene Horror-Faktor 100+.
Der ist schlicht erstunken und erlogen! Unkenntnis schließe ich hier
aus, du bist sicher genausogut wie ich durchaus in der Lage,
Datenblätter zu lesen. Warum also lügst du? Mußt du palettenweise alte
Megas verticken?
Dann gäbe es immerhin ein nachvollziehbares wirtschaftliches Interesse
und du wärst wohl durch die verrückte Rechtsprechung geschützt, die
Lügen in Werbeaussagen (in Grenzen) erlaubt.
Nach der ausführlichen Analyse von c-hater wollte ich mir den
Sachverhalt in der Praxis anschauen, bin aber etwas irritiert:
- im Datenblatt des 2313 finde ich keine Möglichkeit für einen 32
kiHz-Quarz
- bei einer Zykluszeit von 7.8 ms und 100 Takten messe ich bei einem
ATtiny461 28.8 uA, bei einem ATmega88 23.2 uA
Das stimmt nur schlecht mit c-haters Werten überein, mit der Aussage von
Peter Dannegger aber so was von überhaupt nicht.
Hat vielleicht sonst noch jemand konkrete Daten, oder einen Tipp, wo bei
mir ein typischer Fehler liegen könnte?
Tach ;)
sieh mal zu, ob Du mit 1.8Volt arbeiten kannst. Der Stromverbrauch sinkt
noch einmal gewaltig...
Da mir Mathe nicht so schön ist, bin ich auch gleich wieder weg hier -
viel erfolg/Spaß noch , Bis denn
Axelr.
Onko Donkey schrieb:> Da feilschen die Leutz um ein paar µA im Verbrauch ihres Designs> und> steigen anschließend nach (nicht) getaner Arbeit in ihr SUV.
Potzblitz - das ist mal ein gescheiter Beitrag.
Danke, CWO, das passt dann so ungefähr. Meine Werte beziehen sich, nach
c-haters Voraussetzung, auf 5.0 V.
Bleibt aber die Frage, woher Herr Dannegger den Faktor > 100 hat.
Hallo Leute,
es war nicht meine Absicht hier eine Hasstirade vom Zaun zu reißen...
ich werde einfach mal den einzig möglichen "power save mode" probieren,
den
IDLE. Glaube zwar nicht das der eine große Ersparnis bringt aber ein
Versuch
ist es Wert.
Danke an euch alle für die Hilfe. Es ist doch immer wieder schön das
einem
hier so gut geholfen wird :-) Danke!
200 uA sind bei 3.0 V sicher zu viel, bei mittlerer Arbeitsphase sollte
man auf unter 50 uA kommen.
Und bitte interrupt-gesteuert, kein polling. Auch diese Aussage von
Herrn Dannegger ist falsch.
Und wir haben uns richtig verstanden, die 16/6 pF werden vom ATtiny261
bereitgestellt! ?
der alte Hanns schrieb:> 200 uA sind bei 3.0 V sicher zu viel, bei mittlerer Arbeitsphase sollte> man auf unter 50 uA kommen.
Da wird wohl noch der Brown-Out, der ADC oder der Analog-Comparator an
sein. Die müssen alle aus, wenn man Strom sparen will. Die analoge
Sektion frisst Strom, auch ohne Takt, insbesondere die Bandgap-Referenz.
Hallo,
wie kommen Sie auf die Stromwerte? Nachgemessen oder nur Theorie?
Ich habe 32kHz an Takt und das würde heißen wenn ich den Vorteile über
die Fuse Bits aktiviere bekommen ich 4096Hz. Somit würde ich nochmal
sparen?!
Ich habe die 16pF und die 6pF pysikalisch an den Chip gebaut zusammen
mit
Quarz (32,768kHz).
Das Programm hat nur den einen Interrupt der die Zeit hochrechnet.
Zudem nur 1 Hauptschleife, der Rest wurde über ein array und mehrere
IF THAN ELSE Abfragen realisiert.
Solange die IF THAN ELSE- Zweige nich arbeiten sollte sie auch keine
Energie
fressen...
>>Und wir haben uns richtig verstanden, die 16/6 pF werden vom ATtiny261>>bereitgestellt! ?<<
Ja sind dran!?
Hallo,
>Da wird wohl noch der Brown-Out, der ADC oder der Analog-Comparator an>sein. Die müssen alle aus, wenn man Strom sparen will. Die analoge>Sektion frisst Strom, auch ohne Takt, insbesondere die Bandgap-Referenz.
wie schalte ich diese ab? Fuse Bits?
Sollten doch eigentlich aus sein da ich sie aktiviert habe !?
-GRuß
Es handelt sich um gemessene Werte.
ldi tmp0,(1<<PRUSI)+(1<<PRTIM0)+(1<<PRADC)
out PRR,tmp0
ldi tmp0,(1<<ACD)
out ACSRA,tmp0
BOD ist standardmäßig aus.
The Low-frequency Crystal Oscillator provides an internal load
capacitance, see Table 6-10 at each TOSC pin... eben diese 16&6 pF, man
kann (und sollte) also den Quarz allein anschließen.
Zwei Nachträge:
- Sie arbeiten mit dem Timer0, also müssen Sie für das PRR PRTIM1
verwenden.
- Wird es bei Verwendung des Vorteilers /8 zeitlich nicht zu knapp beim
Multiplexing?
Hallo,
>Wird es bei Verwendung des Vorteilers /8 zeitlich nicht zu knapp beim>Multiplexing?
das denke ich auch und habe mich dazu entschlossen zuerst dem Vorschlag
von
Ihnen zu verfolgen und diese Zusatzfunktionen abzuschalten.
>ldi tmp0,(1<<PRUSI)+(1<<PRTIM0)+(1<<PRADC)>out PRR,tmp0>ldi tmp0,(1<<ACD)>out ACSRA,tmp0
das ist zwar kein C aber die Register sollten den gleichen Namen haben.
>eben diese 16&6 pF, man kann (und sollte) also den Quarz allein anschließen.
Habe gelesen dass, der Quarz unter umständen mit den falschen oder ohne
Kondenstoren nicht mit schwingen beginnt...
>das ist zwar kein C
Meine Kenntnisse in C sind gering, ich werde mich hüten, darin
Ratschläge geben zu wollen; aber so ganz anders wird's wohl nicht
aussehen.
>nicht mit schwingen beginnt
Das merkt man dann ja sehr schnell, ich habe es über einige Jahre und
Chargen hinweg noch nie erlebt. Und dass der Quarz nicht exakt mit
seiner vorgegebenen Lastkapazität betrieben wird - je nun.
Andererseits sind 0.5 uA immerhin 2 % Ersparnis.
Chris Webber schrieb:> Da das eine Armbanduhr Marke Tokyoflash werden soll...
nur mal so aus Interesse (und nicht zum Thema gehörend), welche soll es
denn werden?
Abschließend:
Mit Zeitinterrupt von 1 s messe ich bei 3.0 V:
ATtiny461-20PU (date-code 0711): 12.5 uA
ATtiny461A-PU (date-code 1234): 10.0 uA
Das passt nun auch hervorragend zu dem Wert von CWO; ohne Anzeige hielte
also eine CR2032 gut zwei Jahre durch.
Und ich bezweifle, dass es
> Ja, einen ATmega48 nehmen.
damit wesentlich besser würde.
Peter Dannegger schrieb:> ... daher mindestens das 100-fache.
Ok, das ist so wohl nicht haltbar.
Peter Dannegger schrieb:> ...verbrauchen dann <1µA.
Diese Angabe stimmt aber wirklich (für den PA-Typ vom ATMega48).
Der Verbrauch würde beim ATMega48PA also nicht nur wesentlich sondern
erheblich gesenkt werden.
Nebenbei spart man sich dann die Hampelei mit dem erbärmlichen
32kHz-CPU-Takt. Der Takt ist stattdessen frei bis zu 12MHz (per OSCCAL)
wählbar.
-> Der ATtiny461A wäre für mich (nur in diesem Fall) 2. Wahl.
Bei der Schlussfolgerung stimme ich (zögernd) zu, jedoch:
- der Fragesteller ging von einem ATtiny261 aus
- bei 10 uA für die CPU sind wir wohl schon in einem Bereich, wo der
Verbrauch der Anzeige relevant wird (wie sieht diese eigentlich aus?)
- braucht man 12 MHz für eine einfache Uhrenanwendung?
...viel mehr würde mich interessieren: Wie bekommst du das gehäuse in
der Qualität hin? Ziffernblatt? Und welches Design schwebt dir vor? ich
hab sowas auch noch auf dem Plan, aber mit alten Stäbchen-LED Anzeigen
aus 70er Jahre Taschenrechnern...
Klaus.
@der alte Hanns
Für den letztendlichen Betrieb reicht hier vermutlich ein 32kHz
CPU-Takt. Und wenn für die Anzeige außerdem z.B. zusätzlich 10µA nötig
wären, dann wäre der Vorteil durch einen ATmega48PA weniger bedeutend.
Aber allein bei der Entwicklung von nicht trivialen Code (häufiges
Debuggen/Programmieren) würde ich auf einen höheren Takt nur sehr sehr
ungern verzichten wollen.
Auf den ersten Blick erschien mir das Programm genau das, nämlich
trivial; aber wirklich schlau werde ich aus der Modellvielfalt auf der
Tokyoflash-Website nicht. Und damit wären wir wieder bei der Frage der
Anzeige.
Übrigens, und nur ganz am Rande, da Sie es ansprechen:
Das ist natürlich auch eine Frage von Programmierstil und -gewohnheit;
ich habe noch mit Lochkartenstapeln programmiert, die man beim Operator
abgeben musste, die Selbstbedienungsstation war dann ein lang ersehnter
Fortschritt. Eine Programmkorrektur hat man da mehrfach durchdacht
(Simulator war der eigene Kopf), bevor man mit seinem Stapel losgegangen
ist. Wie dem auch sein - tempi passati.
Da hatte ich es zu meiner Controller-Anfangszeit schon viel besser:
1. Controller-Quelltext am Commodore C64 ändern (auch ohne Simulator)
2. EProm 2716 brennen
3. Daten vom 2716 auf den Controller "MC68705P3" (mit integriertem
Eprom) brennen
4. Controller in Schaltung einstecken
5. testen
Nächster Versuch...
Alle 20 Versuche gab es eine Zwangspause: Es mussten die Eproms und
Controller gelöscht werden.
ATMegaForRTC schrieb:> ...würde ich auf einen höheren Takt nur sehr sehr> ungern verzichten wollen.
Ich wundere mich nun, wie ich bei der heutigen Technik über mangelnden
Komfort beim 32kHz-Takt jammern konnte.
c-hater schrieb:> da es sich aber um hübsche Geraden handelt und es keinen> physikalischen Grund gibt, der gegen eine Extrapolation in Richtung> geringerer Frequenzen spricht
Das wünscht sich mancher Halbleiterhersteller. Natürlich ist die Physik
nicht ganz so einfach gestrickt. Die Leckströme im Halbleiter sind
unabgängig vom Takt, d.h. der Gesamtstrom setzt sich aus einem
konstanten Anteil und einem taktproportionalen zusammen.
Extrapolation ist immer gefährlich, wenn man nicht alle Effekt im Blick
hat.
Der Physiker schrieb:> Das wünscht sich mancher Halbleiterhersteller. Natürlich ist die Physik> nicht ganz so einfach gestrickt. Die Leckströme im Halbleiter sind> unabgängig vom Takt, d.h. der Gesamtstrom setzt sich aus einem> konstanten Anteil und einem taktproportionalen zusammen.
Richtig. Daran liegt es wohl, daß die verlängerten Geraden in dem
Diagramm allesamt bei Takt 0 auf der Stromskala an Punkten knapp
oberhalb 0 enden, jedenfalls soweit man das bei der beschränkten
Darstellungsgenauigkeit des Diagramms erkennen kann...
D.h.: Die Leckstöme sind im Diagramm natürlich enthalten (alles andere
wäre ja auch sinnlos). Dein Einwand ist also schlicht gegenstandslos.
Hallo Leute,
@ Klaus R, der alte Hanns : Die uhr soll aus zwei 7-Segmenten bestehen.
Man kann wenn sie fertig ist von oben die Bauteile sehen. Die
Segmentanzeigen leuchten grün und orange Kingbright SA39-11 & 12.
Sieht vielleicht etwas komisch aus aber das dachte man von der Nixie
Armabnduhr auch bis sie Steve Wozniak auf einer Verleihung an hatte! So
soll sie übrings auch später aussehen, nur kleiner versteht sich....ich
will halt nur so eine kleine show einbauen wie bei den tokyoflash uhren.
Quasi ein Drehkreis, sodass alle äußeren Segment nacheienander leuchten,
mittelschnell... oder erst alle dann jede einzeln (Weihnachtlich)....
funktioniert auch alles schon....
Habe das ganze mal bei youtube rein gestellt....
"www.youtube.com/watch?v=UXfV7GzvIps&feature=youtu.be"
@all, momentan stört nur noch der Stromverbrauch... ich habe im Video
alledings einen ATTiny2313A mit einem 2,048MHz Quarz verwendet. Somit
habe ich mit Vorteiler 256000Hz Systemtakt, verbrauch etwa gleich wie
bei 32kHz 0,30mA.
Ich werde Morgen zu einem Vater fahre der eine Elektrowerkstatt und
Labormessgeräte hat(Oszi usw.)
Dort werde ich nochmal alles nachmessen und mich dann nochmal zu Wort
melden.....
Übrigens alles sehr interessant was ihr da schreibt... über vieles davon
hatte ich noch nie nachgedacht... wäre mir auch nie aufgefallen :-)
Danke
ok, nachgemessen aber alles stimmt.
Ich verstehe nicht wieso ich nicht wie ihr das hier schreibt im
µA-Bereich
liege!?
Was mache ich den anders. Habe übrigens alle nicht benötigeten
Funktionen
wie watchdog, analog comperator, brownout detector usw. abgeschaltet
ohne
Erfolg... zudem habe ich an einem neuen ATtiny 2313 mal gemessen dieser
hat
auch schon 0,5mA ohne das je ein Programm drauf war...quasi ein
werksneuer
Chip.
Im Datenblatt seht auch bis max. 50µA....
Ich glaube langsam das ist alles papalap von wegen µA verbrauch...
Junger Freund, von 'papperlapapp' kann keine Rede sein. Wenn Sie bei 32
kiHz und 3.0 V nicht unter 20 uA kommen, ist das ihr Problem. Ich
hoffe, Sie arbeiten nicht so nachlässig wie Sie hier schreiben.
Aber noch ein Tipp: offene Eingänge, meist erkennbar an ziemlich
erratischer Stromaufnahme. Also entweder als Ausgang schalten oder als
Eingang mit pullup.
hallo,
ja das war doch nur im Spaß mit dem "papalap" ist auch egal wie man das
schreibt.... wichtig ist was gemeint ist :-)
Aber kein Grund so grantig zu sein :-)
Nein offene Eingänge sind es nicht. Habe diese im Hauptprogramm wo
nichts getan wir alle mit "pull-up" versehen aber ohne Erfolg.
Es müsste einen Chip geben welcher so klein wie ein "TinY2313" ist aber
im
Standby oder Power down Mode den ext. Oszillator und einen Timer weiter
in
Betrieb hält so wie manche ATmega Chips die mit einem 32kHz Quarz.
Naja der IDLE Mode reicht nicht. Nur im Standby Mode komme ich auf 60µA.
Allerdings läuft dann der Timer nicht mehr.
Naja ok. Scheinbar kann hier keiner helfen :-| ....
Chris Webber schrieb:> Es müsste einen Chip geben welcher so klein wie ein "TinY2313" ist aber> im>> Standby oder Power down Mode den ext. Oszillator und einen Timer weiter> in>> Betrieb hält so wie manche ATmega Chips die mit einem 32kHz Quarz.
Es gibt sehr kleine ATMEGAs, nämlich im MLF32-Gehäuse. 5mm x 5mm.
GGGGGast schrieb:> Chris Webber schrieb:>> Es müsste einen Chip geben welcher so klein wie ein "TinY2313" ist aber>> im>>>> Standby oder Power down Mode den ext. Oszillator und einen Timer weiter>> in>>>> Betrieb hält so wie manche ATmega Chips die mit einem 32kHz Quarz.>> Es gibt sehr kleine ATMEGAs, nämlich die 48PA...328PA im MLF32-Gehäuse. 5mm x
5mm.
> Scheinbar kann hier keiner helfen
Wenn Sie den Unterschied zwischen scheinbar und anscheinend kennten,
wüssten Sie, dass Ersteres eine böse Unterstellung ist. Um zu zeigen,
dass Letzteres nur an Ihnen liegt, will ich's nochmals versuchen:
Mit welchem Controller wollen Sie arbeiten? Am Anfang stand 261, nun
scheint es der 2313 zu sein. Für den größeren Bruder des 261, den 461
bzw. 461A, habe ich hier, wie schon mehrfach geschrieben, ein
Minimalprogramm laufen, das bei 32 kiHz und 3.0 V nur 10 uA benötigt,
und diese Angabe wird von CWO bestätigt; das Programm ist zwar in
Assembler, sollte aber auch von Ihnen lesbar sein. Mit einer CR2032
kommt man damit auf über zwei Jahre Betrieb. Wenn Ihnen aber für Ihr
Gesamtprogramm ein Takt von 32 kiHz nicht reicht, wird wohl nur noch ein
ATmega in Frage kommen.
Einen 2313A habe ich auch hier, müsste mir aber erstmal die Verhältnisse
bei diesem näher anschauen.
Wie wichtig ist überhaupt der Verbrauch der CPU? Dazu müssten Sie sagen,
wieviel Strom die Anzeige, evtl. über eine sinnvolle Zeitspanne
gemittelt, benötigt.
Hallo,
@GGGGGast: Danke, MLF32-Gehäuse werde ich nachschauen.
@der alte Hanns:
>Wenn Sie den Unterschied zwischen scheinbar und anscheinend kennten,>wüssten Sie, dass Ersteres eine böse Unterstellung ist.
OK, nicht immer alles auf die Goldwaage legen! Keep calm :-)
Ich kann ihre Messwerte von 10µA jedenfalls nicht nachmessen. Ich
habe alle Analogfunktionen aus, Timer1 aus und benuze nur timer0 und
einen
Interrupt. Am Progamm liegt es meiner Meinung nach nicht. Ob ich ihr
Programm lesen kann weis ich nicht da ich mit Assembler noch nichts
zu tun hatte.
Was haben sie genau getan damit sie auf den Wert kommen?
Also was haben Sie im Programm abgeschaltet und was über die Fuse Bits?
Alle anderen Anbauten am Chip außer dem Quarz und den Kondenstoren
brauchen keinen Strom wenn sie abgeschaltet sind. Und sie werden wenn
das Projekt fertig ist zu 97% aus sein.
GRuß Chris
Chris Webber, das ist schon mindestens der dritte Thread mit diesem
Thema von Dir. In jedem Thread wurde Dir mitgeteilt, wie du auf 1µA
Verbrauch kommen kannst und dass der ATMega48 um nichts größer ist als
der von dir gewünschte Controller. In Deinen Antworten sieht es auch so
aus, dass Du das verstanden hast. Offenbar ist das nicht der Fall.
Ich gehe davon aus, dass Du das Ganze ernst meinst. Die Ursache liegt
möglicherweise in der Kommunikation. Bitte beschreibe das von Dir
Durchgeführte für uns einmal ganz genau (reproduzierbar!).
Teile uns bitte einfach mal folgendes mit:
1. den vollständigen Quelltext
2. die drei FUSE-Werte
3. die vollständige Controller-Aufschrift
4. den gemessenen Verbrauch
Nachfolgend das Assemblerprogramm. An den ATtiny461A wurde nur der 32
kiHz-Quarz an XTAL1&2 angeschlossen. Bei den Fuses wurde lediglich das
low-byte geändert von $62 auf $E4. Stromaufnahme 10.0 uA bei 3.0 V.
(Im Übrigen kann ich dem vorigen Beitrag nur zustimmen)
an ATMegaForRTC
Es scheint so, als wäre der Controllertyp derzeit nicht das
vordringlichste Problem des Fragestellers.
Und was das
> Keep calm
betrifft: I'll try my very best!
Ich gehe einmal davon aus, dass keine der beiden Tasten gedrückt war.
Das Hauptproblem (mehr als 300µA !!!) läge dann nicht beim Controller
oder beim Programm. Bei den Fuse-Werten (32KHz Quarz und 1er-Vorteiler)
kann ein ATTiny261A nicht mehr etwa 50µA verbrauchen. Der Strom muss
also durch die Beschaltung verbraucht werden (externe Pullup's,
'fließende' Eingänge, ...).
Könntest Du daher auch noch mal die Schaltung posten?
Ach ja, evtl. auch noch die Betriebsspannung?
Hallo,
@IBT:
> WDTCR |= ((0<<WDIE)&&(0<<WDE)); // Watchdog OFF> && oder & ist hier und anderswo die Frage (Shakespeare).
Schreib bitte einen vernümpftigen Satz. Das mache andere hier auch.
So ein angemache macht mich sehr wütend.
@Rest
ich würde den IDLE Mode gerne nochmal probieren aber ich habe seit dem
letzten mal vergessen wie ich den aktiviert habe.
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode();
Diese Syntax kennt der tiny26 nicht.
Habe mein Aufzeichnungen verworfen :-(
weis noch einer wie das war?
> So ein angemache macht mich sehr wütend.
Ja und? Allein dein letzter Beitrag zeigt, dass du nichts aus diesem und
anderen Threads gelernt hast. Du bist und bleibst ein Ignorant.
Du wirst den Vorteil vom Idle-Mode im Moment kaum feststellen können.
Selbst wenn der Controller überhaupt nichts mehr brauchen würde, dann
würdest Du immer noch mindestens 250µA messen. Also nochmals: Die
primäre Ursache liegt in der Beschaltung: Irgendwelche Pins liegen auf
einen falschen Pegel und bewirken den hohen Stromfluss. Ohne Schaltplan
kommt man hier nicht weiter.
Chris Webber schrieb:> ... ich habe seit dem> letzten mal vergessen wie ich den aktiviert habe.
Den Satz hatte ich ja noch gar nicht voll wahrgenommen.
-> Ich bin nun raus.
Auch ich melde mich hier zum letzten Mal.
Allgemein : Ihnen gebricht es an der Methodik, Sie müssen lernen,
strukturiert und zielgerichtet zu arbeiten. Leider kann ein Forum wie
das unsere hierbei nur wenig Hilfestellung geben. Ein direkter Kontakt
mit einem Lehrer wäre sinnvoll (meinetwegen auch Trainer, Meister,
Coach, Mentor oder was auch immer).
Speziell, da Ihr Ziel die Armbanduhr ist (wenn ich es richtig
verstanden habe): Gehen Sie zurück auf LOS, fangen Sie ganz von vorn an;
Ihr 261A ohne jede Außenbeschaltung, nur der Quarz. Setzen Sie mein
Assembler-Minimalprogramm um in C, und verifizieren Sie die
Stromaufnahme von 10 uA, sagen wir maximal 15. Dann eine LED (mit
Widerstand) daran und im Sekundentakt blinken lassen, damit Sie sehen,
dass die Umsetzung korrekt war.
Brechen Sie Ihre bereits vorhandene Hard- und Software in sinnvolle
Einzelmodule herunter und hängen Sie diese Stück für Stück dran, immer
unter Kontrolle der Stromaufnahme.
Ich wünsche Ihnen gutes Gelingen.
@IBT:
Ignorant bist nur du! Bitte bleib sachlich. Wenn jemand normal fragt
kann man wohl eine normale Antwort geben und nicht gleich so dumm
daherreden wie der König der Profis.
Dann äußer dich vernümpftig und schreib wo ich deiner Meinung
nach mist inder Syntax gemacht habe.
Aber so wie ich das sehe hast du blos langeweile...das würde auch
erklären warum du alle andern Threads von mir gelesen hast...
Also bitte sachlich bleiben.
@ATMegaForRTC:
Kann ich nicht bestätigen. Selbst wenn ich alles am µC abklemme
änder sich am Verbrauch nichts.
Habe noch WM geschaut. Habe aber einen Plan erstell. Es ist nur ein
Skizze :-)
Die Schaltung wird mit 3V betrieben. Der Quarz ist natürlich mit Pin 8
verbunden und mit den 22p :-)
Wenn man mal nen Schreibfehler macht äußerst sich irgendwie jeder...
da geilen sich manche dran auf, gell?!
Meistens die welche sonst nicht viel hin bekommen...
...lasst bitte euer unvernünftigen Gasteinträge sein!
Aufgeilen, nein aber deine Schreibweise der Vernunft tat einfach weh.
Und noch mal langsam:
Du verwendest sehr oft &&, das steht für eine logische Verknüpfung - das
willst du an diesen Stellen nicht. Du willst nur ein & -> bitweise.
Weiters ist das Shiften von 0 begrenzt sinnvoll.
Hallo,
@fool:
bitte lese erst bevor du scheibst. Danke!!!!
Oben habe ich bereits geschriebe das es sich um ein Fehlerbehaftetes
Programm handelt da es das flalsche leider war. Sorry dumm von mir!
Ich wollte den Threads nicht noch mehr aufblähen und habe daher das
richtige nicht hoch geladen. Sorry mein Fehler.
Aber hier TCCR0B |= ((0<<CS02)|(1<<CS01)|(0<<CS00));
Du meintes die Striche...hättes du gleich geschrieben was dich stört
könnte
man sich auch hier mit dem eigentlichen Thema befassen.
Aber nein Hauptsache stören...
@ Thomas:
oh ja das ist mir jetzt mega peinlich... ich hatte fool gelesen sorry!
@foo:
naja bis auf die Energieaufnahme... keine Ahnung wo es da klemmt....
Handbuch:
"If the input buffer is enabled and the input signal is *left*
floating or has an analog signal level close to VCC/2, the input
buffer will use excessive power."
Im Schaltplan gibt es Pins die nicht verwendet werden und im Code sind
diese Pins als Eingang (DDR-Bit=0) ohne Pullup (PORT-Bit=0) eingestellt.
Daher 'excessive power'. Darauf wurde übrigens schon hingewiesen:
der alte Hanns schrieb:> offene EingängeATMegaForRTC schrieb:> 'fließende' Eingänge
Hast du auch verstanden warum das richtig ist?
Der Strich ist übrigens ein bitweises Oder.
In deinem Code:
ACSRA |= ((1<<ACD)&&(0<<ACBG)&&(0<<ACO)&&(0<<ACI)&&
(0<<ACIE)&&(0<<ACME)&&(0<<ACME)&&(0<<ACIS0)); //Analogteil
OFF
WDTCR |= ((0<<WDIE)&&(0<<WDE)); // Watchdog OFF
PRR |= ((1<<PRTIM1)&&(1<<PRUSI)&&(1<<PRADC)); //Power reduction
//register set
Timer1=OFF,
// USI=OFF, ADC=OFF
Wie gesagt sehr viele && - da kommt dann als Ergebnis logisch 1 oder 0
raus, und nicht das was du willst.
Lies doch http://www.mikrocontroller.net/articles/Bitmanipulation
Peter Dannegger schrieb:> - Taster gegen GND und internen Pullup an.
Den internen PullUp hat er bestimmt schon aktiviert für den Pin Nr. 3,
daher kommt auch der erhöhte Stromverbrauch.
Hallo,
ok das man nicht benötigte Eingänge beschalten muss wusste ich nicht!
Wäre ich auch nie drauf gekommen da Pins die nicht beschaltet sind ja
auch keine Energie zuiehen.
>AVCC, AGND müssen angeschlossen werden!
Wenn ich das mache steigt der Verbrauch enorm!
>Taster gegen GND und internen Pullup an.
also alle unbenutzten Pins an GND ohne Widerstand und dann Pullups an???
Klar wurde es hier erwähnt. Nur wie zu oft ohne Zusatzangaben
oder mal auszuschreiben was EXPLIZIT geeint ist.
Alos habe ich es falsch verstanden :-)
@ foo: ja habe ich. Ich habe 80% meines AVR-Wissens (außer C) aus den
Tutorials hier welche ich als sehr gut erachte. Ich habe zu Beginn
überall
Vergleichsoperanten rein gehauen statt Zuweisungsoperanten (Kopfhau).
Sichtwort Demaskierung! Normalerweise mache ich alles direkt über
Hex. unübersichtlich aber meine Art :-)
Chris Webber schrieb:> also alle unbenutzten Pins an GND ohne Widerstand und dann Pullups an???der alte Hanns schrieb:> Aber noch ein Tipp: offene Eingänge, meist erkennbar an ziemlich> erratischer Stromaufnahme. Also entweder als Ausgang schalten oder als> Eingang mit pullup.
Chris Webber schrieb:> also alle unbenutzten Pins an GND ohne Widerstand und dann Pullups an???
Nein, nicht gegen GND und schon gar nicht ohne Widerstand, man macht
immer wieder mal einen kleinen Konfigurationsfehler und da will man dann
nicht jedes mal den AVR oder den Pin zerstören.
Wenn ich gerade mit dem AVR bastle oder einen Prototypen baue kommt an
jeden Pin ein Widerstand der so groß wie möglich ist, aber auch so klein
dass der Pin noch seine Arbeit machen kann.
Also wenn du nur einen MosFET langsam schalten willst, dann kannst du
auch einen 100k Ohm Widerstand zwischen dem I/O-Pin und Gate hängen.
Wenn das gerade der UART-TX Pin (57600 Baud) ist kommt dort ein 100 bis
300 Ohm Widerstand davor.
Hallo,
das sind schon mal schöne Informationen. Danke euch!
Werde mein Programm und meinen Aufbau dahingehend änder!
Wenn ich fertig bin messe ich nochmal, DAnke!
Hallo,
gesagt getan!
Hab den Verbrauch nun auf 0,07-0,05mA senken können,
was ich als großen Schritt nach vorne sehe!
Nun hält die Batterie statt 2 Wochen ganze 170 Tage laut Rechnung.
Danke!
Ob da noch mehr geht?!
An XTAL1 & XTAL2 die Pullups einschalten geht wohl nicht wenn da der
Quarz dran hängt?
Chris Webber schrieb:> An XTAL1 & XTAL2 die Pullups einschalten geht wohl nicht wenn da der>> Quarz dran hängt?
Nein, da arbeitet ja auch schon der interne Treiber da die Pins als
XTAL-Pins konfiguriert wurden.
Da geht vielleicht noch was wenn du das mit den Bitoperationen richtig
machst.
Allerdings kann man aus dem Datenblatt entnehmen dass man im IDLE bei
3.3V Versorgungsspannung und ca. 30kHz man nur bis auf 0.05mA kommen
kann.
(Unter: Figure 20-6. Idle Supply Current vs. Low Frequency (0.1 - 1.0
MHz)
Seite 201)
> ACSRA |= ((1<<ACD)&&(0<<ACBG)&&(0<<ACO)&&(0<<ACI)&&> (0<<ACIE)&&(0<<ACME)&&(0<<ACME)&&(0<<ACIS0));>> WDTCR |= ((0<<WDIE)&&(0<<WDE));>> PRR |= ((1<<PRTIM1)&&(1<<PRUSI)&&(1<<PRADC));
Deine Bitoperationen sind keine, das sind einfach nur logische
Operationen.
Beispiel:
PORTA = (0xFF & 0x0F);
Ergebnis ist dann: PORTA = 0x0F;
PORTA = (0xF0 & 0x0F);
Ergebnis ist dann: PORTA = 0x00;
PORTA = (0xF0 | 0x0F);
Ergebnis ist dann: PORTA = 0xFF;
Schau dir bitte noch mal die logischen Operationen an, da gibt es einen
Haufen Beispiele. Auch bei Wikipedia kannst du dir die Bitoperationen
anschauen und mit den meisten Taschenrechnern (galculator unter Linux)
auch kontrollieren.
Hallo,
@Mike: Danke für die Info. Die Operationen mache ich immer mit dem
Win 7 Taschenrechner unter Ansicht Programmierer!
Ja das sind logische Verknüpfungen bzw. Maskierung was ja auch falsch
ist wenn man in einem Register lediglich einige Bits beschreiben will.
Zu Beginn wusste ich nicht dass man die Register direkt beschreiben
kann :-)
Dachte man muss das mit Demaskierung machen (gesamtes Byte).
Ich komme aus der Ecke SPS S5/S7 AWL.
Die Programmierung in Assembler kommt mir daher auchbekannt vor.
So wie ich das verstanden habe muss man da wie bei der SPS immer
Lade und Transferbefehle für Operationen und Bitmanipulationen
schreiben.
SPS:
L MW 1 //Lade Daten aus Merkerword 1
T MW 4 //Transferiere in Merkerword 2
Assembler:
lid MW 1
out MW 4
Wahrscheinlich sind die Operationen in Assembler auch VKE unabhängig!?
Ja im IDLE Modus ist leider nicht mehr drin das denke ich auch. Werde
deshalb schauen was die Schltung noch her gibt bzw. eine andere
Batterie mit mehr Kapazität.
Gruß und Danke
Bei einem Xmega kann man einen Uhrenquarz (für die RTC) ran hängen und
einen externen z.B. 16MHz Quarz oder z.B. den internen 2MHz oder 32MHz
RC-Oszillator nutzen.
Im normalen Betrieb weckt der RTC den Chip jede Sekunde oder jede Minute
auf, die Zeit wird um eine Sekunde oder Minute erhöht und er geht wieder
schlafen.
Ich muss oft nur Rechenoperationen durchführen, dazu wird der 32MHz/2 =
16MHz Oszillator aktiviert, wenn ich dann Daten über UART verschicken
muss, dann aktiviere ich den extenen 12MHz Quarz.
Da der interne RC-Oszillator nicht genau genug ist, aber dafür sehr
schnell anschwingt (im gegensatz zum externen Quarz) spart man Energie.
Meine Xmega-Platine verbraucht 1,5µA im PowerSave Modus, im Aktiven
Modus je nach ausgewählter Taktquelle.
Er arbeitet auch noch bei 1.6V und bis max. 3.6V, so dass man ihn mit
einem LiFePO4 Akku betreiben kann.