Hi, ich habe schon ne weile gesucht und einiges ausprobiert.. leider ohne erfolgt... ich habe einen tiny84 welcher im Powerdown schläft. über einen PCINT wird dieser geweckt. für diesen PCINT habe ich einen internen Pullup gesetzt. wenn ich nun den Kontakt schalte wacht der auf macht was und geht wieder schlafen. Beim loslassen des Taster's wacht der wieder auf macht was und geht schlafen. usw. der Taster bleibt ne weile gedrückt (das Verhältnis zwischen gedrückt und nicht gedrückt ist ca gleich), und das ganze verbraucht dann statt 6uA nun satte 100uA durch den Pull up.... wie bekomme ich es hin egal wie der zustand des Taters ist einen niedrigen verbrauch hinzubekommen? ich habe bereits probiert den taster über einen OUT zu schalten welcher beim Drücken dann HIGH wird.. das klappt soweit... allerdings erkennt der dann kein interrupt mehr dh. den ersten Interrupt erkennt der zwar, aber das loslassen des tasters nicht mehr.
>wie bekomme ich es hin egal wie der zustand des Taters ist einen >niedrigen verbrauch hinzubekommen? Indem Du einen externen, deutlich höherohmigen Pullup nutzt, und den internen abschaltest. Das ganze wird dann aber auch deutlich störempfindlicher (vielleicht kleinen C parallel zum Eingang)
Micha schrieb: > das ganze verbraucht dann statt > 6uA nun satte 100uA durch den Pull up.... Ein Taster hat ja eine sehr niedrige Datenrate - du könntest das Ganze umstrukturieren und z.B. den Prozessor zeitgesteuert aufwecken, lässt den Taster prüfen, tust was wenn nötig und legst ihn wieder schlafen, wobei du den Pullup deaktivierst. Wenn du auf die Art nur 10% der Zeit einschaltest, was bestimmt reicht, hast du effektiv nur etwas über 10 µA Verbrauch. Georg
mit dem Zeitgesteurt gehts leider nicht das ist eine art alarm anlage... der muss dann nur aufwachen wenn der alarm kommt.... ABER ich habe es hinbekommen... ist zwar nicht sehr schön aber es funktioniert! über 2 Interrupt welche sich gegenseitig abschalten
1 | sleep_now(); //gehe schlafen |
2 | val = digitalRead(reed); |
3 | if(val == 0){ |
4 | Serial.println("TRUE"); |
5 | PCMSK1 &= ~(1<<PCINT9); |
6 | PCMSK0 |= (1<<PCINT1); |
7 | sei(); |
8 | //digitalWrite(test,HIGH);
|
9 | digitalWrite(reed,LOW); |
10 | //digitalWrite(9,LOW);
|
11 | }
|
12 | if(val == 1){ |
13 | Serial.println("FALSE"); |
14 | PCMSK0 &= ~(1<<PCINT1); |
15 | PCMSK1 |= (1<<PCINT9); |
16 | sei(); |
17 | digitalWrite(reed,HIGH); |
18 | //digitalWrite(9,HIGH);
|
19 | // digitalWrite(test,LOW);
|
20 | // digitalWrite(test,LOW);
|
21 | }
|
dann spuckt der folgendes aus // taste drücken INT1 Aufwachen 0 0 TRUE schlafen //Taste loslassen INT2 AufwINT2 acINT2 henINT2 INT2 INT2 INT2 INT2 INT2 INT2 INT2 INT2 INT2 INT2 INT2 INT2 INT2 1 INT2 1INT2 FINT2 AINT2 INT2 INT2 INT1 schlafen beim drücken ist es ziemlich sauber, bei loslassen hingegen kommt der INT2 einige male.. aber es funktioniert!:) in beiden Stellungen 10uA Jetzt kann ich beruhigt schlafen gehen...
Micha schrieb: > wie bekomme ich es hin egal wie der zustand des Taters ist einen > niedrigen verbrauch hinzubekommen? Indem du einen Taster 1xUm verwendest und dazu einen Kondensator zum Halten während des Umschaltens.
ist leider nur ein Reedschalter... der hat kein um.. entweder ZU oder OFFEN
Micha schrieb: > ist leider nur ein Reedschalter... der hat kein um.. entweder ZU oder > OFFEN Dann schalte den Pull-Up aus, wenn du ihn nicht brauchst.
dann hängt der doch in der luft! dann hab einen undef. zustand und der kommt aus dem Sleep raus obwohl er das nicht soll
Einen Kondensator laden und dann den Pullup abschalten geht nicht?
X4U schrieb: > Micha schrieb: >> ist leider nur ein Reedschalter > > und den durch einen Hallsensor ersetzen? Und der braucht keinen Strom? Mein hochohmiger Vorschlag: Beitrag "Re: EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä."
X4U schrieb: > Einen Kondensator laden und dann den Pullup abschalten geht nicht? wie meinst du das? Ich habe grade 200k als Pullup genommen... verbraucht nun bei ca 15uA es macht glaub ich kein unterschied ob pulldown oder pullup oder? beim drücken wird der ja so oder so fliesen?!
Ich dachte, es sei eine Lösung gefunden (mit 10 uA): > aber es funktioniert!:) in beiden Stellungen 10uA > Jetzt kann ich beruhigt schlafen gehen... Wozu jetzt diese Diskussion (mit 15 uA): > Ich habe grade 200k als Pullup genommen... verbraucht nun bei ca 15uA
ja lösung habe ich gefunden... softwaremäßig.. allerdings ist diese nicht sehr schön.. und ich denke nicht dass es sehr stabil ist.
Hm - Reedkontakt. Um welche Zeiten geht es, ein - aus, jeweils minimal und maximal? Wie sieht es mit Prellen aus?
Micha schrieb: >> Einen Kondensator laden und dann den Pullup abschalten geht nicht? > > wie meinst du das? Du lädst einen C über die Pullups, schaltest die dann ab und wartest bis der auslöst. Wenn das passiert versuchst du ihn nachzuladen, geht das nicht ist der Taster gedrückt.
Micha schrieb: > Ich habe grade 200k als Pullup genommen... verbraucht nun bei ca 15uA Hat Dir mein Vorschlag mit < 1 µA nicht gefallen, oder hast Du die Schaltung/Programm nicht verstanden?
m.n. schrieb: > Hat Dir mein Vorschlag mit < 1 µA nicht gefallen, oder hast Du die > Schaltung/Programm nicht verstanden? Sorry, habe ich überlesen... schau ich mir noch an..
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.