microcontroller mit telefontastatur

M

martin widler

Guest
hi leute!
folgendes: ich will oben genannte tastatur(alle 12 tasten einzeln
herausgefuehrt) an meinen at89s8252 h?ngen.

um nur 2 portpins verwenden zu muessen, waere mein plan zwei 8-bit
schieberegister (SR1,SR2) (z.b.74hc164,singleIn paral.Out) mit den
ausgaengen an die 12 leitungen zu schlieszen. der dataeingang von SR1
liegt an dauerplus, SR2 bekommt sein data vom hoechstwertigen bit von
SR1.die gemeinsame leitung der tasten geht invertiert als eingang an
einen portpin.
in einer abfrageroutine(alle 20ms?) sendet ein uC-ausgangspin dann einen
1-0 impuls an die /clk eingaenge beider SR.
wird dann am uC-eingangspin eine null eingelesen ist taste1 gedrueckt.
wird eine eins eingelesen(taste1 nicht gedrueckt), sende den naechsten
impuls an /clk und lies wieder aus (taste2) usw. bis taste#.
das 13.bit (bit6 SR2) wird mit den clear-eingaengen beider SR verbunden,
wenn also bis dorhin geshiftet wird, ist keine taste gedrueckt und die
SR-ausgaenge werden fuer die naechste abfrage resetet.

wuerde gern wissen ob ich irgendwelche denkfehler gemacht habe.

ein problem stellt sich noch im initialzustand: welchen wert nehmen die
ausgaenge von so einem 74hc164 nach power-on an? 1-0 zufallsmuster?

sollte ich das zu verkorkst erklaert haben, sagt mir bescheid und ich
werde eine zeichnung uploaden.

thanx
martin widler
 
martin widler wrote:

folgendes: ich will oben genannte tastatur(alle 12 tasten einzeln
herausgefuehrt) an meinen at89s8252 haengen.
Wenn ich Deine Beschreibung richtig verstanden habe, dann gibt's hier
einige Probleme.

um nur 2 portpins verwenden zu muessen, waere mein plan zwei 8-bit
schieberegister (SR1,SR2) (z.b.74hc164,singleIn paral.Out) mit den
ausgaengen an die 12 leitungen zu schlieszen.

die gemeinsame leitung der tasten geht invertiert als eingang an einen
portpin.
Wenn Du alle Tasten ohne Entkopplung (durch Dioden oder Widerstaende) an
die gemeinsame Leitung anschliesst, dann erzeugst Du beim gleichzeitigen
Druecken zweier Tasten einen Kurzschluss der Schieberegister-Ausgaenge.
Das ist nicht so gut...

Ausserdem: wozu der Inverter?

in einer abfrageroutine(alle 20ms?) sendet ein uC-ausgangspin dann einen
1-0 impuls an die /clk eingaenge beider SR. wird dann am uC-eingangspin
eine null eingelesen ist taste1 gedrueckt. wird eine eins
eingelesen(taste1 nicht gedrueckt), sende den naechsten impuls an /clk
und lies wieder aus (taste2) usw. bis taste#.
Dieses Verfahren wird falsche Ergebnisse liefern, soferne noch vor dem
Ende des Auslesezyklus eine "niedrigere" Taste gedrückt wird. Wenn z.B.
knapp vor dem Auslesen der sechsten Taste die zweite gedrueckt wird, dann
wird Dein ľC trotzdem annehmen, dass die sechste Taste gedrueckt wurde, da
er ja nicht weiss, von welcher Taste die Eingangsleitung aktiviert wurde
(es sind ja alle niedriegeren Leitungen auf 1). Insbesondere waehrend der
Prellzeiten der Tasten wird es lustige Effekte geben.

das 13.bit (bit6 SR2) wird mit den clear-eingaengen beider SR verbunden,
wenn also bis dorhin geshiftet wird, ist keine taste gedrueckt und die
SR-ausgaenge werden fuer die naechste abfrage resetet.

ein problem stellt sich noch im initialzustand: welchen wert nehmen die
ausgaenge von so einem 74hc164 nach power-on an? 1-0 zufallsmuster?
Du musst von einem Zufallsmuster ausgehen. Das ist bei Deinem
Abfrageverfahren aber ein Problem. Denn grundsaetzlich wuerde man in solch
einem Fall nach dem Power-On einmal alle Bits aus dem Register
hinausschieben. Das geht aber hier nicht, da auf Grund des fest
verdrahteten Schieberegister-Resets und des fix auf 1 gelegten seriellen
Einganges der ľC nicht wissen kann, nach wievielen Impulsen der
gewuenschte Zustand (alle Bits 0) erreicht ist.

Natuerlich koenntest Du den Reset-Eingang des Registers ueber ein Gatter
zusaetzlich mit der Reset-Leitung des Prozessors verbinden, sodass das
Register bei einem Hardware-Reset gelöscht wird. Oder Du opferst doch eine
dritte Portleitung und steuerst damit den Reset-Eingang an.

Ich wuerde empfehlen, statt des Schieberegisters mit parallelen
*Ausgaengen* eines mit parallelen *Eingaengen* (z.B. 74HC165) zu
verwenden, Du brauchst dann allerdings drei Portleitungen (Load, Clock und
Data). Die Tasten verbinden die Dateneingaenge z.B. mit Masse und haengen
ueber ein je einen Pull-up Widerstand (aus einem Widerstands-Array, dann
braucht's nicht viel Platz) an Plus. Zum Auslesen aktivierst Du zuerst
kurz den Load-Eingang und liest dann per Clock und Data der Reihe nach die
Bits ein.

Alternativ koennte man statt des Schieberegisters auch einen Zaehler mit
dekodierten Ausgaengen verwenden (z.B. zwei kaskadierte 4017). Da ist dann
nach jedem Taktimpuls genau ein Ausgang auf 1, welcher dann (wie bei
Deinem Vorschlag) ueber die jeweilige Taste (und per Diode entkoppelt) mit
dem Portpin verbunden ist. Fuer eine saubere Initialisierung sollte man
aber auch hier den Reset-Eingang des Zaehlers ansteuern koennen, sodass
man wieder drei Portleitungen braucht.

Bei ľCs mit eingebautem A/D-Wandler gaebe es dann noch die Moeglichkeit,
die Tasten ueber unterschiedliche Widerstaende an den gemeinsamen Eingang
anzuschliessen und damit einen Spannungsteiler aufzubauen. Dann kann man
aus der gemessenen Spannung die gedrueckte Taste ermitteln. Je nach Wert
der Widerstaende, Anzahl der Tasten und Aufloesung des Wandlers wird es
aber unter Umstaenden nicht moeglich sein, mehrere gleichzeitig gedrueckte
Tasten korrekt zu identifizieren.

--
Gruesse,
Pascal Le Bail, Wien
Meine Absenderadresse ist derzeit inaktiv. Siehe <http://swen.pascal.at/>.
 
martin widler <boosted@gmx.at> schrieb im Beitrag <3F7E2C82.10907@gmx.at>...

folgendes: ich will oben genannte tastatur(alle 12 tasten einzeln
herausgefuehrt) an meinen at89s8252 h?ngen.

Du findst bei Atmel und bei Microchip dutzende von Application Notes
in denen eine Tastatur mit dem uC verbunden wird, z.B.
http://www.atmel.com/ AVR242 "Multiplexing LED Drive & a 4x4 Keypad".
So was zeugt, das es viel klueger ist, wenn man ALLE anzuschliessenden Elemente
in der Gesamtheit betrachtet und dabei entdeckt, das man I/O-Pins doppelt verwenden
kann. Das spart extra Decoderchips. Lern von den AppNotes.

Allerdings. Was hast du fuer eine merkwuerdige Tastatur ? Gerade Telefon hat
niemals 12 einzelne Tasten sondern immer eine Matrix.
--
Manfred Winterhoff, reply-to invalid, use mawin at despammed.com
homepage: http://www.geocities.com/mwinterhoff/
de.sci.electronics FAQ: http://dse-faq.elektronik-kompendium.de/
Read 'Art of Electronics' Horowitz/Hill before you ask.
Lese 'Hohe Schule der Elektronik 1+2' bevor du fragst.
 

Welcome to EDABoard.com

Sponsor

Back
Top