PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wie am besten 6 Taster abfragen?



vklaffehn
20.09.2008, 18:21
Moin!
Ich bastel grad mal wieder, und zwar am PanoHead V6 :-) Im Moment ist quasi eine Fernbedienung dran, auf der ein Display und ein paar Taster werkeln (sollen), nun überlege ich gerade, wie ich am besten 6 Taster (ein richtungskreuz + ok + cancel) mit möglichst wenig Pins abfragen kann, die Taster sind ganz normale einzelne Schließer. Am einfachsten wären ja 6 pins zu nutzen, aber per Matrix brauche ich bei 6 tastern ja auch 5 Ports, oder gibt es noch eine schlauere Lösung? Auf der Platine werkelt ein Tiny2313, der hat leider auch keinen ADC... Bin für jeden Tipp dankbar!!

MfG
Volker

uwegw
20.09.2008, 18:43
Schieberegister, I2C-Portexpander etc... braucht halt nen zusätzliches IC. Da wäre es wohl billiger und platzsparende, den tiny durch nen M8 oder so zu ersetzen...

Oder mit dem Analog-Komparator den ADC selbst bauen...

vklaffehn
20.09.2008, 18:49
Moin!
Jau, nur den 2313 hab ich grad hier .. :-) Ich dachte es mir schon, allerdings ist mir grad ein 74LS164 in die Hände gefallen, damit kann ich das ganze schön Pinsparend aufbauen. Danke trotzdem!!

MfG
Volker

Besserwessi
20.09.2008, 19:16
Einfacher wäre wohl ein M48 statt des Tiny2313. Oft kann man auch Pins, die sonst andere Funktionen haben mit zur Tastenabfrage gebrauchen. Und sei es nur für die eine Hälfte der Matrix. Man könnte eventuell das Gegenstück zum Charkiepixeling nutzen. Da braucht man 3 Pins 6 Dioden und 3 Pulldown Widerstände (ca. 150 K). Zwischen je 2 der Pins sind je 2 Taster mit Diode.

PICture
20.09.2008, 19:21
Hallo!

@ vklaffehn

Ich habe eine Idee, die ich selber verwenden möchte, aber bisher bin ich nicht dazu gekommen. Theoretisch könnte man bis zu 10 Tasten mit 3 Pins abfragen, wenn man ein Zähler mit Dezimaldekoder 74HC4017 verwendet. Vor jeder Abfrage wird der Zähler mit MR auf Null gelöscht. Danach wird der Ausgang des Dekoders eingelesen und anschliessend der Zählerstand mit Cp um 1 erhöht. Dann wird der Ausgang wieder eingelesen usw. Die Dioden bilden ein OR.

Ich habe die Schaltung im Code skizziert und denke, dass es verständlich ist, sonst bitte Fragen! O:)

MfG

.---------------------------------------.
vom >-----|Cp |
| 74HC4017 |
µC >-----|MR |
'---------------------------------------'
| | | | | | | | | |
o o o o o o o o o o
\ \ \ \ \ \ \ \ \ \
\. \. \. \. \. \. \. \. \. \.
o o o o o o o o o o
| | | | | | | | | |
V V V V V V V V V V
- - - - - - - - - -
| | | | | | | | | | zum
+---+---+---+---+---+---+---+---+---+----->
| µC
.-.
| |
| |
'-'
|
===
GND

vklaffehn
20.09.2008, 20:02
Moin!
Jupp, das wäre auch eine Möglichkeit, ich wollte nur gern Teile verwenden, die ich hier habe :-)
Ich bin allerdings grad auf ein anderes Problem gestoßen, ich kann PA0 und PA1 nicht abfragen.... Lt. Datenblatt sollten PA0 und PA1 bei Verwendung des internen Oszillators doch ganz normale Ports sein...

aber ein


DDRA=0;
PORTA = (1<<0)|(1<<1);

aktiviert lt. meinem Multimeter die Pullups nicht. Bei PortB funktioniert das aber wie gewüscht... hab ich was übersehen? Bei den Fuses kann ich auch nichts verdächtiges entdecken....

MfG
Volker