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.
Jim Beam schrieb: > Strom-Peeks <pedanterie> Peaks (von peak, Spitze), nicht "peeks" (von peek, der Blick, bzw. to peek gucken, spähen) </pedanterie>
> 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.
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.