Tag Archives: AVR

Printerio zulintuvas (ATMEGA USB 025)

Ką galima padaryti iš seno adatinio printerio ir mano ATMEGA plokštės (beveik) ir MOSFET raktų rinkinio? Ogi tokį nesamoningą pieštukų ir popieriaus gadinimo prietaisą:

printerio steperiai kai braizikliai

Visa šita nesamonė valdosi iš pagrindinio kompo, ryšis tarp kompo ir “periferijos” per USB laidą. USB draiverių nereikia, tai HID įrenginys. Tik reikia kompe instaliuotis LibUSB-Win32 (arba linux analogą) iš source-forge.
Geležis tai ATMEGA16 su OBJECTIVE DEVELOPMENT Software GmbH (V-USB) freeware firmware ir keletas eilučių C kalboje. Host programinė įranga deja tik komandinė eilutė (nesugebėjau priversti man pavaldžias visualines programas dirbti su šia biblioteka). Komandinė eilutė supranta primityvų skriptingą, tai galima ir pažaisti. Tą ir parodo šis filmukas:


Nelabai lygiai gavosi, nes pieštukas pritvirtintas paprastom gumytėm ir kiek kliba.

Daugiau info rasite programos archyve (ten ir sukompiliuoti exe bei hex, bet ir visi source kodai).
Beja, viskas teoriškai turi kompiuliuotis ir veikti ant linuxų. Bandžiau tik su Windows XP Pro (32bit).

ATMEGA USB 24: steperiai per USB portą

Jau rašiau, kad ištraukiau kelis žingsninius variklius ir kiek su jais pažaidžiau. Poto pažiūrėjau į internetą, radau daug ten grožybių… tačiau grožybės arba reikalavo labai jau advanced softo ir super-duper draiverių, arba naudojo printerio (LPT) portą. Mano kompo LPT portas ir taip jau susvilintas, o su papildoma plokšte nekiekvienas softas sugeba dirbti. O ir tas LPT metodas man nepatinka. Todėl nutariau išrasti dviratį. Pasiėmiau savo seniausią ATMEGA16 testinę plokštelę su USB lizdeliu, prikabinau jau aprašytus raktus ir kiek paprograminau. Gavosi toks niekalas:

Sistemos principas- stepus valdo ATMEGA, didelis kompas per USB siunčia komandas ir gali nusiskaityti kai kurių registrų būklę- nu kad atbulinis ryšis. Didelis kompas siunčia komandą- steperį numeris vienas pasuk per 1056 žingsnius pagal laikrodžio rodyklę ant 5 greičio, o steperį numeris du pasuk per 38 žingsnius prieš laikrodžio rodyklę ant 15 greičio. Kol steperiai sukasi, didelis kompas gali nuskaityti komandos bitus, kiek liko žingsnių ir A porto (ir dalį B porto) bitų būkles. Ant tų portų galima užkabinti galinukus ar kokius trumpo jungimo bei termo daviklius.
Dar yra komanda “atleisti vadžias”- tada nutraukiama srovė per motorų apvijas ir juos lengvai galima sukinėti. Nes kai įjungtas stabdis, kai kurie labai priešinasi.
Beja, filmukyje matosi, kad motorai ant didžiausio greičio nepasisuka. Reikia eksperimentiškai sužinoti savo turimo motoriuko ribas.

Viskas primityvu ir paprasta. Atiduodu source kodus, todėl vietoje motoriukų lengvai galite valdyti ką tik norit- softas visiškai paprastas. Beja, valdymas tik command line, be jokių langelių. Tačiau softas kompiliuojasi ir ant windows ir ant Linux. Beja, USB įrenginukas draugiškas sistemai ir naudoja HID draiverius.
Full source code and HEX.

NiosII vs Atmega16

Vėl prisiminiau savo žaidimus su FPGA čipu. Prisiverčiau pasižaisti su virtualiu (softcore) procesorium. Juolab, kad Altera atidarė savo licenziją ir NiosIIe procesorių galima naudoti savo kūriniams nemokamai. NiosIIe procesorius tai 32 gyvis su galimybe prikomponuoti matematinį koprocesorių (FPU).
Procesorių nutariau sukišti į savo gamybos plokštę su minimaliu Cyclone II čipu (EP2C5T144). Kas įdomiausia, softas su programiškai padaryta slankiojo kablelio matematika netilpo į čipo vidinę atmintį, tačiau tilp FPU ir softas su koprocesoriaus panaudojimu :).
Kad palyginti procesoriaus greitį, panaudojau tą patį softą (C kalboje) tiek ant Atmega 16, tiek ir su NiosII procesorium. Štai jumi ir rezultatas:

Pagrindiniai parametrai:

  • ATMEGA16, veikianti 12MHz dažniu. Softas kompiliuotas su GNU C. Interfeisas su FPGA čipu per 4 duomenų bitus ir keliais kontroliniais laideliais. FPGA vidinis skaitliukas resetinamas su Atmega, vėliau paveiksliukas pumpuojamas po 4 bitus. (4 bitai, strobas, 4 bitai, strobas, FPGA padidina adresą, ir taip ratu).
  • NiosIIe, ekonominis, nemokamos licenzijos procesorius. Softas kogero irgi GNU C kompiliuojamas. Duomenų perdavimas kiek kitoks, nes viduje FPGA sujungti žymiai lengviau: 8 bitai duomenim, kelioliką bitų adresui. Kaip jau ninėjau- FPU, hardware floating point (sudėtis, atimtis ir daugyba). Procesorius veikia nuo 50MHz taktinio dažnio. Didesnio dažnio negalėjau panaudoti, nes FPGA neturi laisvo PLLo (PLLas naudojamas LVDS interfeisui).
  • NiosIIf, tas pats kaip ir NiosIIe, tik dabar “komercinė” versija, vadinama dar “fast”. Matosi, kad kiek greitesnė. Tačiau pagrindinis greitumas pasijaustu, jei softas važiuotu iš išorinės SDRAM ar DDR atminties.

Tikėjausi žymiai didesnio greičio skirtumo. Gi Mega tik 8 bitų, neturi “geležinio” slankiojo kablelio ir važiuoja nuo 12MHz (todėl, kad toks kvarcas prilituotas). Tuo tarpu Niosas 32 bitų, hardwarinis floating point, groja ant 50MHz ir naudoja vidinę FPGA atmintį kuri tikrai nestabdo.

Nemanau, kad reikia publikuoti softą (tiek C, tiek Verilog) nes hardwarė labai jau specifinė ir niekas jos nepasidarys. Jei labai labai susidominot, rašytik laiškelį, pamačysim.

Sudėtingiausia “namudinė” plokštė

Mintis paprasta- reikėjo padaryti LVDS siuntiką mano RGB matricai. Nei viena turima testinė FPGA plokštė netiko. Vienintelė išeitis- darytis plokštę. Viena problėmėlė- CycloneII mikroschema turi 144 kojas ir 0.5 mm kojelių žingsnį. Buitinėm sąlygom kiek sunkokas variantas- reikia užsisakyti kokiam nors fabrikėlyje Kinijoje ar Bulgarijoje. Tačiau tokia PCB gana brangiai kainuoja. Ypač žinant tai, kad aš dar nežinau kaip kas turi būti padaryta. Todėl išmasčiau, kad “beta” versija reikia pabandyti pasidaryti namie. Tokiom mikroschemoms reikia daugiasluoksnės plokštės, tačiau namų sąlygom metalizuotos skylutės nesigauna ir šiaip problemos su sluoksnių sutapatinimu. Todėl plokštę pasidariau viensluoksnę.

Va paveiksliukas kaip turi atrodyti plokštė:
FPGA
Rausvais kvadratais pažymėtos vietos, kur padariau klaidas. Klaidos tokios:

  • FPGA I/O 2.5V, ATMEGA16 3V tačiau aš neturėjau L versijos. Todėl mega važiuoja ant maždaug 5V.
  • Megos I/O ir Ciklono I/O lygiu suderinimas. Bandom su rezistoriais.
  • Rezonatorius ??MHz buvau sugalvojęs viena, teko dėti 50MHz kuris irgi važiuoja ant 5V. Iš čia CLK lygiu suderinimas su rezistoriu ir diodu. Kiek jis duoda problemų dar nežinau.
  • FPGA PLL maitinimas. Čia jau aš kaltas, kad iki galo neįsiskaičiau į instrukcijas. Aš sujungiau PLLA ir PLLD laidelius į vieną laidą ir per ferituko ir kondiko filtrą pajungiau prie VCCINT… Galbūt dėl šito negaunu PLL LOCKED patvirtinimo LVDS išėjimo megafunkcijoje.
  • Dar nepatvirtinta, bet rodos supainiojau “p” ir “n” poras ant kištukų… nes duomenys kitame kabelio gale gavosi invertuoti :).
  • Užmiršau “apsauginius” 3.6V zenerius ant USB duomenų šynos. Ir vieną rezistorių ten pajungiau prie GND vietoje VCC5.
  • Viena LVDS pora neveikia. Nežinau kodėl. Pasirinkau vieną kojelę su “dual purpose pin” ir kažkas man ten gliučina.– radau mažyti “solder bridge”
  • Nenumačiau keletos vietų “demferiniams” kondikams, nors ant PCB ten vietos pilna.

Pagaminta plokštė, kad negalvotumėte, kad svaigstu. Tas organinis stiklas tikrai padeda, nes ne vieną prietaisiuką esu pagadinęs kai nusprūsta koks oscilografo žemės laidas ir prisiliečia prie ten kur nereikia.

FPGA
(Plokštė pagaminta su fotorezistu ir lazeriniu printeriu. Takeliai išvedžioti Eagle programa)

Kol kas viskas veikia blogai. RGB LED plokštė pagauna LVDS sinchronizacija, bet vistiek bando rodyti visokius briedus. Pagyvensim pamatysim, kol kas gi mokomės. Dar nei vieno LVDS projekto nedariau.
O projekto fantazija buvo tokia, kad iš kompo informacija per USB paduodama į šią plokštę, o ji, savo ruožtu, valdo vieną arba dvi RGB matricas.
Šiuo metu, matrica prijngta 100Mbit greičiu prie “valdymo” plokštės. Jei pavyksta sekmingai sinchronizuotis, duomenys teisingai vaikšto ir matrica valdosi (per JTAG). Tačiau siuntėjo LVDS modulis “PLL LOCKED” nepakelia.

ATMEGA USB 22: RTC laikrodis

Kažkaip neparašau apie laikrodžių darymą. Kiekvienas bent kiek įvaldęs kontroleriuką kada nors pradeda gaminti laikrodį. Aš irgi 🙂 Labai labai seniai dariau RTC laikrodį su PIC procesorium. Rašiau aš jį asembleryje… ir labai nervinaus, nes buvo sunku ir tas PICas turėjo savo bjauriu niuansu. Šiaip internete pilna laikrodžių- visokiems procesoriams, visokiems ekranams. Pasibandžiau keletą, kai kurie patiko, kai kurie ne. Pagaliau vieną dieną pasakiau- va ateis savaitgalis ir pradėsiu rašyti laikrodį nuo nulio.

Pagrindinės užduotis kurias sau pastačiau:

  • RTC nepriklausantis nuo maitinimo. T.y. atjungiam maitinimą, o laikrodis sau toliau veikia.
  • Hardwarinis laikrodis- tikras nesusipratimas smaukytis su procesoriaus kodu, kad skaičiuoti kiekvieną pirstelėjimą ir apsakaičiuoti laiką. Laika turi skaičiuoti RTC čipas- procesorius užsiima grožiu ir User Interface.
  • Valdymas turi būti aiškus, o ne su vienu nupiepusiu mygtuku. Naudojam kaip minimum 6 klavišus (juolab kad naudojant ADC mygtukus, jų skaičiaus kaitaliojimas nėra nei hardwariškai, nei softwariškai sudėtingas). Mygtukai: kairėn, dešinėn, aukštyn, žemyn, OK ir Cancel. Kaip bet kuriame teliko distanciniam.
  • Jokių asemblerių, advanced dalykėlių (ir atminties taupymo). Turi kompiliuotis su gcc.
  • Laikrodžio variklis (core) turi lengvai persikelti ant kito “displėjaus”. T.y. dabar rašau naudojant LCD ekraniuką, bet su minimaliu pokyčiu, softas turi persikelti kad ir į LED matricą ar kokį rotary clock displėjų.

Konstravimui panaudota esama hardwarė. Tik papildomai, prie I2C porto pajungta RTC mikroschema, kurią man maloniai padovanojo Intersil semiconductors: isl1208.
RTC ATMEGA clock

Čia kiek geriau matosi analoginių mygtukų “matrica” kuri pajungta prie MCU tik trim laidais: Vcc, GND ir analog. Tai pat matosi, kad RTC turi savo rezervinį energijos šaltinį: Ličio batareiką CR2025 (čia iš seno kompo išlupau).
RTC ATMEGA clock

Visas kodas dar neparašytas. Jau galima užprogramuoti laiką ir datą, beveik pabaigtas žadintuvas ir konfiguracinis modulis.
Pats žadintuvas irgi nedaromas su ATMEGA16, o jis tupi RTC mikroschemoje- netgi yra speciali kojytė, kuri gali generuoti žadinimo signalą be MCU pagalbos. Arba paprasčiausiai MCU nuskaito būklės registrą ir pradeda čirškėti. Įdomumas tame, kad žadintuvas gali suveikinėti kiekvienos valandos kažkurią minutę, arba galima nustatyti kad žadintuvas skambėtu tik pirmadieniais, trečią valandą penkiolika minučių ir 27 sekundės, arba kad skambėtu kiekvienos valandos 3 minutę tik balandžio 23 dieną ir jei ta diena išpuola sekmadienį… 🙂 Ten daug navarotų turi tas čipukas. O jei dadėti ir MCU navarotus, tai tikras CRON daemonas gaunasi. Nekalbant apie tai, kad softas pats žino, kelintadienis bus bet kurią 21 amžiaus dieną ir taip pat puikiai susipažinęs su keliamųjų metų skaičiavimais.
Softas turi bent trijų lygių menių sistemą. Meniu sistema automatiškai išsijungia, jei vartotojas ilgai neliečia klavietūros. Su minimaliais pokyčiais si sistema modifikuojasi ir galima konstruoti kokį nors termostatą- juk užtenka pajungti prie to pačio I2C kad ir FM75 mikroschemą. Arba galima valdyti kokią nors periferiją… Čia tik reikia įjungti fantaziją. Šiaip viskas sugrūsta į TIMER0 pertraukimą- visą kitą laiką ATMEGA dinderį muša.

Softas neskirtas “C” kalbos puristams ir specialistams. Aš iškarto pasakau, kad niekada nesimokiau “C” programavimo. Todėl daugelis momentų padaryta kvailai. Tik žinau, kad gerasis gcc nerado nei vienos priekabės prie šios programos- kompiliuojasi be jokių warning…

Štai jis: RTC clock core source code. Dalinamas pagal GNU GPL licenzija- imkit ir naudokit.

ATMEGA USB 21: IR RC5 skaitytuvas

Čia nelabai yra to USB. Tiksliau, netgi pjaunasi šitas projektas su USB 🙂 (kompas puliuoja, kai aparaciukas pagauna IR komandą) Todėl paveiksliukyje atsirado plokštės gabalas su USB kištuku.

Tai grynai C kalboje parašytas infraraudonų spindulių distancinio (pagal standartą RC5) dekoderis. Autorius yra Georg-Johann Lay, kokios rušies licenzija jis paskyrė savo softui aš nežinau. Bent jau jo puslapiuose ir source nieko nėra apie (c).

IR RC5 receiver
IR daviklis išluptas iš sugedusio DVD grotuvo. Prilituotas prie geltonos PCB ir jungiasi 3 laidais prie plokštės: Vcc, GND ir PD2/INT0.

Kad pademonstruoti rezultatus, pajungiau prie LCD modulio. Pats naudojimas labai paprastas, pažiūrėkit main.c failo main procedūrą.
Truputis informacijos apie LCD ekraniuko rodymą: Cod- tai mygtuko kodas, Adr- tai prietaiso adresas (0- tai TV), F- flip/flop rodantis kad paspaustas klavišas. Jis keičiasi kiekvieną kartą paspaudus distancinio mygtuką. Tai galima detektuoti kada nuspaustas tas pats mygtukas dar kartą.
Deja visuose namuose tik Samsung teliko distancinis suderinamas su šiuo standartu…
Kadangi ši programa naudoja tą patį INT0 kaip ir USB, tai kol kas šitas žaisliukas nesuderinamas su USB. Jei bus poreikis ir noras, pabandysiu pakeisti source, kad naudotu INT1. Tada distancinio duomenys bus galima pumpuoti į kompiuterį. O jei tai suderinti su ankstesnio posto HID įrenginiu… Gaunasi kaip ir universalus distancinis kompui.

Projekto source code.

P.S. jei naudojamas NEC IR tipo distancinis, verta pasiskaityti: NEC distancinio protokolas.

ATMEGA USB 20: mini LED matrica iš Sure Electronics

Jau gana senokai esu nusipirkęs mažytę LED diodų matrica per eBay iš Sure Electronics firmelės. Tai kiniečių kompanija kuri gamina įvairiausią šlamštą ir pardavinėja on-line. Kada prie progos pažiūrėkit eBay ar jų pačių puslapiuose.

Tai visiškai nereikalingas prietaisas. Nebent pasistatyti ofise ant stalo ir laikas nuo laiko siusti žinutes kolegom. Kadangi tai vienos dienos projektas, tai visas softas gal ir nekulturingas- biški per daug darbo kad daryti kultūringai. Visgi reikėjo parašyti firmware ATMEGAI (panaudotos turimos bibliotekos), parašytas softas USB valdymui windows XP (iš esmės hackintas pavyzdys) ir parašytas nuo nulio MS Visual BASICe grafinis interfeisas paveiksliukų paišymui… Kai viska gražiai sutvarkysiu, visus source kode sudėsiu čia.

Mini Red LED matrica is Sure Electronics su ATMEGA ir USB

Matrica tai 6 moduliai su 8×8 diodų. Praktiškai, ten įlituota dvispalviai diodai, bet aš nesugebėjau įjungti žalios spalvos. Tuo labiau, kad nei Sure Electronics dokumentacijoje, nei Holtek čipo (HT1632) datašeete neparašyta apie daugiau kaip 384 diodų valdymą. Holtek kontroleris valdosi per 3 laidus, turi savyje 16 lygių PWM visai matricai. Dar yra mirksėjimo režimas, jei reikėtų padaryti kokį pranešimą, labiau atreipiantį dėmesį.

Mano hardwarė pati paprasčiausia ATMEGOS16 testinė plokštė. Viskas maitinasi iš USB, ir kai uždegiu visus diodus, šviesa ryškiai “pasėda”.

Čia windozinė GUI programa, kur galima paišyti vaizdelius. Dar pilna visokiausių DEBUG dalykėlių…
Softas Sure Electronics LED USB image

Nedidelis filmukas kuris bando pademonstruoti kaip greitai pasikeičia vaizdelis. Deja, realybėje jis kogero keičiasi greičiau.

Čia bus source kode, kuri susideda iš šių dalių:
\firmware:

  • holtek_ht1632.c
  • holtek_ht1632.h
  • usbconfig.h ir visas kalnas iš usbdrv kategorijos.

\commandline:

  • hidtool.c
  • hidtool.h
  • ir dar keli papildomi

\GUI:

  • LEDGUI.exe
  • LEDGUI visual basic source

\proteus:

  • Proteus schema protokolo analizavimuisi

Download: Source Code, exe, proteus, firmware, cmd line, visual basic

ATMEGA USB 19: temperatūros daviklis

Tai kelių svetimų projektų kompiliacija. Iš esmės, šitas prietaisiukas nuskaito daviklio FM75 (kiek rimtesnis nei LM75, I2C) informaciją. Šis prietaisas nieko nekaupia savo atmintyje (nors galėtų, paprasčiausiai softas neparašytas), visa informacija nuskaitoma per USB į kompiuterį. Viena iš įpatybių: šis įrenginys nereikalauja jokių draiverių, operacinė sistema (išbandyta su Windows ir Linux Debian) mato jį kaip HID prietaisą. O toliau jau programos reikalas.

ATMEGA16 USB HID temperature sensor

Nuotraukoje matosi V1 veikiantis prietaisiukas, ir V2 PCB plokštelė paruošta litavimui. V1 ir V2 skiriasi tik tuo, kad panaudoti mažesni rezistoriai, pašalinti takelių pralindimai po resistoriu.
Panaudojau ATMEGA16 tik todėl, kad tokių megų turiu daug prisilupinėjęs. MCU stovi pasuktas 45 laipsnių kampu tik tam, kad išbandyti kaip Cadsoft Eagle sugeba sukinėti detales. Šiam projekui teoriškai turi tikti bet koks Atmel firmos procesoriukas veikiantis ant 12MHz ar daugiau. Tinka darbiniai dažniai 12, 15 ar 16MHz. Arba naujieji Atmel MCU su greitu RC vidinių generatorium veikiančiu ant 16.5MHz (yra softas programiniui dažnio kalibravimui). Čia labiausiai tiktu 8 kojų procesoriukas ATTiny45.

Reikalingi PCB, pdf, BMP, Eagle failai.

Source code, PCB, Eagle failai, Win ir Linux softas su source bus greitai įdėtas. Gal ir padarysiu online rezultatus.

Testavimas ant mano USB-AVR serijos plokštės. Firmware modifikacija, kai informacija dar parodama ir ant LCD ekrano. Daviklis prijungtas laidais:

USB + LCD + FM75

(papildymai)
Firmware, source code, command line with source code.
Eagle files (PCB and SCH).
Linux source code, MRTG config example. See comments for live results.

ATMEGA USB 18: Mikro, 2 kanalų, USB oscilografas

Užbridau internete paprastutį projektą susijusi su ATMEGA procesoriukais, USB ir oscilografais.
Štai šis puslapis: http://yveslebrac.blogspot.com/2008/10/cheapest-dual-trace-scope-in-galaxy.html

Autorius naudoja ATTINY45-20, tačiau aš tokių čipukų neturiu ir nenoriu užsakinėti. Man buvo žymiai įdomiau pritaikyti programinę įranga prie mano turimos “hardwarės”.

Projekto galutinis rezultatas: dviejų kanalų, labai lėtas oscilografas. Jis atnaujina viso ekrano informaciją per kokias 4 sekundes. Įėjimo įtampa iki 2.5V (jei perprogramuoti ADC, galima padidinti jautrumą, jei naudoti direfencialinį įėjimą)
USB 1Ch osciloscope
(tai mano tikro oscilografo skleistinės pjūklas, ~500ms (0.5s) intervalas, per raudoną kanalą. Mėlynas kanalas pajungtas į žemę)

Schema labai paprasta: ATMEGA16 paleista su 12MHz kvarcu. Maitinama iš USB. USB DATA- laidelis per rezistoriųdaliklį pajungtas prie MCU D1 kojos. DATA+ pajungtas prie D2/INT0 kojos. Viskas, daugiau detalių nėra. Rezisotorių reikšmes ir pajungimo subtilybės tokios pat, kai ir kituose ATMEGA USB temos schemose. Tik senoje schemoje panaudotas kitas pinas. Čia labiau priklauso nuo norų ir turimos PCB plokštės. Šiuo atveju panaudoja pre-ATMEGA-USB laikotarpio PCB, kuri yra netobula ir nepublikuota. Tačiau gaila ją išmesti. 🙂

Programinė įranga: source (ATMEGOS source, Windows EXE).

Windowsams USB draiverių nereikia. Tai standartinis HID įrenginys.

O va, kam šitas aparačiukas gali būti panaudotas, aš nežinau. Su tokių skleistinės dažniu tai tik žmogaus pulsą stebėti. Labai gaila, kad nėra Windows programos source code…

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.