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