Hallo zusammen,
ich habe hier ein komisches Problem. Aber zuerst mal eine Beschreibung
zu meiner Schaltung. Die Schaltung wird mit 3 Mignon Batterien
betrieben.
An einem ATmega168PA hängt ein Funkmodul (RFM12B), ein
Luftfeuchtigkeitssensor (HH10D) und ein Temperatursensor (DS1621).
Es gibt drei 10K Pullups, zwei davon hängen am I2C und einer hängt am
Reset-Pin des ATmegas und es hängt ein 16 MHz Quarz am AVR. Der Quarz
vom RFM wird nicht benutzt. Die zwei Sensoren bekommen ihre
Spannungsversorgung über einen PORT-Pin des ATmegas. Die zwei Pullups
gehen auch auf diesen PORT-Pin.
Der ATmega sendet ein Signal an einen anderen Teilnehmer und wartet auf
einen Antwort. Nach dem Erhalt der Antwort, wird der RFM12 in den
Sleep-Mode geschickt und dessen Wakeup-Timer auf 10 Sekunden gesetzt.
Anschließend legt sich der ATmega in den Power-Down-Sleep-Mode. Nach 10
Sekunden wird der ATmega vom RFM12 geweckt und der ATmega beginnt wieder
von vorn. Das funktioniert soweit ganz gut. Aber der Stromverbrauch ist
komisch, im normalfall geht der Gesamtstromverbrauch der Schaltung auf
160µA runter, im Sleep-Mode. Jedoch kommt es immer wieder vor
(sporadisch) das der Stromverbrauch nur auf 880µA fällt. Der Fehler
tritt nicht systematisch auf. Mit 160µA würde ich mich zufrieden geben,
mit 3 Mignon Batterien würde ich es dann auf 1 jahr bringen. Der
Taktausgang vom RFM12 wird ordnungsgemäß abgeschaltet (Kontrolliert mit
Oszi). Also am RFM12 sollte es nicht liegen. Ich habe ein gutes
Voltcraft Multimeter, daran sollte es also auch nicht liegen.
Wer hat eine Idee, wo die 720µA sporadisch verbraucht werden??
Habe auch schon die zwei Pullups von der I2C Leitung entfernt. Fehler
ist aber geblieben. Die zwei Sensoren schalte ich auch vorher ab.
Der Fehler besteht leider weiterhin.
Cetin A. schrieb:> Habe auch schon die zwei Pullups von der I2C Leitung entfernt. Fehler> ist aber geblieben. Die zwei Sensoren schalte ich auch vorher ab.> Der Fehler besteht leider weiterhin.
Interne Pullaps nicht weggeschaltet und Ausgänge auf Low gelegt.
Kurt
Habe soeben alle drei externe Pullups sowie die beiden I2C Sensoren
entfernt. Der Fehler blieb weiterhin. Aber wie gesagt immer nur
sporadisch. Morgen werde ich mir die internen Pullups genau anschauen
und werde mich dann noch mal melden. Danke für die Hilfe bis jetzt. Bis
morgen. Gruß Cetin.
PS: Kann es auch am externen Quarz vom Avr liegen? Kann der sich
vielleicht irgendwie aufhängen und diesen Stromverbrauch verursachen?
Ich habe nämlich nicht die zwei Kondensatoren am Quarz nicht verbaut, da
ich die nicht da hatte.
Hochohmige Eingänge, die in der Luft hängen, können auch zu erhöhtem
Stromverbrauch führen.
Wenn meine Schaltung im Sleep einen höheren Strom aufnimmt als erwartet,
mache ich u.a. folgendes: Ich fahre mit dem Finger leicht an den Pins
der ICs entlang. Schwankt dabei die Stromaufahme, könnte ein offener
Eingang vorliegen.
Ich kenne mich mit den Atmegas nicht aus. Könnte es sein, dass z.B. der
ADC (falls dieser verwendet wird) vor dem Sleep kontrolliert
ausgeschaltet werden muss?
Cetin A. schrieb:> Jedoch kommt es immer wieder vor> (sporadisch) das der Stromverbrauch nur auf 880µA fällt.
Den beiden Sensoren sollte ja die Versorgung weggeschalten werden. Das
würde ich zuerst mal nachmessen (und zwar im Fehlerfall). Wenn sowohl an
deren Versorgung als auch an all deren IOs die Spannung auf 0V liegt,
sollten die nicht für den Extrastrom verantwortlich sein. Falls doch
noch irgendwo eine Spannung an ihnen anliegt, die den Sensor (parasitär)
powern könnte: Schaltungsdesign nochmal durchdenken ;-)
Wenn da alles passt würde ich die Versorgungen von µC und Funkmodul
auftrennen, so dass man deren Teilströme getrennt messen kann. Dann
weißt du wenigstens, wer von beiden den Strom zieht und kannst dich in
der weiteren Fehleranalyse darauf konzentrieren.
Kannst Du nicht auf den internen Taktgeber umstellen? Dann wäre es 1 (3)
Bauteil weniger.
10k Pullups und 3xMignon hören sich nach 5V-Design an, der HH10D ist
aber nur für 3V6 max. spezifiziert.
Wir brauchen einen Schaltplan!
Cetin A. schrieb:> Aber der Stromverbrauch ist> komisch, im normalfall geht der Gesamtstromverbrauch der Schaltung auf> 160µA runter, im Sleep-Mode. Jedoch kommt es immer wieder vor> (sporadisch) das der Stromverbrauch nur auf 880µA fällt.
Wie misst du den Strom? Wenn du das Multimeter auf Strommessung stellst
und einfach in die Versorgung einschleifst, dann fällt am Shunt des
Multimeters eine Spannung ab. Der Shunt ist meist zwischen 1Ω und 1000Ω.
Bei 1mA sind es also leicht 1 Volt.
Lese mal hier: http://www.eevblog.com/files/uCurrentArticle.pdf> Ich habe ein gutes Voltcraft Multimeter, daran sollte es also> auch nicht liegen.
Soso.
Alexander Schmidt schrieb:>> Ich habe ein gutes Voltcraft Multimeter, daran sollte es also>> auch nicht liegen.
Woher bekommt man denn bitte ein GUTES Voltcraft Multimeter?
Aber daran wird es wohl nicht liegen.
Hast Du mal die Stromaufnahmen der jeweiligen "Module" getrennt
gemessen? Finde doch erst mal raus, wer denn da den Strom zieht. Wenn du
dann weist wer der Böse ist, dann ist es wesentlich einfacher eine
Lösung zu finden.
Hobbyist
Strom im Mikroampere-Bereich mit einem Voltcraft Multimeter messen?
... ich denke das geht schief.
Kauf dir doch mal das hier: http://eevblog.myshopify.com/
Thomas
Ich kann mir vorstellen, dass ein Pin unterschiedlich gesetzt ist, je
nachdem ob die 720 uA zusätzlich verbraucht werden oder nicht.
Evtl hängt das mit dem letzen Bit einer Übertragung zusammen?
Den Tip mit dem Finger finde ich gut. ist da etwas raus gekommen?
So, da bin ich. Ich bin immer noch nicht weitergekommen. Hab jetzt mal
die freien Pins auf Ausgang geschaltet und konnte so den Stromverbrauch
im Sleep-Mode auf 2µA reduzieren. Aber zwischendrin schleicht sich die
72µA immer wieder ein.
APW schrieb:> Ich fahre mit dem Finger leicht an den Pins> der ICs entlang.
Das habe ich probiert. Bei mir schwankt da nichts.
Achim S. schrieb:> Den beiden Sensoren sollte ja die Versorgung weggeschalten werden. Das> würde ich zuerst mal nachmessen (und zwar im Fehlerfall).
Die zwei Sensoren werden zuverlässig ausgeschaltet, auch im Fehlerfall
liegt an ihnen keine Spannung an. habe ich nachgemessen.
Pete K. schrieb:> Kannst Du nicht auf den internen Taktgeber umstellen? Dann wäre es 1 (3)> Bauteil weniger.
habe ich auch schon probiert. Glwicher Fehler hier auch.
Pete K. schrieb:> 10k Pullups und 3xMignon hören sich nach 5V-Design an
Fast, ich benutze 1,2V Akkus.
Alexander Schmidt schrieb:> Wie misst du den Strom?
Ich messe in der Plus-Leitung vor der Schaltung, also den gesamtstrom
der Schaltung.
Hobbyist schrieb:> Woher bekommt man denn bitte ein GUTES Voltcraft Multimeter?
Wollte nicht mit meinem Multimeter protzen, wollte damit eigentlich nur
andeuten, dass man das Messgerät als Fehlerquelle ausschließen kann.
Dennis R. schrieb:> Evtl hängt das mit dem letzen Bit einer Übertragung zusammen?
Die Vermutung habe ich auch und habe mal versucht INT0 u. INT1 Pins am
Atmega vor dem Schlafen gehen auf einen definierten Zustand zu setzen,
leider kein Erfolg.
Ich habe sogar schon das Funkmodul gegen ein neues ausgewechselt. Kein
Erfolg.
Ich habe den Schaltplan und das Programm angehängt. Ich hoffe ihr könnt
mir da weiterhelfen, ich bin echt am Verzweifeln.
Hubert G. schrieb:> Ich hoffe du warst mit den Kondensatoren nicht tatsächlich so geizig wie> in deinem Schaltplan.
Ich habe nur das was auf dem Schaltplan ist. Dachte ich könnte auf die
Kondensatoren verzichten da ich keinen Spannungsregler, kein Netzteil
habe und weil die Schaltung nicht gerade viel Strom zieht. Das Maximum
liegt so ca bei 30mA.
Update:
Habe jetzt mal im Fehlerfall erst den HH10D abgesteckt und im zweiten
Fehlerfall habe ich dann den DS1621 abgesteckt um zu schauen ob diese
den Strom ziehen. Am Strom hat sich nichts geändert.
Also an den beiden I2C-Sensoren liegt es meiner Meinung nicht.
Update 2:
Jetzt bin ich ein Schritt weitergekommen. Habe jetzt mal im Fehlerfall
die zwei Sensoren und den Atmega abgezogen und an der 72µA Strom hat
sich nicht geändert. Also liegt es 100% am RFM12.
Der Wakeup-Timer funktiniert auf jeden fall denn sonst würde der Atmega
jede Sekunde senden, mit dem Wakeup-Timer sendet es so alle 10 Sekunden.
Irgendwelche Komponenten am RFM12 werden vermutlich nicht sauber
abgeschaltet. Aber wie kann ich das feststellen und vor allem warum
werden einige Komponenten nicht sauber abgeschaltet. Der SPI-Takt liegt
etwa bei 2MHz, das ist eigentlich ok.
Cetin A. schrieb:> Dachte ich könnte auf die> Kondensatoren verzichten
Falsch gedacht. Die Kondensatoren sind ja nicht dafür da, das Netzteil
glücklich zu machen, sondern den MC abzublocken. Deswegen schreibt das
auch Atmel ins Datenblatt und nicht der Hersteller der Mignon Akkus :-P
CMOS erzeugt bei jedem Schaltvorgang einen 'Shoot-through' der Gegentakt
Buffer, die zu Spitzen auf der Versorgungsspannung führen. Diese werden
von den Kondensatoren aufgefangen.
Ausserdem sind sie in deiner Anwendung mit dem RFM12 auch noch nützlich
als HF Blocker. Das RFM Modul sollte sowieso eine gut abgeblockte und
verdrosselte Versorgung bekommen, da es dann wesentlich besser empfängt.
Ausserdem wird AREF nicht auf +VCC gelegt, sondern auf einen 100nF o.ä.
Kondensator. Das Anschliessen an Vcc ist Quatsch, denn erstens kannst du
Vcc intern auswählen und zweitens verbaust du dir die Möglichkeit, mal
eine andere AREF auszuwählen.
Hallo nochmal,
ich hab es jetzt endlich zum Laufen bekommen. Ich habe die init-Routine
vom RFM und die Standby-Routine am AVR überarbitet.
Hier die alte Init-Routine:
1
voidrfm12_init(void)
2
{
3
for(uint8_tt=0;t<30;t++)_delay_ms(10);// Warten bis RFM12 hochgefahren
4
DDRB|=(1<<PB0);// PB0 (nFFS) als Ausgang (Wird nicht benötigt, wenn ein Pullup vorhanden ist)
5
PORTB|=(1<<PB0);// nFFS auf high ziehen (Wird nicht benötigt, wenn ein Pullup vorhanden ist)
6
DDRD&=~(1<<PIND2);// PD2(INT0) für den nIRQ-Pin
7
DDRD&=~(1<<PIND3);// PD3(INT1) für den FIFO-Interrupt
Cetin A. schrieb:> APW schrieb:>> Ich fahre mit dem Finger leicht an den Pins>> der ICs entlang.>> Das habe ich probiert. Bei mir schwankt da nichts.
Das ist korrekt.
Im Powerdown werden alle digitalen Eingänge abgeschaltet, die nicht als
Aufwachinterrupt programmiert sind.