Forum: Mikrocontroller und Digitale Elektronik AVR WakeUp mit high Interrupt


von P. F. (pfuhsy)


Lesenswert?

Hallo zusammen,

ich stecke gerade etwas fest. Ich habe eine Schaltung mit RFM12 und den 
ATmega8. Der µC versetzt den RFM12 in Sleep und geht selber schlafen 
(Power-Down). Nach ein paar Sekunden wacht der RFM12 auf, weckt den µC 
über INT0 der wiederrum Datet sendet, danach gehen beide wieder 
schalfen. Soweit, sogut.

Es gibt noch ein Reed-Kontakt der an INT1 hängt und der ebenfalls den µC 
wecken soll. Damit soll er nur ein Bit setzten (Reed-Kontakt ausgelöst) 
und wieder schlafen gehen. Beim nächsten wecken vom RFM12 sendet er das 
gesetzte Bit und löscht es wieder. Dummerweise ist der Reed-Kontakt im 
Gut-Zustand geschlossen und auf Masse geschaltet. D.h. eigentlich soll 
der INT1 nur auslösen wenn der Pegel von 0 auf 1 geht. Nur laut 
Beschreibung der Sleep-Modi Power-Down, kann ich den µC nur über 
low-Pegel wecken. Da der Reed-kontakt aber im Gut-Zustand immer auf Low 
ist, hab ich ein Problem.

Hab jemand eine Idee wie ich das lösen kann ohne in meinen fertigen 
Prototypen löten zu müssen ?

von Peter D. (peda)


Lesenswert?

Peter F. schrieb:
> Hab jemand eine Idee wie ich das lösen kann

Einen ATmega88 nehmen.
Der hat PCINTs an jedem Pin.

von P. F. (pfuhsy)


Lesenswert?

Wie gesagt, die Platine ist fertig gelötet.

von Falk B. (falk)


Lesenswert?

Rein in Software wird es wohl nix werden. Man braucht einen anderen AVR 
oder einen externen Inverter.

von P. F. (pfuhsy)


Lesenswert?

Mist. Naja dafür sind ja Prototypen da.
Danke euch.

von San L. (zwillingsfreunde)


Lesenswert?

Peter F. schrieb:
> D.h. eigentlich soll
> der INT1 nur auslösen wenn der Pegel von 0 auf 1 geht. Nur laut
> Beschreibung der Sleep-Modi Power-Down, kann ich den µC nur über
> low-Pegel wecken.

Der Patient wacht nicht auf, obwohl ich ihm noch mehr Narkosemittel 
verabreichert habe!

Rein Softwaremässig nicht lösbar... das externe Signal zu invertieren 
dürfte jedoch eine ziemlich einfache Sache sein, benötigt ja kaum was.

Aus Fehlern lernt man, beim nächsten mal erinnerst du dich daran und 
wirst daran denken! ;)
Für dieses mal... shit happens x:

Edit: Upps, da waren einige schneller D:

: Bearbeitet durch User
von Falk B. (falk)


Lesenswert?

Oder doch?

Wenn der Schalter öffnet und wieder schließt, bevor der AVR durch das 
RFM12 aufgewacht ist, wird das entspechende Interrupt-Bit gesetzt. Das 
kann man echt per Interrupt auswerten oder auch nur das Bit abfragen. 
Wenn der Schalter öffnet und noch nicht wieder schließt, dann ist 
zumindest der Pin HIGH. Auch das kann man per Software auswerten.

Geht also doch in Software, man muss nur ein wenig kreativ sein ;-)

von P. F. (pfuhsy)


Lesenswert?

Der Interrupt löst doch im Gut-zustand ständig aus, weil er ja auf 
Low-level gestellt sein muss.

von Falk B. (falk)


Lesenswert?

Ach so, Power-Down. Mist, dann geht das nicht.

von P. F. (pfuhsy)


Lesenswert?

Mal so eine blöde Frage. Wenn ich jetzt einen anderen Kontakt nehme der 
im Gut-zustand offen ist, wäre das Problem ohne großen Aufwand gelöst. 
Aber benutzt man nicht bei Tür - und Fensterüberwachung bei Alarmanlagen 
einen Reedkontakt der geschlossen ist sobald die Einrichtung geschlossen 
ist??? Zumindest ist das so bei den Teilen die ich fest verdrahtet hab. 
Wenn ich den Kontakt auf High lege und mit einem Pulldown auf Masse 
ziehe, fließt doch im Gut-zustand, welcher meist vorhanden ist, immer 
ein Strom auch wenn es nur ein sehr kleiner ist. Aber das ist doch genau 
das was man im Batteriebetrieb verhindern will.

von P. F. (pfuhsy)


Lesenswert?

Und noch was. Gibt es eine Möglichkeit den Controller nur zur wecken, 
wenn sich der Pegel ändert ? Sonst ist er ja immer wach sobald die Tür 
offen bleibt. Ich glaube das muss ich Hardwaremäßig lösen oder ?

von Bernd K. (prof7bit)


Lesenswert?

Peter F. schrieb:
> wäre das Problem ohne großen Aufwand gelöst

Der geringste Aufwand wäre einfach den Atmega8 runterzulöten, zurück ins 
Museum bringen und stattdessen einen Atmega88 draufzupacken, das spart 
übrigens nicht nur Strom sondern auch Geld auf dieses fossile 
Museumsstück zu verzichten.

Der Atmega88 kann laut Datenblatt vom PCINT aus allen Schlafmodi geweckt 
werden und die beiden INT0 und INT1 Pins liegen auf PCINT18 und PCINT19.

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.