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 ;-)
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.
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
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.
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.