Mygtukai analoginiam įėjime

Viskas prasidėjo nuo to, kad asmuo kodiniu vardu “Miltukų Meistras” sudaužė vieną Kinietišką prietaisiuką, o aš ji norėjau dar panagrinėti… Čia aišku nepalyginamas dalykas su žmogaus kodiniu vardu “Taupytis” poelgiu, kai norėdamas pažiūrėti kokios spalvos stiklas, jis atsipjovė su kampiniu šlifuokliu plazminio teliko ekrano gabalą… Dar veikiančio teliko…

O dabar esmė- daugelyje prietaisu yra grupės mygtukų. Dažnai mygtukai būna ir megėjiškuose prietaisuose su mikrokontroleriais (MCU). Tam tikslui naudojamos vertingos mikroprocesoriuko kojos. Jei grupė mygtukų, jie jungiami į matricą ir naudojamas dinaminis klavietūros skanavimas. Tuo tarpu, kieme jau 21 amžius ir daugelis MCU turi analoginius įėjimus. Ir daugelyje pramoninių prietaisų (magnetolos, CD grotuvai, radiojos, MP3 grotuvėliai, LCD monitoriai, elektroniniai laikrodžiai) jau seniai naudoja analoginį mygtukų valdyma. Minėtas sudaužytas prietaisas turėjo štai tokį mygtukų pajungimą:


(čia realaus prietaiso schema. Kodėl parinkti tokie rezistoriai aš nežinau)

Kaip matome, šeši mygtukai pajungti prie vienos MCU kojos. Šiaip prietaisiukas turi 3 analoginius valdymo įėjimus. 3 duomenų laidais pajungta 16 mygtukų. Naudojant grynai skaitmeninį pajungimą reikėtu žymiai daugiau MCU laidelių ir daryti ganėtinai sudėtingą ir resursų naudojantį algoritmą.

Pabandom suvesti skaitmeninio ir analoginio valdymo pliusus ir minusus (šios konkrečios schemos):

Analoginis valdymas:
(+) vienas MCU laidas
(+) lengva pajungti kiek toliau išneštą klavietūrą (rezistorius lengva prilituoti prie mygtukų)
(+) lengvas softas- analoginis signalas gali generuoti pertraukimą arba galima viena komandą nuskaityti klavietūros būklę.
(+)nėra kontaktų “kibirkščiavimo”
(-) reikia ADC
(-) reikia skirtingų rezistorių 🙂
(-) negalima daryti akordų (tiesa galima panaudoti binarinį kodavima su 2^n kodavimu)
(-) reikalingas Vref (tiesa jis gi pas MCU būna)
(-) galbūt jautrus trukdžiams? Ar blogiems mygtukams?

Skaitmeninis valdymas:
(+) yprastas
(+) daug softo
(+) galima akordai (nevisada)
(-) reikia daugiau MCU kojyčių
(-) reikia kovoti su kontaktų drebėjimu
(-) daug laidų iki klavietūros
(-) softas ėda daug MCU laiko, jei reikia dinaminio skanavimo

Malonu būtų išgirsti mintis ir komentarus.

15 replies on “Mygtukai analoginiam įėjime”

  1. Smalsumas padiktavo šiuos klausimus:

    O gal šitoje schemoje rezistoriai būtent tokie parinkti, kad butu galima pagal ADC reikšmę atskirti “akordus”? Tarkim bet kuri mygtukų kombinacija generuoja unikalią įtampą ir MCU belieka surasti kuriam intervalui priklauso ADC reikšmė.

    Be to, kodėl šiuo būdu nelieka kibirkščiavimo problemos? Įsivaizduoju taip: kai spaudi mygtuką, vis tiek būna kibirkštis -> keičiasi kelis kartus įtampa -> ADC generuoja daug pertraukčių keičiantis reikšmei. Kur mano mastymo klaida? 🙂

  2. Dėl “kibirkščiavimo”- ADC žymiai lėtesnis nei skaitmeninis. Gi naudojam pigų MCU variantą. Palyginti reikia kad ir Megos16 ADC ir skaitmeninį PINą. Dar prietaiso schemoje matau “C” užmauta ant tos dalies. Tik negaliu pasakyti ar tikrai jis ten- PCB labai užmakaluota.

    O šiaip čia spėliojimai dėl tu pliusu ir minusu. Todėl komentarai pageidaujami. Tik va pramonė kažkodėl tokias schemas myli.

    O dėl akordų, ši konkreti schema akordu nepriima- nuspaudus mygtuką, dešinėje esant dalis pašalinama iš schemos.

  3. Tas minusas su skirtingais rezistoriais man keistas pasirodė. Ir vienodus naudojant būtų gaunama skirtinga įtampa.

    Šiuo atveju akordai (teoriškai) veiktų jei kiekvienas mygtukas prie žemės būtų jungiamas per tam tikrą varžą. Tik kažin ar ne per sudėtingas toks variantas gautųsi.

  4. Šitą jungimo schemą (tik ten daugiau tų rezistorių) plačiai naudoja tokioj produkcijoj kaip skalbimo mašinos. Pačiam tenka jas remontuoti, tai bent jau ARDO firmoj visų programų išrinkimas taip padarytas. Matyt pasiteisina toks variantas, visgi ten išorinių trukdžių juk netrūksta

  5. > jei kiekvienas mygtukas prie žemės būtų jungiamas per tam tikrą varžą. Tik kažin ar ne per sudėtingas toks variantas gautųsi.

    O koks skirtumas ar individualiai mygtukui ar nuosekliai varžas jungt ? Vis teik jų kiekis vienodas ( +- 1 – 2). Čia ką trasavimas labai sudėtingėja ?

    Va samadielno DAC’o ( o tai yra nekas kita kaip DAC’as) pavizdys http://www.elektronika.lt/schematic/theme/75/23/

    Pagal atmelį matriciniai dargi mažiau akordų gali išgrot. Tiksliai groja to ko nereik (Ghost Key) Tiesa sakan nesupratau/nesiaiškinau kodėl…

    http://www.atmel.com/dyn/resources/prod_documents/doc2532.pdf

    Kažkus tuose notuose dar matricini redukuota kažkaip su diodais, maždauk per pus mažiau laidų naudojanti, varianta mačiau ….

    O kad pramonė myli tai jo kur nemylės . Čia spėjų ne tik kad MCU kojas taupo bet ir vieta ant PCB, lydvietes, jungčių kontaktus ….

  6. Dėl trasavimo tai nzn. Bet kai mygtukai išnešti į priekinę panelę ar į kitą PCB plokštę, tai labai susitaupo laidų.
    Dėl “samodėlno” DAC, tai tokį, ant LPT, dariau gūdžiai DOOM1 laikais. Tada garso plokštės buvo retenybė ir labai brangiai kainavo. Tas daiGtas vadinosi Covox. http://en.wikipedia.org/wiki/Covox_Speech_Thing

    Matricos redukuojamos su diodais tikriausiai naudojant “Charlieplexing” kai naudojama dvipusė srovės tekėjimo kryptis. http://en.wikipedia.org/wiki/Charlieplexing

  7. Cha, viskas labai paprasta. Pasiskaičiuokit pagal omo dėsnį įtampos reikšmes ant ADC kai rezistoriai vienodi ir kai rezistoriai kinta pagal eksponentinį dėsnį (kaip pavaizduotoje schemoje) 🙂

  8. na cia del tu pin’u sutaupymo ir laidu tai nelabai stiprus pliusas naudoti
    analogini iejima,
    pvz
    su dviem pinais, ir 2 parallel to serial 8bit registrais butu galima valdyt
    16 mygtuku,
    pin1 – clock shift out, pin2- data
    laidu i keyboarda clk, data, vcc, vdd is viso 4 vietoj tryju 🙂
    ne ka didesnis pranasumas, + iskart matyciau mygtukus kaip bitmap’a
    o naudojant ADC dar reiketu kazkoki itampa–>mygtukas dekoderi pasirasyt.
    dar didelis minusas kad tik vienas mygtukas vienu metu gali buti paspaustas.
    pvz jeigu tavo pateiktoje schemoje paspausciau pirma is kaire tuomet
    visi kiti mygtukai jau nedarytu itakos nes V = 0 butu :]

    arba neteisingai parinkus varzhas butu galima sudaryti kombinacija tokia kad uzpaudus du mygtukus vienu metu, sistema pagalvotu kad tai kitas mygtukas kazkoks, nes varzos lygiagreciai
    pvz tavo pavyzdi, jei uzpaustume antra ir trecia mygtukus, gautusi varza
    R = 3.3*4.7/(3.3+4.7)=~1.93k beveik panasu i pirmo mygtuko 1.8k
    nu nebent visas imanomas varzu kombinacijas surasius i lentele su ivairiom mygtuku kombinacijom, bet cia irgi reikia parinkt tokias varzhas kad nebutu collision’u nu nz.. overall del vieno laidelio neverta tiek vargti -)

  9. Dariau aš ir su par/ser registrais- minusas toks, kad reikia dėti tuos registrus, pumpuoti gana daug ciklų, kad nuskaityti mygtukus. Pliusai- akordai. Bet ar labai daznai naudojami visu klavisu akordai? Net ir PC klavieturoje akordai tik su modifikaciniais klavišais.
    Tokį ser/par nuskaitymą dariau viename projekte, kur ser/par registrai valdė daugiasegmentinį displėjų. Tada užteko tik dajungti mygtukus prie “displėjaus” ir viskas veikė.

    O analoginio valdymo source koda galima rasti mano bloge, ten kur RTC laikrodžio “griaučiai” įdėti.

  10. na kas greiciau, ar nushiftint registra ir perskaityt 6 bitus ?
    ar laukti kol adc konvertins ?
    aisku privalumas tas kad adc veikia lygiagreciai ir galima ant A/D interrupto uzhandlint kazka , bet as savo par/ser skenavima ant timer interrupto galiu uzhandlint
    + reikia lyginti if(abutton

  11. … ir statyti specialiai šiftinimui mikroschemą? 🙂 O dėl greičio, tai kam jis reikalingas? Kontaktų virpėjimą gaudyti 🙂
    Aš dar suprantu, kad jei reikia kokį signalą pagauti (kad ir iš kokios optinės poros) ar dar ką nors. O žmogienos mygtukus? Iš viso, gi mikroschemų gamintojai siūlo įsigyti pigius mygtukų kontrolerius kurie talpuminiu principu veikia.

    Manau, jei yra lyšnas ADC, tai taip daryti žymiai paprasčiau. Galu gale parodyk tu man buitinį prietaisą kuriame būtų “seno” modelio mygtukų skanavimas. LCD monitorius, LG PDP, DVD grotuvas, kažkoks laikrodis, radija-batonas. Visur ADC variantas. Ir dar vienas momentas kuris aktualus kokioje nors radijoje- pas analoginius mygtukus mažiau triukšmo. Įsivaizduok, kai triukšmaus mygtukai išmėtyti po visą “batono” priekį… 🙂

  12. na tu paminejai kad minusas – greitis. aisku nereikia to greicio.
    pritariu sis adc variantas tikrai neblogai sugalvotas :]
    idomu ar neuzpatentuotas toks dalykas ? 🙂

    o seip, cia atsitiktinai atklydau i sita puslapi, kazko ieskodamas apie “led matrix”, truputi perzvelgiau postus tai matos kad “pasineses” ant skaitmenines elektronikos 🙂 ir kaip tik nesenei gavau toki sena daikta
    roland tr-707 bet neveikiantis,
    visas itampas ismatavau maitinimas ok, viskas ok… tai
    susikonstravau toki 8 bitu logic’scope jungiasi tiesiai i LPT porta (ECP) kazkokia 74HC244 bufferine mikroschema uz lita panaudojau =)
    ir su juo ieskojau kaip kur ten vaiksto duomenys, tai isvada, kad visa periferija veikia, bet pats CPU uz ~sekundes pakimba =)

    ten naudojamas senas hitachi MCU: HD63B03XF
    http://www.datasheetarchive.com/pdf-datasheets/Datasheets-13/DSA-249648.pdf
    ir jis prijungtas prie EPROM’o kuriame yra programos kodas: HN613128P
    http://www.datasheetarchive.com/pdf-datasheets/Datasheets-8/DSA-150142.pdf

    tai va mano nuomone ten EPROM’e kazkuris bitas virto i nuli ir susigadino instrukcijos :))

    bet problemele kaip ta EPROMa butu galima nuskaityti gal netycia turi koki nors reader’i tokio senumo chipam (gal pin compatible)
    butu gerai pasiimt is jo dumpa ir dissassemblinus istaisyt klaidas ir patalpint ji i koki nors siomis dienomis gaminamus eepromus :]

Leave a Reply

Your email address will not be published. Required fields are marked *