Liebe Forengemeinde,
ich arbeite an einem kleinen "Fernsteuerungsprojekt", in dem ich einen
Atmega328, programmiert über Arduino, mit einem ATK SIM900 Modul
verheirate.
Solange der Mikrocontroller nichts zu tun hat, ist er im Sleepmode. Es
gibt zwei externe Interrupts, die den Controller aufwecken, eine Taste
(die grüne in den Bildern) und das Klingelsignal vom SIM900 Board (über
das gelbe Kabel). Das funktioniert soweit ganz gut. Auch die serielle
Kommunikation zwischen SIM900 und µC klappt gut.
Nun stelle ich fest, daß bei einem Anruf auf das SIM900 der Controller
schon vor dem Interrupt des Klingelsignals losläuft und ich frage mich
warum. Tatsache ist, daß er nicht durch einen der externen Interrupts
geweckt wird, da ich in der ISR die Variable "InterruptFlag" auf 0 bzw.
1 setze. Wenn ich die Variable abfrage (über RS232-Ausgabe), dann ist
sie aber 2, wie sie in der main loop kurz vor dem Schlafengehen gesetzt
wird.
Zwei Ideen habe ich selbst dazu, jedoch tu' ich mir schwer bei der
Überprüfung. Erstens könnte der µC durch eine Ausgabe des SIM900 auf der
RS232 Leitung geweckt werden (hab' ich aber nicht explizit programmiert
und deswegen würde mich das wundern) und zweitens ist der Controller
sehr nahe bei der Antenne. Meint Ihr, die HF-Strahlung könnte den Atmega
aufwecken?
Ich bin für jede Idee dankbar!
Vielen Dank und Grüße, Nino.
PS: Drei Bilder und ein abgespeckter, lauffähiger Code anbei.
Überprüfe erstmal ob wirklich ALLE Ints definitiv abgeschaltet sind,
besonders bei Dir alle INT, die mit der ser. Schnittstelle zu tun haben,
verlasse Dich niemals auf vorgebliche Default-Werte.
Das SIM-Modul zieht wenn es aktiv wird, ganz erhebliche Strom-Peeks
(mehrere Amp) die i.d.R. nur durch ausreichende Elko-Pufferung
abgefangen werden können, damit habe ich mehr als reichlich Erfahrung...
Und es MÜSSEN LoESR-Elkos UNMITTELBAR an der SIM-Versorgung sein,
Großenordnung 1000µF.
Vielleicht stören den Controller diese Peeks.
Nino K.L. schrieb:> Solange der Mikrocontroller nichts zu tun hat, ist er im Sleepmode.
In WELCHEM? Es gibt verschiedene und es gibt je nach Modus sehr
unterschiedlich begrenzte Möglichkeiten, ihn daraus wieder zu erwecken.
> Meint Ihr, die HF-Strahlung könnte den Atmega aufwecken?
Ja, und Schwankungen in der Stromversorgung. Deswegen wäre ein
Schaltplan hilfreicher, als der Quelltext.
Bist du denn sicher dass er aufwacht, und nicht resetted wird?
Vielen Dank für Eure Antworten.
Etwas eigenartiges ist passiert: Ich hatte heute früh bei der ersten
Inbetriebnahme des Gerätes seit meinem obigen Beitrag die
RS232-Verbindung zwischen µC und SIM900 gekappt. Und siehe da - das
Problem war weg. Somit war ich sicher, daß es damit einen Zusammenhang
hat. Allerdings habe ich jetzt die Kabeln wieder angesteckt und das
Problem bleibt verschwunden. Ich kenn' mich nicht mehr aus?!?.
Unabhängig davon möchte Ich Eure Anregungen kurz kommentieren:
Die beiden Platinen werden aus unterschiedlichen Energiequellen
gespeist: Die µC-Platine derzeit über die ISP-Schnittstelle und damit
vom Computer über USB. Das SIM900 Modul hängt an einem Labornetzteil,
das 6,5 Ampere schafft und 2x 4.700 nF Elkos eingebaut hat. Die Elkos
sind also ca. 0,5 Meter Leitungslänge vom SIM900 entfernt.
Der Controller befindet sich, wie in der .ino Datei ersichtlich, im
Sleepmode SLEEP_MODE_PWR_DOWN.
Ich bin sicher, daß der Controller aufgewacht ist und kein Reset
durchgemacht hat, da ich im ungekürzten Code viele Textausgaben zur
Kontrolle auf die RS232 Schnittstelle zum Computer sende. So konnte ich
beobachten, daß die Programmschleife durchlaufen wird und davor nicht
der Setup-Bereich. Ebenso konnte ich auf diese Weise feststellen, daß
keine der beiden ISR-Routinen durchlaufen wurde.
Jetzt liegt mir nur noch eine Frage auf dem Herzen: Wie kann ich
überprüfen, ob die Interrupts ausgeschalten sind, die einen Zusammenhang
mit der seriellen Schnittstelle zu tun haben...?
Ich danke sehr für Eure Hilfe!
Nino.
Aus dem Powerdown kommt man nur mit einem Low-Level Interrupt oder
Pin-Change Interrupt wieder raus.
Man müßte mal in der Doku nachschauen, welchen das "attachInterrupt"
benutzt und wie freigibt.
Ich benutze Interrupts immer direkt ohne irgendwelche Lib-Funktionen.
Daher weiß ich auch nicht, welche Arduino-Pinnummer welchem AVR-Pin
entspricht.
Nino K.L. schrieb:> da ich im ungekürzten Code viele Textausgaben zur> Kontrolle auf die RS232 Schnittstelle zum Computer sende.
Es könnte sein, daß ein laufender UART-Transfer das Powerdown
verhindert.
Nino K.L. schrieb:> Die beiden Platinen werden aus unterschiedlichen Energiequellen> gespeist:
Sowas ist ne ganz schlechte Idee. Es kann dann zu Ausgleichsströmen über
IO-Pins kommen, die die nicht gespeiste Baugruppe schädigen können oder
abstürzen lassen.
Nino K.L. schrieb:> Das SIM900 Modul hängt an einem Labornetzteil,> das 6,5 Ampere schafft
Eine Baugruppe, die nur wenige mA zieht, würde ich nie über ein
Monsternetzteil speisen. Im Fehlerfall liefert das Netzteil genug Strom
nach, um aus dem Chip Rauch aufsteigen zu lassen.
Peter D. schrieb:> Nino K.L. schrieb:>> Das SIM900 Modul hängt an einem Labornetzteil,>> das 6,5 Ampere schafft>> Eine Baugruppe, die nur wenige mA zieht, würde ich nie über ein
Um 2 Watt HF zu erzeugen, braucht man hier mehr als 'wenige mA'..
> Eine Baugruppe, die nur wenige mA zieht, würde ich nie über ein> Monsternetzteil speisen.
Ich gehe doch mal schwer davon aus, dass die Nutzung des Labornetzteil
hier nur ein Provisorium zum Experimentieren ist. Und genau dafür sind
diese Geräte meiner Meinung nach auch gedacht.
Oh, danke für den Tip mit den Ausgleichsströmen. Daran hatte ich gar
nicht gedacht!
UART Kommunikation kann Power-down verhindern, auch daran habe ich Laie
natürlich nicht gedacht. Durch die Textausgabe "Goto sleep" habe ich in
der Tat keine Garantie, daß der Controller schläft. Trotzdem denke ich,
daß er geschlafen hat, denn sonst wäre ja die Schleife weitergelaufen
und es hätten weitere Textkommentare kommen müssen.
Wie schon richtig vermutet wurde, betreibe ich die Anordnung nur in der
Aufbauphase mit der oben beschriebenen Energieversorgung. Am Schluß
kommt noch ein fertiges 12V-Fixspannungsnetzteil und eine zusätzliche
Platine mit 5V-Spannungsregler für den µC. Da wird dank Eurer Hinweise
ausreichend Pufferkapazität drauf sein und auch Filter, damit da nichts
zum Controller durchkommt.
Die Anordnung läuft jetzt übrigens immer noch fehlerfrei und ich weiß
nicht, welches Problem ich hatte. Es tut mir sehr leid, daß ich Euch aus
diesem Grund auch die Ursache nicht nennen kann. Ich freue mich aber
sehr über Eure Hilfsbereitschaft und möchte deswegen hier nochmal großen
Dank an alle aussprechen, die mir geholfen haben und auch anderen
helfen!
Gruß! Nino.