Arduino + 7 segmentų LED indikatoriai + ICM7218

20 10 2014

Su 7 segmentų indikatoriais esu žaidęs dar senai, kuomet mikrovaldiklių programavimą mokiausi su ATINY2323. Tuomet žinoma užsiknisau su tais LED’ų mirkčiojimais ir niekam kitam šio indikatoriaus nepanaudojau. Dabar ant mano stalo atsirado štai tokia kasos aparato pirkėjo displėjaus PCB:IMG_20141020_071251

Ant PCB mes turime maitinimo bei duomenų signalų įėjimą, įtampos reguliatorių, RS232 signalo įtampos keitiklis, PIC18F kažkoks mikrovaldiklis, 8 vienetai 7 segmentų LED indikatorių ir ICM7218B valdiklis. Originaliai pats įrenginys nebeveikia dėl man nežinomų priežasčių. Gal PIC numirė, o gal aš tiesiog nežinau specifinio duomenų protokolo, siunčiamų per RS232. Kaip ten bebūtų man įdomiausia yra paklibinti LED indikatorius ir ICM7218B valdiklį.

Techninė įranga

Kiekvieno iš segmentų valdymas tokio tipo indikatoriuose reikalauja gana nemažiau mikrovaldiklio resursų. Kadangi LED segmentai neturi atminties, juos reikia pastoviai mirksėti reikiama seka taip greitai, kad vartotojas mirksėjimą matytu kaip pastovų degimą. Labai populiaru tokį darbą perkelti į segmentų valdiklį, kuris dabar yra ICM7218B. Pastarasis yra atsakingas už mirksėjimo darbus, o tuo atveju mikrovaldiklio pareiga yra jam atsiusti dabar norimą rodyti informaciją.

Labai nenoriu PCB gadinti tad Arduino su ICM7218B sujungiau tokiais specifiniais repliukais:

IMG_20141020_071309

Maitinimo bei signalų kojas radau mikroschemos datacheete: http://www.intersil.com/content/dam/Intersil/documents/icm7/icm7218.pdf

Pats jungimas buvo atliktas derinantis prie Arduino bibliotekos.

Programinė įranga

Aš nebučiau aš jei nepasinaudočiau galimybė patinginiauti ir aišku pasinaudojau jau sukurta Arduino biblioteka IC valdymui. Ją radau čia: https://code.google.com/p/arduino-icm7218-library/

Įdiegęs ją bei pajungęs fiziškai Arduino su ISM7218 bandau pavyzdinę programą ir gaunu klaidą kompiliuojant. Pasirodo biblioteka parašyta senai Arduino IDE versijai, tad visur kur reikia pakeičiame “#include <WProgram.h>“ keičiame į suderinamą su visais IDE:

#if defined(ARDUINO) && ARDUINO >= 100
 #include "Arduino.h"
#else
 #include "WProgram.h"
#endif

Dabar viskas susikompiliavo ir štai ką turime ekrane:

Gerai aišku, kad rodo, bet kas vyksta gale? Ten spausdinama millis() reikšmė ir jis tapusi neigiama mažėja. Žinoma čia bus kažkas su Int tipu, kurio reikšmės gali būti nuo -32768 iki 32767, bet įsitikinimui parašykime į ekraną 12345678 skaičius:

IMG_20141020_072211

Taip ir yra, jei 12345678 skaičių bandoma paverti į Int, kas 65536 vienetų Int kintamasis vis apsiverčia, kol galiausiai telpa į savo rėmus palikdamas 24910. Realiai Int reikšmė apsivertė net 188 kartų ir turime 12345678 – 188 * 65536  = 24910.

Bibliotekoje panagrinėjęs matau, kad gautą Int reikšmę programuotojas skaidė į 8 dalis, bet kokio velnio? Turiu įtarimą, kad jis nenaudojo 8 indikatorių ir netestavo iki galo. Taigi tereikėjo pakeisti metodų gaunamų kintamųjų tipą į long ir turime pilna ekraną:

IMG_20141020_072140

Kadangi long tipas Arduino aplinkoje yra nuo  -2147483648 iki 2147483,647 tai su jokiomis bėdomis daugiau nesusidursime. Dabar pavyzdinė programa veikia iki galo gerai:

Mano paredaguotą biblioteką rasite čia: http://www.files.com/shared/5444bcc225f1c/ICM7218.zip

Apybendrinimas

Smagu, kad indikatoriai ir jų valdiklis veikia. Dabar reikia galvoti ką čia nuveikus su pačiu displėjumi. Išmetus PIC galima ji panaudoti kokia įdomesniam tikslui 🙂


Veiksmai

Information

8 responses

22 10 2014
jarik

Cia gal kiek nesusijes dalykas, bet jei naudoji windowsus, siulau nesisiupdatinti siandien draiveriu, nes gali nebeveikti is kinijos parsisiusti arduinai, ir kiti elektronikos irenginiai jungiami prie USB per FTDI 🙂 Siek tiek daugiau info parasiau pas save: http://arduino.free-only.net/demesio-neatnaujinkite-savo-ftdi-tvarkykliu-tik-windows/

23 10 2014
mindogas

Turėsiu omenyje. Šiaip situacija labai įdomi, o dar idemesnis FDTI spredimas kovoti su vartotojais,o ne gamintojais ir platintojais. Šiuo atveju labiausiai nukentės paprasti vartotojai,nes kai jiems nustos veikti koks įrenginys jie tiesiog mes jį lauk ir pirks kitą, nesuprasdami kad tapo gamintojų aukomis.

23 10 2014
Darau, Blė

Va jums ir „Linux arba Mac geriau“ 😀
No offence, taip sakant.

23 10 2014
mindogas

Tiesiog Windowsai nuo seno turėjo prasta imunitetą blogiems žmonėms su blogais ketinimais 😀 Šiuo atveju nėra tie blogi žmonės labai jau blogi, bet ketinimai kreivoki 🙂

10 11 2014
D

Ne per daug vargo su šituo?
Aš manau naudočiau kokį 595 šift registrą, valdant per SPI. Ir kojų susitaupytų ir tik pertrauktis pagaudyti/apdoroti reikėtų. sujungus 2 nuosekliai, tai išeitų suvaldyti 8 skaičius vos 3 išvadų pagalba.

10 11 2014
mindogas

Išvadu sutaupytum tai tikrai, bet programoje turi vis mirksinti tuos ledus 🙂 Su draiveriu tau jau nebereikia sukti galvos kas ten su tais Ledais vyksta ir visus resusrsus gali skirti skaičiavimams. Šiaip viskas priklauso ko tau reikia labiau, ar išėjimų/įėjimų skaičiaus, ar greičio programai. Jei taip svarbus įėjimai/išėjimai tai aplamai gal generuojame PAL signalą iš vieni išėjimo, bet deja – mikroprocesoriaus niekam kitam nebeužteks 😀

11 11 2014
D

nelabai yra ten ką mirksinti programoje, jeigu teisingai daroma.
o bet tačiau, koks šios mikrės atnaujintas analogas? nes būtent tokią gauti, tai jau iššūkis 🙂

11 11 2014
mindogas

Nesidomėjau atnaujinimais. Jei naudočiau kur didesniame projekte tai imčiau asmeniškai kažką iš Maxim gaminamų.

Parašykite komentarą

Įveskite savo duomenis žemiau arba prisijunkite per socialinį tinklą:

WordPress.com Logo

Jūs komentuojate naudodamiesi savo WordPress.com paskyra. Atsijungti / Keisti )

Twitter picture

Jūs komentuojate naudodamiesi savo Twitter paskyra. Atsijungti / Keisti )

Facebook photo

Jūs komentuojate naudodamiesi savo Facebook paskyra. Atsijungti / Keisti )

Google+ photo

Jūs komentuojate naudodamiesi savo Google+ paskyra. Atsijungti / Keisti )

Connecting to %s




%d bloggers like this: