Avtor: mag. Vladimir Mitrović
E-pošta: vmitrovic12@gmail.com
2019_273_46
Ura z LED prstani izgleda izredno, izvedba v kateri je predstavljena v številki 271 revije Svet elektronike predstavlja popolnoma funkcionalen izdelek. Vendar nisem predvidel tiskanega vezja zanj iz preprostega razloga: LED obroči, ki so na voljo v spletnih trgovinah, niso enotni. Čeprav vsebujejo iste RGB čipe (zato bo z njimi naš program znal delovati), imajo enake dimenzije, razporeditev in izvedbo priključkov, pa se razlikujejo od modela do modela.
Ta vsebina je samo za naročnike
V praksi se je pokazalo, da ne morete 100% zaupati niti slikam na spletnih straneh: naročil sem prstane ene izvedbe, dobil “tiste druge”. Zato predlagam izvedbo ur na kosu univerzalnega tiskanega vezja. Diagram na sliki 46 je zelo preprost in ti dve komponenti ne bi smeli biti problem za povezavo. Prepričajte se, da so RGB čipi 12 ur in 0 minut (1 in 13 na sliki 46) postavljeni eden nad drugim, sicer boste dobili zelo nenavadno uro.
V urah, ki jih predstavljamo ta mesec se uporabljajo 5-mm LEDice standardne izvedbe, tako da lahko za njih oblikujemo ustrezna tiskana vezja: spoznajte analogno in binarno uro Sveta elektronike!
Analogna ura z LEDicami
Kvazi analogna ura z LEDicami je sestavljena iz dveh koncentrično postavljenih prstanov s po 12 LEDicami (slika 55). Kroženje malega in velikega kazalca ure simulira postopno preklapljanje svetilnosti z ene na drugo LEDico manjšega oziroma večjega prstana. Princip prikaza časa na takem displeju smo podrobno pojasnili v predhodnem nadaljevanju in ga bomo zdaj samo na kratko povzeli s pomočjo ilustracij na slikah 56 in 57, na katerih svetli krogci predstavljajo ugasnjene, zatemnjeni pa vklopljene LEDice. Intenzivnost svetlosti simbolizira stopnja zatemnitve: bolj, ko je krogec temen, večja je intenzivnost svetilnosti te LEDice.
Veliki prstan vsebuje 12 LEDic, po eno za vsakih 5 minut. Ko je treba prikazati 0, 5, 10, …, 55 minut, bo prav ta dioda zasvetila s polno svetilnostjo; nekatere od takšnih situacij so prikazane na sliki 56. Kadar je potrebno prikazati minute, za katere niso predvidene “lastne” LEDice, se bosta vklopili dve sosednji LEDici. To je ilustrirano na sliki 57 za čas med 12:00 in 12:05; z vsako minuto znotraj tega intervala LEDic 5m postaja svetlejša, intenzivnost svetilnosti LEDice 0m pa se zmanjšuje. Predvidene so skupno 4 kombinacije intenzivnosti svetilnosti sosednjih LEDic, po ena za vsako „med-minuto”, ki se nato ponavljajo v vsakem 5-minutnem intervalu.
Prikaz ur na malem prstanu je odvisen tudi od ur in od minut. Samo ob polni uri, kadar so minute = 0, bo pripadajoča LEDica svetila s polno svetilnostjo. Čim se “veliki kazalec” premakne z 0-tega položaja, in “mali kazalec” krene na svojo pot, bo s slabo svetilnostjo zasvetila sosednja LEDica malega prstana. Predvideno je skupaj 12 razmerij intenzivnosti sosednjih LEDic malega prstana, ki se menjajo vsakih 5 minut: ker minute potujejo od 1 do 59 minut, bo intenzivnost svetilnosti osnovne LEDice malega prstana vse slabša, svetilnost sosednjih pa postaja vse večja. Nekatere od situacij so ilustrirane na sliki 56.
Shema analogne ure z LEDicami je prikazana na sliki 58. Naprava je sestavljena iz mikrokontrolerja ATmega328P v Arduino Nano modulu, ure realnega časa z integriranim vezjem DS3231 (ZS-042 ali podoben modul, veže se na priključek J1), pasivnega piezo buzzerja AL1 in displeja s 24 LEDicami. LEDice so razdeljene v štiri skupine, D1-D6, D7-D12, D13-D18 in D19-D24, ki se izmenično vklapljajo v postopku multipleksiranja. Jakost toka skozi vsako od diod iz skupine določajo upori R1-R6.
Tukaj moramo povedati nekaj besed o izboru LEDic in uporov. Potrebno je izbrati občutljive (low current) diode, ki svetijo s polno svetilnostjo pri tokovih 2-4 mA. Da bi ura izgledala lepo je pomembno, da vse vgrajene LEDice svetijo z isto svetilnostjo. Priporočam, da kupite kakšno diodo več in med njimi izberete potrebno število diod. Odstranimo diode, ki svetijo premočno ali prešibko, tiste z vidno napako na ohišju in tiste, katerih barva se očitno razlikuje od osnovne barve. Izbor je bolj kritičen, če za prikaz ur in minut želimo uporabljati LEDice različnih barv – v prototipu se za prikaz minut uporablja rumene, za prikaz ur pa rdeče – ker je nujno zagotoviti, da LEDice obeh barv pri istem toku svetijo približno enako. To ni možno regulirati z različnimi vrednostmi upora R1-R6, ker se te upori uporabljajo za omejitev toka LEDic iz obeh prstanov.
Vrednosti uporov R1-R6 so odvisne od karakteristik izbranih LEDic in želeno maksimalno intenziteto svetilnosti. Izberemo jih na sledeči način: eno od LEDic vežemo na napetost napajanja 5 V preko trimer upora z upornostjo 5 kΩ in nato mu zmanjšujemo upornost dokler dioda ne zasveti z želeno intenzivnostjo. Izmerimo vrednost upora, jo delimo s 4 (multipleksiranje!) in tako smo ugotovili potrebno vrednost uporov R1-R6. V mojem primeru LEDice jasno svetijo pri uporu vrednosti 2 kΩ. Zato sem kot ustrezno vrednost za upore R1-R6 izbral 470 Ω, vendar je to vrednost treba raziskati in morda prilagoditi drugemu setu diod.
Če uporabljamo občutljive LEDice, in ker so v vsakem trenutku vključene najvišje štiri diode, bo poraba ure manjša od 50 mA. Možne načine napajanja ure bomo pokomentirali v zaključnih opombah.
Program Analogna_ura_SE.bas
Programska logika analogne ure je prikazana na sliki 59 in je na prvi pogled zelo podobna tisti s slike 50. V realnosti je identična samo veja za nastavljanje ure, v katero se tudi vstopi s pritiskom na tipko S1 v času daljšem od 1 s, medtem ko v glavni zanki še posebej v proceduri prikaza na displeju, obstajajo pomembne razlike. Znotraj glavne zanke 50-krat v sekundi zajemamo čas iz ure realnega časa, vsako sekundo generiramo kratek zvočni signal, ki simulira zvočni pomik sekundnega kazalca “prave” ure. Vsako novo minuto se pripravljajo novi podatki za prikaz časa in se shranijo v za to predvidene spremenljivke.
Prikaz na displeju se vrši v prekinitveni rutini, ki jo 16 tisočkrat v sekundi zažene Timer0. Tako visoka frekvenca je potrebna zato, ker se v prekinitveni rutini ne izvršuje zgolj multipleksiranje (izmenično vključevanje posameznih LED skupin), pač pa se s postopkom pulzno-širinske modulacije postavlja želena intenzivnost svetilnosti vsake posamezne LEDice na enega od 64 nivojev. Za razliko od ure z LED prstani, v katerih so uporabljeni “pametni” RGB čip WS2812B, ki samostojno vzdržujejo dane intenzivnosti in kombinacije barv, mora tukaj celotno delo opraviti mikrokontroler ATmega328P iz Arduino Nano modula. Pogledali bomo, kako je narejen ta del programa!
Programska “slika” LEDic si nizi Hh_led in Mm_led:
Dim Hh_led(12) As Byte Dim Mm_led(12) As Byte
Prvi bajt Hh_led niza, Hh_led(1), ustreza LEDici D1 (12 ur); ostali ustrezajo vrsti LEDic D2-D11 (1-11 ur). Prvi bajt Mm_led niza, Mm_led(1), ustreza LEDici D13 (0 minut); ostali ustrezajo vrsti LEDic D14-D24 (5, 10, …, 55 minut). Vrednosti vpisane v nize določajo intenzivnost svetilnosti pridruženih diod, pri čemer 64 predstavlja maksimalno, 1 pa minimalno intenzivnost, medtem ko 0 pomeni, da je LEDica ugasnjena.
V vsaki polni uri ima ustrezen bajt iz Hh_led niza vrednost 64 in pridružena LEDica sveti s polno svetilnostjo, medtem ko je ostanek niza zapolnjen z ničlami – vse ostale LEDice iz prstana ure so ugasnjene. V katerem koli drugem času, se bo neka vrednost, različna od nič, vpisala tudi v sosednji bajt Hh_led niza. Za to skrbi podprogram Disp_hh, ki preračunava trenutni čas v dveh indeksih: Hh_ind in I. Prvi indeks določa, katera dva bajta Hh_led niza ustrezata trenutnim uram, drugi pa bo, glede na minute, ki so pretekle od polne ure določil, kateri dve vrednosti se bosta v njih vpisali. Te vrednosti so definirane v Hh_led_table tabeli:
Hh_led_table: Data 64, 48, 32, 24 Data 16, 12, 8, 8, 6 Data 4, 3, 2, 1, 0
Vrednosti iz tabele se berejo v paru, prva z zadnjo (64, 0), druga s predzadnjo (48, 1), itd., določene pa so eksperimentalno, s ciljem da intenzivnost prve iz para LEDic s tekom časa postopno pada, druga pa raste. Če predpostavimo, da je sedaj 15:12, bodo postavljene naslednje vrednosti: Hh_led(4) = 24, Hh_led(5) = 3, medtem ko bodo vsi ostali člani Hh_led niza biti = 0.
Po podobnem principu se popolnjuje niz Mm_led v podprogramu Disp_mm: trenutna vrednost minut se preračunava v indekse Mm_ind in I, kjer Mm_ind določa, katera dva bajta Mm_led niza ustrezata trenutnim minutam, medtem ko I določa, katere vrednosti je treba v njih vpisati. Te vrednosti so definirane v Mm_led_table tabeli:
Mm_led_table: Data 64, 32, 16 Data 8, 4, 0
Tudi tukaj se vrednosti berejo v paru, in bodo npr. ob 15:12 postavljene naslednje vrednosti: Mm_led(3) = 16, Mm_led(4) = 8.
Podprogrami Disp_hh in Disp_mm se kličejo vsakič, kadar program ugotovi, da je prišlo do spremembe časa, bodisi zaradi vrednosti dobljene iz ure realnega časa
Do ... Gosub Read_hhmmss If Mm <> Mm_old Or Hh <> Hh_old Then Gosub Disp_mm Gosub Disp_hh End If ... Loop
ali zaradi spremembe nastavitve ure. Podprogrami samo pripravljajo podatke, sam prikaz časa pa se odvija v prekinitveni rutini Disp, ki jo Timer0 aktivira vsakih 62,5 µs:
Compare0a = 128 Config Timer0 = Timer , Prescale = 8 , Clear_timer = 1 , Compare_a = Disconnect On Compare0a Disp Enable Compare0a Enable Interrupts
Prekinitvena rutina Disp po vrsti vključuje eno po eno četrtino displeja s klicem podprograma Disp_h12_05, Disp_h06_11, Disp_m00_25 in Disp_m30_55 in pri tem v spremenljivki Disp_count šteje kolikokrat je bil displej osvežen. Vsebina te spremenljivke se menja v razponu 0-63 in dela osnovo za krmiljenje z intenzivnostjo svetilnosti vsake posamezne LEDice. Na primeru LEDice D4 (3 ure), ki ji je pridružen bajt Hh_led(4), to izgleda tako:
Disp_h12_05: ... If Hh_led(4) > Disp_count Then H03m15 = 0 Else H03m15 = 1 End If ... Return
H03m15 je alternativno ime za PortD.7, ki vključuje LEDico D4 v razdobju med katerim je v stanju logične ničle. Če je trenutna vrednost Hh_led(4) = 24, kot smo prej predpostavili, bo D4 svetila dokler je Disp_count v razponu 0-23 in bo ugasnjena med razponom 24-63; z drugimi besedami, bo svetila s 37% polne intenzivnosti.
Na isti način se regulira intenzivnost vseh 24 LEDic, po 6 diod med vsako izvršitvijo. Prekinitvena rutina traja okoli 14 µs in tako “krade” okoli četrtino procesorskega časa. Pokazalo se je, da to ne moti izvrševanja glavnega programa, niti niso opaženi problemi v I2C komunikaciji z RTC čipom DS3231.
Pojasnimo še vlogo piezo zvočnika AL1. Njegov prvenstveni namen je generiranje zvočnega alarma, kadar DS3231 RTC pošlje ustrezen signal preko SQW linije. Ta funkcionalnost pa je puščena za neko bodočo razširitev programa; v trenutni verziji AL1 uporabljamo za generiranje kratkotrajnega zvočnega signala vsake sekunde, ki simulira klik sekundnega kazalca “prave” ure. V ta namen uporabljamo Timer2,
Config Timer2 = Timer , Prescale = 1024 , Compare_a = Toggle , Clear_timer = 1 Stop Timer2 Compare2a = 200
ki ga aktiviramo vsako sekundo in ugasnemo po 20 ms:
Do ... Waitms 20 Stop Timer2 Gosub Read_hhmmss If Ss <> Ss_old Then Ss_old = Ss Start Timer2 End If ... Loop
Če ugotovite, da vas ritmično klikanje piezo buzzerja moti, samo zakomentirajte ukaz Start Timer2 v gornjem programskem delu.
Izradelava in nastavitev
Za analogno uro z LEDicami je projektirana dvoslojna tiskana ploščica po sliki 60. Slika hkrati pojasnjuje kako se postavljajo komponente. Najprej se s spodnje strani ploščice zaspajkajo upori, nato z gornje strani LEDice in piezo buzzer. Za buzzer so na ploščici predvidene luknjice z razmakom 5, 7,5 in 10 mm in tako izbor buzzerja ni kritičen. Nato se s spodnje strani postavljajo Arduino Nano, ZS-042 modul in kondenzator C1 (če se uporablja). Tipka S1 se, po želji, lahko postaviti s spodnje ali, če ga ne želite skrivati, z zgornje strani ploščice. Vsem komponentam, ki se postavljajo s spodnje strani ploščice, je potrebno skrajšati priključke na najkrajšo možno dolžino, da ne bi gledali nad površino ploščice. Sam Arduno Nano modul se postavlja tako, da so konci priključkov v nivoju gornje strani ploščice.
Če je še kaj okoli postavljanja komponent ostalo nejasno, si pomagajte s pomočjo fotografije izdelane ure na sliki 61 (finalna izvedba ploščice se od prikazane razlikuje v nekaj majhnih podrobnostih). Poglejte še tudi končne opombe na koncu tega članka.
Nastavljanje ure se vrši s tipko S1 (SET). Proceduro nastavljanja zaženemo, če tipko držimo pritisnjeno dalj od 1 s:
- prstan za prikaz minut se ugasne, svetloba “preteče” preko vseh LEDic za prikaz ur in nato s polnim sijajem sveti LEDica, ki ustreza trenutnemu času (uram);
ure se menjajo s kratkimi pritiski na tipko S1, pri čemer vsaki pritisk pomeni +1h; - nastavljanje ur se zaključuje s pritiskom na tipko S1 v trajanju daljšem od 1 s: prstan za prikaz ur se ugasne, svetloba “preteče” preko vseh LEDic za prikaz minut in nato svetijo LEDice, ki prikazujejo trenutni čas (minute);
- minute se menjajo s kratkimi pritiski na tipko S1, pri čemer vsaki pritisk pomeni +1m;
- nastavljanje časa se zaključuje s pritiskom na S1 v trajanju daljšem od 1 s: sekunde se resetirajo na 0, svetloba preteče oba prstana in nato nadaljuje prikazovati čas na običajen način.
Binarna ura
Zadnja iz kolekcije ur Sveta elektronike je binarna ura s slike 62 in 63. Na shemi ure opazimo, kako se uporabljajo isti moduli, kot pri analogni uri, Arduino Nano in ZS-042; tukaj so tudi pasivni piezo zvočnik AL1 in tipka S1, vse te komponente se uporabljajo na isti način. Edina vidna razlika je v izvedbi displeja: tukaj se uporabljajo dvobarvne LEDice s skupno katodo postavljene v štiri stolpce, na njih se čas izpisuje s pomočjo binarnih številk. Skica na sliki 64 pojasnjuje princip “kodiranja”. Kako bi na binarni uri izgledal prikaz 12 ur in 36 minut je pokazano na sliki 65. Da prikaz na displeju ne bi bil statičen, je v sredino displeja dodana LEDica, ki utripa s frekvenco 1 Hz in s tem signalizira, da ura dela; na shemi je to D7, na sliki 65 pa rdeča dioda v sredini spodnje vrstice.
Displej je predviden za prikaz časa v 24-urnem formatu, število LEDic v posameznem stolpcu ustreza največji binarni številki, ki se mora v tem stolpcu prikazati. Čeprav je postavljena ločeno v sredino displeja, se dioda D7 v “električnem smislu” nahaja na vrhu tretjega stolpca, nad diodo D10. LEDice so vezane tako, da tvorijo matrico s štirimi vodoravnimi in 8 navpičnimi linijami (diode so dvobarvne zato, da so za vklapljanje vsakega stolpca diod potrebna dva signala!), povezane so tako zato, da so segmenti ene barve v popolnosti ločeni od segmentov druge barve (ne delijo si istih uporov). Tak način vezanja omogoča neodvisno krmiljenje intenzitet vsake od dveh barv vsake LEDice s postopkom pulzno-širinske modulacije in mešanje barv v obsegu, v katerem jo te dvobarvne LEDice omogočajo.
Program Binarna_ura_SE.bas
Struktura programske logike binarne ure (slika 66) je zelo podobna tisti iz analogne ure. Veje za nastavljanje ure so identične, vendar obstajajo manjše razlike v glavni zanki, kjer se namesto zvočnega signala vsake nove sekunde vključuje LEDica D7 v trajanju pol sekunde. Multipleksiranje je rešeno v prekinitveni rutini, ki jo zažene Timer0 1000-krat v sekundi. Takšna pogostost je dovolj za prikaz časa na displeju v osnovnih barvah (v slučaju zeleno-rdeče LEDice, osnovne barve so zelena, rdeča in rumena ali oranžna).
Programska “slika” LEDic so spremenljivke Led_g in Led_r:
Dim Led_g As Word Dim Led_r As Word
Biti Led_g.1-Led_g.14 ustrezajo stanju zelenih segmentov LEDic D1-D14, medtem ko biti Led_r.1-Led_r.14 ustrezajo stanju rdečih segmentov LEDic D1-D14: postavljeni bit bo rezultiral vklopljeni, zbrisani bit pa ugasnjeni LEDici. Vrednosti teh spremenljivk postavljamo v podprogramih Disp_hh in Disp_mm. Ta podprograma omogočata izpis časa v rdeči, zeleni ali rumeni barvi; izbor barve se definira pa med prevajanjem programa:
Disp_hh: ' Goto Disp_hh_r ' Goto Disp_hh_g Goto Disp_hh_y Return
Od treh Goto ukazov je potrebno dve zakomentirati, tretja bo določila barvo prikaza; v gornjem primeru bo prikaz rumene ali oranžne barve. Trenutno se čas nahaja v spremenljivkah Hh in Mm in je zapisan v BCD formatu. Če je izbran rdeči prikaz, se bodo biti iz Hh spremenljivke prenesli v ustrezne bite spremenljivke Led_r:
Disp_hh_r1: Led_r.1 = Hh.4 Led_r.2 = Hh.5 Led_r.3 = Hh.0 Led_r.4 = Hh.1 Led_r.5 = Hh.2 Led_r.6 = Hh.3 Return
Pri zelenem prikazu se bodo na isti način postavili biti spremenljivke Led_g, medtem ko se bodo pri rumenem/oranžnem prikazu postavljati biti obeh spremenljivk. Minute se bodo iz spremenljivke Mm tudi preselile v ustrezne bite spremenljivke Led_r,
Disp_mm_r1: Led_r.8 = Mm.4 Led_r.9 = Mm.5 Led_r.10 = Mm.6 Led_r.11 = Mm.0 Led_r.12 = Mm.1 Led_r.13 = Mm.2 Led_r.14 = Mm.3 Return
Led_g ali obe spremenljivki, odvisno od izbrane barve prikaza. Podprogrami Disp_hh in Disp_mm se kličejo na več mestih iz programa, npr. ko v glavni zanki preberemo čas iz ure realnega časa
Do ... Gosub Read_hhmmss Gosub Disp_hh Gosub disp_mm ... Loop
ali tudi med nastavitvijo ure in v nekaterih animacijah. Podatki, ki so jih pripravili, se uporabijo za prikaz časa na displeju. Sam prikaz se dogaja med prekinitveno rutino Disp, ki jo Timer0 aktivira vsako milisekundo:
Config Timer0 = Timer , Prescale = 64 On Timer0 Disp Enable Timer0 Enable Interrupts
Prekinitvena rutina po vrsti vključuje eno vrstico displeja s klicanjem podprogramov Disp_row1, Disp_row2, Disp_row3 in Disp_row4. Na primeru prve (gornje) vrstice to izgleda tako:
Disp_row1: Col_1 = 0 Col_2 = 0 Col_3 = Led_g.6 Col_4 = Led_r.6 Col_5 = Led_g.7 Col_6 = Led_r.7 Col_7 = Led_g.14 Col_8 = Led_r.14 Return
Tukaj so Col_1-Col_8 alternativna imena pinov mikrokontrolerja na katere so preko uporov R1-R8, vezane anode LEDic. Col_1 in Col_2 so postavljeni v stanje 0, ker v prvem stolpcu ne obstaja LEDica v gornji vrstici. Prekinitvena rutina traja krajše od 14 µs in zato nikakor ne moti izvrševanja glavnega programa, in niso opaženi nikakršni problemi niti v I2C komunikaciji z RTC čipom DS3231.
Pojasnimo še, kako krmilimo utripanje LEDice D7. Ko vsakih 20 ms prebere čas iz ure realnega časa, bo program preveril, ali je prišlo do spremembe sekund. Če je, bo vklopil rdeči segment LEDice D7 in resetiral števec prehoda skozi glavno zanko:
Do ... Waitms 20 Gosub Read_hhmmss ... If Ss <> Ss_old Then Ss_old = Ss Led_r.7 = 1 Loop_counter = 0 End If
Vrednost števca se bo povečala za 1 pri vsakem prehodu skozi zanko vse dokler ne doseže 25; ko se to dogodi, program ugasne LEDico D7 in preneha šteti:
If Loop_counter < 25 Then Incr Loop_counter Else Led_r.7 = 0 End If ... Loop
25 izvršitev Do-Loop zanke traja okoli pol sekunde in zato bo D7 med vsako sekundo pol časa svetila, drugo polovico pa ne.
Izdelava in nastavljanje
Za binarno uro je projektirana dvoslojna tiskana ploščica po sliki 67. Slika hkrati ilustrira kako se postavljajo komponente. Najprej postavljamo na gornjo stran ploščice upore R1-R8, LEDice in piezo buzzer AL1. Za buzzer so na ploščici predvidene luknjice z razmakom 7,5 in 10 mm, zato izbor buzzerja ni kritičen. Je pa zato potrebno paziti na izbor LEDic in uporov R1-R8.
Obvezno uporabite občutljive (low-current) LEDice, ki svetijo s polno svetilnostjo že pri toku 2-4 mA. Vrednosti uporov R1-R8 izberemo na isti način, kot pri analogni uri: s poizkusom preverimo kateri upor zagotavlja želeno intenzivnost posamezne barve in nato v uro vgradimo upore štirikrat manjšega upora. Moje »no name« LEDice so imele nerodno napako: zeleni segmenti so zahtevali večkratno višji tok za svetenje z isto intenzivnostjo, kot rdeči. Zaradi tega boste na shemi opazili, kako se upornosti uporov R1, R3, R5 in R7 znatno razlikujejo od upornosti uporov R2, R4, R6 in R8. Pri izboru uporov sem pazil tudi na to, da dobim želeni ton rumeno-oranžne barve, ko se sočasno vklopita oba segmenta.
Obvezno preverite svoje LEDice in izberite za njih ustrezne upore, vrednosti prikazane na shemi ni nujno, da vam bodo ustrezale! Ko izbirate upore je potrebno upoštevati tudi dovoljen tok posameznega pina, ki pri mikrokontrolerju ATmega328P znaša 40 mA. Ker se v postopku multipleksiranja vključuje vrsta po vrsti LEDic, bodo v nekem trenutku vklopljene vse štiri diode – zaradi tega, skupen tok skozi oba segmenta neke LEDice ne bi smel biti večji od 10 mA. Vrednosti uporov navedene na shemi s slike 63 so mejne in ne bi jih bilo dobro še zmanjševati!
Na koncu, s spodnje strani ploščice prispajkamo upor R9, Arduino Nano in ZS-042 module ter kondenzator C1 (če se uporablja). Tipka S1 se po želji lahko postavi s spodnje ali z zgornje strani ploščice. Vsem komponentam, ki se postavljajo s spodnje strani ploščice je potrebno skrajšati priključke na najkrajšo možno dolžino, da ne bi gledali nad površino ploščice. Sam Arduno Nano modul se postavlja tako, da so njegovi konci priključkov v nivoju gornje strani ploščice.
Fotografije na sliki 68 prikazujejo izgled zaključene binarne ure, za katere so kolegi iz Nacionalnega centra tehnične kulture v Kraljevici izdelali ustrezno ohišje iz pleksi stekla (finalna izvedba ploščice se od prikazane razlikuje v nekaj podrobnostih).
Nastavljanje ure se naredi s tipko S1 (SET). Proceduro nastavljanja zaženemo, če tipko držimo pritisnjeno dalj od 1 s:
- stolpci za prikaz minut se ugasnejo, stolpci za prikaz ur utripnejo nekajkrat in nato sveti kombinacija, ki ustreza trenutnemu času (uram);
ure se menjajo s kratkimi pritiski na tipko S1, pri čemer vsak pritisk pomeni +1h; - nastavljanje ur se zaključuje s pritiskom na tipko S1 v trajanju daljšem od 1 s: stolpci za prikaz ur se izklopijo, stolpci za prikaz minut utripnejo nekajkrat in nato sveti kombinacija, ki prikazuje trenutni čas (minute);
- minute se menjajo s kratkimi pritiski na tipko S1, pri čemer vsak pritisk pomeni +1m;
- nastavljanje časa se zaključuje s pritiskom na S1 v trajanju daljšem od 1 s: sekunde se resetirajo na 0, nekajkrat utripnejo vse LEDice na displeju in nato ura nadaljuje prikazovati čas na običajen način;
- med postopkom nastavljanja LEDica D7 ne utripa, ampak je stalno vklopljena.
Končne opombe za obe uri
Napajanje ur je možno preko USB konektorja Arduino Nano modula, ali preko priključkov +6 do12 V ali +5 V. Med priključkoma +5 V in GND spojimo priključke stabiliziranega vira napetosti 5 V, medtem ko med priključka +6 do 12 V in GND spojimo priključke izvora, katerega izhodna napetost znaša 6 V. V obeh primerih kot omrežni adapter lahko uporabite polnilnik starega mobilnega telefona.
Pokazalo se je, da kondenzator C1 kapacitete 100 µF ni nujen za stabilno delo; v večini primerov je dovolj tisti, ki je že vgrajen v stabilizator Arduino Nano modula. C1 bi bilo potrebno vgraditi samo, če se za napajanje uporablja izvor zelo nestabilne izhodne napetosti.
Da bi lahko vzdrževal časovno funkcijo tudi med razdobjem, v katerem je napetost napajanja izklopljena, integrirano vezje DS3231 zahteva backup napajanje. V ta namen je na ZS-042 modulu predvideno ležišče za litijevo baterijo tipa 2032. V predhodnem nadaljevanju je opisana modifikacija ZS-042 modula, ki jo je nujno napraviti, če se kot backup izvor uporablja baterija CR2032, ki se ne polni (obvezno preberite!). Še več o tem, kot tudi o samem modulu in knjižnici DS3231$SE.sub, poiščite v člankih Barduino (1) in (2), objavljenih v Svetu elektronike št. 255 in 256.
Programi Analogna_ura_SE.bas in Binarna_ura_SE.bas ne izkoriščajo vseh možnosti, ki jih nudijo vgrajene komponente. Npr., ne uporablja se alarmni sistem DS3231 čipa, čeprav za to obstaja hardverska predpostavka (predviden je vod, ki veže mikrokontroler s SQW priključkom ZS-042 modula), binarni ura ne uporablja piezo buzzerja AL1 niti možnosti softverskega mešanja barv. To je napravljeno namerno: predstavljeni programi so napisani tako, da pokrivajo osnovne funkcije ur in da niso obremenjeni preveč podrobnostmi – puščen je prostor za njihovo kasnejšo nadgradnjo.
Opomba: oba programa, kot tudi knjižnico DS3231$SE.sub, ki jo programi uporabljajo, lahko brezplačno dobite v uredništvu revije Svet elektronike.
https://svet-el.si
Barduino-14