Forum: Mikrocontroller und Digitale Elektronik Energieverbrauch ATtiny261 :-)


von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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):
1
const unsigned char Anzeigewert [10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
2
3
ISR(TIMER0_COMPA_vect)
4
{
5
  Millisekunden++;
6
  
7
  if(Millisekunden == 256)
8
  {
9
    Sekunden++;
10
    Millisekunden = 0;
11
12
    if(Sekunden == 60)
13
    {Minuteneiner++;Sekunden = 0;}
14
    
15
    if(Minuteneiner== 10)
16
    {Minutenzehner++; Minuteneiner = 0;}
17
    
18
    if(Minutenzehner == 6)
19
    {Stundeneiner++; Minutenzehner = 0;}
20
    
21
    if(Stundeneiner == 10)
22
    {Stundenzehner ++;Stundeneiner = 0;}
23
    
24
    if((Stundenzehner==2)&&(Stundeneiner==4))
25
    {Stundenzehner=0; Stundeneiner=0;
26
      Minutenzehner=0; Minuteneiner=0;
27
    Sekunden=0; Millisekunden=0;}
28
  }
29
}
30
31
int main(void)          
32
{
33
   TCCR0A |= (1<<CTC0);    
34
  TCCR0B |= ((0<<CS01)&&(0<<CS02)&&(0<<CS00));    
35
  OCR0A = 129-1;        
36
  TIMSK = (1<<OCIE0A);    
37
  sei();          
38
    
39
  while(1)          
40
  {
41
    
42
    if ((PINB & (1<<PINB2)))    
43
    {
44
      _delay_ms(2);        
45
      Anzeigezeit=250;      
46
      Uhr_stellen();        
47
    }
48
    
49
    if ( PINB & (1<<PINB3))   
50
    {
51
      _delay_ms(2);        
52
      Einleitshow();        
53
      Anzeigezeit=250;         
54
      Anzeigen();          
55
    }
56
  }
57
}


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

: Bearbeitet durch User
von Peter II (Gast)


Lesenswert?

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?

von Peter D. (peda)


Lesenswert?

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.

von meckerziege (Gast)


Lesenswert?

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!

von Peter D. (peda)


Lesenswert?

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.

von Pink S. (pinkshell)


Lesenswert?

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 :-)

von c-hater (Gast)


Lesenswert?

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.

von der alte Hanns (Gast)


Lesenswert?

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?

von Axel R. (Gast)


Lesenswert?

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.

von CWO (Gast)


Lesenswert?

> Die ATtiny können zwar auch 32kHz, aber nur als CPU-Takt und verbrauchen
> daher mindestens das 100-fache.

ATTiny24A, 3 V, 32 KHz -> 10 µA

von Onko D. (Firma: Hirntot AG) (onkyloge)


Lesenswert?

Da feilschen die Leutz um ein paar µA im Verbrauch ihres Designs und 
steigen anschließend nach (nicht) getaner Arbeit in ihr SUV.

von CWO (Gast)


Lesenswert?

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.

von der alte Hanns (Gast)


Lesenswert?

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.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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!

von der alte Hanns (Gast)


Lesenswert?

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! ?

von der alte Hanns (Gast)


Lesenswert?

> hier so gut geholfen wird

Na dann...

Als Anhaltspunkt für Sie: ATtiny461 bei 3.0 V, Zykluszeit 7.8125 ms:
100 Arbeitstakte: 24.7 uA
200       "       29.2 uA

von GGGGGast (Gast)


Lesenswert?

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.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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!?

: Bearbeitet durch User
von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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ß

von der alte Hanns (Gast)


Lesenswert?

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.

von der alte Hanns (Gast)


Lesenswert?

Wenn ich diese Kapazitäten zusätzlich anschließe, messe ich einen 
Mehrverbrauch von ca. 0.5 uA.

von der alte Hanns (Gast)


Lesenswert?

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?

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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

von der alte Hanns (Gast)


Lesenswert?

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

von Tokoyflash-Fan (Gast)


Lesenswert?

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?

von der alte Hanns (Gast)


Lesenswert?

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.

von ATMegaForRTC (Gast)


Lesenswert?

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.

von der alte Hanns (Gast)


Lesenswert?

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?

von Klaus R. (klaus2)


Lesenswert?

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

von ATMegaForRTC (Gast)


Lesenswert?

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

von der alte Hanns (Gast)


Lesenswert?

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.

von der alte Hanns (Gast)


Lesenswert?

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

von ATMegaForRTC (Gast)


Lesenswert?

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.

von Der Physiker (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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

: Bearbeitet durch User
von der alte Hanns (Gast)


Lesenswert?

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.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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

: Bearbeitet durch User
von GGGGGast (Gast)


Lesenswert?

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.

von GGGGGast (Gast)


Lesenswert?

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.

von der alte Hanns (Gast)


Lesenswert?

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

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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

: Bearbeitet durch User
von ATMegaForRTC (Gast)


Lesenswert?

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

von der alte Hanns (Gast)


Lesenswert?

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)
1
.include "tn461Adef.inc"
2
3
.def  tmp0        = r16
4
5
.org $0000
6
  rjmp  reset
7
8
.org  OVF1addr
9
  reti
10
11
reset:
12
  ldi    tmp0,$FF    ; pullups
13
  out    PORTA,tmp0
14
  ldi    tmp0,$FF
15
  out    PORTB,tmp0
16
  ldi    tmp0,(1<<PRUSI)+(1<<PRTIM0)+(1<<PRADC)
17
  out    PRR,tmp0
18
  ldi    tmp0,(1<<ACD)
19
  out    ACSRA,tmp0
20
  ldi    tmp0,(1<<CS13)  ; /128
21
  out    TCCR1B,tmp0
22
  ldi    tmp0,(1<<TOIE1)
23
  out    TIMSK,tmp0
24
  ldi    tmp0,(1<<SE)  ; idle
25
  out    MCUCR,tmp0
26
  sei
27
main_loop:
28
   sleep
29
  rjmp  main_loop

von der alte Hanns (Gast)


Lesenswert?

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!

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

Hallo,

:-|

MAL ANSCHAUEN fürs Verständnis! Allerdings ein anderer Chip und Quarz!

"www.youtube.com/watch?v=UXfV7GzvIps&feature=youtu.be"

1.
1
/*
2
 * attiny261_32khz.c
3
 *
4
 * Created: 07.06.2014 19:14:09
5
 *  Author: Chris
6
 */ 
7
8
#include <stdlib.h>
9
#include <avr/io.h>
10
#include <avr/interrupt.h>   // Datei für Interrupts
11
#define F_CPU  32768UL     // Prozessortakt festlegen
12
#include <util/delay.h>      // Datei für Wartezeiten,immer nach CPU Takt einfügen
13
14
volatile unsigned int Millisekunden=0;
15
volatile unsigned int Stundenzehner=0;
16
volatile unsigned int Stundeneiner=0;
17
volatile unsigned int Minutenzehner=0;
18
volatile unsigned int Minuteneiner=0;
19
volatile unsigned int Sekunden=0;
20
21
22
23
int i, e, j, x, Anzeigezeit;
24
25
26
const unsigned char Anzeigewert [10]= {0x3f, 0x06, 0x5b, 0x4f, 0x66, 0x6d, 0x7d, 0x07, 0x7f, 0x6f};
27
28
29
30
ISR(TIMER0_COMPA_vect)
31
{
32
  Millisekunden++;
33
  
34
  if(Millisekunden == 256)
35
  {
36
    Sekunden++;
37
    Millisekunden = 0;
38
39
    if(Sekunden == 60)
40
    {Minuteneiner++;Sekunden = 0;}
41
    
42
    if(Minuteneiner== 10)
43
    {Minutenzehner++; Minuteneiner = 0;}
44
    
45
    if(Minutenzehner == 6)
46
    {Stundeneiner++; Minutenzehner = 0;}
47
    
48
    if(Stundeneiner == 10)
49
    {Stundenzehner ++;Stundeneiner = 0;}
50
    
51
    if((Stundenzehner==2)&&(Stundeneiner==4))
52
    {Stundenzehner=0; Stundeneiner=0;
53
      Minutenzehner=0; Minuteneiner=0;
54
    Sekunden=0; Millisekunden=0;}
55
  }
56
}
57
58
59
void Uhr_stellen (void)
60
{
61
  
62
  while(j !=Anzeigezeit)
63
  {
64
    //___Stundenzehner___
65
    PORTB=0x3;
66
    DDRB = 0x01;
67
    DDRA = Anzeigewert [Stundenzehner];
68
    _delay_ms(5);
69
    
70
    //___Stundeneiner___
71
    PORTB=0x3;
72
    DDRB = 0x02;
73
    DDRA = Anzeigewert [Stundeneiner];
74
    _delay_ms(5);
75
    
76
    if (PINB & (1<<PINB3))
77
    {
78
      _delay_ms(150);
79
      Stundeneiner=Stundeneiner+1;
80
      
81
      if(Stundeneiner == 10)
82
      {Stundenzehner ++;Stundeneiner = 0;}
83
      
84
      if((Stundenzehner==2)&&(Stundeneiner==4))
85
      {Stundenzehner=0; Stundeneiner=0;}
86
    }
87
    j++;
88
  }
89
  j=0;
90
91
  PORTB=0x3;
92
  DDRB = 0x01;
93
  DDRA = 0x71;
94
  _delay_ms(900);
95
  DDRB = 0x00;
96
  DDRA = 0x00;
97
98
  while(j !=Anzeigezeit)
99
  {
100
    //___Stundenzehner___
101
    PORTB=0x3;
102
    DDRB = 0x01;
103
    DDRA = Anzeigewert [Minutenzehner];
104
    _delay_ms(5);
105
    
106
    //___Stundeneiner___
107
    PORTB=0x3;
108
    DDRB = 0x02;
109
    DDRA = Anzeigewert [Minuteneiner];
110
    _delay_ms(5);
111
    
112
    if (PINB & (1<<PINB3))
113
    {
114
      _delay_ms(150);
115
      Minuteneiner++;
116
      
117
      if(Minuteneiner== 10)
118
      {Minutenzehner++; Minuteneiner=0;}
119
      
120
      if(Minutenzehner == 6)
121
      {Minutenzehner=0; Minutenzehner=0;}
122
    }
123
    j++;
124
  }
125
  j=0;
126
  PORTB=0x3;
127
  DDRB = 0x02;
128
  DDRA = 0x71;
129
  _delay_ms(900);
130
  DDRB = 0x00;
131
  DDRA = 0x00;
132
}
133
134
void Anzeigen (void)
135
{
136
  while (i !=Anzeigezeit)
137
  {
138
    //___Stundenzehner___
139
    PORTB=0x3;
140
    DDRB = 0x01;
141
    DDRA = Anzeigewert [Stundenzehner];
142
    _delay_ms(1);
143
    
144
    //___Stundeneiner___
145
    PORTB=0x3;
146
    DDRB = 0x02;
147
    DDRA = Anzeigewert [Stundeneiner];
148
    _delay_ms(1);
149
    i++;
150
  }
151
  i=0;
152
  
153
  while (i !=Anzeigezeit)
154
  {
155
    //___Stundenzehner___
156
    PORTB=0x3;
157
    DDRB = 0x01;
158
    DDRA = Anzeigewert [Minutenzehner];
159
    _delay_ms(1);
160
    
161
    //___Stundeneiner___
162
    PORTB=0x3;
163
    DDRB = 0x02;
164
    DDRA = Anzeigewert [Minuteneiner];
165
    _delay_ms(1);
166
    i++;
167
  }
168
  DDRB = 0x00;
169
  DDRA = 0x00;
170
  i=0;
171
}
172
173
174
void Einleitshow (void)
175
{
176
  while (x !=3)
177
  {
178
    PORTB=0x3;
179
    DDRB = 0x01;
180
    DDRA = 0x01;
181
    _delay_ms(80);
182
    DDRA = 0x02;
183
    _delay_ms(80);
184
    DDRA = 0x04;
185
    _delay_ms(80);
186
    DDRA = 0x08;
187
    _delay_ms(80);
188
    
189
    PORTB=0x3;
190
    DDRB = 0x02;
191
    DDRA = 0x08;
192
    _delay_ms(80);
193
    DDRA = 0x10;
194
    _delay_ms(80);
195
    DDRA = 0x20;
196
    _delay_ms(80);
197
    DDRA = 0x01;
198
    _delay_ms(80);
199
    x++;
200
  }
201
  DDRB = 0x00;
202
  DDRA = 0x00;
203
  x=0;
204
  
205
  while (x !=2)
206
  {
207
    PORTB=0x3;
208
    DDRB = 0x01;
209
    DDRA = 0x01;
210
    _delay_ms(120);
211
    DDRA = 0x40;
212
    _delay_ms(120);
213
    DDRA = 0x08;
214
    _delay_ms(120);
215
    
216
    
217
    PORTB=0x3;
218
    DDRB = 0x02;
219
    DDRA = 0x01;
220
    _delay_ms(120);
221
    DDRA = 0x40;
222
    _delay_ms(120);
223
    DDRA = 0x08;
224
    _delay_ms(120);
225
    x++;
226
  }
227
  DDRB = 0x00;
228
  DDRA = 0x00;
229
  x=0;
230
  
231
  
232
}
233
234
235
236
237
int main(void)          // Hauptprogramm
238
{
239
240
  ACSRA |= ((1<<ACD)&&(0<<ACBG)&&(0<<ACO)&&(0<<ACI)&&
241
           (0<<ACIE)&&(0<<ACME)&&(0<<ACME)&&(0<<ACIS0)); //Analogteil OFF
242
243
  WDTCR |= ((0<<WDIE)&&(0<<WDE)); // Watchdog OFF
244
245
  PRR |= ((1<<PRTIM1)&&(1<<PRUSI)&&(1<<PRADC)); //Power reduction 
246
                                                 //register set Timer1=OFF,
247
                                                // USI=OFF, ADC=OFF
248
249
250
  TCCR0A |= (1<<CTC0);    
251
  TCCR0B |= ((0<<CS01)&&(0<<CS02)&&(0<<CS00));   
252
  OCR0A = 129-1;        
253
  TIMSK = (1<<OCIE0A);    // Timerüberlauf aktivieren
254
  sei();            // Interrupts aktivieren
255
  
256
  
257
  while(1)          // Hauptprogrammschliefe Endlosschleife
258
  {
259
    
260
    if ((PINB & (1<<PINB2)))   
261
262
    {
263
      _delay_ms(2);        // Entprellzeit Schalter
264
      Anzeigezeit=250;      // Variable für Anzeigezeit bestimmen
265
      Uhr_stellen();        // Unterprogramm "Uhr_stellen" abarbeiten
266
    }
267
    
268
    if ( PINB & (1<<PINB3))     // Wenn Eingang PA7=1 dann Anzeigen 
269
270
    {
271
      _delay_ms(2);        // Entprellzeit Schalter
272
      Einleitshow();        // klein Rotationsshow
273
      Anzeigezeit=250;          // Variable für Anzeigezeit bestimmen
274
      Anzeigen();          // Unterprogramm "Anzeigen" abarbeiten
275
    }
276
  }
277
}
2. High=DF LOW=E4 ex=FF  CKSEL=0100 SUT=10

3. ATTiny261A-PU 1333 ATMEL

4.0,3-0,5mA

: Bearbeitet durch User
von der alte Hanns (Gast)


Lesenswert?

I'll be darned - der Timer0 läuft tatsächlich?

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

nein, ich wollte gerade noch was ändern da das NATÜRLICH nicht das 
richtige Programm ist!
1
//--------------------------------------------------
2
 TCCR0B |= ((1<<CS01)&&(0<<CS02)&&(0<<CS00));  //Vorteiler 8   
3
 OCR0A = 129-1;                                    
4
 TIMSK = (1<<OCIE0A); 
5
//------------------------------
6
ISR(TIMER0_COMPA_vect)
7
{
8
  Millisekunden++;
9
  
10
  if(Millisekunden == 32)
11
//-------------------------------------------------

war klar das ich das falsche rein kopiere :-|

: Bearbeitet durch User
von der alte Hanns (Gast)


Lesenswert?

Wo finde ich in diesem C-Programm das sleep mit idle?

von IBT (Gast)


Lesenswert?

> WDTCR |= ((0<<WDIE)&&(0<<WDE)); // Watchdog OFF

&& oder & ist hier und anderswo die Frage (Shakespeare).

von ATMegaForRTC (Gast)


Lesenswert?

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?

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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?

von IBT (Gast)


Lesenswert?

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

von ATMegaForRTC (Gast)


Lesenswert?

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.

von ATMegaForRTC (Gast)


Lesenswert?

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.

von der alte Hanns (Gast)


Lesenswert?

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.

von Chris W. (Firma: H.) (vbweber)


Angehängte Dateien:

Lesenswert?

@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 :-)

: Bearbeitet durch User
von foo (Gast)


Lesenswert?

vernünftig <> vernümpftig
bitweise <> logisch

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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!

: Bearbeitet durch User
von Chris W. (Firma: H.) (vbweber)


Lesenswert?

http://savannah.nongnu.org/bugs/?33230

musste Attiny261 einbinden ststt 261A...

: Bearbeitet durch User
von foo (Gast)


Lesenswert?

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.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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

von Thomas (Gast)


Lesenswert?

du meintes wohl foo XD :-)

von foo (Gast)


Lesenswert?

Na dann is eh super wenn alles richtig ist in deinem Code.
Das mit den "Strichen" hab ich gemeint...

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Endlich mal ein Schaltplan.

- AVCC, AGND müssen angeschlossen werden!
- Taster gegen GND und internen Pullup an.

von Trolli (Gast)


Lesenswert?

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änge

ATMegaForRTC schrieb:
> 'fließende' Eingänge

von foo (Gast)


Lesenswert?

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

von Mike J. (linuxmint_user)


Lesenswert?

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.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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 :-)

: Bearbeitet durch User
von ??? (Gast)


Lesenswert?

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.

von Mike J. (linuxmint_user)


Lesenswert?

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.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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!

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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?

von Mike J. (linuxmint_user)


Lesenswert?

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.

von Chris W. (Firma: H.) (vbweber)


Lesenswert?

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

: Bearbeitet durch User
von Mike J. (linuxmint_user)


Lesenswert?

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.

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
Noch kein Account? Hier anmelden.