zwei Taster mit unterschiedlicher Funktion an einem I/O Pin

Gast #108410
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?
Gast #108411
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.
Gast #108412
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?
Gast #108414
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?
Gast #108416
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.