Forum: Mikrocontroller und Digitale Elektronik Wodurch wird dieser Controller aufgeweckt?


von Nino K.L. (Gast)


Angehängte Dateien:

Lesenswert?

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.

von Jim Beam (Gast)


Lesenswert?

Ü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.

von c-hater (Gast)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Jim Beam schrieb:
> Strom-Peeks

<pedanterie>
Peaks (von peak, Spitze), nicht "peeks" (von peek, der Blick, bzw. 
to peek gucken, spähen)
</pedanterie>

von Stefan F. (Gast)


Lesenswert?

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

von Nino K.L. (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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.

von funker (Gast)


Lesenswert?

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'..

von Stefan F. (Gast)


Lesenswert?

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

von Nino K.L. (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.