Forum: Mikrocontroller und Digitale Elektronik ATtiny24A, Power-down


von Mathias H. (mathias)


Lesenswert?

Hallo,
möchte einen ATtiny24A für eine Langzeit Batterieanwendung benutzen.
Die meiste Zeit soll der ATtiny24A im Tiefschlaf (Power-Down Mode) 
verbringen.
Dabei so wenig wie möglich Strom benötigen.
Alle Peripherie Funktionen abschalten. Im PRR – Power Reduction Register 
= b0000 1111;
Aufwecken sporadisch nur über einen "Pin Change Interrupt".
http://ww1.microchip.com/downloads/en/DeviceDoc/doc8183.pdf
Beim Hochfahren des ATtiny24A von "Power-down" soll der interne 8MHz 
Oszillator anspringen, dann sollen einige Befehle ausführt werden und 
anschließend soll er wieder in den Tiefschlaf gehen.
Am Besten, daß unter anderem kein Oszillator mehr an ist.

Geht das überhaupt und wenn ja, wie?

Danke
  Mathias

von M. K. (sylaina)


Lesenswert?

Mathias H. schrieb:
> Geht das überhaupt und wenn ja, wie?

Das geht. Schau dir dazu die Library #include <avr/sleep.h> an. Du 
brauchst im Code
1
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
und aktiviert wird der Sleepmode dann mit
1
sleep_mode();

Mathias H. schrieb:
> Im PRR – Power Reduction Register
> = b0000 1111;

Gewöhne dir hierbei unbedingt eine andere Schreibweise an. Hierfür muss 
jetzt jeder erstmal ins Datenblatt schauen um zu wissen wofür die 
unteren vier Bits stehen. Schneller weis man es wenn man schreibt
1
PRR |= (1 << PRTIM1)|(1 << PRTIM0)|(1 << PRUSI)|(1 << PRADC);
Und nicht vergessen den Analog Comparator auszuschalten:
1
ACSR |= (1 << ACD);

;)

von K. S. (the_yrr)


Lesenswert?

Mathias H. schrieb:
> Geht das überhaupt und wenn ja, wie?

genau so wie du es beschrieben hast?

Vorraussetzung:
- du wählst den richtigen sleep mode
- du hast 8MHz intern clock schon vorher
- du hast keinen Watchdog an
- du hast den PC Interrupt an

das PRR zu setzen kannst du dir sparen, wenn alles schläft ohne Takt ist 
es aus, egal was im PRR steht.

siehe Datenblatt:
The Power Reduction Register provides a method to reduce power 
consumption by allowing peripheral clock signals to be disabled.
-> wenn die main clock source nicht da ist (durch sleep), dann außer dem 
Watchdog auch keine andere.

nicht vergessen dann auch in DIDR0 den digital input buffer 
auszuschalten für alle Pins die analoge Signale bekommen, das könnte im 
gegensatz zu allem anderen hier genannten extra Abschaltungen 
tatsächlich Strom sparen.

: Bearbeitet durch User
von K. S. (the_yrr)


Lesenswert?

M. K. schrieb:
> Und nicht vergessen den Analog Comparator auszuschalten:

Rein Interesse halber, muss man den extra ausschalten? im Datenblatt 
steht nur dass man ihn nicht verwenden kann wenn der ADC aus ist, aber 
ist der dann automatisch auch abgeschaltet?

von Stefan F. (Gast)


Lesenswert?

Mathias H. schrieb:
> Geht das überhaupt und wenn ja, wie?

Dort wir das für einen anderen ATtiny in Assembler erklärt: 
http://stefanfrings.de/avr_workshop/index.html#aufwachen

> Rein Interesse halber, muss man den (analog Comparator) extra ausschalten?

Weiss ich jetzt nicht auswendig. Im Zweifelsfall würde ich alles aus 
Schalten, was das Power Reduction Register hergibt.

von M. K. (sylaina)


Lesenswert?

K. S. schrieb:
> das PRR zu setzen kannst du dir sparen, wenn alles schläft ohne Takt ist
> es aus, egal was im PRR steht.

Öhm, nein. Es macht einen Unterschied ob im PRR steht ob ein Modul an 
oder aus sein soll, auch im Power-Down. Auf den Quatsch bin ich auch 
reingefallen und es dauerte etwas bis ich dahinter kam warum ich bei 
einem Attiny10 im Power-Down kaum unter 10 uA Stromaufnahme kam, dabei 
sollte er ja unter 0.15 uA kommen. Erst als ich im ACSR und im PRR die 
entsprechenden Einstellungen vornahm kam ich auf die 0.15 uA. Die 
Einstellungen des PRR kann man sich also nicht sparen. Auch nicht die 
Einstellung des ACSR

K. S. schrieb:
> Rein Interesse halber, muss man den extra ausschalten?

Ja, muss man wenn man die Stromaufnahme runter drücken will.

Stefanus F. schrieb:
> Weiss ich jetzt nicht auswendig. Im Zweifelsfall würde ich alles aus
> Schalten, was das Power Reduction Register hergibt.

Der Analog Comparator wird nicht im PRR an-/ausgeschaltet sondern im 
ACSR ;)

: Bearbeitet durch User
von Atmega8 A. (atmega8) Benutzerseite


Lesenswert?

Mathias H. schrieb:
> Am Besten, daß unter anderem kein Oszillator mehr an ist.
>
> Geht das überhaupt und wenn ja, wie?

Lies dir mal das Datenblatt durch, im PowerDown sind sämtliche Taktgeber 
und auch der Takt der Peripherie abgeschalt.
Den ADC usw. musst du aber vorher abschalten, damit dir die 
Referenzspannungsquelle nicht sinnlos den ganzen Strom wegzieht.

Mit abgeschaltetem Watchdog-Timer im PowerDown zieht so ein ATmega8 (an 
einem LiIon-Akku) etwa 0,6µA.

An einem 1Ah LiIOn-Akku könnte der Controller so 190 Jahre im 
PowerDown-Modus verbringen, wenn er nicht zwischendurch immer mal wieder 
aufgeweckt wird, der Akku langsam degeneriert oder sich selbst entlädt.

: Bearbeitet durch User
von M. K. (sylaina)


Lesenswert?

Atmega8 A. schrieb:
> Mit abgeschaltetem Watchdog-Timer im PowerDown zieht so ein ATmega8 (an
> einem LiIon-Akku) etwa 0,6µA.

Echt? Ist das bei dem Urgestein so viel? Der ATTiny24A zieht nicht mehr 
als 0.1A, der ATMega328P (Nachfolger des ATMega8) auch. ;)

: Bearbeitet durch User
von Mathias H. (mathias)



Lesenswert?

Schon mal Danke fürs Interesse.
Habe auf die schnelle einen ATmega328P zum Testen .
Das Board für den ATtiny 24A oder 44A ist in Vorbereitung.
Programmiere nicht in C deshalb der etwas andere Syntax im Quelltext.
Habe den MC auf low Quarz 7,3728 MHz eingestellt.
"Pin Change Interrupt" ist eingestellt und funktioniert.
Hier die Einstellung zum "Power-down Mode":
   DisableInts;                   // globaler Interrupt: aus.
   PRR:= %1110 1111;              // Power reduction: all.
   MCUCR:= MCUCR Or  %0110 0000;  // Brown-Out abschalten.
   MCUCR:= MCUCR And %1011 1111;
   EnableInts;                    // globaler Interrupt: ein.
   SMCR:= %0000 0101;             // einstellen auf Power-down Mode und 
ausführen.
                                  // MC ist im Power-down Mode.
   PRR:= %1100 0111;              // MC ist durch "Pin Change Interrupt" 
aufgewacht, normal Operation.

Das Board braucht im "Power-down Mode" ca. 2,7 mA.
Der Quarzoszillator läuft (warum: ???), sehe es auf dem Oszi.
Ohne ATmega328P (aus der Fasssung, ausgesteckt) ca. 3,2 µA,. Das passt, 
die Peripherie braucht auch ein bißchen.
Aber die ca. 2,7 mA???

: Bearbeitet durch User
von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Mathias H. schrieb:
> Aber die ca. 2,7 mA???

Es kann gut sein, das du einen oder mehrere Portpins nicht auf inaktiv 
geschaltet hast. Der Ausgangspegel muss also in den Modus des geringsten 
Verbrauchs gesetzt werden (und die äussere Beschaltung auch in Ruhe 
gehen).
Keine Pins floaten lassen - nicht benutzte auf Ausgang stellen.
Ein Attiny2313, der hier so läuft, zieht etwa 300nA im PowerDown.

: Bearbeitet durch User
von Mathias H. (mathias)


Lesenswert?

Nochmals alle Portpins überprüft.
Nichtbenutzte Pins sind als Ausgang und auf low gelegt.
Was mich wundert, daß der Oszillator läuft.
Egal ob Quarz oder interner, je nach Einstellung.
Im SMCR Register sind die Bits SM1 und SE gesetzt. "Also Power-down".
Wie kriegt man den Oszillator abgeschalten?

von Mathias H. (mathias)


Lesenswert?

Hatte den WatchDog vergessen abzuschalten.
So, bin jetzt bei ca. 250 µA.
Immer noch zu viel.
Was kann man noch alles abschalten?

von Mike J. (linuxmint_user)


Lesenswert?

Mathias H. schrieb:
> So, bin jetzt bei ca. 250 µA.

Wie sieht denn deine Platine aus? Ist da vielleicht ein Spannungsregler 
drauf? Der Ruhestrom der meisten Regler ist oft recht hoch. Sehr gute 
Spannungsregler verbrauchen nur 7µA (China, billig) oder sogar nur 1µA.

Mach mal ein Bild.

von M. K. (sylaina)


Lesenswert?

Matthias S. schrieb:
> Ein Attiny2313, der hier so läuft, zieht etwa 300nA im PowerDown.

Selbst das wäre noch zu viel für Power Down...oder haste da 5V dran? 
Dann könnte das hinkommen...glaub ich.

Mathias H. schrieb:
> Hatte den WatchDog vergessen abzuschalten.
> So, bin jetzt bei ca. 250 µA.
> Immer noch zu viel.
> Was kann man noch alles abschalten?

Welche Versorgungspannung hast du dabei? Könnte bei 5V hinkommen.

Wenn ich mir deinen Code oben anschaue: Hast du den Analog Comparator 
auch ausgeschaltet (ACSR |= (1 << ACD);)?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

M. K. schrieb:
> Matthias S. schrieb:
>> Ein Attiny2313, der hier so läuft, zieht etwa 300nA im PowerDown.
>
> Selbst das wäre noch zu viel für Power Down...oder haste da 5V dran?
> Dann könnte das hinkommen...glaub ich.

Das ist ein ungeregelter 18650, also zwischen 4,1 bis runter auf etwa 
3,3V.

Aber weniger als etwa 0,25µA sind lt. DB nicht drin, wenn man sich die 
Grafik ' Power-down Supply Current vs. VCC (Watchdog Timer Disabled)' 
ansieht und 4V annimmt (In meinem DB ist das Fig.98).

von M. K. (sylaina)


Lesenswert?

Matthias S. schrieb:
> Aber weniger als etwa 0,25µA sind lt. DB nicht drin, wenn man sich die
> Grafik ' Power-down Supply Current vs. VCC (Watchdog Timer Disabled)'
> ansieht und 4V annimmt (In meinem DB ist das Fig.98).

So genau hatte ich ins DB nicht geschaut, deshalb sagte ich ja, dass das 
hinkommen kann. Wie gesagt, wenn man den AC nicht deaktiviert hat kann 
man da auch noch das ein und andere uA raus holen ;)

von S. Landolt (Gast)


Lesenswert?

1
> SMCR:= %0000 0101;   // einstellen auf Power-down Mode und 
2
> ausführen.
3
>                      // MC ist im Power-down Mode.
4
> PRR:= %1100 0111;    // MC ist durch "Pin Change Interrupt" 
5
> aufgewacht, normal Operation.

Und wo, bitte, ist hier das sleep versteckt?

'Power-Down Mode:   When the SM[1:0] bits are written to 10, the SLEEP 
instruction makes the MCU enter Powerdown mode.'

von Mathias H. (mathias)


Lesenswert?

Nachtrag.

Bei entferntem ATmega328P ist die Stromaufnahme ca. 3µA.
Mit ATmega328P Cca. 250 µA.
Alle nichtbenutzen Pins sind als Ausgänge und auf low geschaltet.

Was kann man noch alles Abschalten?

            WatchDogStop;
            ACSR:= ACSR or %1000 0000;        // Analogcomparator aus.
            DisableInts;
              MCUCR:= MCUCR or  %0110 0000;   // Brown-Out abschalten.
              MCUCR:= MCUCR and %1011 1111;
            EnableInts;
            PRR:= %1110 1111;                 // Power reduction: all.
            CPUsleep (SMCR or %0000 0101);    // Sleep.
            PRR:= %1100 0111;                 // T0, T1 ein.
            DisableInts;
              MCUCR:= MCUCR or  %0110 0000;   // Brown-Out einschalten.
              MCUCR:= MCUCR or  %0110 0000;
            EnableInts;
            WatchDogStart;

von F. F. (foldi)


Lesenswert?

Mathias H. schrieb:
> Habe den MC auf low Quarz 7,3728 MHz eingestellt

Wieso lässt du den nicht auf einen MHz laufen.
Wenn der sowieso kaum was tun muss.
Dann braucht er auch im Betrieb weniger Strom.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Mathias H. schrieb:
> Alle nichtbenutzen Pins sind als Ausgänge und auf low geschaltet.

Schon schön. Aber jetzt solltest du auch die benutzten Pins untersuchen 
und zwar darauf, ob ihre Ruhepegel nicht etwa Strom aus der Peripherie 
ziehen oder in die Peripherie speisen.
Oszillator sollte im Powerdown nicht die Rolle spielen, da er sowieso 
nicht läuft.

Mathias H. schrieb:
> ACSR:= ACSR or %1000 0000;        // Analogcomparator aus.

Das sieht mir nach Pascal o.ä. aus. Kann man solche Ausdrücke in der 
Sprache nicht ein wenig leserlicher machen?

: Bearbeitet durch User
von Mike J. (linuxmint_user)


Lesenswert?

F. F. schrieb:
> Wieso lässt du den nicht auf einen MHz laufen.

Diese Taktquelle ist im PowerDown doch eh abgeschaltet, sollte also egal 
sein.

Matthias S. schrieb:
> Aber jetzt solltest du auch die benutzten Pins untersuchen

Er könnte einfach ein mal einen Schaltplan oder ein Foto seiner Platine 
zeigen, oft werden dadurch viele Probleme schnell erkannt.
Ist jedenfalls besser als hier herumzuraten und Glaskugel-Tipps zu geben 
...

von F. F. (foldi)


Lesenswert?

Mike J. schrieb:
> Diese Taktquelle ist im PowerDown doch eh abgeschaltet, sollte also egal
> sein.

Das stimmt schon, aber im Betrieb ist dann zwischen 8Mhz und 1Mhz der 
Strom auch ungefähr halbiert.

Aber bei allem was ich bisher gemacht habe mit den Tinys, habe ich weder 
auf Strom noch auf Geschwindigkeit achten müssen.
Vielleicht kommt das bald. Wollte jetzt auch wieder anfangen, nach all 
der Zeit und den harten Einschlägen der letzten Jahre.
Mal sehen, ob ich jetzt etwas verschont bleibe.

: Bearbeitet durch User
von Mike J. (linuxmint_user)


Lesenswert?

F. F. schrieb:
> Das stimmt schon, aber im Betrieb ist dann zwischen 8Mhz und 1Mhz der
> Strom auch ungefähr halbiert.
1
           | (1MHz, 3,3V) | (8MHz, 3,3V) |
2
------------------------------------------
3
ATmega8L   |     1,8mA    |  6,5mA       |
4
ATmega328P |     0,5mA    |  3,2mA       |
5
ATtiny24A  |     0,41mA   |  2,5mA       |

1/8 der Frequenz führt bei den neueren Chips zu 1/6 des Stromverbrauchs.

Wenn er seine Arbeit aber 8 mal so schnell erledigen könnte ... dann 
verbraucht er weniger Strom bei 8MHz da er früher wieder schlafen gehen 
kann.  :-D

Wenn er allerdings eh irgend welche Wartezeiten drin hat um einen Sensor 
zu initialisieren oder abzufragen, dann spart er im StandBy-Modus 
trotzdem etwas Strom.

Kommt halt immer drauf an was er in der Zeit gerade macht.

von S. Landolt (Gast)


Lesenswert?

Diese Stromwerte in der Tabelle - mit oder ohne eingeschaltete 
Peripherie?

von c-hater (Gast)


Lesenswert?

Mathias H. schrieb:

> Bei entferntem ATmega328P ist die Stromaufnahme ca. 3µA.
> Mit ATmega328P Cca. 250 µA.
> Alle nichtbenutzen Pins sind als Ausgänge und auf low geschaltet.

Daraus und aus der Tatsache, dass der 328P im PowerDown bei 
Zimmertemperatur sehr deutlich unter 1µA verbrauchen sollte, kann man 
problemlos folgern: Es muss an den benutzten Ausgängen liegen. Vielmehr: 
an deren Zusammenwirken mit der Hardware, die daran hängt.

Da du die Schaltung nicht veröffentlicht hast, bist du also der einzige, 
der das/die Problem(e) finden kann.

Wenn allerdings das entfernen des AVR dazu führt, dass die Stromaufnahme 
im genehmen Bereich liegt, KÖNNTE es helfen, ohne weitere Analyse der 
Schaltung einfach alle benutzten Ausgänge hochohmig zu machen, bevor man 
schlafen geht. Hilft auch das nicht, liegt wohl an irgendeinem Ausgang 
eine Spannung außerhalb der Betriebsspannung des µC an. Um sowas zu 
ermitteln, wurde die faszinierende Möglichkeit der Spannungsmessung 
entwickelt...

von c-hater (Gast)


Lesenswert?

c-hater schrieb:

> Daraus und aus der Tatsache, dass der 328P im PowerDown bei
> Zimmertemperatur sehr deutlich unter 1µA verbrauchen sollte

Gut, es ging um einen Tiny24A. Da gilt aber genau dasselbe.

von S. Landolt (Gast)


Lesenswert?

Nee, war schon richtig:
> Habe auf die schnelle einen ATmega328P zum Testen

von S. Landolt (Gast)


Lesenswert?

Jetzt bin ich irritiert, vielleicht wissen Mike J. oder c-hater den 
Grund für folgendes Verhalten:

ATmega328P-PU von '1515' bei 3.3 V mit internen 8 MHz:
1
.include  "m328Pdef.inc"
2
  ldi    r16,$FF
3
  sts    PRR,r16
4
  out    PORTB,r16
5
  out    PORTC,r16
6
  out    PORTD,r16
7
  nop
8
main_loop:
9
  rjmp    main_loop

Mit dem nop fließen 2.16, ohne 1.94 mA.

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> Mit dem nop fließen 2.16, ohne 1.94 mA.

Wie genau (also womit) gemessen? Wie lange lief diese Messung jeweils? 
Aus welcher Quelle wurde das Messgerät versorgt?

Kurzfassung: Wer misst, misst Mist. Es ist immer eine gute Idee, bei 
überraschenden Meßergebnissen erstmal den Messaufbau anzuzweifeln.

von S. Landolt (Gast)


Lesenswert?

Da der Messaufbau beide Male ja derselbe ist, verstehe ich die Fragen 
nicht ganz, aber: gemessen mit Digital-Handmultimeter (also 
batteriebetrieben). Ein altes Zeigermultimeter bringt, im Rahmen seiner 
Messgenauigkeit, dieselbe Differenz.
  (eigentlich hatte ich gehofft, dass sich jemand kurz hinsetzt und 
versucht, das nachzuvollziehen)

von Stefan F. (Gast)


Lesenswert?

S. Landolt schrieb:
> Mit dem nop fließen 2.16, ohne 1.94 mA.

Das überrascht mich, würde ich direkt 10x gleich und anders wiederholen 
um es zu bestätigen.

von S. Landolt (Gast)


Lesenswert?

> ... würde ich direkt 10x ...
Nur zu, ich harre der Ergebnisse. Ich selbst hatte es dreimal 
wiederholt.

von Stefan F. (Gast)


Lesenswert?

S. Landolt schrieb:
>> ... würde ich direkt 10x ...
> Nur zu, ich harre der Ergebnisse. Ich selbst hatte es dreimal
> wiederholt.

Ich bin wirklich neugierig, aber ich habe keinen losen ATMega328 herum 
liegen. Nur als Arduino Nano Klon.

von S. Landolt (Gast)


Lesenswert?

PS:
Mir ist durchaus bewusst, dass ich kurz davor bin, mich zum Affen zu 
machen, egal ...

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> Da der Messaufbau beide Male ja derselbe ist, verstehe ich die Fragen
> nicht ganz

Weil derselbe Messaufbau unter unterscheidlichen Randbedingungen 
durchaus unterschiedliche Ergebnisse liefern kann. Das sollte 
selbsterklärend sein...

> aber: gemessen mit Digital-Handmultimeter (also
> batteriebetrieben)

OK, fehlt immer noch die Antwort auf die Frage:

> Wie lange lief diese Messung jeweils?

Außerdem ergänzend: Ist dieses Handmultimeter TrueRMS-fähig? Wenn ja, 
bis zu welcher Frequenz?

>   (eigentlich hatte ich gehofft, dass sich jemand kurz hinsetzt und
> versucht, das nachzuvollziehen)

Geht nicht, weil kein 328P im Haus. Aber mit allen folgenden:
M1284P
M644
M32
M16

Gibt es diesen Effekt nicht. Gemessen habe ich allerdings mit einem 
200MHz-Oszi. Und das offenbart, dass die Wellenform in den beiden Fällen 
stark unterschiedlich ist, der RMS-Wert des Stroms aber im Rahmen der 
8Bit-Messgenauigkeit praktisch identisch (letztes Digit wackelt). Gäbe 
es wirklich solche Unterschiede, hätte ich sie sehr deutlich sehen 
müssen, denn ich habe natürlich einen Shunt gewählt, der es mir erlaubt, 
die Meßgenauigkeit nahezu voll auszunutzen.

von S. Landolt (Gast)


Lesenswert?

Erstmal vielen Dank für die Mühe mit gleich vier Controllern.

Das DVM ist ein Metex M-4650CR, also kein 'trueRMS'. Bei dem alten 
Analoginstrument hätte ich jetzt aber gedacht, dass es mittelt. Es geht 
schließlich um eine Differenz von 10 %.

> unterscheidlichen Randbedingungen
Wo ist der Unterschied? Ich 'flashe' zweimal, fertig.

von Stefan F. (Gast)


Lesenswert?

S. Landolt schrieb:
> Wo ist der Unterschied? Ich 'flashe' zweimal, fertig.

Mein Bauch sagt mir, dass da noch ein anderer relevanter Unterschied 
sein muss. Irgendwo.

von Michael J. (jogibaer)


Lesenswert?

Hallo,

könnten das Leckströme von anderen Bauteile sein , z.B. Kondensatoren?
Gerade sehr kleine hochkapazitive MLCC sind dafür oft verantwortlich.

Jogibär

von S. Landolt (Gast)


Lesenswert?

> ein anderer relevanter Unterschied
Nun, das könnte ja die von c-hater festgestellte "stark unterschiedliche 
Wellenform" sein. Wobei mir unklar ist, woher diese kommt.

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> Bei dem alten
> Analoginstrument hätte ich jetzt aber gedacht, dass es mittelt.

Tut es auch. Allerdings nur über das, was es überhaupt mitbekommt. 
Analoginstrumente sind sind ziemlich untauglich für die Messung an 
digitalen Gerätschaften, wo praktisch der gesamte Stromverbrauch in den 
Taktflanken passiert.

>> unterscheidlichen Randbedingungen
> Wo ist der Unterschied? Ich 'flashe' zweimal, fertig.

Zwei verschiedene Wellenformen, zwei unterschiedliche Messinstrumente, 
beide ziemlich untauglich für die Aufgabe...

von S. Landolt (Gast)


Lesenswert?

Gut, dann muss ich jetzt passen.
Bleibt noch die Frage, wie Mike J. die Werte in seiner Tabelle gemessen 
hat.

von Mike J. (linuxmint_user)


Lesenswert?

S. Landolt schrieb:
> Diese Stromwerte in der Tabelle - mit oder ohne eingeschaltete
> Peripherie?

Immer mit abgeschalteter Peripherie, da gäbe es zu viele Variationen die 
möglich sind. Gemessen wurde gar nichts, das sind die Daten aus dem 
Datenblatt ... nur mal zum Vergleich zwischen den einzelnen Typen. Die 
PowerDown-Werte stimmen mit der Praxis (gemessen beim ATmega8 von 
Atmega8) aber gut überein.

S. Landolt schrieb:
> Bei dem alten Analoginstrument hätte ich jetzt aber gedacht, dass
> es mittelt. Es geht schließlich um eine Differenz von 10 %.

Das alte ist konstruktionsbedingt ein true RMS Messgerät.


@ Mathias H. (mathias)
Auch wenn deine Schaltung mit Fädeldraht frei schwebend aufgebaut wurde 
ist das okay. Blöd ist nur wenn man einem versucht zu helfen und man 
nicht sehen soll wo das Problem liegt, weil der Aufbau vielleicht etwas 
schlampig wirken könnte.
Eine Skizze wäre aber schon sinnvoll und je mehr Informationen du gibst, 
desto besser wird dir geholfen.

: Bearbeitet durch User
von Carl D. (jcw2)


Lesenswert?

Kann es sein, daß wenn man eine signifikante "Wellenform" im 
Versorgungsstrom einer im MHz-Bereich taktenden Digitalschaltung erspät, 
es an Puffer-Cs mangelt?

von Stefan F. (Gast)


Lesenswert?

Schwankender Strom ist Ok, solange die Stromversorgung ihn liefern kann, 
ohne dass die Spannung zu stark schwankt.

von S. Landolt (Gast)


Lesenswert?

> Kann es sein ...

Also ich konnte ja, mangels angemessener Ausrüstung, nichts 
"erspähen"; bei mir waren am uC dreimal 0.1 uF Keramik sowie 220 uF Elko 
angeschlossen (Steckbrett).

von Carl D. (jcw2)


Lesenswert?

Stefanus F. schrieb:
> Schwankender Strom ist Ok, solange die Stromversorgung ihn liefern kann,
> ohne dass die Spannung zu stark schwankt.

Der AVR führt mit 8MHz immer wieder den selben Befehl aus. In welchen 
Spektrum sollte man da Stromänderungen erwarten und warum mittelt sich 
dieses nicht in einem geeigneten C aus.

Und zur eigentlich Frage: warum sollte er nach ein paar Millionen Runden 
nicht vergessen haben, daß er mal ein NOP zusätzlich ausgeführt hat.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

Carl D. schrieb:

> Kann es sein, daß wenn man eine signifikante "Wellenform" im
> Versorgungsstrom einer im MHz-Bereich taktenden Digitalschaltung erspät,
> es an Puffer-Cs mangelt?

Nö. Der beste Kondensator kann nicht alles schlucken, das ist eine 
Sache, die nur mit idealen Bauelementen möglich wäre.

Zum Glück braucht er das aber auch nicht, es genügt, wenn er soviel 
schluckt, dass die Spannung jederzeit im zulässigen Bereich bleibt.

von S. Landolt (Gast)


Lesenswert?

an c-hater:
Wie sah Ihr Programm für den ATmega1284P aus?

von S. Landolt (Gast)


Lesenswert?

Noch niemand zuhause bei c-haters? Nun denn.

Ich bin nämlich noch immer irritiert:

ATmega1284P-PU von '1024' bei 3.3 V mit internen 8 MHz:
1
.include  "m1284Pdef.inc"
2
  rjmp  init
3
main:
4
  nop
5
  nop
6
main_loop:
7
  rjmp    main_loop
8
9
init:
10
  ldi    r16,$FF
11
  sts    PRR0,r16
12
  sts    PRR1,r16
13
  out    PORTA,r16
14
  out    PORTB,r16
15
  out    PORTC,r16
16
  out    PORTD,r16
17
  rjmp  main

Mit zweimal nop fließen 3.81, mit einem 3.38 mA.
Soll natürlich heißen, bei mir; und da hätte mich interessiert, welche 
Ströme c-haters trueRMS-200 MHz-Oszilloskop misst; wenn er sich denn 
nochmals die Mühe machen könnte, dankenswerterweise. Vielleicht finden 
wir ja heraus, was ich falsch mache, bzw. ob.

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:
> an c-hater:
> Wie sah Ihr Programm für den ATmega1284P aus?

Im Prinzip ganz genauso wie dein's. Unterschiede:

Für alle vier aufgezählten:
Includezeile natürlich jeweils passend.
PortA Pullups aktiviert.

Und dann natürlich jeweils alles ausgeschaltet, was sich irgendwie 
ausschalten läßt, entsprechend dem, was das DB jeweils im Kapitel 
"Minimizing Power Consumption" vorgeschlagen hat. Wobei ein Teil davon 
natürlich jeweils über die Fuses abzuhandeln war, bei den ollen M16/M32 
sogar das meiste.

Der entsprechende Teil des Code für den M1284P sieht so aus:

ldi R16,1<<ACD
out ACSR,R16
ldi R16,0
sts ADCSRA,R16
ldi R16,1<<JTD
out MCUCR,R16
ldi 
R16,(1<<PRTWI)|(1<<PRTIM2)|(1<<PRTIM0)|(1<<PRUSART1)|(1<<PRTIM1)|(1<<PRS 
PI)|(1<<PRUSART0)|(1<<PRADC)
sts PRR0,R16
ldi R16,1<<PRTIM3
sts PRR1,R16

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> Noch niemand zuhause bei c-haters? Nun denn.

Manche Leute müssen tagsüber arbeiten...

von Carl D. (jcw2)


Lesenswert?

S. Landolt schrieb:
> Noch niemand zuhause bei c-haters? Nun denn.
>
> Ich bin nämlich noch immer irritiert:
>
> ATmega1284P-PU von '1024' bei 3.3 V mit internen 8 MHz:
>
>
1
> .include  "m1284Pdef.inc"
2
>   rjmp  init
3
> main:
4
>   nop
5
>   nop
6
> main_loop:
7
>   rjmp    main_loop
8
> 
9
> init:
10
>   ldi    r16,$FF
11
>   sts    PRR0,r16
12
>   sts    PRR1,r16
13
>   out    PORTA,r16
14
>   out    PORTB,r16
15
>   out    PORTC,r16
16
>   out    PORTD,r16
17
>   rjmp  main
18
>
>
> Mit zweimal nop fließen 3.81, mit einem 3.38 mA.
> Soll natürlich heißen, bei mir; und da hätte mich interessiert, welche
> Ströme c-haters trueRMS-200 MHz-Oszilloskop misst; wenn er sich denn
> nochmals die Mühe machen könnte, dankenswerterweise. Vielleicht finden
> wir ja heraus, was ich falsch mache, bzw. ob.

Steigt der Verbrauch auch, wenn vor main noch ein paar Dummy-Bytes 
eingefügt werden, z.B. per .ds?
Oder genauer gefragt, hängt es von der Position im Speicher ab.
Gibt es einen erkennbaren Zusammenhang zu n*NOP (n=0..20)?

Würde ich mal systematisch untersuchen.

von S. Landolt (Gast)


Lesenswert?

Okay, da fehlte eine, vielleicht wichtige, Information - Fuses bei mir:

low: E2, high: D1, extended: FF

von S. Landolt (Gast)


Lesenswert?

> Würde ich mal systematisch untersuchen.

Solange c-hater sagt, dass ich mit meiner bescheidenen Ausrüstung nicht 
vernünftig messen kann, lehne ich mich erstmal zurück - wäre vertane 
Zeit.

von c-hater (Gast)


Lesenswert?

S. Landolt schrieb:

> Soll natürlich heißen, bei mir; und da hätte mich interessiert, welche
> Ströme c-haters trueRMS-200 MHz-Oszilloskop misst

Das is nich meins. Gehört meinem Brötchengeber und da steht's jetzt auch 
wieder. Ich hatte es nur mehr oder weniger zufällig über's lange WE bei 
mir zu Hause. Für ein ganz anderes Projekt. Wo es mir aber leider nicht 
wirklich weitergeholfen hat.

Dein Kram traf einfach auf den glücklichen Umstand, dass der Messaufbau 
sowieso gerade stand und damit der Aufwand, das mal durchzuspielen, 
minimal war. Außerdem hat's mich auch selber interessiert, ob's den 
Effekt wirklich gibt.

von S. Landolt (Gast)


Lesenswert?

Tja, Mist - und jetzt?


"Wir wissen wohl, das ist kein rechter Schluß.
...
Wir stehen selbst enttäuscht und sehn betroffen
Den Vorhang zu und alle Fragen offen."

von Carl D. (jcw2)


Lesenswert?

S. Landolt schrieb:
>> Würde ich mal systematisch untersuchen.
>
> Solange c-hater sagt, dass ich mit meiner bescheidenen Ausrüstung nicht
> vernünftig messen kann, lehne ich mich erstmal zurück - wäre vertane
> Zeit.

8-Bit ADC auf 3Stellen genau. Lol.
Bei dem Ding geht's um schnell und nicht um sichere 5stellige Anzeige.

von S. Landolt (Gast)


Lesenswert?

Also, mangels Alternative, den Vorschlag von Carl D. aufgegriffen:

In obigem Programm die Anzahl der nop zwischen §main und §main_loop:

0: 3.65 mA
1: 3.38 mA
2: 3.81 mA
3: 3.38 mA
4: 3.65 mA
5: 3.38 mA
6: 3.70 mA

von DanielV2 (Gast)


Lesenswert?

Mal ganz dumm - sicherlich unnötige Anmerkung:

Während der Strommessung war das Programmiergerät doch hoffentlich 
abgeklemmt.

von S. Landolt (Gast)


Lesenswert?

Gewiss.

von c-hater (Gast)


Lesenswert?

Carl D. schrieb:

> 8-Bit ADC auf 3Stellen genau. Lol.

???

Es ging um satte 10%. Die siehst du auch bei nur 8Bit völlig problemlos. 
Wenn es sie denn tatsächlich gibt...

Nach meiner Messung würde ich behaupten, die Abweichung liegt unter 
1/242 (das ist, was durch den verwendeten Shunt als reale Auflösung von 
den 8Bit überblieb).

Also nachweislich bei weniger als einem halben Prozent.

Ich würde sogar stark vermuten, dass sie tatsächlich sogar noch sehr 
viel geringer ist...

von Carl D. (jcw2)


Lesenswert?

S. Landolt schrieb:
> Also, mangels Alternative, den Vorschlag von Carl D. aufgegriffen:
>
> In obigem Programm die Anzahl der nop zwischen §main und §main_loop:
>
> 0: 3.65 mA
> 1: 3.38 mA
> 2: 3.81 mA
> 3: 3.38 mA
> 4: 3.65 mA
> 5: 3.38 mA
> 6: 3.70 mA

Wenn man spitzfindig wäre, könnte man vermuten, daß gerade oder ungerade 
Code-Adressen (müßte man im Listing nachsehen) einen Unterschied machen.

von Stefan F. (Gast)


Lesenswert?

Carl D. schrieb:
> Wenn man spitzfindig wäre, könnte man vermuten, daß gerade oder ungerade
> Code-Adressen (müßte man im Listing nachsehen) einen Unterschied machen.

Allerdings ist der wie alle anderen 16bit aligned.

von Peter D. (peda)


Lesenswert?

S. Landolt schrieb:
> Mit dem nop fließen 2.16, ohne 1.94 mA.

Das ist mir auch schon aufgefallen. Die Stromaufnahme hängt etwas von 
der Adresse im Flash ab. Ich hab es aber nicht näher untersucht.

Auch die Interruptlogik braucht nicht unerheblich Strom. Z.B. in einem 
Projekt war die Stromaufnahme geringer, wenn ich die Interruptquellen 
gepollt habe, gegenüber Interrupts enabled und Idle.

von Stefan F. (Gast)


Lesenswert?

Das finde ich wirklich interessant. Dass ein Nop mehr oder weniger etwas 
ändert überrascht mich nicht, aber die Größe des Unterschieds tut es.

Egal ob mit oder ohne Messfehler (wegen RMS und so).

von F. F. (foldi)


Lesenswert?

Peter D. schrieb:
> Das ist mir auch schon aufgefallen. Die Stromaufnahme hängt etwas von
> der Adresse im Flash ab. Ich hab es aber nicht näher untersucht.

Peter, ich bin immer dankbar für deine Beiträge solcher Art, zumal ich 
weiß, was du von dir gibst ist alles fundiert.
Bitte halte dich nicht zurück und lass uns (oder auch nur mich, wenn 
andere das anders sehen) von deinem Wissen und Erfahrungen lernen.

von S. Landolt (Gast)


Lesenswert?

> Das ist mir auch schon aufgefallen ...

Sehen Sie, Peter D., ging mir genau so, vor Jahren bei einem 
Fahrradfahrtenschreiber mit dem ATmega328P; ich hatte das aber sofort 
weit von mir geschoben nach dem Motto "dass nicht sein kann, was nicht 
sein darf". Und seit gestern weiß ich, dass meine Reaktion richtig war, 
denn ohne so ein trueRMS-200 MHz-Wundertüten-Oszilloskop darf man an 
eine Messung ja nicht einmal ansatzweise denken. Mit einem solchen 
aber darf man getrost softwareseitig irgendetwas zusammenstoppeln, was 
mit der Vorgabe fast nichts mehr zu tun hat, es kommt trotzdem das 
richtige Ergebnis heraus.

von Peter D. (peda)


Lesenswert?

S. Landolt schrieb:
> "dass nicht sein kann, was nicht
> sein darf"

Warum darf das denn nicht sein?
Natürlich braucht auch die interne Umladung von Kapazitäten Strom, je 
nach Anzahl der Pegeländerungen.
Man könnte das weiter untersuchen, indem man die RJMP-Loop auf bestimmte 
Adreßwechsel legt, z.B. 07ff->0800 (ATtiny85).

von S. Landolt (Gast)


Lesenswert?

> Warum darf das denn nicht sein?

Nun, die Größenordnung (hier sind es ja 10 %) ließ mich damals zweifeln. 
Und auch heute sind der Zweifler ja einige.

von S. Landolt (Gast)


Lesenswert?

> bestimmte Adreßwechsel ... z.B. 07ff->0800
Okay.
ATtiny85-20PU von '1706' bei 3.3 V mit internen 8 MHz:
Fuses: low: E2, high: DF, extended: FF
1
.include    "tn85def.inc"
2
    rjmp    init
3
.org    $07FE
4
main:
5
    nop
6
main_loop:
7
   rjmp     main_loop
8
9
init:
10
    ldi     r16,$FF
11
    out     PRR,r16
12
    out     PORTB,r16
13
    rjmp    main
Ohne das nop fließen 2.33, mit 2.65 mA, immerhin eine Differenz von 
knapp +14 %, bei allem Vorbehalt gegenüber meinen Messmöglichkeiten.

Jetzt aber verabschiede ich mich erstmal, komme mir schon vor wie ein 
Alleinunterhalter.

von Peter D. (peda)


Lesenswert?

Und wenn Du das NOP wegläßt und nur das ORG hochsetzt?

von S. Landolt (Gast)


Lesenswert?

Ebenfalls 2.65 mA.

von DanielV2 (Gast)


Lesenswert?

S. Landolt schrieb:
> Jetzt aber verabschiede ich mich erstmal, komme mir schon vor wie ein
> Alleinunterhalter.

Anno 1960 hat man Tresorkodes mit dem Stethoskop geknackt. Den Source 
eine
AVRs liest man in Zukunft mit nem Multimeter aus.

Also mach ruhig weiter, das ist Grundlageforschung.

von Carl D. (jcw2)


Lesenswert?

Stefanus F. schrieb:
> Carl D. schrieb:
>> Wenn man spitzfindig wäre, könnte man vermuten, daß gerade oder ungerade
>> Code-Adressen (müßte man im Listing nachsehen) einen Unterschied machen.
>
> Allerdings ist der wie alle anderen 16bit aligned.

Im Flash gibt es gerade und ungerade Wort-Adressen.

Nur weil wir an Bytes gewohnt sind (und vielleicht auch weil LPM 
Byteweise adressiert) bekommen wir das anders präsentiert. Der PC aber 
hat definitiv ein LSB, das "gerade platzierte" oder "ungerade 
platzierten" Befehle unterscheidet.

Selbst wenn man nur wenig mit ARM gearbeitet hat, vermißt man die 
AVR-Besonderheiten nicht wirklich.

Peter D. schrieb:
> Und wenn Du das NOP wegläßt und nur das ORG hochsetzt?

S. Landolt schrieb:
> Ebenfalls 2.65 mA.

also nicht das NOP, sondern die Position im Flash.

: Bearbeitet durch User
von M. K. (sylaina)


Lesenswert?

DanielV2 schrieb:
> Anno 1960 hat man Tresorkodes mit dem Stethoskop geknackt. Den Source
> eine
> AVRs liest man in Zukunft mit nem Multimeter aus.

Was fehlt dir denn an dem Code, den S. Landolt gepostet hat?

von Stefan F. (Gast)


Lesenswert?

S. Landolt schrieb:
> komme mir schon vor wie ein Alleinunterhalter.

Ich bin weiterhin am Thema interessiert, also auch an deinen Beiträgen.

von F. F. (foldi)


Lesenswert?

Ich auch.

von Mike J. (linuxmint_user)


Lesenswert?

Es wäre schon schön herauszufinden was es da für einen Effekt gibt.

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.