Ekranas Arduino valdikliui per I²C

Posted: 2013-08-13 in Darbeliai
Žymos:,

Ž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:

1602 ekranas ir I²C keitiklis | Darau, blė

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:

Nuvalyta be užrašų I²C keitiklio mikroschema | Darau, blė

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ą:

Lizdas I²C moduliui prie 1602 ekranėlio | Darau, blė

Truputį pamojavus lituokliu šitas lizdas stojo į vietą, o I²C modulis prie jo gražiai prisijungė:

1602 ekranas sujungtas su I²C moduliu | Darau, blė

O čia kitu kampu (tik, atleiskite, bluras gavosi, nesužiūrėjau):

1602 ekranas sujungtas su I²C moduliu | Darau, blė

Na ir dar iš šono, matyti, kad potenciometras nepasiekiamas:

1602 ekranas sujungtas su I²C moduliu | Darau, blė

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ę:

I²C 1602 ekrano keitiklis, prijungtas prie Arduino I²C adreso paieškai | Darau, blė

Programulkė iš pradžių nieko nerado. Heh, supainiojau SDA ir SCL laidelius… Po to jau rado ir, kas keisčiausia, su „normaliu“ 0x27 adresu:

Arduino I²C Scanner sėkmingai rado LCD 1602 ekranėlio valdiklio adresą | Darau, blė

Įkėliau pavyzdinę programėlę iš šio tinklapėlio, kur naudojamos F Malpartida bibliotekos. Viskas lyg ir būtų tvarkoj… bet ekranas nieko nerodo:

Prie Arduino prijungtas 1602 ekranėlis su I²C keitikliu | Darau, blė

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:

Prie Arduino prijungtas 1602 ekranėlis su I²C keitikliu | Darau, blė

Š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.

Komentarai
  1. Kęstas parašė:

    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ą?

    • Darau, Blė parašė:

      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.

      • Kęstas parašė:

        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ą.

        • Darau, Blė parašė:

          Atsakiau per valandą, berods. Tai šiuolaikiniam jaunimui su begaliniu instant gratification poreikiu čia baisiai lėtai 😀 😀 😀

  2. Kęstas parašė:

    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.

Parašykite komentarą

Brukalų kiekiui sumažinti šis tinklalapis naudoja Akismet. Sužinokite, kaip apdorojami Jūsų komentarų duomenys.