Hallo zusammen, ich habe einen AVR attiny4313, welcher im Power-Down Sleep-Mode ist. Daran hängt auch noch ein Encoder mit 3 Pins, A B und GND. Die Pins am AVR sind alle auf Pull-Up. Wenn man am Encoder dreht, wacht der AVR wie geplant auf (Pin-Change Interrupt). Allerdings kennt der Encoder drei verschiedene Logic-Positionen: AB 00 10 11 Problem: Wenn während des Sleeps der Encoder zufällig auf 00 steht (was man von aussen ja nicht sehen kann), ist der Stromverbrauch quasi 0. Sobald er aber auf 10 oder sogar 11 steht, fliesst ja durchgehend ein Strom vom Pull-Up nach Masse. Ich habe 250uA gemessen und die müssen weg, da es eine batteriebetriebene Anwendung ist. Leider kann ich keine anderen Elemente, wie z.B. Knöpfe einbauen. Hat jemand eine Idee?
:
Bearbeitet durch User
Ah, dachte ich es mir doch, dass es eine einfache Lösung gibt :) Ich habe jetzt 1 MOhm genommen und es funktioniert sehr gut. Danke! Was bestimmt denn die Obergrenze des Widerstandwertes der Pull-Ups? Ich kann ja bestimmt nicht sowas wie 100 MOhm nehmen?
:
Bearbeitet durch User
Christian S. schrieb: > Was bestimmt denn die Obergrenze des Widerstandwertes der Pull-Ups? Ich > kann ja bestimmt nicht sowas wie 100 MOhm nehmen? Zum einen die Leckströme des AVR Eingangs. Wenn der Widerstand zu hoch ist, reicht der Querstrom durch den Pullup nicht mehr, um die Pins noch auf High zu ziehen. Zum zweiten bildet der Pullup mit der Eingangkapazität des AVR einen Tiefpass, der beim Wechsel von Low auf High für langsameres Laden sorgt, je höher der R wird. Als nächstes ist der Aufbau von Bedeutung. Ein wenig Feuchtigkeit am Encoder bildet ja auch einen Widerstand, der dann vom sehr hochohmigen Pullup nicht mehr überwunden werden kann. Es gilt also so hoch wie möglich, aber so niedrig wie nötig.
@ Christian S. (dragony) >Wenn man am Encoder dreht, wacht der AVR wie geplant auf (Pin-Change >Interrupt). Naja, grenzwertig. Funktioniert einigermaßen, ist aber nicht unbedingt die sauberste Art der Auswertung. > Allerdings kennt der Encoder drei verschiedene >Logic-Positionen: >AB >00 >10 >11 Warum nur drei? Es sollten entweder 2 oder 4 sein. >Problem: Wenn während des Sleeps der Encoder zufällig auf 00 steht (was >man von aussen ja nicht sehen kann), ist der Stromverbrauch quasi 0. >Sobald er aber auf 10 oder sogar 11 steht, fliesst ja durchgehend ein >Strom vom Pull-Up nach Masse. Ist es nicht eher anders herum? >Ich habe 250uA gemessen und die müssen >weg, da es eine batteriebetriebene Anwendung ist. Hmm, schwierig. Ein Möglichkeit sind geschaltete Pull-Ups. D.h. man wertet den Encoder ganz solide mittels Timer-Interrupt aus. In der periodischen Abfrage schaltet man die Pull-Ups nur kurz ein, lies die Port Pin und schaltet wieder aus. Das kostet halt etwas Strom für die CPU, die periodisch aufwachen muss, ausserdem muss ein Low Power Oszillator immer laufen. Muss man mal probieren, wieviel Strom das kostet. Oder eine hybride Lösung. Während langer Perioden des nichts tun nutzt man nur einen sehr hochohmigen, externen Pull-Up. Wenn dann einmal gedreht wird, schaltet man auf die Timer-Auswertung mit geschalteten Pull-Ups um. Nach einem Timeout von ???s, wenn keine Eingaben mehr erfolgen, schaltet man wieder zurück auf Power Down und Pin Change Interrupt. Auf diese Weise kann man während der aktiven Phase mit niederohmigeren Pull-Ups arbeiten und somit die Störfestigkeit erhöhen. Ist aber ein wenig aufwendig. >Ah, dachte ich es mir doch, dass es eine einfache Lösung gibt :) >Ich habe jetzt 1 MOhm genommen und es funktioniert sehr gut. Danke! Auf deinem Basteltisch bei Sonnenschein. >Was bestimmt denn die Obergrenze des Widerstandwertes der Pull-Ups? Leckströme durch Temperaturerhöhung, Verschmutzung und Betauung. > Ich >kann ja bestimmt nicht sowas wie 100 MOhm nehmen? Nein, denn dan reagiert den Encoder auf kleinsts Störeinkopplungen. Selbst bei 1M hätte ich da schon Bedenken. Wenn, dann sollte man es so machen wie hier gezeigt. https://www.mikrocontroller.net/articles/Entprellung#Einfacher_Taster Der R1 = 1M, danach noch ein RC-Tiefpass. Damit wird die Sache nochmal DEUTLICH besser bezüglich EMV. 10k/100n sind so ein Standardwert für R2/C1. Edit: 100n sind natürlich bei 1M Pull-Up zuviel! Eher so 1n, macht dann 1ms Zeitkonstante.
:
Bearbeitet durch User
Wenn man die Pullup-Widerstände zu hochohmig wählt, besteht die Gefahr, dass die Schalter nicht mehr zuverlässig schalten. Schalter benötigen einen Mindeststrom um zuverlässig zu schalten. Hier hatte ich das gleiche Problem: Beitrag "Re: Zeigt her eure Kunstwerke (2015)" Bei dem Timer verwende ich einen Encoder der pro Umdrehung gleich viele Impulse wie Rasterungen hat. http://www.reichelt.de/Drehimpulsgeber/STEC12E05/3/index.html?ACTION=3&GROUPID=3714&ARTICLE=73921&SEARCH=Drehimpulsgeber&OFFSET=16&WKID=0& An den Rastpositionen ist Kontakt A immer geöffnet. Hier ist der Pullup gegen Plus für wakeup. Der Pullup für Kontakt B wird bei Bedarf über einen Portpin zugeschaltet. Allerdings ist es möglich den Encoder zwischen zwei Rasterungen einzustellen und dort stehen zu lassen. Dann fließt ständig Strom über den Pullup. Den ersten Timer hatte ich meiner Mutter geschenkt. Der wird seit ca. 2 Jahren, fast täglich, benutzt. Bisher gab es kein Probleme. Gruß John
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.