klávesnice

zdravím, mám klávesnici s 12 tlačítky a a chtěl bych ji připojit na na port mikrokontroléru. Ale jaksi port je jen 8 bitový tak nevím jak to připojit. Existuje na to nějaký kodér na BCD kód nebo něco?

Udělej si třeba diodovou matici, pak ti stačí čtyři bity.

a ta matica se dělá jak?

Praktický příklad najdeš v knize Komunikace mikrokontroléru s okolím 1 strana 44.

klavesnice se bezne pripojuje primo na port procesoru. Pouzijes 3 svisle vodice a 4 vodorovne. Do kazdeho prekrizeni je vlozen spinac. Na jesne skupine vodicu rotujes “1” a sledujes druhou skupinu, kde se ta “1” objevi. Kdyz potom vis, na kterem svislem a vodorovnem vodici mas “1”, tak take vis, kterou klavesu jsi stiskl :wink: Pro zabezpeceni portu procesoru pri stisku vice klaves je nutne jeste vlozit diody nebo odpory mezi port a skupinu vodicu klavesnice, kde rotujes ty “1”.

To je přeci zbytečné, stačí když port naprogramuji jako otevřený kolektor, nikoli jako komplementární výstup a rotovat můžu 0. Nicméně tento způsob čtení klávesnice má tu nevýhodu, že může zpracovávat pouze dvě současně stisknutá tlačítka. Pro tři už chybuje. Proto je lepší zapojit do série s tlačítky diody a problém nevzniká.
Ještě jsem si vzpomněl, že Tesla vyráběla obvod pro čtení klávesnice, který převáděl kód 1 z 16 na binár a odstraňoval zákmity. Současně fungoval jako latch. Myslím, že měl označení MH1KK1 a byl vyroben technologií I2L.

:slight_smile: Ne vsechny procesory umi nastavit porty ja “otevreny kolektor”. Diody jsou urcite lepsi, ale nekteri zacatecnici se snazi polovodicum vyhybat co to jde, tak jsem pridal alternativu.

edit: “otevreny kolektor” - ted me tak napada… i u avr by to slo. zaroven s rotaci na portu by bylo treba provadet i rotaci DDRx registru, aby byl vystupni vzdy jen ten pin s “1”… Rotovat jen samotny DDRx by nebylo vhodne, protoze pri nastaveni portu (te vystupni casti) na “1” by zapnulo pull-upy(ktere ovsem lze globalne vypnout, potom by to nebyl problem) a to by mohlo vest k chybam pri cteni.

No spíš by bylo jednodušší vyjmenovat MCU, které to neumí. Určitě to umí AVR, x51, PIC,…

Nejsem začátečník, ale nejen polovodičům se vyhýbám co to jde. Když ta součástka tam neplní žádnou úlohu, nemá tam co dělat. Čím méně součástek, tím snazší realizace.

Klidně ať ty otevřené kolektory jsou bez pull-up. Ty musí být zapnuté na vstupech, aby byla definována klidová úroveň. Ná výstupech to nemá smysl. Tato realizece je možná jen tehdy, pokud jsou tlačítka velmi blízko MCU a spoje krátké, cca 5cm. Pokud by klávesnice byla na kšandě, už pull-up nestačí a je třeba čtecí vodiče předepnout odporem, řádově jednotky kiloohmů do plusu.

Diodova matica je dobra vec, mozno aj praktickejsia co teraz napisem, lebo suciastky sa daju rozprestrene rozostrkat na plosaku kde kade, ale neda mi nespomenut multiplexer 74HC151.

Ja by som sa asi rozhodol pre SPI obvody 74HC165 a 74HC595. Daju sa spravit “zasuvacie” moduly, pricom kazdy ako par In/Out obsluzi 8 vstupov a 8 vystupov.

Vystupy trebars na LED, vstupy pre tlacitka pre DIP, seriovo / paralelny prevodnik datovky pre LCD (aby sa kvoli nastraveniu E nemuselo 3x cvicit so vsetkymi datami, riesim E = MOSI a RS = CLK len ked je CS v log.1). Na vsetko potom naozaj stacia 4 piny procesora.