Primer 25:
=======
U ovom primeru koristi se
postavka 1.
Malo je programa kojima u toku rada nije potreban neki spoljni uticaj, bilo od strane korisnika ili od nekog senzora, davača i sl. U ovom primeru videćemo kako da kontrolišemo LED D1 pritiskom na taster TA1.
Code:
led1 var portb.0 ;definišemo alias za led D1
led2 var portb.1 ;definišemo alias za led D2
taster1 var porta.4 ;definišemo alias za taster TA1
include "1827_cfg1.pbp"
DEFINE OSC 4
inic:
osccon=%01101000 ;interni oscilator na 4MHz
ansela=0 ;ceo port A digitalni
anselb=0 ;ceo port B digitalni
latb=0 ;isključimo sve LED
trisa=255 ;postavi ceo port A kao ulazni
trisb=0 ;postavi ceo port B kao izlazni
do ;početak petlje
if taster1=1 then led1=0 ;ako taster nije pritisnit, isključi D1
if taster1=0 then led1=1 ;ako je taster pritisnut, uključi D1
led2=1 ;uključi D2
loop ;kraj petlje
end
Kao što vidimo iz šeme, taster TA1 povezan je na RA4 pa smo tako i definisali alias za njega. Program bi trebalo da je potpuno jasan jer nemamo ni jednu novu komandu, novo je podešavanje ANSELA i TRISA registara; ANSEL moramo da postavimo na 0 kako bi isključili sve analogne funkcije A porta i uključili digitalnu funkciju na svim pinovima. Medjutim, kada je u pitanju TRISA registar, ako pogledamo tabelu 3-8 u tehničkim podacima za ovaj PIC videćemo da je po uključenju stanje svih bitova tog registra postavljeno na 1, tj. njegovo stanje je 255, isto kao što smo mi postavili u programu. U principu to nismo morali, ali je ipak preporuka da to uradimo jer ako izostavimo inicijalno podešavanje verovatno ćemo posle nekog vremena, kada pogledamo ponovo program, da se pitamo koje su početne vrednosti registara koje nismo podesili pa ćemo morati da posegnemo za dokumentacijom.
Objasnićemo samo ulogu otpornika R24 koji je, kako se vidi iz šeme, jednim krajem povezan na +5V, a drugim na taster i RA4. Obzirom da su svi pinovi A porta postavljeni kao ulazi, pa i RA4, stanja na njima su nedefinisana jer oni u električnom smislu nisu nigde spojeni tj. "plivaju", a kada je ulaz odspojen, stanje na njemu može da bude 0 ili 1, ili da se stalno menja zbog faktora kao što su smetnje koje ulaze kroz napajanje, ili indukcije kroz vodove na štampanoj ploči. Zato je neophodno da na ulazu imamo stabilno logičko stanje koje se obezbedjuje otpornikom; kada je taj otpornik jednim krajem spojen na plus tada taj otpornik nazivamo PULL-UP (što znači "povući na gore"), a kada je spojen na masu nazivamo ga PULL-DOWN (u prevodu "povući na dole"). Uobičajeno je da se u ovakvim situacijama koristi pull-up otpornik, a i u samom PIC-u postoje takvi otpornici, fabrički ugradjeni, koji mogu da se uključe ili isključe, ima ih na svim pinovma B porta i samo na pinu 5 porta A, pa smo morali da dodamo spoljne na ostale pinove A porta.
Da bi se detektovala promena stanja, taster moramo da povežemo na suprotan polaritet - kada taster nije pritisnut stanje na pinu je 1, a kada je pritisnut stanje na pinu je 0 jer je taster spojen direktno na masu, a zbog otpornika je ograničena struja koja prolazi izmedju plusa i mase pa nema kratkog spoja. Vrednost otpornika može da bude od 1K pa do oko 100K u zavisnosti od upotrebljenih komponenti, a vrednost otpornika u samom PIC-u je oko 22K. Na našem razvojnom sistemu pull-up otpornici (R24, R25 i R26)imaju vrednost od 4,7K.
Da se na kratko vratimo programu. Prva IF naredba ispituje da li je vrednost na pinu RA4 jednako 1, i ako jeste onda isključuje LED1, a druga radi obrnuto. Kroz prethodno objašenjenje videli smo da će na RA4 da bude logičko 1 kada taster nije pritisnut, a 0 kada je taster pritisnut.
Naredba kojom uključujemo LED2 je tu radi kontrole i uporedjenja sa sledećim primerom i vidimo da je LED2 stalno uključena.
---------------------------------------------------------------------------
Sva pitanja vezana za tutorijal možete da postavite u
ovoj temi: