Ich möchte eine Fernbedienung mit einer 12er Tastatur (3x4 Matrix) und einem ATtiny44 Prozessor entwerfen. Die 3 Spalten der Tastenmatrix sollen dabei einen Interrupt auslösen (zum Aufwecken des UC). Insgesamt benötige ich so 7 Portpins nur für die Tastenmatrix und für die restlichen Anforderungen fehlen mir 2 Portpins! - Wie kann ich die Tastenmatrix auf max. 5 Portpins reduzieren? - Expander 74HC138?
12 bis 16 Tasten gehen auch mit einem Pin über den ADC. Kostet nur ein paar Widerstände. ...
Einfach & simpel: für die digitale Abfrage von 12 Tasten reichen 4 Pins (4^2 - 4, allgemein n^2 - n) (siehe unter 4. http://www-user.tu-chemnitz.de/~heha/Mikrocontroller/Tastenmatrix.htm).
Martin schrieb: > Einfach & simpel: für die digitale Abfrage von 12 Tasten reichen 4 Pins > (4^2 - 4, allgemein n^2 - n) (siehe unter 4. Allerdings eignen sich diese Methoden nicht für existierende fertig verdrahtete 3x4 Matrixtastaturen.
Vielleicht muss man sich nur etwas bemühen, damit es funktioniert. Ein Taschentuch kann ich schon reichen, nur die Nase - die muss man sich schon selbst putzen. ;)
Könntest du bitte mir zuliebe mal eine Ausnahme machen und mir die Nase putzen? Macht Mutti bei den Kinderchen schliesslich auch. Ich komme nämlich grad nicht drauf, wie die Variante 4 mit einer fertigen 3x4-Matrix zurecht kommt (ohne diese aufzutrennen und neu zu verdrahten).
Hallo, je nach Controller könnte evt. sowas funktionieren. So brauchst du allerdings schaltbare Pullups und Downs. Doppelte Tastenanschläge dürfen auch nicht vorkommen. Ich hoff mal das ich kein Denkfehler drin habe. Sobald beide eingänge High/Tristate sind geht der letzte an. Falls der Controller Tristate kann, kann man das Signal noch invertiere. Kostet aber noch ein Transistor. Gruß Peter
Peter Daneggers ADC-Variante lässt sich so erweitern, dass sie auch aus dem Sleep-Mode aufwecken kann. Dazu schliesst man R1 nicht an Vcc an, sondern am Interrupt-Pin, mit Pullup 47K an Vcc. Bei normaler Tastenabfrage ist der Interrupt-Pin ein Ausgang auf "high", das ergibt Peters Schaltung. Im Sleep-Modus ist er ein Eingang.
Beitrag "Binär-kodierte Tastatur" Mit der Shift-Taste unterscheide ich 30 (2*15) Zustände. Und das funktioniert...
A. K. schrieb: > Peter Daneggers ADC-Variante lässt sich so erweitern, dass sie auch aus > dem Sleep-Mode aufwecken kann. Dazu schliesst man R1 nicht an Vcc an, > sondern am Interrupt-Pin, mit Pullup 47K an Vcc. Man braucht keinen extra Pin. Man macht den Widerstand so groß, daß bei gedrückter Taste <0,3*VCC anliegen und nimmt den Pin-Change-Interrupt zum Aufwachen. Peter
Heimo G. schrieb im falschen Thread: > An welchen Stellen der Tastenmatrix soll die die Pins für den > Pinchange-Interrupt anschließen, damit ich eindeutige Pegel bekomme? Er meint den ADC-Pin selbst, in einer Doppelrolle. Einerseits als analogem ADC-Eingang für die individuelle Tastenerkennung, andererseits als Digitaleingang mit Pin-Change Funktion um den Controller aufzuwecken. Allerdings setzt das voraus, dass R1 grösser dimensioniert wird, damit die Spannung bei egal welcher gedrückten Taste nicht über 1/3 Vcc liegt. Sonst funktioniert das mit dem Pinchange-Interrupt nicht.
Hallo. Ich habe gerade so etwas mit einer Zehnertastatur und dem ATtiny45 gebaut (siehe Schaltbild im Anhang). Funktioniert wunderbar. Mein Fernseher gehorcht schon auf Tastendruck. Den Beamer, den NF-Verstärker, den HD-Recorder und den SAT-Receiver kriege ich da auch noch integriert. Endlich haben die x Fernsteuerungen ausgedient. Der Quarz ist wahrscheinlich überkandidelt, weil die IR-Receiver breit wie Scheunentore reagieren. Aber man will ja möglichst genau die 38,4 kHz einhalten. Oder sind es 36 oder 40 kHz? mfg gerd
gerd schrieb: > Ich habe gerade so etwas mit einer Zehnertastatur und dem ATtiny45 > gebaut (siehe Schaltbild im Anhang). Funktioniert wunderbar. Wie sieht es da denn mit dem Stromverbrauch aus? Sleep-Mode mit Wakeup durch Taste geht ja schlecht, diese Variante gibt das nicht her.
gerd schrieb: > Funktioniert wunderbar. Nö. Ungedrückt liegt der Pin auf GND, d.h. jede Taste muß high (0,6*VCC) liefern zum Aufwachen. Die *-Taste liefert aber nur VCC/13, da wacht kein Pin-Change-Interrupt auf. Peter
> Wie sieht es da denn mit dem Stromverbrauch aus? Sleep-Mode mit Wakeup > durch Taste geht ja schlecht, diese Variante gibt das nicht her. Bei 3 V und mit ADC-Int 0,5 mA. Das mit dem Stromverbrauch habe ich - ganz altmodisch - mit einem Schalter gelöst (Stromverbrauch im ausgeschalteten Zustand << 100 nA, dürfte auch noch deutlich besser sein als bei Wake-Up, siehe Anhang). Umdimensionierung des Netzwerks wäre ein Leichtes, wenn ich bloss das blöde OpenOffice-Rechensheet auf meinen fünf Festplatten finden könnte. Jetzt sehe ich erst mal zu, ob ich die anderen Geräte analysiert kriege. Jede Fernsteuerung macht andere Signalfolgen. Daran kann man schön sehen, was man mit Normung für segensreiche Wirkungen erreichen kann. mfg gerd
gerd schrieb: > Umdimensionierung des Netzwerks wäre ein Leichtes, wenn ich bloss das > blöde OpenOffice-Rechensheet auf meinen fünf Festplatten finden könnte. Schau Dir mal meinen Code an. Da macht das Rechnen einfach der Compiler, man muß nur die 3 Widerstandswerte eintragen. Man muß bei meiner Schaltung den Widerstand gegen VCC nur so groß machen, daß low sicher erkannt wird. Und wenn für den hochohmigsten Tastenwert 1,25V nicht überschritten werden, vergleicht man einfach nur die untersten 8Bit. ADCH muß aber trotzdem ausgelesen werden (dummy read). Peter
Peter Dannegger schrieb: > Schau Dir mal meinen Code an. > Da macht das Rechnen einfach der Compiler, man muß nur die 3 > Widerstandswerte eintragen. Davon halte ich nicht so arg viel, weil ich die Widerstandsverhältnisse gerne selbst im Griff haben will. Die Widerstandsverhältnisse sind arg nichtlinear, weil so gut wie alles von allem abhängt. Und da hat man schnell eine Nichtlinearität drin. Wenn man keine Ordnung hält, muss man alles noch mal erfinden. Im Anhang ein Abbild des Berechnungssheets, mit Kurve für die Optimierung, und das alles bei 8 Bit Auflösung (ADLAR). Wie man sieht, ist das trotzdem recht robust. > Man muß bei meiner Schaltung den Widerstand gegen VCC nur so groß > machen, daß low sicher erkannt wird. Wenn ich das Datenblatt richtig verstehe, sind das 0,5*VCC. > Und wenn für den hochohmigsten Tastenwert 1,25V nicht überschritten > werden, vergleicht man einfach nur die untersten 8Bit. > ADCH muß aber trotzdem ausgelesen werden (dummy read). 10 Bit Auflösung sind eigentlich nicht nötig. Anbei noch den Rechensheet für die höhere Mindestspannung. mfg gerd
gerd schrieb: > Wenn ich das Datenblatt richtig verstehe, sind das 0,5*VCC. Nein. Vil = 0,3*Vcc. Vih = 0,6*Vcc D.h. der nutzbare ADC-Bereich ist grösser wenn man nicht 0,0..0,3*Vcc sondern 0,6..1,0*Vcc nutzt, die Leitung im Ruhezustand also high ist. In Peters Variante müsste man die Matrixverschaltung dazu einfach auf den Kopf stellen.
Also ich habe als VCC 2Stk. AA-Batterien od. Akkus (VCC also ca. 2-3V). Funktioniert das dann überhaubt noch zuverlässig ? Auch mit Aufwecken aus dem sleep mode?
Ich sehe keinen Grund weshalb es nicht funktionieren sollte. Unterhalb von 2,4V gelten allerdings andere Vil/Vih Werte: Vil = 0,2*Vcc. Vih = 0,7*Vcc Die Matrix sollte also auf 0,7..1,0*Vcc dimensioniert werden.
OK! D.h. Wenn ich VCCmin mit 2V annehme, dann habe ich für den ADC 1,4 bis 2V zur Verfügung. Wie beschalte ich nun den Int. fürs aufwecken?
Beitrag "Re: 3x4 Tastenmatrix - Reduzierung auf 5 Portpins?" Nur eben andersrum, also Ruhepegel low und bei low=>high aufwecken.
A. K. schrieb: > Nur eben andersrum, also Ruhepegel low und bei low=>high aufwecken. Jetzt bin ich etwas verwirrt. Kannst du mir das bitte genau erklären?
Peters Vorschlag war, die Matrix im Ruhezustand auf high zu halten, dis Tasten ziehen dann auf 0..33%Vcc (Datasheet wäre 0..30%). Wakeup erfolgt also bei high=>low. Die Methode, in Ruhe high und aktiv low zu arbeiten, ist halt eine alte liebgewordene Tradition aus TTL-Zeiten. Bei niedriger Vcc müsste man das auf 0..20%Vcc anpassen, was den ADC-Bereich schon etwas einschränkt. Kann man natürlich auch machen, nur ist das Verfahren ja völlig spiegelsymmetrisch. Vertauscht man die Rolle von Vcc und GND, dann darf sich das ADC-Signal für die Tasten im Bereich 70-100%Vcc bewegen und der Pinchange-Interrupt für Wakeup reagiert auf low=>high. Wenn das immer noch zu kompliziert klingt, dann such dir einen Übersetzer ;-).
OK! Wenn ich das richtig verstehe, also so wie im Bild.
Fast. R1 muss soweit vergrössert werden, dass die Spannung bei jedem Tastendruck mindestens 70%Vcc beträgt. Ausserdem hast du die Doppelfunktion des ADC/Pinchange-Pins immer noch nicht kapiert. Findet sich jemand, der ihm das mit einfacheren Worten eintrichtern kann als ich?
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.