Attiny 13 kommt nicht mehr aus Sleepmodus

OP #2513394
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.
Angehängte Dateien:
#2514290
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.
#2515742
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
#2516082
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.
OP #2517494
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.
#2517525
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
OP #2517544
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.
#2517563
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. :-)
OP #2517570
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 ^^
OP #2517585
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^^.
Persönliche Seite #2517588
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.
Gast #2517619
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?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren