Šviesdijodžių programavimas su PIC16F84 mikrovaldikliu (6)
Tai pirmas žingsnis programavimo likn, kuris leidžia susipažinti su elementariausiomis komandomis ir leidžia vaizdžiai matyti programavimo pokyčius.
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. Naudojamas diodų skaičius 8, kurie yra pajungti ant PORTB mikrovaldiklio išėjimų. SW1 jungtukas naudojamas šviesdijodžių uždegimo sekai pakeisti. Ši schema puikiai tinka pradėti programavimo „meno“. Programos tekstas rašytas su MPLAB IDE programa. Ji yra nemokama ir galima parsisiųsti:
http://www.microchip.com/stellent/idcplg?IdcService=SS_GET_PAGE&nodeId=1406&dDocName=en019469
R1 rezistorius reikalingas tam, kad būtų galima paleisti mikrovaldiklį.
R2 rezistorius reikalingas tam, kad būtų galima RA4 įėjime sudaryti aukštą lygį (būtų galima jungti tiesiogiai, bet įjungus jungtuką užtrumpintų grandinę).
R3 – R10 rezistoriai naudojami tam, kad padavus iš mikrovaldiklio aukštą lygį nebūtų smarkiai apkraunami mikrovaldiklio išėjimai, taip pat reikalingas per šviesdijodį tekančios srovės sumažinimui.
Programa rašoma dviems šviesdijodžių mirksėjimo variantams:
a) kai jungtukas (SW1) yra išjungtas. Šviesdijodžiai užsidega nuo vidurio ir išsiskiria į kraštus
b) kai jungtukas (SW1) įjungtas. Bėgantys šviesdioddžiai
Programos tekstas:
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
count2 equ 11h ;skaitliukas 2
sw1 equ 0x04 ;sw1 jungtukas
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
bsf TRISA,sw1 ;RA4 pasiruosias duomanis priimti
clrf TRISB ;PortoB pasiruosias duomanis siusti
bcf STATUS,RP0 ;pereina i bank0
Programos pradžioje yra tikrinamas jungtukas kuris variantas. Pagal jungtuko padėtį yra pereinama į tam tikrą programos vietą.
sw_tikrina
btfss PORTA,sw1 ;jungtuko tikrinimas:
goto pirmas_variantas;
goto antras_variantas;
Pirmas variantas, tai pirmas šviesdijodžių mirksėjimo variantas. Čia duomenys yra parašyti dvejetainiais skaičiais tam, kad būtų galima vizualiai siunčiamus duomenis į išėjimus. Čia keičiant duomenis ar vienetukų nuliukų tvarką keičiasi ir šviesdijudžių mirksėjimo eiliškumas.
pirmas_variantas
movlw b'00011000' ;Duomenu irasymas
movwf PORTB ;duomenu siuntimas
call wait ;velinimas 500mS
movlw b'00100100' ;Duomenu irasymas
movwf PORTB ;duomenu siuntimas
call wait ;velinimas 500mS
movlw b'01000010' ;Duomenu irasymas
movwf PORTB ;duomenu siuntimas
call wait ;velinimas 500mS
movlw b'10000001' ;Duomenu irasymas
movwf PORTB ;duomenu siuntimas
call wait ;velinimas 500mS
goto sw_tikrina
Antras šviesdijodžių mirksėjimo variantas, kai jungtukas yra įjungtas
antras_variantas
movlw b'10000100' ;Duomenu irasymas
movwf PORTB ;duomenu siuntimas
call wait ;velinimas 500mS
movlw b'01000010' ;Duomenu irasymas
movwf PORTB ;duomenu siuntimas
call wait ;velinimas 500mS
movlw b'00100001' ;Duomenu irasymas
movwf PORTB ;duomenu siuntimas
call wait ;velinimas 500mS
movlw b'00010000' ;Duomenu irasymas
movwf PORTB ;duomenu siuntimas
call wait ;velinimas 500mS
movlw b'00001000' ;Duomenu irasymas
movwf PORTB ;duomenu siuntimas
call wait ;velinimas 500mS
goto sw_tikrina
Vėlinimo paprogramė. Plačiau apie paprogramių ir makrosų kūrimą plačiau teorinės dalies aprašymuose.
Vėlinimo programa yra rašoma tam, kad šviesdijodžių mirksėjimas būtų matomas. Mikrovaldikliai komandas įvykdo greitai ir jeigu nebūtų vėlinimo tiesiog matytumėme kaip šviesdijodžiai šviečia.
Norint keisti mirksėjimo dažnumą čia ir reikėtų prisidėti t.y. keičiant įrašymoduomenis.
Pastaba. Duomenų įrašymo skaičius neturi viršyti 256 dešimtainio skaičiaus. Todėl vėlinimo programoje ir naudojami du atskiri 250 skaičiai (vėlinimo laikas gaunamas apie: 250x250x8=0,5s)
wait
movlw .250 ;irasomi duomenys
movwf count1 ; skaitliuko uzpildymas
movlw .250 ;irasomi duomenys
movwf count2 ;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
decfsz count2,f ;skaitliuko mazinamas 1 ir jai 0 persoka
goto $-.5 ;grizimas atgal
return ;grizimas is paprogrames
end ;programos užbaigimas
Plačiau komandų reišmes žiūrėti teorinės dalies aprašymuose.
Šviesdijodžių programos testavimas (Proteus)
SĖKMĖS ! ! !