TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma

Diskusija o MSP, ARM / LPC, PLC kontrolerima.

Moderators: pedja089, stojke369, [eDo], trax

Post Reply
Tr4ck
Posts: 6
Joined: 17-06-2009, 19:17
Location: Valpovo

TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma

Post by Tr4ck »

- to znamo sto je.....O.o
http://i42.tinypic.com/2w6yow7.jpg" onclick="window.open(this.href);return false; http://i44.tinypic.com/2pouolx.jpg" onclick="window.open(this.href);return false;
Neke slikice da znate o cemu se radi......

Ukratko, pojedini segmenti displaya se ukljucuju postavljanjem odgovarajuceg bita porta P3 u stanje "0", a na kojem od cetiri displaya ce se podatak ispisati odreduju logicka stanja na P1.5, P1.4, P1.3 i P1.0. Logicke "0" na ovim pinovima ukljucuju tranzistore T1-T4 cime spajamo zajednicku anodu odabranog displaya na +5V i time ga aktiviramo. Da bi ovo radilo kako je opisano, treba ce jos ukljuciti kratkospojnike JP12-JP15 a iskljuciti JP10 i JPll. Istovremeno mozemo ukljuciti vise displaya, ali ce prikaz na njima biti isti jer su istoimeni segmenti paralelno spojeni. Zelimo li prikazivati razlicite sadrzaje, displeje cemo morati naizmjenicno ukljucivati tako da svaki od njih bude ukljucen barem 25 puta u sekundi. Slijedi primjer jednostavnog programa (7segm_l.bas) koji u ovakvom, multipleksiranom nacinu rada, ispisuje rijec PULA:

(btw. Rijec PULA je dana kao primjer u jednoj knjizi pa se meni neda sada ispravljati to na neku moju rijec, mislim da nema potrebe, iz ovoga se vidi dovoljno)

http://i42.tinypic.com/ezq3qb.jpg" onclick="window.open(this.href);return false;

Nakon sto je pojedini 7-segmentni display ukljucen dovodenjem "0" na odgovarajuci pin porta PI, na P3 je dovedena jedna od kombinacija koje oslikavaju slova "P", "U", "L" i "A". Ovakvo stanje zadrzavamo 5 ms, nakon toga ukljucujemo sljededi display s njegovim slovom. Ukupno trajanje petlje je nesto duze od 20 ms pa ce se ispis na displayu osvjeziti gotovo 50 puta u sekundi. To je vise nego dovoljno za stabilni ispis, bez treperenja. Pazljivi citatelji ce primijetiti da u programu postoji mala pogreska: nakon sto smo postavili slovo "P" na prvi display i pricekali 5 ms, ukljucili smo drugi display a da prethodno nismo iskljucili "P". No, kako odmah zatim postavljamo slovo "U", "P" ce se nezeljeno ispisati na 2. displayu tek koju mikrosekundu - to je toliko kratko da pogresku nije moguce primijetiti! U gornjem primjeru smo zeljena slova definirali u programu kao konstante. Naravno, na 7-segmentnim displayima ne mozemo ispisati sva slova; oni su prvenstveno namijenjeni za ispis brojeva. Ispis brojeva cemo znatno olaksati ako "slike" svih znamenci stavimo u tablicu koja izgleda ovako:

http://i44.tinypic.com/qn89xf.jpg" onclick="window.open(this.href);return false;

Ovdje su osim znamenaka 0-9 smjesteni jos i opisi slova A-F pa cemo moc prikazivati i heksadecimalne brojeve. Naredbom Lookup pristupamo do opisa zeljene znamenke koristedi nju samu kao indeks:

http://i43.tinypic.com/2nvs8x3.jpg" onclick="window.open(this.href);return false;

Odnosno:

http://i39.tinypic.com/fbj20z.jpg" onclick="window.open(this.href);return false;

Ako je vrijednost znamenke upisana u istoimenoj varijabli.
Pogledajmo primjer programa 7segm_2.bas koji na ovom principu broji od 0000 do 9999 punom brzinom:

http://i40.tinypic.com/2n9yru1.jpg" onclick="window.open(this.href);return false;

Cetiri For-Next petlje mijenjaju vrijednosti u varijablama Z1-Z4 u rasponu 0-9 tako da se, kada se "izvrte" sve kombinacije za Z4, promijeni vrijednost u Z3, kada se "izvrte" sve kombinacije u Z3, mijenja se Z2 itd. Gledano zajedno, Z1-Z4 su znamenke 4-znamenkastog brojaca. Za svaki novi cetveroznamenkasti broj skace se u potprogram Prikaz koji naredbom Lookup dohvati iz tablice opis pojedine znamenke postavi ga na port P3 i zatim je prikaze u trajanju 5 ms. Kako se svaki prikaz i ugasi prije postavljanje sljedece znamenke, (Pl.x = 0, Waitms5, Pl.x = 1), ovdje je izbjegnuto kratkotrajno preklapanje prikaza koje smo komentirali u prvom primjeru. Takoder, potprogram Prikaz ne dira preostala cetiri pina porta P1 pa ih mozemo, po potrebi, iskoristiti za nesto drugo. Zelite li isprobati ovaj primjer, ne zaboravite na kraj programa dodati tablicu Tablica_0f. Korisnici nekih verzija Bascoma ce imati problema s prevodenjem (kompajliranjem), jer Bascom prije nije tolerirao upotrebu portova u naredbi P3 = LookupQ. Mozemo si pomoci uvodenjem nove varijable. U dosadasnjim primjerima, program je u potpunosti bio podreden ispisu, stoga, sto ispis treba neprestano i u pravilnim razmacima osvjezavati - program pocinje robovati ispisu i tesko da paralelno moze raditi jos neki korisni posao. Mozemo li drukcije? Da, pomoci ce nam brojaci i prekidne mtine! Ideja je sljedeca: svakih 5 ms aktivirati prekidnu rutinu u kojoj ce se ugasiti trenutno aktivirani display, postaviti novu kombinaciju segmenata i ukljuciti sljedeci display. Sve ovo traje oko 150 ps pa mikrokontroler za prikaz na displayu trosi samo 3% raspolozivog vremena. Osnovna je pretpostavka za ovakav nacin prikaza da je i podacima i maskama za ukljucenje pojedinih displaya moguce pristupati koristenjem istog indeksa. U primjeru prekidne rutine za ispis podaci su smjesteni u niz Znam(l-4), a maske u tablicu Znamenke:

http://i44.tinypic.com/716vqf.jpg" onclick="window.open(this.href);return false;

Na pocetku programa je Timer0 konfiguriran tako da broji instrukcijske cikluse (mikrosekunde) s pocetnom vrijednosti brojaca 60536. Kako do preljeva dolazi kada brojac dobroji do 65535, prekid ce se inicirati za 5000 ps. Tada ce se izvrsiti pridruzena rutina Prikaz u kojoj najprije povecavamo vrijednost indeksa Ii. Indeks se mijenja u rasponu 1-4 i u svakom prolazu ima drugu vrijednost - tako cemo svaki put dohvatiti sljedecu znamenku iz polja Znam0. Maske iz tablice Znamenke dohvacamo naredbom Lookup. Svaka maska ima po jedan bit postavljen na "0" cime se ukljucuje jedan od displaya. Primijetimo ovdje da je prva vrijednost u tablici samo popuna; ovo nam je potrebno kako bismo isti indeks mogli koristiti i za dohvat podataka iz niza Znam (prvi podatak ima indeks 1) i iz tablice Znamenke (prvi podatak ima indeks 0). Pri ispisu smo vodili racuna o tome da najprije pogasimo sve displaye (PI =P1 Or&BOOl 11001) i tek nakon postavljanja nove kombinacije na P3 ukljucimo sljedecu znamenku (PI = PI And Pom). Koristene naredbe Or i And imaju utjecaj samo na PI.5, P1.4, PI.3 i P1.0, dok su ostali pinovi porta P1 nepromijenjeni, tako da ih mozemo upotrijebiti za druge namjene. Ovo je posebno vazno u primjeru programa kod kojega je prikaz samo sporedna stvar, a ne iskljuciva svrha. Na kraju prekidne rutine namjestamo pocetnu vrijednost brojaca i ponovo ga pokredemo kako bi se 5 ms kasnije ista prekidna rutina ponovo aktivirala.

Slijedi jednostavni primjer u kojem koristimo prekidni nacin ispisa; treba ga ubaciti na mjesto oznaceno tockicama, ispred rutine Prikaz:

http://i40.tinypic.com/2zhgveo.jpg" onclick="window.open(this.href);return false;

U ovoj jednostavnoj animaciji najprije smo postavili inicijalne vrijednosti u niz Znam(l-4), a zatim ih unutar Do-Loop petlje pomicemo svake sekunde za jedno mjesto ulijevo. Peti clan niza, Znak(5), potreban je za zatvaranje "kruznog toka". Uocimo da ovdje nigdje eksplicitno ne pozivamo rutinu za prikaz - aktiviraju je Timer0 i prekidni mehanizam na prije opisani nacin. Animacija unutar Do-Loop petlje nas moze navesti na krivi zakljucak da ovako mozemo realizirati samo zgodne svjetlosne efekte. Unutar petlje se, dakako, moze nalaziti vrlo slozen program koji povremeno namjesta neke vrijednosti u polje Znam(l-4) kako bi ih ispisao na displayu. Ispis mozemo iskljuciti zabranom prekida koje generira Timer0:

http://i44.tinypic.com/2ldf3fp.jpg" onclick="window.open(this.href);return false;

I po potrebi ponovno aktivirati:

http://i43.tinypic.com/2j3nwpx.jpg" onclick="window.open(this.href);return false;

...ovdje su isto malo sjebane naredbe......grrrr


Tutorial by: Tr4ck
- zabranjeno je svako c/p tutoriala bez moje odluke….
User avatar
Drago_Zg
Odlično uznapredovao
Odlično uznapredovao
Posts: 583
Joined: 16-09-2008, 19:40

Re: TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma

Post by Drago_Zg »

Može jedno 4 puta C/P da doneseš odluku?
[URL=https://datesnow.life]Real-life Females[/URL]
Post Reply