ACD ist aus
AC ist aus
Watchdog ist aus
Timer ist aus
Digitaler Input ist aus (auch Puffer)
Brownout Detector ist aus
AD-Ref. muss aus sein, da von keinem Gerät verwendet
Was hängt an den Pins? CMOS Pins auf Halbmast verbrauchen Strom, d.h.
man sollte irgendwie dafür sorgen, dass die Pins entweder low oder high
Pegel haben, aber nicht floaten. Und Strom sollte dabei natürlich nicht
fliessen.
Also Pins wenn es passt als Ausgang setzen, oder extern irgendwas
anschliessen, oder wenn offen die Pullups aktivieren.
an PB0 und PB3 hängen LEDs, an PB4 (Input) hängt im wesentlich nur ein
Draht, bzw. ein durchtrennter Draht. Werden die Drahtenden nicht
berührt, d.h. ist der Stromkreis offen, soll das Gerät einschlafen und
bei Berührung aufwachen. An der Hardware kann es aber eigentlich nicht
liegen, zumal ich den Schaltkreis von jemandem bekommen habe, der darauf
vorher ein asm Programm laufen ließ welches tatsächlich nur 0.2
mikroampere im powerdown Zustand benötigte.
Hab eben probehalber den internen pullup Widerstand für PB4 aktiviert,
leider ohne Erfolg :(
EDIT: zum messen benutze ich das Voltcraft VC-20
mit einem Voltcraft VC-20?
Das hat im Meßbereich 400µA eine Genauigkeit von +-2% plus 8 Digits. Und
kalibriert isses sicher auch nicht...
In dem Fall ist es eher ein Schätzeisen...
Gruß
Fabian
Fabian B. wrote:
> mit einem Voltcraft VC-20?> Das hat im Meßbereich 400µA eine Genauigkeit von +-2% plus 8 Digits. Und> kalibriert isses sicher auch nicht...> In dem Fall ist es eher ein Schätzeisen...>> Gruß> Fabian
Kann mir nicht vorstellen, dass es etwas mit der Messgenauigkeit des
Multimeters zu tun hat. Als noch besagtes asm Programm im Flash-Speicher
war, hab ich mit dem gleichen MM gemessen und noch mit einem weiteren,
geliehenen, und es wurden mir von beiden Geräten 0.2uA angezeigt.
>...an PB4 (Input) hängt im wesentlich nur ein Draht,>bzw. ein durchtrennter Draht...
So wird i.A. ein offener Eingang definiert, oder?
CMOS-Eingänge sollen nicht offen gelassen werden.
Wurde hier von Andreas Kaiser schon angesprochen:
>CMOS Pins auf Halbmast verbrauchen Strom, d.h. man sollte irgendwie>dafür sorgen, dass die Pins entweder low oder high Pegel haben,>aber nicht floaten.
Also:
Eingänge (zumindest hochohmig) auf irgendeinen definierten Pegel ziehen.
Ok, ok, wer lesen kann ist klar im Vorteil.
>...Widerstand für PB4 aktiviert, leider ohne Erfolg :(
Wie sieht es mit den anderen Pins aus?
Irgendwelche offene Eingänge?
Unbenutzte (offene) Pins am besten als Ausgang definieren.
also, habe obigem Testprogramm jetzt folgendes hinzugefügt:
DDRB=0xff; // PB1-5 = Ausgang
DDRB&=~(1<<4); // PB4 = Eingang
PORTB|=(1<<4); // Pullup für Eingang
Mehr I/O pins gibt`s auf dem tiny13 ja nicht.
Das MM werde ich nachher auf jeden Fall noch mal genau überprüfen und
mir vielleicht noch eins vom Nachbar leihen, sobald der wieder da ist.
So, hab jetzt das Sourcefile des asm-Programms besorgt, möchte aber noch
mal Rücksprache mit dem Autor halten, bevor ich es hier veröffentliche.
In jedem Fall zeigt das MM bei dem asm-Programm nach wie vor 0.2mA an,
somit kann es daran schon mal nicht liegen. :(
@ Dominik Hensler (xcc)
>In jedem Fall zeigt das MM bei dem asm-Programm nach wie vor 0.2mA an,
Das sind 200uA.
>somit kann es daran schon mal nicht liegen. :(
Was bezweifelt werden darf. In deinem ersten Posting hiess es noch
"verbrauchen. Folgendes Testprogramm verbraucht jedoch ganze 2.6
Mikroampere :"
Kann es ein, dass du mit Mikro und Milliampere nicht so ganz klar
kommst?
MFG
Falk
P.S. Ich hab mal an nem Mega32 bzw. Tiny2313 mit ner UltrabilligGurke
von Volkraft gemessen, kleinster Messbereich 2000uA (Mikro Ampere). Dort
sieht man im Power Down etwa 1uA MIKRO Anzeigewert. Wieviel es WIRKLICH
sind kann ich mangels sicherer Vergleichsmessung mit einem guten
Messgerät nicht sagen. Aber ich glaube Atmel da einfach mal.
Wenn du WIRKLICH 2.6uA (MIRKO) misst, und doch schon alles abgeschaltet
hast, ist es wahrscheinlich ein Kriechstrom, verurscht durch Dreck, Fett
oder Flussmittel. Wenn den Tiny gesockelt ist, zieh den mal raus und
miss nochmal den Rest der Schaltung + Platine.
Falk Brunner wrote:
> @ Dominik Hensler (xcc)>>>In jedem Fall zeigt das MM bei dem asm-Programm nach wie vor 0.2mA an,>> Das sind 200uA.>>>somit kann es daran schon mal nicht liegen. :(>> Was bezweifelt werden darf. In deinem ersten Posting hiess es noch>> "verbrauchen. Folgendes Testprogramm verbraucht jedoch ganze 2.6> Mikroampere :">> Kann es ein, dass du mit Mikro und Milliampere nicht so ganz klar> kommst?>> MFG> Falk>
Nein, das war schlicht ein Tippfehler. Sollte uA heißen.
> P.S. Ich hab mal an nem Mega32 bzw. Tiny2313 mit ner UltrabilligGurke> von Volkraft gemessen, kleinster Messbereich 2000uA (Mikro Ampere). Dort> sieht man im Power Down etwa 1uA MIKRO Anzeigewert. Wieviel es WIRKLICH> sind kann ich mangels sicherer Vergleichsmessung mit einem guten> Messgerät nicht sagen. Aber ich glaube Atmel da einfach mal.>> Wenn du WIRKLICH 2.6uA (MIRKO) misst, und doch schon alles abgeschaltet> hast, ist es wahrscheinlich ein Kriechstrom, verurscht durch Dreck, Fett> oder Flussmittel. Wenn den Tiny gesockelt ist, zieh den mal raus und> miss nochmal den Rest der Schaltung + Platine.
Der Tiny ist nicht gesockelt, und ich messe tatsächlich 2.6 Mikroampere.
Dass ein Kriechstrom die Ursache ist, halte ich für ausgeschlossen, da
ich ja wie gesagt nach aufflashen des alten asm-Programms eine
Stromaufnahme von nur 0.2uA messe.
@Dominik Hensler (xcc)
>ich ja wie gesagt nach aufflashen des alten asm-Programms eine>Stromaufnahme von nur 0.2uA messe.
Dann ist es zu 99% ein Softwarefehler. Nochmal GENAU prüfen.
MfG
Falk
Ja, davon gehe ich auch aus. Aber was kann es nur sein?
ADC: Ausgeschaltet durch ADCSRA&=~(1<<ADEN);
AC : Ausgeschaltet durch ACSR|=(1<<ACD);
Bei beiden wäre die Stomaufnahme sowieso wesentlich höher als
2.6uA-0.2uA.
Browout Detector: Kann nur durch Fusebit aktiviert werden
Watchdog: Per default aus, außerdem wäre Stromaufnahme höher.
Inner Voltage Reference: Muss aus sein, da AC und ADC aus sind.
Digitaler Input:
DIDR0|=(1<<AIN1D);
DIDR0|=(1<<AIN0D);
DIDR0|=(1<<ADC0D);
DIDR0|=(1<<ADC1D);
DIDR0|=(1<<ADC2D);
DIDR0|=(1<<ADC3D);
einschleißlich Puffer ausgeschaltet.
Port Pins: DDRB=0xff; // PB1-5 = Ausgang
DDRB&=~(1<<4); // PB4 = Eingang
PORTB|=(1<<4); // Pullup für Eingang
Vier von fünf Pins sind Ausgänge, einer ist als Eingang konfiguriert.
Wüsste nicht, was da noch Strom ziehen sollte?
Vielleicht irgendeine besonderheit in der sleep_cpu funktion, die ich
nicht beachtet hab?
@Dominik Hensler (xcc)
>Port Pins: DDRB=0xff; // PB1-5 = Ausgang> DDRB&=~(1<<4); // PB4 = Eingang> PORTB|=(1<<4); // Pullup für Eingang>Vier von fünf Pins sind Ausgänge, einer ist als Eingang konfiguriert.>Wüsste nicht, was da noch Strom ziehen sollte?
Hmm, kann es ein, dass du für den einen Eingang mit interen Pull-Up die
Digital Disable Funktion NICHT nutzen darfst, weil du sonst deinen
Pull-Up auf Masse ziehst?
DIDR0|=(1<<ADC2D);
Das würde ich mal rausnehmen.
MFG
Falk
Volker wrote:
> Dominik Hensler wrote:>>So, hab jetzt das Sourcefile des asm-Programms besorgt,...>> Wo liegt dann das Problem?
Bin gerade dabei, das Assembler Programm nach Auffälligkeiten zu
durchsuchen. Ist aber ein ziemlicher Brocken, nicht kommentiert, und
meine ASM-Kentnisse sind eher bescheiden.
So, habe jetzt die Genehmigung des Autors das Programm zu
veröffentlichen (-> Anhang).
Beide Programme, obiges und das angehängte, benutzen die gleiche
Schaltung, eines hat eine Stromaufnahme von 2.6uA, das andere eine von
0.2uA.
Zur Schaltung: An dem Tiny13 befinden sich zwei LEDs, eine an PB0, die
andere an PB3. An PB4 (Eingang) befindet sich ein durchtrennter Draht
als Auslöser.
>habe jetzt die Genehmigung des Autors das Programm zu veröffentlichen...
Für die Veröffentlichung so eines Codes hätte ich meine Genehmigung auch
solange wie irgend möglich verweigert ;-)
>Für die Veröffentlichung so eines Codes hätte ich meine Genehmigung auch>solange wie irgend möglich verweigert ;-)
Ich bin auch mittlerweile schon kurz davor aufzugeben :/
Volker: Watchdog ist sowieso aus :)
Ich vermute mal, dass es entweder an der Konfiguration irgendeines Pins
liegt, oder an der internen Referenz.
Wenn ich dein C-Programm bei mir compiliere (avr-libc 1.6.2), dann
initialisiert er in main nochmal den Stackpointer und zwar SPL und wie
es aussieht SPH, obwohl es den beim Tiny13 laut meinem Datenblatt gar
nicht gibt. Somit schreibt er in ein reserviertes Register (0x3e) den
Wert 0.
Keine Ahnung ob es was damit zu tun hat, ich kann es auch nicht selbst
überprüfen da ich keinen Tiny13 habe.
Versuch doch mal folgendes:
Volker wrote:
> Wenn ich dein C-Programm bei mir compiliere (avr-libc 1.6.2),
Die avr-libc compiliert nichts, das tut der Compiler. WinAVR 20080610
(gcc 4.3.0) jedenfalls lässt innerhalb von main() SP in Frieden.
Und die Runtime davon (das jetzt ist die avr-libc) initialisiert nur
SPL.
main() sieht dabei so aus:
00000048 <main>:
48: 80 e3 ldi r24, 0x30 ; 48
4a: 85 bf out 0x35, r24 ; 53
4c: 88 95 sleep
4e: ff cf rjmp .-2 ; 0x4e <main+0x6>
@xcc: probiers doch mal mit den Sleep-Macros aus der sleep.h anstatt mit
dem inline asm Befehl. Ich komme jedenfalls bei mir mit C auf ca 300nA.
Gruß
Fabian
>@xcc: probiers doch mal mit den Sleep-Macros aus der sleep.h anstatt mit>dem inline asm Befehl. Ich komme jedenfalls bei mir mit C auf ca 300nA.
schon geschehen, hab sowohl versucht sleep_enable(), set_sleep_mode()
und sleep_cpu() zu verwenden, als auch in obigem Programm nur das
asm-sleep durch sleep_cpu() zu ersetzen. Ob ich die Makros aus sleep.h
benutze oder nicht, solange ich winavr/avr-gcc verwende komme ich immer
auf 2.6uA. Nicht so mit AVR-Studio und reinem Assemler.
Falk Brunner wrote:
> Du muss noch die IO-Ports auf Ausgang schalten bzw. den Pull-Up> einschalten.
Muss man das auch, wenn die IO Ports angeschaltet sind ?
Hallo Dominik,
bist du inzwischen weiter gekommen? Ich habe vielleicht ein ähnliches
Problem und nach dem googlen ist mir überhaupt nicht mehr klar, wie ich
die Sleepmodes richtig setze.
Dominik Hensler wrote:
> hi>> laut Datenblatt soll der Tiny13 im power down mode 0.2 Mikroampere> verbrauchen. Folgendes Testprogramm verbraucht jedoch ganze 2.6> Mikroampere
Und mit was hast Du das bittesehr gemessen und vor allem: wie? Hast Du
nur die Leistungsaufnahme des AVR selber gemessen? Dir ist hoffentlich
klar dass Du dazu ein Messgeraet mit entsprechender Genauigkeit
brauchst. Und die Leistungsaufnahme ist auch immer vom Systemtakt
abhaengig. Fuer welchen Systemtakt sind die 0.2uA angegeben?
Michael G. wrote:
> Und die Leistungsaufnahme ist auch immer vom Systemtakt> abhaengig. Fuer welchen Systemtakt sind die 0.2uA angegeben?
Na mal wieder die Finger nicht ruhig halten können vor dem Einschalten
des.....
Anstatt hier wieder Blödsinn zu verbreiten hättest du selber auch mal
nachsehen können. Frage mich, was es DIR geholfen hätte, wenn du den
Systemtakt dazugewußt hättest wenn es denn einen geben würde für diesen
Fall.
@avion23:
Also im Powerdown-Mode ist überhaupt keine Taktquelle mehr aktiv, also
ist auch der Strom in diesem Fall nicht vom Takt abhängig. Siehe
Datenblatt S.30/31.
Solange du keine Vergleichsmessung machen kannst (wie oben im Thread),
würde ich den Meßwert auch anzweifeln. Es sei denn, dein Meßgerät ist
über alle Zweifel erhaben.
Hallo,
@Michael G.: was hackt ihr eigentlich immer auf dem Messgerät rum?
Wenn ich in einer unveränderten Schaltung mit Software A den Stron x
messe und mit Software B das gelicge Messgerät mehr als den 10-fachen
Strom anzeigt, ist was seltsam.
Selbst dann, wenn das Baumarktteil statt µA mA oder kA anzeigt oder um
50% abweicht.
Ich glaube auch nicht, daß es für den Threadstarter sonderlich wichtig
ist, ob es 0,2µA oder 0,4µA sind und die 2,6µA vielleicht 2,0µA oder
5,2µA sind.
Die Differenz ist einfach zu groß.
Ich habe letztens ähnliche Übungen mit einer Schaltung gemacht, mit
einem Tiny85 und einer diskreten FET-Vollbrücke hintendran messe ich
jetzt ca. 10µA, allerdings ist das für mich zum Glück völlig
ausreichend.
Gruß aus Berlin
Michael
Michael U. wrote:
> Ich glaube auch nicht, daß es für den Threadstarter sonderlich wichtig> ist, ob es 0,2µA oder 0,4µA sind und die 2,6µA vielleicht 2,0µA oder> 5,2µA sind.
Hast du Recht, aber men Posting bezog sich auf das Posting des
Threadstarters sondern von avion23 (4 Postings back).
Außerdem auf die Bemerkung vom linuxgeek, der was von Taktfrequenz
faselte.
Ansonsten stimme ich dir voll zu.
Gruß 900ss