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ß.
Hast Du auch alle Eingänge auf definierte Pegel gelegt (z.B. Pullup aktiviert)? Floatende Eingänge sind tödlich für Batteriebetrieb.
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.
@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
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.
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.
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. ;)
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).
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.
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.
Mit dem Isopropanol vorsichtig sein, manche LCD-Polarisatorfolien mögen kein Isopropanol.
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?
Ein LDR gibt grundsätzlich keine Spannung ab. Es ist ein reiner Widerstand, dessen Wert sich durch die Beleuchtung ändert.
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 ;)
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.
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 ;)
@ 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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.