Forum: Mikrocontroller und Digitale Elektronik Stromverbrauch vom AVR Butterfly neu vs. alt, ATmega169P vs. ATmega169


von michel (Gast)


Lesenswert?

Ich habe hier zwei AVR Butterfly, einen alten mit ATmega169 (mit LDR) 
und einen neuen mit ATmega169P (ohne LDR).

Folgende Unterschiede sind mir aufgefallen: Bei dem neuen sind einige 
0-Ohm Widerstände an anderen Stellen, die gesamte Platine ist verzinnt 
und war sehr mit Flussmittel verklebt, der LDR fehlt und es ist ein 
neuer ATmega169P (das P steht wohl für picoPower) drauf.

Ich habe auf beiden Butterflys die exakt gleiche Software die in der 
Hauptschleife quasi folgendes macht:

while(1) {
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    sleep_mode();
    ab_und_zu_ein_paar_wenige_events_abarbeiten();
}

Soweit so gut, aber die Komischkeit ist folgende: Der neuere AVR braucht 
dabei 28µA und der alte braucht nur 5µA. Mit SLEEP_MODE_PWR_SAVE braucht 
der alte so 12µA, der neue auch 28µA.

Der Bootloader ist auf beiden auch identisch, ist der rev 04 bootloader 
der auf Atmels Butterfly-Website verfügbar ist. Hab den extra zum Test 
auf den gleichen Stand gebracht, auch die Fuses sind identisch.

Ich vermute das hat irgendwas mit der restlichen Schaltung zu tun, oder 
ist es doch was anderes? Irgend einen Grund muß es ja haben und die 
Neugier ist groß.

von Hc Z. (mizch)


Lesenswert?

Hast Du auch alle Eingänge auf definierte Pegel gelegt (z.B. Pullup 
aktiviert)?  Floatende Eingänge sind tödlich für Batteriebetrieb.

von michel (Gast)


Lesenswert?

Das macht beim Butterfly schon der Bootloader (Rev 04, source in 
app-note 109), hab es eben überprüft und noch ein Auszug daraus:

    // Enable pullups.
    PORTB = 0xFF;
    PORTE = 0xFF;

Zusätzlich zu dem was der Bootloader macht, setze ich noch einmal 
explizit die PINs die ich benutze auf input+pullup und mit dem 
Multimeter hab ich auch nochmal nachgemessen - ist alles an.

Ein PIN habe ich aber als Output und lass ihn abundzu wackeln, aber der 
muß auch keine bedeutende last treiben. In so fern glaub ich nicht daß 
es der ist (probier ich aber nochmal aus und mach auch den zum input mit 
aktivem pull-up).

Merkwürdig ist halt, es ist wirklich die gleiche Software auf beiden 
Butterflys. Hab ein chip-erase gemacht, dann den Rev 04 Bootloader drauf 
und dann bequem per usart den Rest. Und wenn man den Butterfly weiter im 
Bootloader seine Runden drehen lässt, da macht der ja auch ein sleep und 
da ist der gleiche Effekt. Scheint an der Hardware zu liegen, 
wahrscheinlich werde ich es nicht herausfinden was es ist aber 
vielleicht weiß einer etwas oder hat mehrere (alte und neue) Butterflys 
und kann es nachvollziehen.

von Falk B. (falk)


Lesenswert?

@michel (Gast)

>Merkwürdig ist halt, es ist wirklich die gleiche Software auf beiden
>Butterflys. Hab ein chip-erase gemacht, dann den Rev 04 Bootloader drauf

Hast du auch die AVR Fuses identisch gesetzt?

MfG
Falk

von Ungast (Gast)


Lesenswert?

Hab den Schaltplan jetzt nicht parat, aber schau mal nach wie der LDR 
angeschlossen ist.
Eventuell fliesst bei dir immer ein Strom über den internen Pullup durch 
den LDR-Spannungsteiler. Dann müsste es reichen dem Stromversorgungs-Pin 
des LDR den Pullup abzuschalten.

von michel (Gast)


Lesenswert?

Falk Brunner schrieb:
> Hast du auch die AVR Fuses identisch gesetzt?
Ja, alles Softwaremäßig identisch (Fuses, Bootloader, Rest). Nur die 
Hardware ist neuer und braucht mehr Saft (paar µA).

Ungast schrieb:
> Eventuell fliesst bei dir immer ein Strom über den internen Pullup durch
> den LDR-Spannungsteiler. Dann müsste es reichen dem Stromversorgungs-Pin
> des LDR den Pullup abzuschalten.

Gute Idee, aber... der Butterfly mit LDR braucht weniger Strom (ist der 
alte). Der LDR hat zwischen 20K und 100K, hängt mit einem 3K3 zwischen 
AVCC und GND, dazwischen geht es an den ADC.

Beim neuen Butterfly, ohne LDR, scheint selbiger durch einen Widerstand 
ersetzt zu sein. Der eine mit der Beschriftung 332 (3300 ohm) und ein 
weiterer mit 6x2 (x = unlesbar, aber halt min. 6K) könnte zusammen knapp 
10K sein, das wären dann bei 3V wieder etwas mehr als die paar µA. 
Außerdem ist der ADC aus.

Irgendwo versickert der Strom, um die paar µA ist es nicht schade aber 
es ist doch merkwürdig. Vor allem weil ja nicht viel drauf ist was 
schuld sein könnte (nen DataFlash ist da noch, den hab ich noch net 
angefasst, aber den hat der alte auch). Sehr wirr alles.

von michel (Gast)


Lesenswert?

Ich hab nun noch ein power_all_disable() aus avr/power.h eingebaut, nun 
ist in der tat der stromverbrauch noch nen knappes µA runter. Der neue 
Butterfly ist nun auf ~27 µA und der alte auf etwas unter 4µA. Aber der 
neue verbraucht noch immer mehr, nuja, egal. ;)

von Marko (Gast)


Lesenswert?

Hast du überprüft ob sie mit dem gleichen Takt laufen? Wenn der neue mit 
8MHz läuft statt mit 1MHz dann könnte es hinkommen (grob 8facher 
Stromverbrauch).

von michel (Gast)


Lesenswert?

Marko schrieb:
> Hast du überprüft ob sie mit dem gleichen Takt laufen? Wenn der neue mit
> 8MHz läuft statt mit 1MHz dann könnte es hinkommen (grob 8facher
> Stromverbrauch).

Fuses und Software identisch. Der läuft, wenn er läuft, mit dem 
internen RC-Oszillator (ca. 8MHz geteilt durch 8) welcher nach einem 
externen 32768Hz Quarz mittels OSCCAL kalibriert ist.

wenn er läuft... Im power-down modus sollte der takt eigentlich 
gestoppt sein. Wär er nur auf idle, dann könnte ich mit nem knappen mA 
rechnen statt mit ein paar µA.

von Marko (Gast)


Lesenswert?

Hmm. Die einzige andere Erklärung wären noch Kriechströme. Du hast ja 
geschrieben, dass die Platine mit Flussmitel zugekleistert war. Evtl. 
das ganze Ding mal in Isopropanol baden und mit ner Zahnbürste 
abbürsten?

Ich hab auch noch einen alten Butterfly mit LDR. Bei Gelegenheit werde 
ich mal den Stromverbrauch messen.

von Jadeclaw D. (jadeclaw)


Lesenswert?

Mit dem Isopropanol vorsichtig sein, manche LCD-Polarisatorfolien mögen 
kein Isopropanol.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

der LDR ist nicht zufällig irgendwie in der Lage das Baord mit 
zuversorgen?
Vieleicht speist der bei Bestrahlung ein paar uA ein. Erscheint mir zwar 
unwahrscheinlich aber wenn der LDR der einzige Unterschied bei beiden 
Boards ist...
Laufen den beide an der selben Spannungsquelle?

von Jadeclaw D. (jadeclaw)


Lesenswert?

Ein LDR gibt grundsätzlich keine Spannung ab. Es ist ein reiner 
Widerstand, dessen Wert sich durch die Beleuchtung ändert.

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

Jadeclaw Dinosaur schrieb:
> Ein LDR gibt grundsätzlich keine Spannung ab. Es ist ein reiner
> Widerstand, dessen Wert sich durch die Beleuchtung ändert.
Naja ich dachte halt vielleicht wie bei einer LED die man auch als 
Lichtsensor benutzen kann, wer weiß was das für ein LDR ist ;)

von Jadeclaw D. (jadeclaw)


Lesenswert?

Standardmäßig war da wohl ein Cadmiumsulfid-Element drauf, nach RoHS 
sind Cadmiumhaltige Bauelemente nicht mehr zulässig. Deshalb fehlt der 
bei neueren Butterfliegen. CdS-Elemente liefern keine Spannung.

von Simon K. (simon) Benutzerseite


Lesenswert?

Läubi .. schrieb:
> Jadeclaw Dinosaur schrieb:
>> Ein LDR gibt grundsätzlich keine Spannung ab. Es ist ein reiner
>> Widerstand, dessen Wert sich durch die Beleuchtung ändert.
> Naja ich dachte halt vielleicht wie bei einer LED die man auch als
> Lichtsensor benutzen kann, wer weiß was das für ein LDR ist ;)

Nur gibt es bei einem LDR keine Sperrschicht oder Dotierung ;)

von Falk B. (falk)


Lesenswert?

@ OP

Mach doch einfach mal den AVR KOMPLETT dicht, sprich alles Pins als 
Eingang mit Pull-Up, Power down Sleep Mode OHNE aktiviere Interrutps 
etc. Dann sollte nur noch der Leckstrom <1uA fliessen. Wenn nicht, zieht 
irgendwas auf deiner Schaltung Saft. Hast du den Schaltplan des neuen 
Boards? Kannst du ja mal posten.

MFG
Falk

von michel (Gast)


Lesenswert?

Falk Brunner schrieb:
> Mach doch einfach mal den AVR KOMPLETT dicht, sprich alles Pins als
> Eingang mit Pull-Up, Power down Sleep Mode OHNE aktiviere Interrutps

Wer das liest: Vorsicht mit dem PINs vom LCD. Ein LCD kann bei 
Gleichspannung durch Elektrophorese schädigt werden, auch durch den 
mickrigen Strom von den pull-ups. Wenn man den LCD-Controller abstellt 
oder garnicht erst aktiviert, dann wirklich alle LCD-PINs auf das 
gleiche Potential, entweder inputs mit pull-ups oder outputs auf GND 
(alles auf 0).

Der LCD-Controller des AVR betreibt die LCD-Segmente mit einer 
Wechselspannung, dabei wird auf Gleichspannungsfreiheit geachtet.

Des weiteren hängen an den PINs ja noch andere Teile die ggf. den Strom 
aus den pull-ups konsumieren. Rein theoretisch könnt was dabei sein das 
vielleicht auch Probleme mit dem bisschen pull-up-strom hat.

> etc. Dann sollte nur noch der Leckstrom <1uA fliessen. Wenn nicht, zieht
> irgendwas auf deiner Schaltung Saft.

Trotz der oben geschilderten Bedenken habe ich es doch gemacht, er zog 
dann über 130µA. Der Butterfly hat keinen Schaden genommen. 
Vollständiges Testprogramm:

#include <avr/io.h>
#include <avr/power.h>
#include <avr/sleep.h>

__attribute__((OS_main))
int main()
{
        DDRA = DDRB = DDRC = DDRD = DDRE = DDRF = DDRG = 0x00;
        PORTA = PORTB = PORTC = PORTD = PORTE = PORTF = PORTG = 0xFF;
        while(1) {
                power_all_disable();
                sleep_mode(SLEEP_MODE_PWR_DOWN);
                sleep_mode();
        }
        return 0;
}


> Hast du den Schaltplan des neuen Boards? Kannst du ja mal posten.

Das wär schön wenn es den Schaltplan für den neuen gäbe, aber ich fand 
ihn nirgends.

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.