Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma

[es] :: Elektronika :: Mikrokontroleri :: TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma
(TOP topic, by veselinovic)

[ Pregleda: 8058 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Tr4ck
Osijek, CRO

Član broj: 236426
Poruke: 19
*.dsl.iskon.hr.

Sajt: ljuska.org


+2 Profil

icon TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma18.12.2009. u 16:27 - pre 127 meseci
- to znamo sto je.....O.o

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)



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:



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:



Odnosno:



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:



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:



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:



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:



I po potrebi ponovno aktivirati:



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


Tutorial by: Tr4ck
- zabranjeno je svako c/p tutoriala bez moje odluke….
Onaj tko je rekao da se novcem ne moze sve kupiti vjerojatno nije imao dovoljno novca.... :P
 
Odgovor na temu

PedjaZ

Član broj: 48898
Poruke: 2013



+129 Profil

icon Re: TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma16.08.2012. u 21:47 - pre 95 meseci
Mogao bi neko da doradi ovaj tutorijal.
Prvo sto se slike jako lose vide, a drugo sto se Bascom iz tutorijala poprilicno razlikuje od danasnjeg Bascoma.
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Beograd, Vračar

Član broj: 288510
Poruke: 4155
161.255.178.212.adsl.dyn.beotel.net.

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+453 Profil

icon Re: TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma16.08.2012. u 21:48 - pre 95 meseci
Pošalji PP autoru tutorijala
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

PedjaZ

Član broj: 48898
Poruke: 2013



+129 Profil

icon Re: TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma16.08.2012. u 22:28 - pre 95 meseci
He, he.
Nema ga vec neko vreme, a i na njegovom sajtu je isti prastari tutorijal.
 
Odgovor na temu

BosniaCNC
buregdžija
BiH

Član broj: 118726
Poruke: 248

Sajt: nekad je ovde bio sajt.co..


+19 Profil

icon Re: TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma05.09.2012. u 21:26 - pre 94 meseci
E, baš su ti slikice! Jesi se "potrudio" da ti slikice budu razumljive! Nisu ovde deca na forumu pa da tako radiš!
Pozdrav!
 
Odgovor na temu

ZAS011
Uzgajivač šargarepe izakuće
Beograd, Vračar

Član broj: 288510
Poruke: 4155
161.255.178.212.adsl.dyn.beotel.net.

ICQ: 8713400
Sajt: www.justfuckinggoogleit.c..


+453 Profil

icon Re: TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma05.09.2012. u 21:33 - pre 94 meseci
I ti se obrati @Tr4ck pa ga zamoli da postavi lepše sličke. A možeš i da ih usnimiš na svoj računar i povećaš prema potrebi.
--
Make no mistake between my personality and my attitude.
My personality is who I am.
My attitude depends on who you are.
 
Odgovor na temu

BosniaCNC
buregdžija
BiH

Član broj: 118726
Poruke: 248

Sajt: nekad je ovde bio sajt.co..


+19 Profil

icon Re: TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma28.09.2012. u 22:29 - pre 93 meseci
Da, baš sad razmišljam da mu se obratim kad si tako "fino preporučio" .
 
Odgovor na temu

[es] :: Elektronika :: Mikrokontroleri :: TUTORIAL: Programiranje 7-segmentnog displaya pomocu Bascoma
(TOP topic, by veselinovic)

[ Pregleda: 8058 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.