Avtor: Mladen Čempuh
Bascom-AVR programski paket imenovan „Big time“ omogoča prikaz časa (ur in minut) iz DS3231 RTC-ja na enostaven način na alfanumeričnem LCD-ju v velikem dvovrstičnem, trivrstičnem in štirivrstičnem formatu prikaza. V tem članku bo opisana tudi programska knjižnica za enostavno nastavljanje leta, meseca, datuma, dneva v tednu in časa DS3231 RTC-ja.
Na dvovrstičnem LCD-ju npr. 1602 ali 2002 je omogočen dvovrstični format prikaza časa, na štirivrstičnem LCD-ju (npr. 2004) dvovrstični, trivrstični ali štirivrstični format prikaza časa.
Za dvovrstični format prikaza ur in minut imamo na voljo veliki format prikaza časa v dveh fontih (font 1 in font 2). Font 2 za prikaz časa zavzema dve koloni manj glede na font 1, na LCD-ju vrste 1602 (16 stolpcev * 2 vrstici) poleg ur in minut v dvovrstičnem formatu ostane dovolj prostora tudi za prikaz sekund in dneva v tednu v normalnem enovrstičnem LCD fontu. Trivrstični in štirivrstični prikazi imajo vsak po en font.
Uvedli smo univerzalno sintakso ukaza za izpis časa v velikem formatu:
Big_time y , x
Ta vsebina je samo za naročnike
Argument y označuje vrsto, argument x pa stolpec zgornjega levega kota na LCD-ju, od katerega se prične prikaz časa. Za dvovrstični format prikaza časa,če se uporablja dvovrstični LCD, argument y je 1, na štirivrstičnem LCD-ju je argument y lahko 1, 2 ali 3. Za trivrstični format prikaza časa na štirivrstičnem LCD-ju je argument y lahko 1 ali 2, za štirivrstični format prikaz časa na štirivrstičnem LCD-ju pa je argument y = 1. Argument x uporabnik določa odvisno od dolžine vrstic LCD-ja in v formatu in fontu za prikaz časa. Ukaz Big_time y , x za prikaz ur in minut v velikem formatu se uporablja znotraj Do – Loop zanke. Ta ukaz ne uporablja uporabniškega LCD karakterja Chr(0), ki je prost za uporabo.
Pred uporabo ukaza Big_time y , x je potrebno z ukazom $include v program vključiti knjižnico za programsko podporo dela RTC-ja DS3231. To je knjižnica z imenom „DS3231$SE.sub“kije objavljena v številkah Sveta Elektronike SE255 in SE256, nahaja pa se tudi v programski podpori priloženi k temu članku.
$include „DS3231$SE.sub“
V tej knjižnici so poleg ostalih spremenljivk dimenzionirane tudi vse potrebne globalne Byte spremenljivke za sekunde, minute, ure, dan v tednu, datum, mesec in leto.
Ds3231$sec za prikaz sekund
Ds3231$minto Byte spremenljivko uporablja ukaz Big_time y , x za prikaz minut
Ds3231$hourto Byte spremenljivko uporablja ukaz Big_time y , x za prikaz ur
Ds3231$day za dan v tednu
Ds3231$dte za datum
Ds3231$mth za mesec
Ds3231$yr za leto
Iz knjižnice „DS3231$SE.sub“ se uporablja znotraj Do – Loop zanke ukaz Ds3231$read, ki iz RTC-ja bere trenutne podatke časa, datuma, dneva v tednu, meseca in leta ter jih vpisuje v predhodno navedene pripadajoče globalne Byte spremenljivke. Ta ukaz se v Do – Loop zanko postavi pred ukazom Big_time y , x.
Po vnosu knjižnice „DS3231$SE.sub“ predlagam, da za nastavljanje RTC-ja vključite v uporabniški program priloženo knjižnico „DS3231$set.inc“. Na začetku uporabniškega programa, še pred vnosom knjižnice „DS3231$set.inc“ v uporabniški program, je v programu potrebno definirati vhodni priključek za tipko UP (vhod Up$), vhodni priključek za tipko ENTER (vhod Enter$), in definirati konstanto Down_key. Če konstanti Down_key določimo vrednost 1, s tem omogočimo uporabo dodatne tipke DOWN na (po želji uporabnika) izbranem vhodnem priključku Down$. Če je vrednost konstante Down_key = 0, se tipka DOWN ne uporablja. Tipke se vežejo med pripadajoče izbrane vhodne priključke in mase GND. Če ima mikrokontroler dovolj priključkov, iz praktičnih razlogov priporočam, da omogočite uporabo tipke DOWN. V knjižnici „DS3231$set.inc“ je ustvarjen ukaz Ds3231$set za nastavljanje DS3231 RTC-ja. Ta ukaz je potrebno v uporabniškem programu napisati pred Do – Loop zanko. Če se pri resetu mikrokontrolerja drži pritisnjena tipka ENTER v trajanju minimalno 5 sek, se na LCD-ju izpiše sporočilo „RTC set“ in prične se proces namestitve RTC-ja. S tipko UP in opcijsko s tipko DOWN se namesti iznosi podatkov za RTC, s tipko ENTER pa se nameščeni podatki vpisujejo v RTC čip. Vrstni red namestitve podatkov za RTC je naslednji: leto, mesec, datum, dan v tednu, ure, minute, sekunde. Pri namestitvi dneva v tednu se uporabljajo kratice za naziv dneva iz angleškega jezika: MO, TU, WE, TH, FR, SA, SU. Če pri resetu mikrokontrolerja tipka ENTER ni konstantno pritisnjena v trajanju 5 sek, bo ukaz Ds3231$set preskočil proces namestitve RTC-ja in takoj se izvršijo ukazi, ki sledijo. Po vnosu knjižnice „DS3231$set.inc“ v uporabniški program je z ukazom $include potrebno vključiti, odvisno od želenega formata prikaza časa (ur in minut), eno od priloženih knjižnic za ukaz Big_time y , x (glej tabelo).
Podatki o formatih prikaza časa, primerih priloženih *.bas programov, in pripadajočih programskih knjižic *.inc za velike formate prikaza časa in podatki o številu vrst in stolpcev, ki jih te prikazi časa (ur in minut) zavzemajo na LCD-ju, se nahajajo v tabeli.
Na začetku uporabniškega programa je potrebno izbrati način dela LCD-ja. Lahko uporabite 4 bitno paralelno komunikacijo z LCD-jem, kot je to narejeno v vseh priloženih programskih primerih v direktoriju „Programs“ ali pa preko serijske I2C komunikacije z LCD-jem preko I2C LCD modula.
Če se uporablja serijska I2C komunikacija z LCD-jem, je v prilogi dodelana knjižnica „I2C-LCD.inc“ v direktoriju „Programs/ I2C LCD“. V tej knjižnici sem dodal ukaz Config I2cdelay = 10 za zmanjšanje hitrosti komunikacije z LCD-jem iz 200 kHz (če tega ukaza ni) na 100 kHz zaradi bolj zanesljivega dela LCD-ja. Priporočam uporabo te dodelane verzije knjižnice „I2C-LCD.inc“. Pri uporabi te knjižnice je v njej potrebno preveriti in po potrebi ponovno definirati izbrane priključke za SCL (izbran je priključek PD.7) in SDA (izbran je priključek PD.6). SCL in SDA priključka se uporabljata tudi za I2C komunikacijo z DS3231 RTC-jem. V tej knjižnici je po potrebi potrebno ponovno definirati vrsto uporabljenega LCD-ja. Če se uporablja 4 bitna paralelna komunikacija z LCD-jem, se priključka SCL in SDA za I2C komunikacijo z RTC-jem in vrsta uporabljenega LCD-ja definirajo v uporabniškem programu.
V opisu programskega paketa „Big number“ v predhodnih dveh številkah Svet Elektronike sem navedel, da se pri uporabi I2C komunikacije z LCD-jem, če se v uporabniškem programu uporabljajo prekinitve rutine, mora pred uporabo ukaza Big_number y, x , Spremenljivka, onemogočiti vse prekinitve, in jih nato ponovno omogočiti. To je samo delno točno in na ta način LCD takrat deluje pravilno, vendar se takrat prekinitvene rutine ne morejo uporabljati za točno merjenje časa. Kasneje sam ugotovil razlog za nastanek tega problema. Problem je bil v premajhnem HW stack-u in v primeru, če se HW stack poveča iz začetnih 40 na minimalno 60, se tudi pri I2C komunikaciji z LCD-jem lahko uporabljajo prekinitve rutine brez potrebe onemogočanja prekinitev pri izvrševanju ukaza Big_number y, x , Spremenljivka. Isto velja tudi za ukaz Big_time y , x, kar v obeh primerih omogoča uporabo tudi prekinitvenih rutin za točno merjenje časa pri I2C komunikaciji z LCD-jem.
V knjižnici „Ds3231$SE.sub“ za podporo dela DS3231 RTC-ja so definirani ukazi za enovrstični prikaz dneva v tednu. Z ukazom Locate y , x se določi pozicija prikaza dneva v tednu na LCD-ju. Po tem se z ukazom Lcd_dan_slo prikazuje dan v tednu iz RTC-ja v slovenščini ali z ukazom Lcd_dan_hr v hrvaščini ali z ukazom Lcd_day v angleščini. Z uporabo ukaza Lcd_dd_mm_20yy se prikazuje datum, mesec in leto iz RTC-ja. Te ukazi se uporabljajo znotraj Do-Loop zanke.
Opcijski enovrstični prikaz sekund iz RTC-ja se izvaja znotraj Do-Loop zanke na način:
Locate y , x : Lcd Bcd(ds3231$sec)
‚ za enovrstični prikaz sekund
na poziciji y , x LCD-ja
Če se na LCD-ju prikazujejo samo ure in minute brez sekund (sekunde niso v velikem formatu), takrat trajanje Do-Loop zanke ni kritično, vendar je potrebno zavrteti Do-Loop minimalno nekaj sekunda, da se opazne napake prikaza minut minimizirajo. Če se izpisujejo tudi sekunde, takrat je potrebno Do-Loop zanko uporabiti minimalno vsake 0,2 sekunde ali hitreje.
Poleg knjižnice za ukaz Big_time y, x je z ukazom $includ dovoljeno v uporabniški program vključiti za prikaz vrednosti neke Byte, Word, Integer ali Single spremenljivke v velikem formatu tudi ustrezno knjižnico za ukaz Big_number y, x , Spremenljivka iz programskega paketa „Big number“. Pogoj je da so formati in fonti izpisa ukazov Big_time y, x in Big_number y, x, Spremenljivka identični.
Primer
Dovoljeno je:
$include „big_time_3_rows.inc“
$include „big_number_3 rows_positive_
Single_99.9.inc“
Ni dovoljeno:
$include „big_time_3_rows.inc“
$include „big_number_4_rows_positive_
Single_99.9.inc“
Upam, da boste z uporabo opisanih programskih paketov „Big time“ in „Big number“ svoje uporabniške programe napravili še boljše in atraktivnejše.