ovo je sedmo segmentni displej sa dekoderom. kao sto se vidi na semi prednost ovako nacina vezivanja displeja je u tome sto je za 1 displej potrebno manje pinova. tj potrebna su 4 pina...
koriscenje je manje vise jako prosto. dovoljno je poslati broj od 0-16 i na displeju ce se pojaviti broj od 0-9, a za vece brojeve uglavnom se pojavljuju brljotine na displeju.
a neki dekoderi podrzavaju i heksa decimalne brojeve pa za brojeve vece od 10 prikazace se odgovarajuca slova od A-F.
sledeci nacin je da se koriste 2 dekodera
sema:
sada je situacija nesto slozenija. ker imamo 2 broja od 0-16 koja treba sloziti u jedan bajt.
za prikazivanje na displeju ciji je dekoder prikopcan na rb0-rb3, je ista prica kao od malopre. znaci treba poslati broj od 0 do 16.
a da bi smo nesto prikazali na displeju ciji je dekoder prikopcan na rb4-rb7 moramo nekako pomeriti broj za 4 bina na gore.
ovako bi trebao da izgleda broj poslat na portb u binarnom obliku
GGGG DDDD
D-biti donjeg displeja
G-biti gornjega displeja.
a mi imamo 2 broja u sledecem obliku
0000 DDDD
0000 GGGG
---------------
da bismo dobili oblik kao gore najjednostavnije je pomeriti bite GGGG u levo da se dobije
GGGG 0000
kada imamo broj u tom obliku onda ga je dovoljno sabrati sa drugim brojem
0000 DDDD
+GGGG 0000
-----------------
GGGG DDDD
i dobili smo oblik koji smo zeleli.
pomeranje bita GGGG mozemo izvesti na 2 nacina.
jedan je koriscenjem matematickog operatora za siftovanje bita.
mat operator se koristi na sledeci nacin
promenljiva << broj za koliko se bita pomera sadrzaj u levo.
isti je slucaj i kod siftovanja u desno.
evo konkretan primer:
Code: Select all
TRISB=0
BROJ1 VAR BYTE
BROJ2 VAR BYTE
BROJ1=5 ' donji displej treba da prikaze 5
BROJ2=2 ' gornji displej treba da prikaze 2
BROJ2=BROJ2<<4 ' ovde pomeramo donja 4 bita, u levo da donju na mesto gornja 4 bita, sada samo treba sabrati brojeve i upisati ih u portb
PORTB=BROJ1+BROJ2
Code: Select all
TRISB=0
BROJ1 VAR BYTE
BROJ2 VAR BYTE
BROJ1=5 ' donji displej treba da prikaze 5
BROJ2=2 ' gornji displej treba da prikaze 2
BROJ2=BROJ2*16 ' ovde pomeramo donja 4 bita, u levo da donju na mesto gornja 4 bita, sada samo treba sabrati brojeve i upisati ih u portb
PORTB=BROJ1+BROJ2
sema:
ovde su svi displeji paralelno spojeni. ali postoje tranzistori pomocu kojih ukljucujemo samo odredjeni displej.
ovde se sve svodi na to da se pali prvi drugi pa treci displej...
znaci ako hocemo da upalimo skroz levi displej koji nam pokazuje stotine onda cemo postaviti rb7 na 1.
evo konkretno kako se upravlja displejima.
prvo je potrebno na portb poslati broj koji zelimo da se vidi na odredjenom displeju, zatim, je potrebno ukljuciti taj displej(postaviti odgovarajuci pin na 1) drzatiga ukljucenog neko vreme, zatim ga iskljuciti , pa isto to ponoviti za sledeci displej. i ako ovo dovoljno brzo ponavljamo dobicemo utisak da displeji stalno svetle.
evo jedan kratak program koji bi trebao ispisati trocifreni broj:
Code: Select all
TRISB=0
BROJ1 VAR BYTE
BROJ2 VAR BYTE
BROJ3 VAR BYTE
BROJ1=5
BROJ2=2
BROJ2=6
POCETAK:
PORTB=BROJ1 'postavljanje prve vrednosti na port b
HIGH PORTB.7 'ukljucivanje displeja
PAUSE 5 ' zadrzavanje prikaza
LOW PORTB.7 'iskljucivanje displeja
PORTB=BROJ2 'postavljanje druge vrednosti....
HIGH PORTB.6
PAUSE 5
LOW PORTB.6
PORTB=BROJ3
HIGH PORTB.5
PAUSE 5
LOW PORTB.5
GOTO POCETAK
ovo je bilo lako jer imamo rastavljene cifre.
ali npr ako imamo neki rezultat u bajtu, tada ga je potrebno rastaviti na stotine desetice i jedinice...
za to cemo koristiti naredbu DIG. ova naredba izdvaja odredjenu cifru iz nekog broja.
evo primer
BROJ1= 123 DIG 1 ' ovo ce u promenljivu broj1 staviti vrednost cifre koja se nalazi na drugom mestu kada brojima sa desna na levo.
broj posle DIG govori koja se cifra izdvaja iz broja koji je ispred naveden. ako stoji dig 0 onda se izdvaja krajnja desna cifra, tj jedinice, ako stoji dig 4 onda se izdvaja krajnja leva cifra...
evo primera:
Code: Select all
TRISB=0
BROJ VAR BYTE
BROJ1 VAR BYTE
BROJ2 VAR BYTE
BROJ3 VAR BYTE
BROJ=123
POCETAK:
BROJ1 = BROJ DIG 2' izdvajamo stotine
BROJ2 = BROJ DIG 1'desetice
BROJ3 = BROJ DIG 0'jedinice
PORTB=BROJ1
HIGH PORTB.7
PAUSE 5
LOW PORTB.7
PORTB=BROJ2
HIGH PORTB.6
PAUSE 5
LOW PORTB.6
PORTB=BROJ3
HIGH PORTB.5
PAUSE 5
LOW PORTB.5
GOTO POCETAK
npr obrtomera(broj obrtaja u sekundi) ili mozemo ga iskoristiti kao frekfenciometar.
sada nam preostaje jedna nqaredba sa kojom bi prebrojali impulse.
a to je naredba COUNT
sintaksa:
COUNT Pin, Period, BrojImpulsa
Pin je pin na kontroleru na kojem se broje impulsi
Period je vreme za koje se broje impulsi
BrojImpulsa je promenljiva u koju se smesta broj izbrojanih impulsa.
evo primera:
Code: Select all
TRISB=0
TRISA=255
BROJ VAR WORD
BROJ1 VAR BYTE
BROJ2 VAR BYTE
BROJ3 VAR BYTE
BROJ4 VAR BYTE
I VAR BYTE
POCETAK:
COUNT PORTA.0,1000,BROJ ' broji impulse na pinu RA0, u periodu od 1S i rezultat smesta u "BROJ"
BROJ1 = BROJ DIG 3 'izdvajamo hiljde
BROJ2 = BROJ DIG 2' izdvajamo stotine
BROJ3 = BROJ DIG 1'desetice
BROJ4 = BROJ DIG 0'jedinice
FOR I = 1 TO 100 ' u ovom slucaju stavili smo da se ispis na displeju ponovi 100 puta, sto znaci da ce vreme prikazivanja broja na displeju biti oko 2 sekunde
PORTB=BROJ1
HIGH PORTB.7
PAUSE 5
LOW PORTB.7
PORTB=BROJ2
HIGH PORTB.6
PAUSE 5
LOW PORTB.6
PORTB=BROJ3
HIGH PORTB.5
PAUSE 5
LOW PORTB.5
PORTB=BROJ4
HIGH PORTB.4
PAUSE 5
LOW PORTB.4
NEXT I
GOTO POCETAK
http://www.elektronika.ba/forum/uploadz ... rtomer.GIF
ako je sve jasno moglo bi se reci da smo zavrsili sa sedmosegmentnim displejima....
sada bi mogli malo preci na lcd displej.
za pocetak mozete koristiti i proteus.