| Pali gasi LED
  autor: pedja089
   | 
      
        | OUTPUT PORTB.7 
        'proglasavamo portb izlaznim 
 pocetak:              '
        ovo je labela sa nazivom pocetak
 HIGH PORTB.7      ' ovim smo postavili rb7 na logicku 1(5V)
 PAUSE 1000          'sada cekamo jednu
        sekundu
 LOW PORTB.7       'sada postavimo rb7 na 0 tj na 0V
 PAUSE 1000          'opet cekamo
 GOTO POCETAK     'ovom naredbom kazemo da se program vrati na pocetak
        i da se tako vrti u krog do beskonacnosti
 END
                             
        'stavljamo na kraj programa, nije obbavezan
 |  
        | SYMBOL LED = PORTB.7 
 OUTPUT LED
 pocetak:
 HIGH LED
 PAUSE 1000
 LOW LED
 PAUSE 1000
 GOTO POCETAK
 END
 |  | 
  
    | Nizmenično pali gasi obe LED
  autor: RIDIK
 | 
      
        | OUTPUT PORTB.7 OUTPUT PORTB.6
 pocetok:
 High PORTB.7
 LOW PORTB.6
 PAUSE 1000
 LOW PORTB.7
 HIGH PORTB.6
 PAUSE 1000
 GOTO pocetok
 End
 |  | 
  
    | Mali semafor
  autor: RIDIK
 | 
      
        | SYMBOL CRVENALED =
        PORTB.7 
 SYMBOL ZOLTALED = PORTB.6
 SYMBOL ZELENALED = PORTB.5
 output CRVENALED
 OUTPUT ZOLTALED
 OUTPUT ZELENALED
 PORTB=0 ' gi isklucuva site led
 
 pocetok:
 High CRVENALED ' se vklucuva crvenata led
 LOW ZELENALED  ' se isklucuva zelenata led
 PAUSE 1000        
        ' pauza od 1 sekundi
 LOW CRVENALED  ' se isklucuva crvenata led
 HIGH ZOLTALED  ' se vklucuva zoltata led
 PAUSE 3000     ' pauza od 3
        sekundi
 LOW ZOLTALED   ' se isklucuva zoltata led
 High ZELENALED ' se vklucuva zelenata led
 PAUSE 5000     ' pauza od 5
        sekunda
 GOTO pocetok   ' vrati se na pocetok
 End
 |  | 
  
    | Sedmosegmentni
    displej 
 
  autor: pedja089
 | U principu on se
    sastoji od 8dioda. Sedam dioda su segmenti i osma dioda je tačka. Znači ako hoćemo da napravimo da se na displeju menjaju redom brojevi samo je potrebno
    da palimo određjene diode. Isti je slučaj kod displeja sa zajedničkom anodom i katodom,
    naravno samo je potrebnno izmeniti ono što se šalje na port. Za početak napisaćemo
    program da ispiše broj 1 na displeju.
 Pošto je ovo displej sa zajedničkom anodom, segmenti se pale kada se na njih dovede 0.
    Da bi se pokazao broj 1 na displeju potrebno je uključiti segmente b i c. To ćemo
    uraditi tako što ćemo poslati broj  %1111 1001
 Evo ptimera:
 trisb=0 'port je izlazni
 portb=%1111 1001 'uključili smo jedan
 ili možemo napisati i portb = 249' to je isti broj kao gore samo u decimalnom obliku
 ili možemo napisati broj u heksadecimalnom obliku portb=$F9
 kada se piše broj u heksadecimalnom obliku onda se ispred broja stavlja znak $
 
      
        | Broj Segment Hex
        Dec 0  %1100 0000 $C0 192
 1  %1111 1001 $F9 249
 2  %1010 0100 $A4 164
 3  %1011 0000 $B0 176
 4  %1001 1001 $99 153
 5  %1001 0010 $92 146
 6  %1000 0010 $82 130
 7  %1111 1000 $F8 248
 8  %1000 0000 $80 128
 9  %1001 1000 $98 152
 |  | 
  
    |  autor: pedja089
 | Ovo je sedmo segmentni
    displej sa dekoderom. Kao što se vidi na šemi prednost ovakvog načina vezivanja
    displeja je u tome što je za 1 displej potrebno manje pinova, tj potrebna su 4 pina... Koriščenje je manje više jako prosto. Dovoljno je poslati broj od 0-16 i na displeju
    će se pojaviti broj od 0-9, a za veće brojeve uglavnom se pojavljuju brljotine na
    displeju.
 Neki dekoderi podrzavaju i heksa decimalne brojeve, pa za brojeve veće od 10 prikazaće
    se odgovarajuća slova od A-F.
 
       Sledeći naćin je da se koriste 2 dekodera: | 
  
    |  autor: pedja089
 | Sada je situacija
    nešto složenija jer imamo 2 broja od 0-16 koja treba složiti u jedan bajt. Za
    prikazivanje na displeju čiji je dekoder prikopčan na rb0-rb3, je ista priča kao od
    malopre. Znaći treba poslati broj od 0 do 16, a da bi smo nešto prikazali na displeju
    čiji je dekoder prikopčan 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 sledećem 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 želeli.
 Pomeranje bita GGGG možemo izvesti na 2 načina.
 Jedan je koriščenjem matematičkog operatora za šiftovanje bita.
 Matematički operator se koristi na sledeći način:
 promenljiva << broj za koliko se bita pomera sadržaj u levo.
 Isti je slučaj i kod šiftovanja u desno.
 Evo konkretan primer:
 
      
        | 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
 |  Drugi način pomeranja u levu stranu je množenje sa brojem 16(ako je potrebno 4 mesta) 
      
        | 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
 |  | 
  
    | LED displeji u multipleksu
 
  autor: pedja089
 | Ovde su
    svi displeji paralelno spojeni. ali postoje tranzistori pomoću kojih uključujemo samo
    odredjeni displej.Ovde se sve svodi na to da se pali prvi drugi pa treći displej...
 Znaći ako hočemo da upalimo skroz levi displej koji nam pokazuje stotine onda čemo
    postaviti rb7 na 1.
 Evo konkretno kako se upravlja displejima:
 prvo je potrebno na portb poslati broj koji želimo da se vidi na određenom displeju,
    zatim je potrebno uključiti taj displej (postaviti odgovarajuci pin na 1) držati ga
    uključenog neko vreme, zatim ga isključiti , pa isto to ponoviti za sledeći displej.
    Ako ovo dovoljno brzo ponavljamo dobićemo utisak da displeji stalno svetle.
 Jedan kratak program koji bi trebao ispisati trocifreni broj:
 
      
        | 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
 |  Isto je ovo moguće i bez dekodera. Stim što se onda brojevi na portb
    šalju kao kada je priključen samo 1 displej (najlakše koriščenjem lookup naredbe).Ovo je bilo lako jer imamo rastavljene cifre.
 Ako imamo neki rezultat u bajtu, tada ga je potrebno rastaviti na stotine desetice i
    jedinice...
 Za to ćemo koristiti naredbu DIG. Ova naredba izdvaja određenu cifru iz nekog broja.
 Evo primer:
 BROJ1= 123 DIG 1 ' ovo će u promenljivu broj1 staviti vrednost cifre koja se nalazi na
    drugom mestu kada brojimo 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:
 
      
        | 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
 |  | 
  
    | Obrtomer
 
  autor: pedja089
 | Sada ovo bi mogli
    iskoristiti za izradu nekog konkretnog uređaja... npr obrtomera (broj obrtaja u sekundi) ili možemo ga iskoristiti kao frekvencmetar.
 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:
 
      
        | 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
 |  | 
  
    | LCD moduli 
 | 
      
        | Pin number | Symbol | Level | I/O | Function |  
        | 1 | Vss | - | - | Power supply (GND) |  
        | 2 | Vcc | - | - | Power supply (+5V) |  
        | 3 | Vee | - | - | Contrast adjust |  
        | 4 | RS | 0/1 | I | 0 = Instruction input 1 = Data input
 |  
        | 5 | R/W | 0/1 | I | 0 = Write to LCD module 1 = Read from LCD module
 |  
        | 6 | E | 1, 1->0 | I | Enable signal |  
        | 7 | DB0 | 0/1 | I/O | Data bus line 0 (LSB) |  
        | 8 | DB1 | 0/1 | I/O | Data bus line 1 |  
        | 9 | DB2 | 0/1 | I/O | Data bus line 2 |  
        | 10 | DB3 | 0/1 | I/O | Data bus line 3 |  
        | 11 | DB4 | 0/1 | I/O | Data bus line 4 |  
        | 12 | DB5 | 0/1 | I/O | Data bus line 5 |  
        | 13 | DB6 | 0/1 | I/O | Data bus line 6 |  
        | 14 | DB7 | 0/1 | I/O | Data bus line 7 (MSB) |  | 
  
    |  autor: Dariolo
   | Za PBP
    koriste se LCD-ei koji u sebi koriste HD44780 kontoler, mada ima i drugih koji se mogu
    koristiti. Kod spajanja LCD-a sa PIC-om, ako koristimo pbp trebamo koristiti odgovarajuće
    pinove. Na slici je prikazano spajanje LCD-a i PIC-a. No spajanje na ovaj način nije
    nužno mogu se koristiti i drugi pinovi PIC-a ali se onda se moraju definirati pinovi koji
    se koriste To bi bilo malo od hardware-skog dijela sada da pređemo na pisanja programa. Za
    slanje podtaka na LCD koristi se jednostavna naredba LCDOUT. Ispod imamo tabelu komandi
    koje se koriste uz naredbu LCDOUT. 
 KOMANDA OPERACIJA NA DISPLAY-u
 $FE,1 obriši displej
 $FE,2 vrati se na početak prve linije
 $FE,$0C isključi kursor
 $FE,$0E uključi underline kursor
 $FE,$0F uključi blinkajući kursor
 $FE,$10 pomeri kursor u levo za 1 mesto
 $FE,$14 pomeri kursor u desno za 1 mesto
 $FE,$80 vrati kursor na početak prve linije
 $FE,$C0 vrati kursor na početak druge linije
 $FE,$94 vrati kursor na početak treće linije (za one displaye koji imaju 3 linije)
 $FE,$D4 vrati kursor na početak četvrte linije (za one displaye koji imaju 4 linije)
 Ove komande pišu se iz LCDOUT: 
      
        | LCDOUT $FE, 1 ;briše
        sve sa LCD-a |  Kod pisanja programa na početku potrebno je napraviti pausu od 0.5sek da se LCD
    inicializira. 
      
        | pause 500 LCDOUT $FE, 1 ;briše sve sa LCD-a i inicijelizira ga
 |  ako uzmemo  
      
        | LCDOUT $FE, $C0 
        ;početak druge linije |  onda se podatci upisuju u 2. red. Neki od načina slanja podataka na LCD: 
      
        | LCDOUT $FE, 1,
        "elektronika.ba"  ; ispisuje u prvu liniju elektronika.ba LCDOUT $FE, $C0, "elktrophreak ; u drugu liniju ispisuje elektrophreak
 LCDOUT $FE, i ; ispisuje neku vrijednost koju smo dodjelili i
 |  
 ako npr. želimo da podatak bude zapisan od pete pozicije u prvom redu koristit ćemo
    sljedeće: 
      
        | LCDOUT $FE, $80+5,
        "elektro" |  
 Da bi vrijednosti neke konstante ili promjenjive na LCD-u predstavili u binearnom
    obliku koristi se naredba LCDOUT $FE, BIN iodnosno da bi bila u heksadekadnom ili dekadnom obliku umjesto BIN koristit će se HEX ili
    DEC.
 
 ako oćemo napraviti niz nekog znaka određeni broj puta koristit ćemo REP,
 npr. ako želimo da na LCD-u imamo ispisano ***** , naredba bi izgledala LCDOUT $FE, REP
    "*"\5
 znači gdje je "*" upisuje se znak koji se želi ponavaljati i MORA biti pod
    novodnicima, a 5 predstavlja broj ponvaljanja.
 
 Ovo su bile neke osnovne naznake kod pisanja naredbih za LCD, prilično su jednostavno
    tako da nebi trebali imati problema sa njima!
 
 Sada ćemo samo pokazati primjer jednog jednostavnog programa koji mjeri frekvenciju na
    koju dovedemo na željeni ulaz (RB1)
 
      
        | TRISB.1=1 TRISA=0
 BROJ VAR WORD
 pause 500
 lcdout $FE, 1
 POCETAK:
 COUNT PORTB.1,1000,BROJ ' broji impulse na pinu RB1, u periodu od 1S i rezultat  
        smesta u "BROJ"
 lcdout $FE, $80, "COUNT=", dec broj ; ispisuje na LCD-u COUNT= i broj prikazuje
        kao decimalnu veličinu
 pause 10
 GOTO POCETAK
 |   .
 | 
  
    |  autor: pedja089
 | Kod koriščenja define
    upotreba naredbi lcdout se ne menja. Define samo definise kako je spojen lcd sa picem. i
    dodaje se na sam početak programa. 
 DEFINE LCD_BITS 4 'bira se da li lcd radi u 4 bitnom ili 8 bitnom modu
 DEFINE LCD_DREG PORTB 'bira se port na koji su zakačeni data biti(d4-d7)
 DEFINE LCD_DBIT 0 'početni bit data porta. 0 ili 4. ako je postavljen na 0 onda se d4
    spaja na rb0,d5-rb1, d6-rb2, d7-rb3,
 a ako je postavljen na 4 d4 se spaja na rb4 itd..
 DEFINE LCD_RSREG PORTB 'port na koji je zakačena linija RS
 DEFINE LCD_RSBIT 4 'bit porta na kome je zakačena linija RS. u ovom slučaju je zakačena
    na RB4
 DEFINE LCD_EREG PORTB 'port na kome je zakačena E linija displeja
 DEFINE LCD_EBIT 3 'bit porta na kome je zakačena E linija.
 DEFINE LCD_RWREG PORTE 'podešavanje sa RW liniju. mada ovo se ne ubacuje jer se RW vezuje
    na masu. i time je odabran upis podataka u displej.
 DEFINE LCD_RWBIT 2 'RW bit
 DEFINE LCD_LINES 2 'broj linija displeja. 1,2,4
 DEFINE LCD_COMMANDUS 2000 'kašnjenje komande u ms. po meni je nepotrebno posebno
    definisati, jer je vec definisano u pbp
 DEFINE LCD_DATAUS 50 'kašnjenje podataka u ms.
 Još par napomena. Umesto potenciometra može se ubaciti otpornik (2k2) između mase i
    pina 3, a ako se koristi ra4 sa lcd-om pull up otpornik uglavnom nije potreban, jer lcd
    ima pull up na svim ulaznim pinovima.
 
 Evo jedan primer spajanja lcd-a na portb.
 
      
        | DEFINE LCD_BITS 4 DEFINE LCD_DREG PORTB
 DEFINE LCD_DBIT 0
 DEFINE LCD_RSREG PORTB
 DEFINE LCD_RSBIT 4
 DEFINE LCD_EREG PORTB
 DEFINE LCD_EBIT 5
 DEFINE LCD_LINES 2
 pause 100 'cekanje inicijalizacije displeja
 lcdout $fe,1, "pozdrav svima"
 end
 |  | 
  
    | Mali programčić za
    prikaz koje simbole može prikazivati određeni displej. 
      
        | 'PIC16F628A @ DEVICE XT_OSC,WDT_OFF,PWRT_ON,PROTECT_OFF
 
 DEFINE OSC 4 'Oscillator speed in MHz
 CMCON = 7 ' Set PORTA to digital
 INCLUDE "bs2defs.bas"
 DEFINE LCD_BITS 4 'izbira ali lcd dela v 4 bitnem ali 8 bitnem modu
 DEFINE LCD_DREG PORTA 'izbira se port na kateri so priključeni data biti(d4-d7)
 DEFINE LCD_DBIT 0 'začetni bit data porta. 0 ali 4. Če je postavljen na 0
 'se d4 spaja na RA0, d5-RA1, d6-rb2, d7-rb3,a če je postavljen na 4
 'd4 se spaja na rb4 itd..
 DEFINE LCD_RSREG PORTA 'port na kateri je priključena linija RS
 DEFINE LCD_RSBIT 4 'bit porta na katerem je priključena linija RS. V tem slučaju
 'je priključena na RA4
 DEFINE LCD_EREG PORTB 'port na kateri je priključena E linija displeja
 DEFINE LCD_EBIT 0 'bit porta na katerem je priključena E linija.
 DEFINE LCD_RWBIT 2 'RW bit
 DEFINE LCD_LINES 2 'število linij displeja. 1,2,4
 DEFINE LCD_DATAUS 50 'zakasnitev podatkov v ms.
 
 INPUT PORTB.7
 INPUT PORTB.6
 INPUT PORTB.5
 output PORTB.1
 output PORTB.2
 output PORTB.3
 output PORTB.4
 SYMBOL enter = PORTB.7 'tipka
 SYMBOL plus = PORTB.6 'tipka
 SYMBOL minus = PORTB.5 'tipka
 
 broj var word
 broj = 1
 start:
 pause 100 'inicijalizacija displeja
 lcdout $FE,1 'obriši displaj
 lcdout $fe,1,DEC broj," ",broj 'izpiše v prvo linijo
 if plus = 0 then broj = broj + 1 'naslednji znak
 if minus = 0 then broj = broj - 1 'prejšnji znak
 if enter = 0 then broj = 1 'potrdi
 pause 100
 goto start
 end
 
 |  | 
  
    | 
 
 
 Odabir int/ext oscilatora, odabir
    dali je pin RA5 MCLR ili I port, ili korištenje njegovih specijalnih registara (PIC 16F627/628)
 
 pedja089: to su se postavke u
    programatoru... Bar ih ja sve imam u ovom od mikroelektronike što ide uz easy pic. A u IC-prog imaš sa
    desne za mcle kao strane da biraš xt, hs, int osc i mislim da je i tu za mclr. Mada malo
    je nezgodno posle isprogramirati ako se mcle koristi kao io pin. U tom slučaju mora prvo
    da se dovede vpp pa vcc na pic, a to ne podržavaju svi programatori....
 koska182:
    ja koristim samo ove za 16f62x :
 
      
        | @ DEVICE
        INTRC_OSC_NOCLKOUT     ' System Clock Options @ DEVICE WDT_ON
                                          
        ' Watchdog Timer
 @ DEVICE PWRT_ON
                                        
        ' Power-On Timer
 @ DEVICE MCLR_OFF
                                      
        ' Master Clear Options (Internal)
 @ DEVICE BOD_ON
                                           
        ' Brown-Out Detect
 @ DEVICE LVP_OFF
                                         
         ' Low-Voltage Programming
 @ DEVICE CPD_OFF
                                          
        ' Data Memory Code Protect
 @ DEVICE PROTECT_OFF
                               
         ' Program Code Protection
 |  | 
  
    | Branez:
    Moji programatori | ...  
 
 
 
 | 
  
    | RS232 proširenje  autor: UssSiscia
    shema i pločica u PDF
 | 
 |