Forum: Mikrocontroller und Digitale Elektronik zwei Taster mit unterschiedlicher Funktion an einem I/O Pin


von Parity 231a (Gast)


Lesenswert?

wie ist soetwas moeglich?
ich moechte an einem I/O Pin zwei Taster anschliessen, die jeweils
etwas anderes bewirken, also der uC entscheiden kann welche Taste
gedrueckt wurde.
Geht das eventuel mit Kondensatoren (oder etwas ähnlichem), das wenn
ein Taster gedrückt wurde, er ein längeres Signal erzeugt als der
andere bei normalem Druck?
Ansonsten wuerde ja auch ein Schieberegister gehen, was ständig
abgefragt wird, aber das würde relativ viel Strom verbrauchen und etwas
unflexibel sein, denke ich, oder?

von Profi (Gast)


Lesenswert?

Wenn Du einen ADC-Eingang hast, kannst Du mit verschiedenen geschaltenen
Rs Spannungsteiler machen.

Oder Du schaltest einen C dran, schaltest auf Ausgang, gibst high aus,
schaltest auf Eingang und misst die Zeit, bis er low wird.
Je nach Belastungs-R wird das verschieden lange dauern.
Mit 2 Tastern gibt es ja 4 Möglichkeiten.

von Parity 231a (Gast)


Lesenswert?

ich habe keinen ADC-Eingang, sondern es ist nur ein normaler Pin am uC.
Die anderen Pins sind bereits belegt.
Also mit einem C wuerde das gehen? Das er eine Taster z.B. keinen C
hat, bei dem anderen zwischen uC und Taster ein C ist und bei Druck der
Tasten, der Taster mit dem C laenger high ist, bei gleicher
tasterdrueckzeit im Vergleich zum anderen Taster? oder habe ich das
falsch verstanden?

von Ingo Henze (Gast)


Lesenswert?

Sowas ähnliches hatten wir schon mal.
Es gibt da einen Trick unter Ausnutzung des internen
Pullup-Widerstandes:
http://www.mikrocontroller.net/forum/read-1-87272.html

Das ganz funktioniert prinzipiell auch in der umgekehrten Richtung,
also mit einem I/O zwei unterschiedliche Sachen schalten.

Gruß
Ingo

von Profi (Gast)


Lesenswert?

nochmal:
Pin  -  C       - Gnd
Pin  -  R1 - T1 - Gnd
Pin  -  R2 - T2 - Gnd
R1!=R2 z.B. R1=1kOhm   R2=2kOhm
Wenn Du Pin auf Ausgang setzt, wird der C geladen.
Dann auf Eingang schalten.
Wenn Eingang nach Zeit1 low: beide Taster waren gedrückt (R1 und R2
parallel haben den C schnell entladen)
Wenn Eingang nach Zeit2 low: T1 war gedrückt
Wenn Eingang nach Zeit3 low: T2 war gedrückt
Wenn Eingang nach Zeit4 immer noch high: kein Taster war gedrückt

Es gibt noch eine andere Möglichkeit, kommt darauf an, was an den
anderen Pins hängt:
kannst Du einen Ausgang evtl. kurz auf Eingang schalten, einen Taster
(liegt über einen R dran, damit es keinen Kurzschluss gibt) einlesen
und gleich wieder auf Ausgang?

von Parity 231a (Gast)


Lesenswert?

ah, okay, vielen Dank,
werde ich nachher mal ausprobieren.
Wie groß muesste der Kondensator ungefaehr sein?
Wie schnell kann man so die taster abfragen?

von Profi (Gast)


Lesenswert?

probier mal im Bereich 1-100nF, kommt auf die Rs an.
Die Zeit musst Du mir einer Schleife messen und die mittleren Werte zum
Vergleichen verwenden.

Aber schau Dir auch mal das pdf im o.g. Thread an.

Die haben zwar auch einen C am Eingang, aber der hat eher die Aufgabe,
Spikes (kapazitive Kopplung) bei offenem Eingang zu glätten.
Du brauchst keine Timer, evtl nur ein paar NOPs, damit der C über den
internen PullUp geladen werden kann.

Und überleg, ob Du nicht ein anderes Pin ab und zu für ein paar µs als
Eingang für einen Taster missbrauchen kannst.

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
Noch kein Account? Hier anmelden.