Žinote turbūt, kokie populiariausi skystųjų kristalų ekranėliai Arduino valdikliams? Nagi vadinamieji 1602 arba 16×2 ekraniukai, kurie ganėtinai pigūs ir sugeba šį tą parodyti. Šiuose ekranuose yra dvi eilutės po šešiolika simbolių — iš ten ir pavadinimas. Bet jie, bestijos, turi vieną trūkumą — valdymui reikia net aštuonių valdiklio elektrodų! Tai visokiai periferijai kažkaip nedaug ir lieka tuomet.
Išeitis, aišku, gan paprasta: reikia prijungti ekraniuką per I²C keitiklį ir jo valdymui reikės tik dviejų elektrodų. Tiesa, mane šiek tiek erzina tai, kad I²C magistralei AVR procesoriuose naudojami du ADC (analoginio-skaitmeninio keitiklio) elektrodai. Tad jei reikia nuskaitinėti analoginius daviklius, vietoj šešių lieka tik keturi. Bet užtat lieka krūva kitų elektrodų, kuriais galima valdyti kitą periferiją.
Kadangi tingėjau ieškot, tai tiesiog iš ybėjaus parsisiunčiau ekrano ir I²C keitiklio komplektėlį, pigiausią, kokį radau:
Keitiklis toks kiniškas „no name“. Na, yra užrašas „mjkdz“ ir yra toks kiniškas tinklapis, bet kad jame ten net ir su vertimu ne kažką gali iškapstyti… o keitiklio mikroschema kažkodėl nubrūžinta dilde, gal kinai kokių kopyraitų bijo:
Tiesa, anot interneto, čia greičiausiai PCA8574 keitiklis. Bent jau pagal datašytus jo prijungimas analogiškas. Dar truputuką pasekiojau plokštės takelius, kad išsiaiškinčiau, kurios kojos prijungtos prie kurių ekranėlio elektrodų. Paskui dar bebrauzydamas išsiaiškinau, kad derėtų naudoti F Malpartida parašytas I²C ekranėlių valdymo bibliotekas, nes jos kur kas labiau valdomos, nei standartinės, komplektuojamos su Arduino IDE. Esmė tame, kad tų ekranų ir šitų keitiklių kojų sujungimai kartais skiriasi ir veikia ne visai taip, kaip įprasta.
Komplektėlis, beje, nepilnas ir labai durnai padarytas. Nepilnas todėl, kad šitą I²C moduliuką prie ekrano prilituoti yra sudėtinga dėl elektrodų išdėstymo. Ir jis padarytas dar taip, kad kontrasto reguliavimo potenciometras lieka atsuktas į ekrano plokštę! T.y. jį prilitavus potenciometro jau nebepasieksi. Buvo mintis tą visą daugiakojyną perlituot kaip nors į kitą pusę, ar bent jau potenciometrą. Bet paskui mečiau ta mintį ir nuo turimo lizdų komplekto atsikirpau tokį gabaliuką:
Truputį pamojavus lituokliu šitas lizdas stojo į vietą, o I²C modulis prie jo gražiai prisijungė:
O čia kitu kampu (tik, atleiskite, bluras gavosi, nesužiūrėjau):
Na ir dar iš šono, matyti, kad potenciometras nepasiekiamas:
Internetuose buvo teigiama, kad dažnai šio modulio I²C adresas yra ne 0x27, o 0x20. Tad parsisiunčiau I²C Scanner programulkę Arduino valdikliui, prijungiau modulį ir paleidau tą programulkę:
Programulkė iš pradžių nieko nerado. Heh, supainiojau SDA ir SCL laidelius… Po to jau rado ir, kas keisčiausia, su „normaliu“ 0x27 adresu:
Įkėliau pavyzdinę programėlę iš šio tinklapėlio, kur naudojamos F Malpartida bibliotekos. Viskas lyg ir būtų tvarkoj… bet ekranas nieko nerodo:
Kokį pusvalandį terliojausi, bandžiau ieškot priežasčių, kol staiga sugalvojau, kad reikia pasukinėti kontrasto potenciometrą… Reikalas bjaurus, nes ekranėlį vis reikia nuimti (nes potenciometras, kaip jau rašiau, prilituotas iš kvailos pusės — reikės padaryti jam operaciją). Pasirodo, kad šiems ekranėliams kontrastą būtina sureguliuoti, nes kitaip nieko nerodo. Kvailai padaryta, sakyčiau. Bet paskui pradėjo tekstą rodyti sėkmingai. Net ir lietuviškas raides galima pasidaryti norint:
Štai ir viskas, darbelis baigtas ir įsisavintas. Bus galima naudoti. Tiesa, čia tas vaivorykštinis laidų kaspinas nelabai į temą, bet nenorėjau nuo jo keturių laidelių atlupinėti tiesiog.
Sveiki. Neseniai pradėjau domėtis Arduino. Kaip jūs padarėte, kad būtų lietuviškos raidės? Programavote raidę atskirai “lcd.createChar“ ar tiesiog yra biblioteka, kuri palaiko lietuvišką raidyną?
Jei gerai pamenu, naudojau Peter Fleury biblioteką interfeisui su I²C. Raidę perpaišiau pats ir, jeigu vėl gerai pamenu, tai su 0x40 komanda matricos perduodamos į ekraną. Gūglinktie, gerbemasai, nes tikrai seniai tas buvo, daug nepasakysiu.
O su OLED grafiniais ekranais yra kiti reikalai, ten reikia rastrinių šriftų turėti arba sugebėti pajungti vektorinių šriftų biblioteką, kas gali labai apkrauti procesorių. Geriau iš anksto pagalvojus pasidaryti rastrinių šriftų paruoštukus ir naudoti pagal poreikį, planuoti iš anksto, kokių dydžių (DPI) reikės. Na, bet čia priklauso nuo to, kaip optimizuotai norima daryti. T.y. ar svarbu taupyti kiekvieną procesoriaus ciklą, ar nebaisiai.
Vaje, kaip gretai atsakėte, o maniau, jog čia po tiek metų, jau bus užmirštas kampelis. Aš jau kelintą savaitę bandau suprasti, kaip pavaizduoti bent vieną lietuvišką raidę tame Oled, bet labai daug miglos aplink. Šiaip ar taip, labai jums dėkoju už sagaištą laiką ir greitą atsakymą.
Atsakiau per valandą, berods. Tai šiuolaikiniam jaunimui su begaliniu instant gratification poreikiu čia baisiai lėtai 😀 😀 😀
Gerai, tarkime darėte raidei “ė“ masyva atskirai, bet jis tiks tik šitam ekranui, o kaip tada su pvz.: oled vieno cuolio ekraniukais, juk ten jau visai kitaip, Adafruit gfx ir t.t, ir pan.