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?
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.
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?
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
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?
ah, okay, vielen Dank, werde ich nachher mal ausprobieren. Wie groß muesste der Kondensator ungefaehr sein? Wie schnell kann man so die taster abfragen?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.