Hallo, ich möchte gerne einen Taster und zwei LEDs (rot, blau) über eine einfache zweiadrige, abgeschirmte Leitung ("Mikrofonkabel") an einen Atmel AVR anschließen. Das ganze soll eine Art "Status-Anzeige und Selbsttest-Knopf" für ein weiter entferntes Meßgerät sein. Die beiden LEDs sollten einzeln ansteuerbar sein, aber sie müssen nicht unbedingt gleichzeitig leuchten können. Wenn der Taster gedrückt ist, müssen die LEDs ebenfalls nicht unbedingt leuchten. Deshalb wollte ich so vorgehen: Die LEDs antiseriell schalten und den Taster parallel zu dieser Schaltung. Diese Konstruktion über die zweiadrige Leitung an das Gerät anschließen. Die "LED-Kette" ist über einen Vorwiderstand an zwei Portpins angeschlossen. Wenn ich einen High und den anderen Low setze, sollte eine der beiden LEDs leuchten. Setze ich beide gleich, leuchtet keine LED. Soweit richtig? Wie kann ich zusätzlich den Taster auswerten? Gibt es eine Möglichkeit, die ohne zusätzlichen Portpin auskommt? Wie unterscheide ich zwischen einem Kurzschluß (Taster gedrückt) und dem normalen Spannungsabfall über die LED? Komme ich mit 3,3V am µC aus? Eher nicht, oder?
Wenn du von 2 Leitungen sprichst.. meinst du ein 2-adriges Kabel mit Schirm oder sind damit nur 'Datenleitungen' gemeint und zusaetzlich noch Vcc und GND vorhanden? Ich frag nur, weil 1-Wire ja auch bedeutet, dass da neben der 1 Ader noch GND ist.. also eigentlich 2 Adern benoetigt werden ;-)
Ich meine zwei Leitungen. Abschirmung + Innenleiter.
die 3,3V sollten reichen um die LEDs zu betreiben. den kurzschluß zu messen ist schon etwas schwerer, du mußt ja auch dafür sorgen, daß ein druck auf den taster bei leuchtenden LEDs nicht den controller explodieren läßt. ich würd probieren über den ADC zu gehen, sprich den pull-up widerstand am ADC portpin einschalten oder einen externen vorsehen, die zweite leitung per portpin auf masse legen und mit dem ADC messen wie groß die restspannung ist. die LEDs müßten dank ihrer flußspannung ein deutlich höheres meßergebnis erzeugen als der gedrückte taster mit seinem schutzwiderstand. vielleicht hast du auch glück und die pegel sind ausreichend verschieden bzw. die spannung wird trotz schutzwiderstand am taster weit genug heruntergezogen, daß auch ein digitalpin logisch null erkennt. dann kannst du dir den umweg über den ADC sparen. die LEDs "antiseriell" ist übrigens unsinn, die würden sich gegenseitig den strom sperren. bei 3,3v würd ich den leuchtdioden das sperren überlassen. also antiparallel mit ihrem jeweiligen vorwiderstand in reihe damit und gut. beide LEDs leuchten lassen geht übrigens auch, mit 50% tastverhältnis und 50-100Hz umpolen. wird zwar nur die halbe helligkeit und ist bei sehr langen kabel nicht so gut für den AVR (parasitäre kapazität des kabels) aber es leuchten augenscheinlich beide LEDs.
Vielleicht gibts passende 1-Wire-Portexpander?
Wie wäre es mit folgender Schaltung (Anhang)? Über die 2 Komparatoren findest Du heraus, ob der Taster gedrückt ist. Mit Open Collector Ausgang kannst Du diese sogar direkt an ein Pin hängen, wenn Du den internen Pullup einschaltest. Die Spannungsteiler stellst Du so ein, dass die Comp. bei normalem "LED-Betrieb" nicht schalten. Zu beachten ist natürlich, dass eine der beiden LED's leuchten muss, um festzustellen, dass der Taster gedrückt wird. Du musst dann nur im Programm entscheiden, welchen Comp. Du abfragst. Ist ja von der gerade leuchtenden LED abhängig. Und natürlich darauf achten, dass es zu komischen zuständen kommen kann, wenn Du von der einen auf die andere Led umschaltetst. Vielleicht kleine Totzeit einbauen. Werner
>Gibt es eine Möglichkeit, >die ohne zusätzlichen Portpin auskommt? Oh, sorry. Das hatte ich überlesen. Werner
Ich würde es so machen: 1. Beide LEDs "antiparallel" anschließen. Also Kathode Led1 und Anode Led2 zusammen usw. 2. Parallel dazu ein Taster 3. Eine Leitung mit Pullup (50k o.ä.) zu 3V3 versehen. Port1= 1 und Port2 =0 --> erste Led leuchtet Port1= 0 und Port2 =1 --> zweite Led leuchtet Port1 = 0 und Port2 = Eingang --> Taster ausweten, also wenn Port 2= 0, dann Taster gedrückt. Wenn Port2=1, dann Taster nicht gedrückt. Der Pullup alleine ist so groß, das die entsprechende Led nicht leuchtet.
Frank Zöllner schrieb: > Vielleicht gibts passende 1-Wire-Portexpander? Ja, gibt es DS2408 (8bit), DS2413 (2bit).
Das geht nicht, weil wenn der Taster in dem Moment gedrückt wird, wenn eine LED leuchtet, qualmts. Man kann allerdings dem Taster einen Widerstand von etwa 2kOhm in Serie schalten und diese Kombination über die antiparallelen LEDs schalten. Wenn man 2 ADC-Pins verwendet, kann man diese nach obigem Schema wechselseitig ansteuern. Zwischen den Leuchtphasen der LEDs werden kurze Meßphasen eingefügt, durch Einschalten des Pullups beim jeweiligen Meßpin wird die Spannung in Richtung Vcc gezogen, der andere Pin ist Ausgang Low. Die einzelnen LED-Flußspannungen dürften sich deutlich von der Spannung des gedrückten Tasters mit dem 2kOhm-Widerstand unterscheiden. Wenn der Taster während des LED-Ansteuer-Zeitraumes gedrückt wird, sollte dies die Lichtstärke der LEDs nur unwesentlich beeinflussen. Bei schneller Wechselfrequenz ist das ohnehin nicht zu merken, da der Taster nach einigen Schaltwechseln sicher erkannt ist.
@Ben: hatte Deinen Beitrag zu spät gesehen - Internet hakt...
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.