Forum: Mikrocontroller und Digitale Elektronik Attiny 13 kommt nicht mehr aus Sleepmodus


von Jörg S. (joschi1711)


Angehängte Dateien:

Lesenswert?

Irgendwie ist an dem Code noch was falsch, wenn der Attiny nach 3min in 
den Sleep-Modus geht weckt er nicht mehr auf.
kann sich das mal einer anschauen?
Hab schon einiges versucht, komme aber nicht zurecht.

von Thomas E. (thomase)


Lesenswert?

Jörg Schumann schrieb:
> Hab schon einiges versucht, komme aber nicht zurecht.
Was ist denn an INT0 angeschlossen? Und wo ist der Pullup für den Pin?

mfg.

von Jörg S. (joschi1711)


Angehängte Dateien:

Lesenswert?

habe diePlatine mal hochgeladen,

an Grün ist ein Kontakt der gegen Masse schließt bei der Betätigung der 
Wählscheibe.

Braun ist geschlossen gegen Masse und öffnet beim Wählen so oft wie der 
Zahlenwert der Wählscheibe.

von Thomas E. (thomase)


Lesenswert?

Jörg Schumann schrieb:
> Braun ist geschlossen gegen Masse und öffnet beim Wählen so oft wie der
> Zahlenwert der Wählscheibe.

Der braune liegt am INT0 und ist in Ruhe geschlossen. D.h. der INT0 wird 
ausgelöst.
Denn:
>MCUCR = 0b00000000;

ICS0 = ICS1 = 0 = Low-Level-Interrupt
Genau das hast du in Ruhelage. Und beim Wählen wackelt der Pin auch 
noch.

Jörg Schumann schrieb:
> an Grün ist ein Kontakt der gegen Masse schließt bei der Betätigung der
> Wählscheibe.
Der ist der richtige, um das Ganze in Gang zu setzen.

Entweder vertauscht du beiden Anschlüssen und wertest die Wählimpulse an 
PB0 aus oder du guckst dir mal den Pin-Change-Interrupt an und weckst 
den Controller über PB0 auf.

Und wenn PB0 1 ist, legst du ihn wieder schlafen. Da musst du keine 3 
Minuten warten.

mfg.

von Jörg S. (joschi1711)


Lesenswert?

Danke für die Hilfe, ich werde das mal versuchen umzusetzen, ich bin 
nicht so der CC-Programierer ^^.

von Jörg S. (joschi1711)


Angehängte Dateien:

Lesenswert?

So jetzt geht er nach 3min schlafen (ca. 100µA Verbrauch)
und weckt bei Betätigung wieder auf (ca. 830µA Verbrauch)

habe den Code nochmal raufgeladen, falls da noch was unfeines und 
falsches zu sehen ist wäre ich für Hinweise dankbar, da ich nun halt 
noch am lernen bin ^^.
Danke

von Falk B. (falk)


Lesenswert?

@  Jörg Schumann (joschi1711)

>So jetzt geht er nach 3min schlafen (ca. 100µA Verbrauch)

Zuviel für PowerDown. Da zieht irgendwas noch Strom. Ein Pull-Up, der 
auf Masse gezogen wird oder ein Eingang der offen ist ohne Pull-Up, 
siehe Sleep Mode.

>und weckt bei Betätigung wieder auf (ca. 830µA Verbrauch)

Könnte passen.

MfG
Falk

von Jörg S. (joschi1711)


Lesenswert?

Ja der Zählschalter der Wählscheibe an INT0 liegt in Ruhe auf Masse.
Nur wie soll mann das umgehen?

von Edi R. (edi_r)


Lesenswert?

Jörg Schumann schrieb:
> Ja der Zählschalter der Wählscheibe an INT0 liegt in Ruhe auf Masse.
> Nur wie soll mann das umgehen?

Wenn ich das richtig verstanden habe, brauchst Du den nsi 
(Impulskontakt) ja nicht, während der Controller im Sleep-Mode ist. Also 
kannst Du den Pull-Up des Portpins auch abschalten. Nach dem Aufwecken 
mit dem nsa (Arbeitskontakt) schaltest Du dann den Pull-Up wieder dazu.

Wird das eine Geocaching-Station? Im grünen Forum geht's derzeit auch um 
Wählscheiben.

von Jörg S. (joschi1711)


Lesenswert?

ja richtig, es wird eine Geocaching-Station ^^.
Na das wird mir dann echt kompliziert^^ das ganze quasi so stricken, das 
im sleep-mode der INT0 deaktiviert ist...
na mal schaun, ob ich das hinbekomme.
Was ist das grüne Forum?
Würde mich da auch mal umschaun.

von Jörg S. (joschi1711)


Lesenswert?

Also habe hier rumexperimentiert, bekomme das aber nicht hin, den Pullup 
am PB1 in der Ruhephase zu deaktivieren.

von Jörg S. (joschi1711)


Lesenswert?

sehe ich das richtig, das ich den PullUp an PB1 mit
1
PORTB |= (0 << PB1);
deaktiviere?
nur wo packe ich das hin, wenn es im SleepMode den PullUp deaktivieren 
soll?

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Jörg Schumann schrieb:
> sehe ich das richtig, das ich den PullUp an PB1 mitPORTB |= (0 << PB1);
> deaktiviere?

Nö.

PORTB &= ~(1<<PB1);

> nur wo packe ich das hin, wenn es im SleepMode den PullUp deaktivieren
> soll?

Direkt vor deine Befehlssequenz zur Einleitung des SleepModes.

von Jörg S. (joschi1711)


Lesenswert?

Danke dir Magnetus...
PullUp Schaltet nun ab und die ganze Geschicht zeigt jetzt 0,1µA im 
Ruhezustand.
Leider scheint es den PullUp jetzt nicht sofort nach dem Wecken wieder 
anzuschalten.

von Peter D. (peda)


Lesenswert?

Jörg Schumann schrieb:
> nur wo packe ich das hin, wenn es im SleepMode den PullUp deaktivieren
> soll?

Ohne High-Pegel wirds nichts mit dem Sleep, Du wachst sofort wieder auf.


Peter

von Jörg S. (joschi1711)


Lesenswert?

@peda>
Also der weckt nicht sofort wieder auf, laut Messgerät fällt er nach 
3min auf 0,1µA und steht dort solange, bis ich die Wählscheibe bewege.
Nur eben Scheint der PullUp nicht wieder anzuschalten, da beim ersten 
Wählen der richtigen Zahlen nichts passiert, erst beim zweiten Versuch.

von Edi R. (edi_r)


Lesenswert?

Jörg Schumann schrieb:
> ja richtig, es wird eine Geocaching-Station ^^.

Wahrscheinlich nicht im Münchner Raum, sonst hätte ich mich schon mal 
gefreut :-)

Jörg Schumann schrieb:
> Na das wird mir dann echt kompliziert^^ das ganze quasi so stricken, das
> im sleep-mode der INT0 deaktiviert ist...

Irgendwie habe ich den Verdacht, dass Du die beiden Kontakte genau 
verkehrt herum verwendest. Es sind ja zwei Kontakte: Der eine (nsa) 
schließt, wenn man die Wählscheibe aufzieht, und öffnet, wenn die 
Wählscheibe wieder im Ausgangszustand ist. Der zweite Kontakt (nsi) 
pulst so oft, wie man an der Wählscheibe gewählt hat. Den ersten Kontakt 
musst Du zum Aufwecken nehmen, am zweiten Kontakt musst Du die Impulse 
zählen. Weil der nsa ein Schließer ist (d. h. im Ruhezustand offen), 
fließt im Ruhezustand auch kein Strom. Den nsi kannst Du hochohmig 
machen, wenn der Controller im Ruhezustand ist, damit kein Strom fließt.

> na mal schaun, ob ich das hinbekomme.

Bestimmt.

> Was ist das grüne Forum?
> Würde mich da auch mal umschaun.

Schau mal hier: http://www.geoclub.de/viewtopic.php?f=57&t=60705

von Eumel (Gast)


Lesenswert?

"Leider scheint es den PullUp jetzt nicht sofort nach dem Wecken wieder
anzuschalten."

Du musst den schon manuell wieder anschalten ;)

von Jörg S. (joschi1711)


Lesenswert?

>
> Wahrscheinlich nicht im Münchner Raum, sonst hätte ich mich schon mal
> gefreut :-)
im Dresdner Umland
>

>
> Irgendwie habe ich den Verdacht, dass Du die beiden Kontakte genau
> verkehrt herum verwendest. Es sind ja zwei Kontakte: Der eine (nsa)
> schließt, wenn man die Wählscheibe aufzieht, und öffnet, wenn die
> Wählscheibe wieder im Ausgangszustand ist. Der zweite Kontakt (nsi)
> pulst so oft, wie man an der Wählscheibe gewählt hat. Den ersten Kontakt
> musst Du zum Aufwecken nehmen, am zweiten Kontakt musst Du die Impulse
> zählen. Weil der nsa ein Schließer ist (d. h. im Ruhezustand offen),
> fließt im Ruhezustand auch kein Strom. Den nsi kannst Du hochohmig
> machen, wenn der Controller im Ruhezustand ist, damit kein Strom fließt.
Also die Kontakte sind schon richtig angeschlossen, sonst würde der 
Kleine ja bei richtigem Wählvorgang nicht auslösen, das tut er ja aber.
mir geht es jetzt nur noch darum, im Ruhezustand den Stromverbrauch des 
PullUps am NSI also PB1 durch dessen Deaktivierung abzuwenden (mit 
PullUp 100µA ohne 0,1µA).
das funktioniert ja soweit, nur eben aktiviert es den PullUp nicht 
sofort nach dem Wecken wieder.
> Schau mal hier: http://www.geoclub.de/viewtopic.php?f=57&t=60705

dort habe ich schonmal reingeschaut, aber irgendwie haben die Jungs dort 
größere Probleme.
Ich betreibe auch kein Soundmodul, sonder eine Segmentanzeige mit Koos.

von Edi R. (edi_r)


Lesenswert?

Jörg Schumann schrieb:
>> Wahrscheinlich nicht im Münchner Raum, sonst hätte ich mich schon mal
>> gefreut :-)
> im Dresdner Umland

Schade :-(

Jörg Schumann schrieb:
> das funktioniert ja soweit, nur eben aktiviert es den PullUp nicht
> sofort nach dem Wecken wieder.

Wenn Du vor dem "sleep" den Pullup ausschaltest:
1
PORTB &= ~(1<<PB1);
dann musst Du ihn nach dem "sleep" wieder dazuschalten:
1
PORTB |= (1<<PB1);

>> Schau mal hier: http://www.geoclub.de/viewtopic.php?f=57&t=60705
> dort habe ich schonmal reingeschaut, aber irgendwie haben die Jungs dort
> größere Probleme.
> Ich betreibe auch kein Soundmodul, sonder eine Segmentanzeige mit Koos.

Ach so. In Deinem Plan (ganz am Anfang) steht "Sprachmodul", deshalb 
habe ich auch gleich auf Geocaching getippt. :-)

von Jörg S. (joschi1711)


Lesenswert?

>> im Dresdner Umland
>
> Schade :-(
nunja... Cacherurlaub in unserer Gengend lohnt sich immer, da gibts 
einige gute Caches.

> Wenn Du vor dem "sleep" den Pullup ausschaltest:
>
1
> PORTB &= ~(1<<PB1);
2
>
> dann musst Du ihn nach dem "sleep" wieder dazuschalten:
>
1
> PORTB |= (1<<PB1);
2
>
ja nur was ist nach dem Sleep^^
hab das nun schon probiert aber nix geht...
>

> Ach so. In Deinem Plan (ganz am Anfang) steht "Sprachmodul", deshalb
> habe ich auch gleich auf Geocaching getippt. :-)
ja ist ein Plan von nem Bekannten Cacher ^^

von Jörg S. (joschi1711)


Lesenswert?

OK so jetzt hab ich es...
Dank der Hilfe hier im Forum wieder was dazugelernt^^
1
  if (Sleepzaehler == 10000)//-----------------------------------------nach ca. 3 Minuten abschalten
2
    {
3
4
      //PORTB = 0b11110111;
5
                        PORTB &= ~(1<<PB1);  
6
      Sleepzaehler = 0;    
7
      GIMSK |= (1 << PCIE);
8
      set_sleep_mode(SLEEP_MODE_PWR_DOWN);
9
      sleep_enable();
10
                        sei(); 
11
      sleep_cpu();
12
      sleep_disable();
13
      PORTB |= (1<<PB1);
14
      GIMSK &= ~(1 << PCIE);
15
      
16
        
17
    }
hatte die letzten beiden Zeilen vertauscht, und der Gute weckte auf und 
der PullUp wurde nicht sofort aktiviert.
Nun tut er es^^.

von Magnus M. (magnetus) Benutzerseite


Lesenswert?

Jörg Schumann schrieb:
> ja nur was ist nach dem Sleep^^
> hab das nun schon probiert aber nix geht...

Nix probieren... Datenblatt lesen!
1
If an enabled interrupt occurs while the MCU is in a sleep mode,
2
the MCU wakes up. The MCU is then halted for four cycles in
3
addition to the start-up time, executes the interrupt routine, and
4
resumes execution from the instruction following SLEEP.

von Jay (Gast)


Lesenswert?

Hallo,

ich habe versucht den Quellcode nachzuvollziehen und bin über zwei Dinge 
gestolpert:

Im Kommentar des Quellcodes steht PORTD2 für INT0, aber ich denke es ist 
eher PORTB0 gemeint.

Und den Timer verstehe ich nicht ganz: Bei einem Systemtakt von 1 MHz 
und einem Prescaler von 64 sind nach 10000 Inkrementen in der 
Interrupt-Routine doch erst 0,64s vergangen?! Wie kommst du auf 3 
Minuten?

von Jörg S. (joschi1711)


Angehängte Dateien:

Lesenswert?

Muss hier leider nochmal nachfragen...
Jetzt läuft das ganze fest, wenn ich eine falsche Zahlenkombi wähle, 
oder falsche Anzahl an Zahlen wähle. der ganze Spass springt nicht mehr 
zurück.
woran kann das nun wieder liegen?

von Jörg S. (joschi1711)


Lesenswert?

Also nur wenn die Anzahl der gewählten Ziffern nicht stimmt, hängt sich 
der ganze Spass fest...

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.