Sari la conținut
ELFORUM - Forumul electronistilor

Tastatura pe un singur pin de intrare


MirceaM

Postări Recomandate

Baieti, sunt convins ca, pentru un numar mare dintre colegi, nu spun noutati insa recent "m-am prins" si eu de o chestiune dar am si cateva intrebari referitoare la ea.

 

Ne gandim ca intr-un anumit montaj avem nevoie de cateva taste, sa spunem max 8 taste. Le denumim Tasta 0, Tasta1, ?, Tasta 7.

Cate un capat al fiecarei taste il punem la masa iar celalalt capat, printr-o rezistenta de valoare specifica tastei il ducem pe o intrare analogica a unui PIC. Din acel pin mai avem inspre +5V o rezistenta.

Daca nici o tasta este apasata atunci vom citi 1023 din acea intrare analogica (ne gandim la conversie A/D pe 10 biti).

Daca macar o tasta este apasata avem acolo un divizor de tensiune.

Alegem valoarea acelei rezistente inspre + astfel incat cea mai mare valoare citita in caz ca o singura tasta este apasata sa fie cat mai aproape de valoarea 511.

Daca o anumita tasta este apasata vom citi un anumit numar, intre 0 si 511, specific tastei.

Numarul citit "falfaie", se schimba, treaba depinde de calitatea rezistentelor si de temperatura DAR cautam sa contracaram acest neajuns.

Folosim rezistente bune, cu toleranta mica.

Aranjam, tatonam, alegem valorile celor 8 rezistente in asa fel incat:

Tasta 0 apasata sa ne dea un numar intre 0 si 63

Tasta 1 apasata sa ne dea un numar intre 64 si 127

. . .

Tasta 7 apasata sa ne dea un numar intre 448 si 511.

 

Deci numarul citit (intre 0 si 511) il impartim prin 64 si astfel (deci atat de SIMPLU!) aflam numarul tastei apasate, de la 0 pana la 7.

 

Lasam la o parte cazul cand 2 sau mai multe taste ar fi apasate. In acest caz, prin punerea in paralel a rezistentele respective, va exista inspre masa o rez de valoare mai mica, ceea ce va insemna ceva echivalent cu "alta tasta". Lasam asta acum, cautam sa prindem principalul.

 

Intrebari.

1. Ar merge?

2. Aud ca multe din acele "joystick-uri" de la playere de masina, legate de aparat printr-un cablulet cu numai 2 fire, cu un jak la capatul dinspre aparat sunt facute pe acest principiu. Asa este?

3. Considerand ca "etalonarea" pt tasta 0 de exemplu o facem in mijlocul range-ului specific, anume asa incat sa citim numarul 32 (in jur de aceasta valoare), pt tasta 1 aranjam rezistenta asa incat sa citim valoare in jur de 96 etc etc.., considerand si ceva intarzieri implicate (timpul ca sa se incheie conversia etc, mai spuneti voi...) cum ar fi cu debounce-ul? Se poate fara debounce soft? Sau n-are nici o legatura cu debounce-ul?

4. Este adevarat ca este o solutie economica, in sensul ca se foloseste un singur pin de intrare in PIC pentru toata tastatura si ca softul pentru citire taste este simplu?

Link spre comentariu
  • Răspunsuri 3
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • CristianC

    1

  • MirceaM

    1

  • Abram Burel

    1

Top autori în acest subiect

1. Da.

2. Nu stiu.

3. Eu as construi mai degraba un convertor digital analog cu rezistente. In felul asta nu ar mai trebui sa tatonez rezistentele si le-as pune R-2R sau toate de aceeasi valoare (cauta scheme de DAC pe net ca sa vezi cum se leaga rezistentele). In felul asta as putea sa citesc si combinatii de taste apasate. As regla convertorul in asa fel incat fiecare bit din valoarea masurata de ADC sa insemne o tasta. Daca pui R de precizie cred ca poti sa citesti lejer 8 taste si toate combinatiile lor.

Debouncing iti trebuie oricum. Mai intai pui ceea ce se cheama un Moving Average Filter (cauta pe site-ul Microchip si ai sa gasesti si exemple de implementare scrise foarte ingenios) si pe urma validezi tasta numai daca timp de cateva ms valoarea scoasa de Moving Average Filter nu se schimba prea mult. Eu as lua un timp de debouncing in jur de 20 ms sau multiplu de 20 ms ca sa atenuez si brumul de retea prins de convertor.

Chiar daca nu implementezi un DAC cu rezistente treaba cu debouncing-ul ramane.

4. Este economic. E mai simplu debouncing-ul pe o intrare digitala decat pe una analogica.

Link spre comentariu

1,4. Da. Chiar este descrisa intr-o nota de aplicatie de la Microchip.2. De exemplu la Chevrolet Lacetti este ceva asemanator (desi nu stiu ce este inauntrul HUD-ului Blaupunkt, modul de "transmitere" a informatiei de la butoanele de pe volan la HUD este prin tensiune variabila pentru fiecare buton)3. Daca aplicatia e "zgomotoasa" (cum ar fi comenzile audio pe volan sau in jurul lui), atunci e mai bine sa folosim intreaga plaja de tensiune si sa o divizam cat mai egal. Pentru "debounce", avand in vedere ca oricum trebuie sa faci polling pe intrarea aia, folosesti media a cateva citiri si abia valoarea ei o compari cu pragurile.Mai nasol e cand nu ai 2 fire. De exemplu, am incercat la Chevrolet Kalos sa folosesc circuitul claxonului pentru asta (clock spring-ul cu care e dotat are 2 3 circuite, dintre care 2 sunt folosite pentru airbag). Din pacate, circuitul de masa este luat prin coloana volanului si rezistenta de contact a acestuia fata de caroserie (masa propriu-zisa) variaza. Asta afecteaza nivelele de tensiune.

Link spre comentariu

Am folosit acest principiu pentru o telecomanda cu 12 butoane realizata cu PIC12F675. Schema la care am ajuns era cam asa:- 12 rezistente de 1K legate in serie.- capetele circuitului serie conectate la 0 respectiv 5V- 12 butoane conectate cu un terminal la intrarea ADC si celalalt la cate un nod al seriei rezistive.- o rezistenta de 100K in paralel cu un condensator 100n legate intre intrarea ADC si masa (pentru cazul cand nu sunt apasate butoanele)Rezistentele fiind de aceeasi valoare se rezolva oarecum problema tolerantei In software:- am implementat o toleranta de 20% din cuanta de tensiune (in cazul meu cuanta =1024/12 sau 5V/12)- am interogat tastatura la fiecare 10ms si am considerat tasta apasata la 3 citiri consecutive cu acelasi rezultat (in toleranta aleasa).Circuitul functioneaza fara probleme.

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări