Po truputį artėju prie galutinio tikslo – mikroprocesorinio kiemo apšvietimo valdymo. Analoginis (sakykim) variantas jau senokai veikia ir aprašytas čia. Šitas variantas nelabai skiriasi nuo pirmojo pažaidimo su Arduino. Pirmas skirtumas – LCD prijungtas tik dviem laidais, o ne 7. Kodėl ? Todėl, kad galutiniame prietaise naudosiu ne didelį Atmega 328, o mažiuką AtTiny45. Nors iš kitos pusės LCD šitam prietaisui visai nereikalingas, bet man patinka kai viskas pypsi, mirksi, arba rodo. Čia gerai matyti nustatytas potenciometrų reikšmės, gal dar kažką. Ir nors galutiniame variante LCD nebus – galbūt sumastysiu padaryti 4 pinus, prie kurių prijungus truputį modifikuotą LCD bus galima matyti kaip veikia uCPU, potenciometrai, vienu žodžiu mini diagnostikai. Antras skirtumas – programa nuskaito dviejų potenciometrų reikšmes ir užrašo jas ekrane. Apie viską paeiliui.
Kaip sumažinti LCD <> uCPU naudojamų kontaktų skaičių. Pirma mintis buvo tokia, sakykim, neryški, nes žinios iš studijų laikų, iš prof. habil. dr. Raimundo Kirvaičio paskaitų – postūmio registro naudojimas. Principą lyg ir pamenu, svarbiausia ir yra žinoti ką įmanoma padaryti, o kaip – paklausiau dėdės Googliaus. Ir atspėjau – pavyzdžių pilna. Pasirinkau pirmą pasitaikiusią, naudojančia LiquidCrystal biblioteką. Schema tokia:
Čia, žinoma, tik LCD prijungimo mintis, tik prijungtas ne Arduino uCPU, nėra potenciometrų. Bet užtai panaudojant 74LS164 registrą duomenys is uCPU paleidžiami dviem laidais, o paskui išmetami lygiagrečiai. Schema teisinga, bet užtai LiquidCrystal biblioteka – ne. Bent jau man niekaip nepavyko įrašyti teksto į antrą eilutė, nors realiai ten nieko sudėtingo, tas pats standartinis:
lcd.setCursor (0,1);
Neveikia nors tu ką. O juk žinau, kad schema sujungta gerai, hardwaras veikiantis… Bet kolega iš o.electronics patarė pabandyti su kita biblioteka ShiftRegLCD123 – ir viskas suveikė.
Toliau – potenciometrų prijungimas. Bet iš tikrųjų – procesoriukas nemoka matuoti potenciometro varžos, moka matuoti tik įtampą. Tam reikia potenciometrą jungti kaip varžinį daliklį, ir šliaužiklio kontaktą paduoti į atitinkamą potenciometro įėjimą. Tuomet procesoriukas „matys” ne varžą, o įtampą, ir sugebės ją nuskaityti, paversdamas į reikšmes nuo 0 iki 1023. O toliau jau galima su tuo daryti kokius nors skaičiavimus.
Vat kaip tas viskas atrodo ant maketinės plokštės. Viršuje Arduino UNO modulis, jo dešinėje – du potenciometrai, kurių vertės nuskaitomos, vienas atstoja apšvietimo lygio potenciometrą, o kitas LDRą (Light Dependent Resistor). Trečias potenciometras žemiau tų dviejų naudojamas LCD kontrastui nustatyti. Kairiau nuo jo, laidų raizgalynėje slepiasi 74LS164, ant jo užmečiau kondensatorių (maitinimo trugdžių filtravimui), plius rezitoriukas ir diodas – loginis IR elementas, skirtas ekraniuko E įėjimui. Dešiniau dar vienas diodas… Čia tokią biškį apgavystę padariau. Pagal aprašymą ekraniuko fono pašvietimas 4,2V, o iš USB užmaitinčiau 5V, tipo per daug. Nors šiaip bandžiau – nesprogo. Bet, kad būtų ramiau, prijungiau diodą, kad „nuvalgytų” maždaug 0,5V. Ir visas tas reikalas atrodo taip:
2015.02.04:
Truputį pataisiau kodą. Kadangi loop() gale yra ekrano išvalymas (lcd.clear() ), tai pirmojo lcd.setCursor (0,0) nebereikia – lcd.clear() ne tik išvalo ekraną, bet ir numeta kursorių į pradžią. Rezultatas – dar mažesnė sukompiliuota programa – tik 3242 B, vietoje 3254 B. Programos failiukas aukščiau – atnaujintas.