Hallo, ich bastle gerade ein Sautelefon, das sich beim umfallen einschaltet, und die zuletzt gewählte Nummer anruft, und sich dann wieder auschaltet. Das alles funktioniert auch soweit, und der Attiny2313 schläft auch schön im powerdown modus. Nun wollte ich noch diesen: http://www.conrad.de/ce/de/product/185232/Vibrations-Sensor-360-JWR-001-02 Sensor verbauen. Das sind im Prinzip 4 Schrauben, zwischen denen eine Kugel eingesperrt ist. Es sind also immer irgendwelche 2 nebeneinander liegende Pins miteinander verbunden. Ich wollte also jeweils die diagonalen Schrauben miteinander verbinden, an den einen Verbund INT0 und an den anderen GND anschließen. Bei steigender Flanke (Pullup aktiviert, in dem Moment indem die Kugel kurz keinen Kontakt hat) wollte ich den Sleepmode verlassen. Nun geht das aber ja im Power-Down nicht... Jetzt würde mir noch einfallen, einen Pulldown Widerstand einzubauen, und ein Diagonalpaar auf V+ zu legen. Dann fleßt ja aber dauerhaft (da der Schalter ja geschlossen ist) ein Strom von 3V/10000Ohm = 300µA, was ja witzlos ist. Hat jemand eine Idee, wie man bei geschlossenem Schalter wenig Strom verbrauch, und V+ am INT Pin anliegt, und bei geöffnetem GND an INT geben kann? Grüße Gerald
Gerald m. schrieb: > wollte ich den Sleepmode verlassen. Nun geht das > aber ja im Power-Down nicht... Natürlich geht das. Es geht bloß nicht für INT0, der kann nur mit Level-Trigger aufwachen und erfordert deswegen eine Mindestdauer für den Kontakt. Nimmst du halt INT1 oder PCINT.
Ah, danke dir! Hatte das auch am Ende getestet mit Int1 (hatte da was im Datenblatt gefunden zu Int0), das hat allerdings nicht funktioniert. Habe jetzt aber gesehen dass ich den PullUp für Int1 vergessen habe zu setzen, und stattdessen den Int0 (noch) gesetzt hatte, während ich alles andere auf Int1 geändert habe. Ich versuche das wenn ich daheim bin. Anbei ist übrigens beim Code, bei weitem nicht der schönste mit den ganzen dealys, auch die ganzen #defines brauch man wahrscheinlich nicht bei dem kurzen Stück Code. Aber es funktioniert wie es soll :P
Gerald m. schrieb: > http://www.conrad.de/ce/de/product/185232/Vibrations-Sensor-360-JWR-001-02 Hammergeiles Datenblatt: Error Rate: Very Low. LOL!
ja, DER "Sensor" schlechthin scheint es nicht zu sein. Es ist allerdings der einzige, mechanische (Wegen Stromverbrauch) Schalter, der relativ Lagenunabhängig schaltet. Denn wenn das Handy bewegt wurde, soll es ja nach 5 Minuten wieder scharf geschalten sein, damit man nicht jedesmal raus in den Wald muss und das Telefon wieder hinstellen muss. (Wie bei den Neigungsschaltern wo eine Kugel auf einer schiefen Ebene mit 2 Kontakten ist)
So, habe es jetz versucht, mit steigender oder fallender Flanke geht das nicht. Der Code oben funktioniert, aber nur weil das nicht der PowerDown sonder der Standby Mode ist. Bei PowerDown kommt er mit Flanke, auch an Int1, nicht raus :'(
Klingt, als würde es ein Cache werden :-)
Wegen der Pull-up Widerstände verbraucht der Sensor aber ständig Strom. Ich würde versuchen, die Pullups in regelmäßigen Intervallen nur ganz kurz zu aktivieren. Dazu müsste der Mikrocontroller regelmäßig von einem Timer aufgeweckt werden, anstatt von Interrupts durch den Sensor. Eventuell kommt man so auf weniger Stromverbrauch. Muss man mal durch rechnen. Ansonsten fällt mir spontan der Sensor BMA020 ein, hat I²C Schnittstelle und einen Interrupt-Ausgang. Man kann ihn so konfigurieren, dass er bei minimalem Stromverbrauch einen Interrupt erzeugt, wenn er eine Vibration oder Lageänderung erkennt, die über einer einstellbaren Schwelle liegt. Der Sensor kann sich selbst aus dem Sleep Modus in regelmäßigen Intervallen aufwecken, um Strom zu sparen. Die Stromaufnahme im Sleep Modus liegt bei 1µA. Den Sensor gibt's bei ELV als Modul inclusive Spannungsregler.
>Hat jemand eine Idee,
Ja:
(1) µC mit niedriger FOSC takten, z. B. 128 kHz (Watchdog-Timer)
(2) Sensor an irgendeinen Port Pn anschließen
(3) Sleep Mode "Idle" verwenden (und keinen sonst)
(4) µC durch Timer zyklisch aufwecken lassen, z. B. alle 25 ms
(5) In jedem Zyklus tun:
(a) Digital-Input-Stufen von Pn über DDR einschalten (DIDRn)
(b) Interne Pullup-Widerstände für Pn einschalten (DDRn)
(c) Pin-Status von Pn einlesen (PINn)
(d) Digital-Input-Stufen von Pn über DDR ausschalten (DIDRn)
(e) Interne Pullup-Widerstände für Pn ausschalten (DDRn)
(f) Inputs verarbeiten
(g) --> Idle (sleep)
Diese Lösung basiert darauf, dass der Stromverbrauch auch im Idle-Mode
batterie- bzw. akkugerecht klein ist - und das ist er bei niedriger
Taktfrequenz definitiv.
Der Sinn der Maßnahme (e) ist natürlich, dass bei geschlossenen
Sensorkontakten kein Strom fließen kann. Infolge dessen ist (d) nötig,
denn wenn der Pin während der Sleep-Phasen pullup-los ist, kann und wird
er floaten. Dadurch würden die Digital-Input-Stufen womöglich ständig
wild hin- und herkippen (unabhängig davon, ob der Pin eingelesen wird!)
und dafür sinnlos Strom verbrauchen. Deshalb gibt es die Möglichkeit,
sie abzuschalten.
Hoppla, habe gerade gesehen, dass der Tiny2313 gar keine DIDR-Register hat. Hängt wahrscheinlich mit dem Nichtvorhandensein eines ADC zusammen. ==> Anderen Controller nehmen.
LostInMusic schrieb: > Hoppla, habe gerade gesehen, dass der Tiny2313 gar keine DIDR-Register > hat. Hängt wahrscheinlich mit dem Nichtvorhandensein eines ADC zusammen. > ==> Anderen Controller nehmen. Du hast dein Pulver aber schnell verschossen. Die Eingänge floaten auch nicht, wenn man sie einfach auf Ausgang 0 schaltet. mfg.
Danke schonmal! Stefan: Danke schonmal für den Sensor. Für den Preis kann man echt nicht meckern. Eventuel ist er etwas groß, wenn man ich ins Handy einbauen will. Hätte ich den vorher gefunden, wäre es villeicht der geworden LostinMusic: Auch dir nocheinmal danke. Leider hat der Tiny2313 kein DIDRn Register. Allerdings habe ich noch andere Controller da. Aber als Ausgang schalten geht doch au, oder? Du hast mich allerdings auf die Idee gebracht, dass ich ja, nachdem die 5 Minuten Wartezeit vorbei sind, die aktuelle Position der Kugel ja durch ausprobieren herausfinden kann. Hierfür muss ich zwar jeden einzelnen PIN des Sensors an den ATTiny anschließen, aber das ist ja auch nicht so das Problem. Die INT Pins werden diagonal an den Sensor angeschlossen, an die anderen Beiden jeweils ein normaler Pin. Nach dem ausprobieren weiß ich welcher INT Pin Kontakt hat, und stelle ihn, wie die anderen beiden Pins auf GND. Es wird nur der andere INT Pin für den Interrupt benutzt. So ist die Empfindlichkeit zwar geringer, aber ich habe kein Strom Problem mehr. Und die Kugel schießt schon ordentlich in dem Sensor drin herum. Als faule alternative könnte ich auch einfach einen 1MOhm PullDown Widerstand benuten. Teste es gerade, und noch funktioniert es. Der Strom wäre mit 3µA verkraftbar. edit: Achso, und dieses alle 25ms Anschalten und Pin lesen, da weiß ich nicht ob ich gerade in dem Moment den Impuls habe.
>Die Eingänge floaten auch nicht, wenn man sie einfach auf Ausgang 0 schaltet. Stimmt - diese Möglichkeit ist mir glatt entgangen. Punkt für Dich :-) >Der Strom wäre mit 3µA verkraftbar. Mit was willst Du das Ding denn versorgen? Eine gewöhnliche AA-Alkalizelle kann immerhin ≈100 µA ununterbrochen drei Jahre lang liefern (Rechnung: I = Q/t = 3000 mAh/(3*365*24 h) = 0.114 mA). Eventuell macht es also gar keinen Sinn, um jeden Mikroampère-Bruchteil zu kämpfen. >Achso, und dieses alle 25ms Anschalten und Pin lesen, da weiß ich >nicht ob ich gerade in dem Moment den Impuls habe. 40 Samples/s dürften genug sein, um jede Veränderung zuverlässig zu registrieren - wenigstens mit einem Sample. So blitzartig schnell können Deine Viecher nicht rütteln X-D. Probiers aus und wenn Du Bedenken hast, nimm 80 Samples/s.
Danke dir nochmal. Versorgt wird das ganze mit dem Handy Akku. Dieser hat etwa 400mAh (hatte zumindets mal, sind ja alte Handys). Deswegen meine ich ja, wenn ich einen 1MOhm PullDown Widerstand nehme, benötigt der 3µA, das wäre verkraftbar. Die normal vorgeschlagenen 10kOhm brauchen jedoch 300µA, was etwa einem Monat enstspricht. Das ist zu wenig. Mit meinem Aufbau brauche ich mit dem 1MOhm ca. 5µA, und das ist gut so. Ich frage mich nur, ob das vielleicht nicht gut geht mit dem 1MOhm. Die alternative mit dem Timer ist aber auch nicht schlecht, da könnte man vor allem auch alle paar Stunden den ADC einschalten (dann muss es wirklich ein anderer Controller sein) und bei niederer Spannung einen Doppelanruf tätigen. Ich denke ich teste das mit den 25ms Schlaf noch, muss mir allerdings dann erst noch nen Uhrenquarz organisieren. Der Spannungscheck wäre noch ein nettes Gimmick
Gerald m. schrieb: > So, habe es jetz versucht, mit steigender oder fallender Flanke geht das > nicht. > Der Code oben funktioniert, aber nur weil das nicht der PowerDown sonder > der Standby Mode ist. Bei PowerDown kommt er mit Flanke, auch an Int1, > nicht raus :'( Hmm, ich bin jetzt auch garnicht mehr so sicher, daß der 2313 bei einem anderen externen Int als INT0 aus dem PowerDown aufwachen kann. Der Sinn der entsprechenden Formulierung im Datenblatt wird von einem winzigen Komma kontrolliert, das ich bei einem flüchtigen Blick schlicht übersehen hatte, was aber bei größerer Darstellung der Seite eindeutig als vorhanden erkennbar ist und dem Satz eine völlig andere Bedeutung gibt, nämlich: nein, es geht nur INT0 und der auch nur mit Leveltrigger. Die logische Konsequenz wäre: schick den 2313 endlich auf's Altenteil und nimm einen modernen AVR. Bei denen ist es nämlich tatsächlich so, wie ich schrieb. (was wohl der Grund ist, warum ich die zuerst dem 2313-Datenblatt entnommene Bedeutung zunächst nicht angezweifelt habe, sie entsprach einfach dem, was ich gewohnt war)
> Schalter beim öffnen als Interrupt nutzen mit niedrigem Verbrauch?
Das Öffnen ist ein Substantiv und wird großgeschrieben.
c-hater schrieb: > Die logische Konsequenz wäre: schick den 2313 endlich auf's Altenteil Er hat doch schon den hochmodernen ATtiny2313! Der kann aber auch einen PCINT an jedem Eingang auslösen, wozu mir Folgendes einfällt. Beitrag "Re: EIN-AUS mit Taster per Interrupt, ATtiny25 o.ä."
m.n. schrieb: > Er hat doch schon den hochmodernen ATtiny2313! Der 2313 gehört noch zur zweiten Generation der AVRs, ist also nicht hochmodern. > Der kann aber auch einen PCINT an jedem Eingang auslösen Nicht einmal das kann er, sondern nur für die acht Eingänge, die zu Port B gehören. Und was er halt auch nicht kann, um was es hier aber gerade geht: Per PCINT aus dem Tiefschlaf (PowerDown) aufwachen. Moderne AVRs können das. Z.B. die pinkompatiblen 2313-Nachfolger 2313A und 4313. Die gehören ja auch zur aktuellen AVR-Generation.
Hi, Den 2313a habe ich auch da (zwar nur im DIP Gehäuse, abba fürs breadboard reicht) Diesen kann ich auch nicht per Flanke aufwecken. Per LowLevel geht das, aber ich wollte ja die Flanke haben, da der Sensor in der Konstellation ja dauerhaft ist, und bei Erschütterung kurz High ausgibt. Es gibt die Int Möglichkeiten: Low Steigende Flanke Fallende Flanke Level change. Und nur low weckt ihn, egal ob int0 oder int1
c-hater schrieb: > Nicht einmal das kann er, sondern nur für die acht Eingänge, die zu Port > B gehören. Da haben die das bei Atmel doch wohl vergessen? > Und was er halt auch nicht kann, um was es hier aber gerade geht: Per > PCINT aus dem Tiefschlaf (PowerDown) aufwachen. Aber per PCINT aufwecken kann auch schon der Typ ohne 'A'.
Gerald m. schrieb: > Den 2313a habe ich auch da (zwar nur im DIP Gehäuse, abba fürs > breadboard reicht) > > Diesen kann ich auch nicht per Flanke aufwecken. Doch, das geht mit PCINT. Mit INT0/INT1 geht nur low-level. Warum liest du nicht einfach mal die Datenblätter?
m.n. schrieb: > Aber per PCINT aufwecken kann auch schon der Typ ohne 'A'. Das dachte ich ja zuerst auch, aber nachdem der Thread-Eröffner meinte, das ginge nicht, habe ich nochmal nachgelesen. Die Anmerkung zu Tabelle 14 auf Seite 34 des Datenblatts läßt da leider erhebliche Interpretationsspielräume. Und ich habe im Moment keinen urtümlichen 2313 hier, um es selber auszuprobieren. Sicher ist jedenfalls, daß der 2313A es kann. Den habe ich nämlich hier und mit dem habe ich es ausprobiert. Allerdings: die entsprechende Stelle im Datenblatt ist genauso bescheuert formuliert. Also könntest du bezüglich des 2313 durchaus Recht haben.
c-hater schrieb: > Die Anmerkung zu Tabelle 14 auf Seite 34 des Datenblatts läßt da leider > erhebliche Interpretationsspielräume. Beim den Prelimenary von 04/06 für den ATtiny2313/V ist auf S. 34 aufgeführt, dass das Aufwecken geht. Insgesamt habe ich vier Datenblätter zum ATtiny2313 und jetzt noch das allerletzte heruntergeladen. Mit dem 2313A geht dann alles, wie man es braucht. Jetzt sind wir Alle ein bißchen schlauer und freuen uns :-)
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.