Hallo Ich möchte mir einen Drehzahlmesser mit einem Reedschalter + Magnet bauen, in der Art eines Fahrradcomputers. Klassisch würde ich das wie im Schaltbild machen. Das hat allerdings den Nachteil, dass wenn mein Reedschalter angezogen hat immer Strom über den Widerstand fliesst - was ich zwecks Stromverbrauch/Batteriebetrieb nicht möchte. Da das Gerät die meiste Zeit nix macht, möchte ich hier den Controller schlafen legen und über einen Portinterrupt vom Reedschalter wieder aufwecken. Hat jemand eine Idee wie man den Reedschalter mit dem Controller verkuddelt damit kein Strom (I<100nA) benötigt wird. Den Widerstand möchte ich auch nicht zu hoch (>1M) auslegen wegen Störempfindlichkeit (ESD Luftentladung). Danke und Gruß
Ja also um nen Pull-Up/Down kommste ja nicht herum...selbst, wenn du die internen im Controller verwendest.
@ tom (Gast) >Reedschalter angezogen hat immer Strom über den Widerstand fliesst - was >ich zwecks Stromverbrauch/Batteriebetrieb nicht möchte. Dann schalte den Pull-Up aus. Genauer, schalte einen externen Pull-Up mittels eines zweiten IO Pins. Dann fliesst kein Strom. Auch nicht bei 1K. ;-) MFG Falk
Das hab ich grad auch schon überlegt, aber wie bnekommst du den Eingang wieder "leer", wenn der Schalter wieder öffnet?
Leer? Du meinst die Streukapazitäten? Dadurch, dass du R periodisch kurz auf Masse ziehst um Veränderungen zu detektieren erledigt sich das von selbst. Oder was meinst du? So: v | / | | +----| R | uC +----| | Hinweis: Clamp-Dioden an den Pins beachten für den Fall, dass der Reedschalter an einer höheren Spannung (v) hängt als der uC.
Mhh, so noch nicht drüber nachgedacht...muss ich mir auch mal angucken ;-)
Oder so - wie Falk es wohl meint - ist es noch günstiger: | +----| | | / | uC | | +----| | | R | ---
Oder den Reedkontakt an GND und Portpin und den Widerstand an einen zweiten Portpin (also wie bei Pothead's letztem Post, nur Bauteile vertauschen). So hängt der Reed immer mit einem Pin an GND, und man könnte auch geschirmte Anschluss-Leitung zum Controller verwenden (Schirm an GND). Wenn der Pullup gross oder aus ist, verhindert man so Stör- Einstreuungen auf der Leitung zum Eingangs-Pin des Controllers.
Das mit dem Pull-Up an einem Port hab ich mir auch schon überlegt. Dann muss der Controller allerdings periodisch immer wieder den Port abfragen ob sich was geändert hat. Wenn nun die Pulsfrequenz gleich der Abfragefrequenz sind bekomme ich dort ggf. ein Problem. Genauso bekomme ich durch die periodische Abfrage eine gewisse Ungenauigkeit, zumindest bei den ersten Pulsen. Währe halt schon wenn erst durch einen externen Interrupt vom Reedschalter der Controller aufgeweckt wird. Hatte auch schon an einen Reedschalter mit Wechsler gedacht, NO/NC an VCC/GND und C an den Port.
@ tom (Gast) >ob sich was geändert hat. Wenn nun die Pulsfrequenz gleich der >Abfragefrequenz sind bekomme ich dort ggf. ein Problem. Ja, muss man halt schneller abfragen. > Genauso bekomme >ich durch die periodische Abfrage eine gewisse Ungenauigkeit, zumindest >bei den ersten Pulsen. Währe halt schon wenn erst durch einen externen >Interrupt vom Reedschalter der Controller aufgeweckt wird. Man kann nicht alles haben. Ist ja auch unlogisch, wenn der Reedschalter mit dauerhaft LOW stehen bleieben kann. Dann geht dein uC nie schlafen. MFG Falk
Schalte doch mit dem Reedschalter ein RC-Glied (in Reihe). Der Impuls der beim Schalten erzeugt wird dann per Interrupt auswerten. Ist der Schalter dann dauerhaft greschlossen sorgt der Kondensator dafür, dass kein dauerhafter Strom fliest.
[code] Pothead schrieb: > So: > > v > | > / > | | > +----| > R | uC > +----| > | Pothead schrieb: > Oder so[...] > > | > +----| > | | > / | uC > | | > +----| > | | > R > | > --- oder so: ____ v---|----+ | | | / <- |µC | <- schaltbarer interner Pullup | R <- | | +----|----+ | |_______ / | ---
@ Falk: Bei Dauerhaftem Low kann sich der uC genauso schlafen legen. Aufwachen tut er als Flankengetriggerter Interrupt. @ Knut: Bei deinem Serien RC-Glied liegt der R aber auch gegen Masse. Wenn der Schalter geschlossen ist fliesst eben der nicht erwünschte Dauerstrom über den Schalter und den R. Ich werde das ganze noch ein bischen überdenken und dann mal einige Versuche fahren welches die stromsparenste Variante ist (Dauerstrom über R zulassen, Zeitliches Abfragen, Reed-Wechsler, ...???). Danke erstmal für alle Beiträge. tom
oder so: (+) | | / | | | +---R---| PortPin | | +-------| Int | | C | (-) Der Kondensator hält dein Pegel bei offenem Kontakt zuverlässig auf Null, kurzzeitige Impulse kann er Puffern und durch Selbstentladung abführen. Mit dem PortPin entlädst du den Kondensator nach einem Interrupt. Ohne den Widerstand gäbe es einen Kurzen, solange der Kontakt geschlossen wäre. Deswegen seperaten "Reset".
Nachtrag: Beim Fallen der Flanke müsstest du den Kondensator nochmals entleeren.
Wie wäre es denn mit einem Reed umschalter? Dann könntest Du die Versorgungsspannung des Controllers mit dem Reed Kontakt anschalten - falls der Controller zu langsam ist, bzw. mehr zeit braucht, nimm einen FET hinzu und schalte ihn parallel zum reed-schalter. Den gate des FET verbindest Du dann mit einem output pin des controllers - auf die Art kann der controller sich nach getaner Arbeit selbst wieder ausschalten...
Hallo, warum nicht einfach statt eines Reed-Relais' eine Spule plazieren. Die wird dann beim vorbeisausen des Magneten Spannungsimpulse erzeugen, die sich, mit etwas Schutzbeschaltung, als pin change interrupt auswerten und den Controller aufwachen und zählen lassen können. //Eventuell sogar, um die Spannungsversorgung damit zu unterstützen/laden. Aber mal was anderes. Wie misst Du die Zeit, "während du schliefst" Ala Atmega48PA Timer2 und 32,768 khz Quarz ( power save supply 0,9 µA @ 3V/25°) und alle 0,5 Sekunden eine Berechnung mit den gezählten Impulse und deren Ausgabe? Dann könntest Du bei längerer Zeit ohne Spannungsimpulse den Timer 2 ausschalten und nur wenn Impulse kommen diesen wieder einschalten, um wieder eine Zeitbasis zu haben. Oder nutzt Du CLK-impulse (1,1 µA bei 32,768 kHz) oder Interrupt-Impulse eines externen RTC-Chips, wie RV 8564-C2,RV 2123-C2 (wegen der 160 nA )
Wie ich die Impulse pro Zeit messe hab ich mir noch nicht überlegt. Entweder die Impulse pro Sek (0.5s) messen oder die Zeit zwischen zwei Impulsen und dann umrechnen. Da nach Vorgabe das Gerät 22h pro Tag inaktiv ist möchte ich den Controller hierbei soweit wie möglich runterfahren und dann erst mit einen Impuls = ext. Interrupt wieder aufwachen. Das war die Überlegung. tom
Hallo, wäre dann nicht ein Schmitttrigger angesagt zum Beispiel mit CD4093 fast stromlos: http://www.datasheetcatalog.org/datasheets/270/109356_DS.pdf Stromaufnahme typisch 20 nA Eingangsstrom typisch: 10pA Diesen möglichst direkt am Reedrelais, der nach 3-Volt schaltet, anbringen sehr hochohmig den Eingangspin gegen Masse, z.B 10MOhm , betreiben und auslösen->formt den Impulse und löst Int0 aus. Vielleicht funktionieren ja auch 100 MOhm. Aber 3 Volt sind nötig. Hauptsache "kann" aufwecken, kann aber schon wach sein. Der externe Uhreninterrupt als pinchangeinterrupt, den man abstellen kann. Skizze eines Ablaufes. Startzustand: 1 Atmega ist im power-down-modus Der Uhrbaustein läuft, gibt keine Impulse nach aussen. Int0 ist gesetzt/enabled um aufzuwachen Interruptvektor steht auf "Uhr_Impulse_einschalten" pin change Interupt der Uhr ist eingeschaltet 2 Jetzt rollt das Fahrrad und es gibt einen Impuls vom ReedRelais. Der Atmega erwacht in 6 Taktzyklen mit internem RC-Oscillator als Taktquelle- 128 khz, weil der sparsamer ist, als der 8Mhz. (Quarz braucht 16k Takte, da hat man sich schon längt wieder schlafen gelegt) Int0_Interrupt ausführen ->Uhr_impulse_einschalten dort: -->Uhr Impulse einschalten -SPI oder I2C -->Int0-Vetor auf "Impulse_zaehlen" umbiegen -->Diesen Impuls nicht zaehlen -->power down 3 Beim jedem Reedrelais Impuls -> Interrupt Int0 Beim jedem Uhr Impuls -> Interrupt PCI Nach jedem dieser Routinen geht es in den power down Modus Beim Uhr_Impuls_Interrupt wird ein Zähler/Countdown geführt, der die Anzahl aufeinanderfolgender 0-Impulse zählt. Das ist dann der Ersatz für einen retriggerbaren Monoflop. Sollte zum Beispiel für 8 Sekunden, oder passend zur Reifengröße für 1 km/h oder so in der Art, keine Impulse mehr gezählt worden sein dann werden die Uhr Impulse wieder ausgeschaltet, Int0-Vektor wieder auf Uhr_impulse_einschalten umprogrammiert-> Es geht mit 1 weiter. Die Uhr-Impulse müssen wahrscheinlich alle 1/256 Sekunden oder so kommen. Sonst bekommt man keine vernüfigen Berechnungen hin. 1 Impuls/Umdrehung in einer Sekunde sind bei 28" 8 km/h. Dann zählt man einfach die Zeiteinheiten zwischen zwei Impulsen und vielleicht noch einen Ringbuffer über die Zeiten von 8/16 Impulsen, damit darüber einen Durchschnitt rechnen kann. Da der Impuls Interrupt seltener kommt, sollten die Berechnungen dort stattfinden.Falls die Zeit zwischen den Impulse zu klein, 2 Zeiteinheiten sind 10 ms -> Prellen diese ignorieren.
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.