Vieno ir daugiau septynių segmentų indikatoriaus programavimas (3)
Septynių segmentų programavimas vienas iš paprasčiausių simbolių vaizdavimo būdas. Čia nagrinėjama, kaip galima prijungti kelis indikatorius naudojantis tais pačiais mikrovaldiklio išvadais.
Prisijunk prie technologijos.lt komandos!
Laisvas grafikas, uždarbis, daug įdomių veiklų. Patirtis nebūtina, reikia tik entuziazmo.
Sudomino? Užpildyk šią anketą!
Schemos programavimui naudojamas PIC16F84A mikrovaldiklis su 4 MHz kvarciniu generatoriaus dažniu. Septynių segmentų indikatorių užprogramuoti nesudėtinga. Galima panaudoti tą pačią programą, kuria programavome šviesdijodžius, tik čia mikrovaldiklis uždegs ne šviesdijodį, o septynių segmentų indikatoriuje vieną segmentą. Taigi norint uždegti tam tikrą simbolių pvz. A, B, 5, 8. reikia uždegti tam tikrus segmentų indikatorius. To pasakoje gaunamas tam tikro kodo siuntimas atitinkamam skaičiui. Pavyzdžiui norint uždegti simbolį 5, reikia uždegti indikatoriuje segmentus: a, c, d, f, g. O tai atitinka mikrovaldiklio siunčiama kodą. Jei mikrovaldiklio RB0-RB7 atitinka eiliškumą a-h, tai atitiktų 0xED šešioliktainį kodą.
Dar labai svarbus dalykas į ką reikia atsižvelgti programavimo metu, tai septynių segmentų indikatoriaus tipas. Jų yra dviejų tipų: tai bendro anodo ir bendro katodo indikatoriai. Bendro anodo indikatoriuose segmentai yra valdomi anodu (+) (katodu (-)), o duomenys siunčiami norint uždegti indikatorių žema įtampos lygis (katodo aukštas įtampos lygis).
R1 rezistorius reikalingas tam, kad būtų galima paleisti mikrovaldiklį.
R2, R3 rezistorius reikalingas tam, kad būtų galima tranzistoriuose sumažinti valdymo sroves
R4 – R11 rezistoriai naudojami tam, kad padavus iš mikrovaldiklio aukštą ar žemą lygį nebūtų smarkiai apkraunami mikrovaldiklio išėjimai, taip pat reikalingas per segmentą tekančios srovės sumažinimui.
A1, A2 – Septynių segmentų indikatorius (bendro anodo).
VT1, VT2 tinka bet kokios markės svarbu, kad būtų NPN tipo naudojant bendro anodo indikatorių (PNP naudojant bendro katodo indikatorių).
Programa rašoma dviems septynių segmentų indikatoriams tam, kad būtų galima išmokti siųsti skirtingus duomenis kiekvienam indikatoriui. Valdymo principas panašus norint valdyti daugiau indikatorių. Programa parašyta taip, kad indikatoriai atvaizduotų skaičiuojamus skaičius nuo 1 iki 10.
Programa pateikta, kaip vienas iš sprendimo būdų valdyti kelis indikatorius.
Programos tekstas ir paaiškinimas:
Pradžioje reikalingi mikrovaldiklio nustatymai. Plačiau galite rasti teorinės dalies aprašymuose.
#include <p16F84a.inc> ;mikrovaldiklio bibliotekos itraukimas
;KONFIGURACINIU BITU NUSTATYMAS:
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
org 0x00 ;Programos resetavimas
Apsibrėžiamas kintamųjų blokas, kad tekste būtų galima lengviau orientuotis
;KINTAMUJU APSIBREZIMAS:
count1 equ 10h ;skaitliukas 1
count3 equ 12h ;skaitliukas 2
data1 equ 13h ;pirmo segmento duomenys
data2 equ 14h ;antro segmento duomenys
Atliekami mikrovaldiklio išvadų nustatymai. Plačiau apie tai galite rasti teorinės dalies aprašymuose.
;ATLIEKAMI REIKALINGI NUSTATYMAI:
bsf STATUS,RP0 ;Pereina i bank1
clrf TRISA ;PORTA isvadai nustatomi i isejimus
clrf TRISB ;PortoB pasiruosias duomanis siusti
bcf STATUS,RP0 ;pereina i bank0
Pagrindinė programa tai duomenų įrašymas į ląstelę ir siuntimas indikatorių..
;DUOMENU ISVEDIMAS
movlw 0xC0
movwf data1
movlw 0xC0
movwf data2
call atvaizduoti
Septynių segmentų indikatoriuje duomenys siunčiami daug kartų, iškyla klausimas kodėl? O tam, kad būtų galima pastebėti į indikatorių išvestas simbolis. Aišku būtų galima ilgiau išlaikyti duomenis (siuntimo metu) indikatoriuje, kad simbolį būtų galima pamatyti, bet iškyla kita problema, kol laikomi duomenys užgesta antrasis indikatorius. O šiuo atveju siunčiant duomenis pakaitomis į abu indikatorius. Kol duomenys siunčiami į vieną indikatorių kitame indikatoriuje indikatorius dega iš „inercijos“ , nespėjus užgesti jau duomenys yra atnaujinami, o kitas dega iš „inercijos“. Taip išgaunamas vienas nemirksintis atvaizdas.
Atvaizduoti
movlw .200 ;Simboliaus islaikymas
movwf count3 ;Saugojimo ir skaiciavimo registras
ciklas
bcf TRISA,0 ;pirjojo indikatoriaus isjungimas
bsf TRISA,1 ;antro indikatoriaus ijungimas
movfw data1 ;Duomenu paemimas
movwf PORTB ;duomenu siuntimas i indikatoriu
call wait ;velinimas
bcf TRISA,1 ;pirjojo indikatoriaus ijungimas
bsf TRISA,0 ;antro indikatoriaus isjungimas
movfw data2 ;Duomenu paemimas
movwf PORTB ;duomenu siuntimas i antra indikatoriu
call wait ;velinimas
decfsz count3,f ;Skaitliukas, tikrina ar prasuktas 200 kartu
goto ciklas ;Ne, grizta i pradia "ciklas" ir kartoja suntima
return ;grizimas is paprogrames
Vėlinimo programa yra rašoma tam, kad nereiktų dažnai siųsti duomenis indikatoriuje ir taip apkrauti mikrovaldiklį.
wait
clrf count1 ; skaitliuko uzpildymas
nop ; velinamas vienas ciklas
nop ; velinamas vienas ciklas
nop ; velinamas vienas ciklas
nop ; velinamas vienas ciklas
nop ; velinamas vienas ciklas
decfsz count1,f ;skaitliuko mazinamas 1 ir jai 0 persoka
goto $-.6 ;grizimas atgal
return ;grizimas is paprogrames
Plačiau komandų reikšmes ir jų panaudojimą žiūrėti teorinės dalies aprašymuose.
SĖKMĖS!!!