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

Segmentu žymėjimas 7 segmentų indikatoriuje

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

Septynių segmentų indikatoriaus jungimo schema

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.

 

Asembleris

HEX failas

 

 SĖKMĖS!!!

Pasidalinkite su draugais
Aut. teisės: www.technologijos.lt
(2)
(0)
(2)

Komentarai (3)

Susijusios žymos: