PRIMER KONTROLE 8 LED DIODA

         Mikrokontroler PIC16F84 izveden u standardnom DIP pakovanju ima raspored pinova pikazan na donjoj slici.

         Značenje pojedinačnih pinova je dato u sledećoj tabeli:

Pin

Oznaka

Značenje

1

RA2

Drugi pin PORTA A i nema drugih značenja

2

RA3

Trećin pin PORTA A i nema drugih značenja

3

RA4

Četvrti pin PORTA A sa dodatkom tajmerske funkcije

4

MCLR

Reset ulaz i sa naponom Vpp omogućuje programiranje mikrokontrolera

5

Vss

Pin prema masi

6

RB0

Nulti pin PORTA B sa mogućnošću interapt ulaza

7

RB1

Prvi pin PORTA B i nema drugih značenja

8

RB2

Drugi pin PORTA B i nema drugih značenja

9

RB3

Treći pin PORTA B i nema drugih značenja

10

RB4

Četvrti pin PORTA B i nema drugih značenja

11

RB5

Peti pin PORTA B i nema drugih značenja

12

RB6

Šesti pin PORTA B sa mogućnošću "Clock" linije u programu

13

RB7

Sedmi pin PORTA B sa mogućnošu "Data" linje u programu

14

Vdd

Napon napajanja mikrokontrolera

15

OSC2

Pin za priključak kristala oscilatora ili rezonatora

16

OSC1

Pin za priključak kristala oscilatora ili rezonatora

17

RA0

Nulti  pin PORTA A i nema drugih značenja

18

RA1

Prvi pin PORTA A i nema drugih značenja

         Njegove su glavne osobine:

1.     To je 8-bitni mikrokontroler sa 14-bitnim instrucijskim skupom

2.     Maksimalna dozvoljena struja pina je 20 mA

3.     Sadrži 1024x14 bita programske FLASH memorije

4.     Sadrži 68x8 radne RAM memorije

5.     Sadrži 64x8 EEPROM memorije

6.     Ima ugrađen 8-bitni tajmer/brojač sa 8-bitnim preskalerom

7.     Troši manje od 2 mA na 5V i 4Mhz

8.     Može da radi na maksimalno 10 Mhz

         Programska ili FLASH memorija koristi se za upis napisanog programa u mikrokontroler, dok se RAM memorije se koristi u programima za privremeno smeštanje rezultata ili podataka. Jači mikrokontroleri  poseduju i EEPROM memoriju u koju se upisuju podaci prilikom njegovog programiranja što znači da će biti trajno zapamćeni kao i program. Najčešće su to neke konstante koje koristi program. Portovi mikrokontrolera PORT A i PORT B su njegova veza sa vanjskim svetom, a iz prikazanog rasporeda pinova  vidi se da PORT A ima 5 a PORT B osam pinova.  Tajmer je 8-bitni i radi nezavisno od programa. On na svaki četvrti takt oscilatora uvećava svoju vrednost za 1 sve do 255 kada ponovo počinje o nule. Na ovaj način kada je u programima potrebna vremenska kontrola njegova primena je značajna. Kao oscilator najčešće koristi kvarc od 4 Mhz ili keramički rezonator iste frekvencije. Resetovanje mikrokontrolera vrši se kratkim dovođenje logičke nule na MCLR pin. Zavisno od primene pinova porta oni mogu biti određeni ili kao ulazni ili izlazni. To se vrši upotrebom TRIS registra. TRISA registra registar odnosi se na PORT A a TRIS B registar na PORT B. Ako je u datim registrima odgovarajući bit postavljen na 1 onda je taj pin ulazni a ako je postavljena 0 onda je on izlazni. Na ovo treba obratiti posebnu pažnju što je često uzrok da naš program ne radi ispravno. Četiri pina PORTA B, RB7ČRB$ mogu izazvati programski prekid(interapt) ako se na njima promeni stanje sa logičke jedinice na logičku nulu i obrnuto. Pri tome ovi pinovi moraju biti definisani kao ulazni. Peti pin PORTA A ima dvostruku funkciju. Na njemu se nalazi i vanjski ulaz za brojač TMR0 što se određuje postavljanjem bita T0CS. Na ovaj način tajmer može da uvećava svoje stanje ili preko internog oscilatora ili preko impulsa dovedenih na pin RA4/T0CLK.

         Na donjoj slici data je šema sa PIC16F84P mikrokontrolerom koji na izlaznim portovima ima priključeno 8 led dioda.

Na izlaze PORTA B preko otpornika od 220W spojene su led diode. U ovom primeru upotrebljen je kvrac od 4 Mhz kada se koriste kondezatori  od 15pF, a može se koristiti i keramički rezonator. Neophodne komponente za njegovu izradu su sledeće:

Rb.

Komponenta

Količina

1.

U1 - PIC16F84/04-P

1 kom

2.

U2 - 7805

1 kom

3.

DIL-18  podnožje (profesional)

1 kom

4.

Led D1-D8 fi 5mm crvene

8 kom

5.

C1, C2  - 15pF (keramički kondenzator)

2 kom

6.

C3  - 100nF (keramički kondenzator)

1 kom

7.

C4, C5  - 1mF (elektrolitski konenzator 25 V)

2 kom

8.

R1 - 100W(1/4 W)

1 kom

9.

R2 - 4k7(1/4 W)

1 kom

10.

R4 - R11 - 220W(1/4 W)

8 kom

11.

Q1 - kristal 4 Mhz

1 kom

12.

Konektor za povezivanje 9V baterija

1 kom

13.

Vitroplast jednostrani(100 x 160 mm)

1 kom

14.

Dvopolna redna stezaljka za štampu(plava)

1 kom

15.

S1 - mikro taster za PCB montažu

1 kom

 

Izgled PCB pločice dat je na donjoj slici:

Način montaže elemenata dat je na donjoj slici:

Primer programa napisan u PICBasicu za njegovu kontrolu je sledeći(Diode):

 

'****************************************************************

'*  Naziv    : DIODE.BAS                                       *

'*  Autor    : Milanovic V.                                     *

'*  Napomena : Prost primer programa                            *

'*  Datum    : 21.04.2004                                       *

'*  Verzija  : 1.0                                              *

'*  Napomena : Program generise razlicite sekvence na LED       *

'*           : diodama                                          *

'****************************************************************

      i var byte

      j var word

      k var byte

       

      TRISA = $FF    ' Svi pinovi porta A su ulazni

      TRISB = $00    ' Svi pinovi porta B su izlazni

      PORTB = $00    ' Ugasi sve LED diode na pocetku programa

      pause 1500

 

  Pocetak:

  For i = 1 to 4

'-----------Pali jednu po jednu diodu i gasi od pocetka---------

      if i = 1 Then j = 1000   ' Pauza 1 sekund

      if i = 2 Then j = 500    ' Pauza 0.5 sekunda

      if i = 3 Then j = 250    ' Pauza 0.25 sekunda

      if i = 4 Then j = 100    ' Pauza 0.25 sekunda

 

      High PortB.0   ' Upali Led 0

      pause j

 

      High PortB.1   ' Upali Led 1

      pause j

 

      High PortB.2   ' Upali Led 2

      pause j

      

      High PortB.3   ' Upali Led 3

      pause j

 

      High PortB.4   ' Upali Led 4

      pause j

 

      High PortB.5   ' Upali Led 5

      pause j

 

      High PortB.6   ' Upali Led 6

      pause j

 

      High PortB.7   ' Upali Led 7

      pause j

 

      Low PortB.0    ' Ugasi Led 0

      pause j

 

      Low PortB.1    ' Ugasi Led 1

      pause j

 

      Low PortB.2    ' Ugasi Led 2

      pause j

 

      Low PortB.3    ' Ugasi Led 3

      pause j

 

      Low PortB.4    ' Ugasi Led 4

      pause j

 

      Low PortB.5    ' Ugasi Led 5

      pause j

 

      Low PortB.6    ' Ugasi Led 6

      pause j

 

      Low PortB.7    ' Ugasi Led 7

      Pause 1000     ' Pauza 1 sekunda

 

'-----------Pali jednu po jednu diodu i gasi od kraja---------

      High PortB.0   ' Upali Led 0

      pause j

 

      High PortB.1   ' Upali Led 1

      pause j

 

      High PortB.2   ' Upali Led 2

      pause j

      

      High PortB.3   ' Upali Led 3

      pause j

 

      High PortB.4   ' Upali Led 4

      pause j

 

      High PortB.5   ' Upali Led 5

      pause j

 

      High PortB.6   ' Upali Led 6

      pause j

 

      High PortB.7   ' Upali Led 7

      pause j

 

      Low PortB.7    ' Ugasi Led 7

      pause j

 

      Low PortB.6    ' Ugasi Led 6

      pause j

 

      Low PortB.5    ' Ugasi Led 5

      pause j

 

      Low PortB.4    ' Ugasi Led 4

      pause j

 

      Low PortB.3    ' Ugasi Led 3

      pause j

 

      Low PortB.2    ' Ugasi Led 2

      pause j

 

      Low PortB.1    ' Ugasi Led 1

      pause j

 

      Low PortB.0    ' Ugasi Led 0

      Pause 1000     ' Pauza 1 sekunda

 

'-----------Prolazi upaljenja LED dioda sa desna u levo--------

      High PortB.0   ' Upali Led 0

      pause j

 

      High PortB.1   ' Upali Led 1

      Low PortB.0    ' Ugasi Led 0

      pause j

 

      High PortB.2   ' Upali Led 2

      Low PortB.1    ' Ugasi Led 1

      pause j

      

      High PortB.3   ' Upali Led 3

      Low PortB.2    ' Ugasi Led 2

      pause j

 

      High PortB.4   ' Upali Led 4

      Low PortB.3    ' Ugasi Led 3

      pause j

 

      High PortB.5   ' Upali Led 5

      Low PortB.4    ' Ugasi Led 4

      pause j

 

      High PortB.6   ' Upali Led 6

      Low PortB.5    ' Ugasi Led 5

      pause j

 

      High PortB.7   ' Upali Led 7

      Low PortB.6    ' Ugasi Led 0

      pause j

 

      Low PortB.7    ' Ugasi Led 7

      pause j

      Pause 1000     ' Pauza 1 sekunda

 

'-----------Prolazi upaljenja LED dioda sa leva u desno--------

      High PortB.7   ' Upali Led 7

      pause j

 

      High PortB.6   ' Upali Led 6

      Low PortB.7    ' Ugasi Led 7

      pause j

 

      High PortB.5   ' Upali Led 5

      Low PortB.6    ' Ugasi Led 6

      pause j

      

      High PortB.4   ' Upali Led 4

      Low PortB.5    ' Ugasi Led 5

      pause j

 

      High PortB.3   ' Upali Led 3

      Low PortB.4    ' Ugasi Led 4

      pause j

 

      High PortB.2   ' Upali Led 2

      Low PortB.3    ' Ugasi Led 3

      pause j

 

      High PortB.1   ' Upali Led 1

      Low PortB.2    ' Ugasi Led 2

      pause j

 

      High PortB.0   ' Upali Led 0

      Low PortB.1    ' Ugasi Led 1

      pause j

 

      Low PortB.0    ' Ugasi Led 0

      pause j

      Pause 1000     ' Pauza 1 sekunda

 

'-----Prolazi neupaljena LED dioda sa desna u levo-------------

      PORTB = $FF    ' Upali sve LED diode

      pause j

 

      Low PortB.0    ' Ugasi Led 0

      pause j

 

      High PortB.0   ' Upali Led 1

      Low  PortB.1   ' Ugasi Led 0

      pause j

 

      High PortB.1   ' Upali Led 2

      Low PortB.2    ' Ugasi Led 1

      pause j

 

      High PortB.2   ' Upali Led 3

      Low  PortB.3   ' Ugasi Led 2

      pause j

 

      High PortB.3   ' Upali Led 4

      Low  PortB.4   ' Ugasi Led 3

      pause j

 

      High PortB.4   ' Upali Led 5

      Low  PortB.5   ' Ugasi Led 4

      pause j

 

      High PortB.5   ' Upali Led 6

      Low  PortB.6   ' Ugasi Led 5

      pause j

 

      High PortB.6   ' Upali Led 7

      Low  PortB.7   ' Ugasi Led 6

      pause j

 

      High PortB.7   ' Upali Led 7

      Pause 1000     ' Pauza 1 sekunda

 

'-----Prolazi neupaljena LED dioda sa leva u desno-------------

      PORTB = $FF    ' Upali sve LED diode

      pause j

 

      Low PortB.7    ' Ugasi Led 0

      pause j

 

      low PortB.6    ' Ugasi Led 6

      High PortB.7   ' Upali Led 7

      pause j

 

      Low PortB.5     ' Ugasi Led 5

      High PortB.6    ' Upali Led 6

      pause j

 

      Low PortB.4     ' Ugasi Led 4

      High PortB.5    ' Ugasi Led 5

      pause j

 

      Low PortB.3     ' Ugasi Led 3

      High  PortB.4   ' Upali Led 4

      pause j

 

      High PortB.3   ' Upali Led 3

      Low  PortB.2   ' Ugasi Led 2

      pause j

 

      High PortB.2   ' Upali Led 2

      Low  PortB.1   ' Ugasi Led 1

      pause j

 

      High PortB.1   ' Upali Led 1

      Low  PortB.0   ' Ugasi Led 0

      pause j

 

      High PortB.0   ' Ugasi Led 0

      Pause 1000     ' Pauza 1 sekunda

 

      PORTB = $00    ' Ugasi sve LED diode

      pause 300    

 

'-----Pali sa krajeva LED pa ih gasi------------------

 

      High PortB.0   ' Upali Led 0

      High PortB.7   ' Upali Led 7

      pause j

      

      High PortB.1   ' Upali Led 1

      High PortB.6   ' Upali Led 6

      pause j

 

      High PortB.2   ' Upali Led 2

      High PortB.5   ' Upali Led 5

      pause j

      

      High PortB.3   ' Upali Led 3

      High PortB.4   ' Upali Led 4

      pause j    

      

      Low PortB.3    ' Ugasi Led 3 

      Low  PortB.4   ' Ugasi Led 4

      pause j

      

      Low PortB.5    ' Ugasi Led 5 

      Low  PortB.2   ' Ugasi Led 2

      pause j

      

      Low PortB.6    ' Ugasi Led 6 

      Low  PortB.1   ' Ugasi Led 1

      pause j

      

      Low PortB.7    ' Ugasi Led 7 

      Low  PortB.0   ' Ugasi Led 0

      pause j

      pause 1000

 

' Dva puta blinka na kraju ciklusa

for k = 1 to 2

      PORTB = $FF    ' Upali sve LED diode

      pause 300

      PORTB = $00    ' Ugasi sve LED diode

      pause 300    

next k

 

      pause 1000

 

Next i

      pause 1000                                   

 

'-----------Tri puta blinkanje dioda--------------------

for i = 1 to 3

      PORTB = $FF    ' Upali sve LED diode

      pause 200

      PORTB = $00    ' Ugasi sve LED diode

      pause 200    

next i

      pause 1000    ' Pauza 1 sekunda 

      Goto Pocetak  ' Vraca se na pocetak programa

     

      End           ' Kraj program

 

 

 

 

 

         Napisan je program koji generiše različite sekvence na led diodama a to su:

·         Pali jednu po jednu led diodu od početka i gasi od početka

·         Pali jednu po jednu led diodu od početka i gasi od kraja

·         Prolazi upaljena led dioda sa desna u levo

·         Prolazi upaljena led dioda sa leva u desno

·         Prolazi neupaljena led dioda sa desna u levo

·         Prolazi neupaljena led dioda sa leva u desno

·         Pali led diode sa krajeva pa ih gasi

 

         Navedene skekvence se u programu smenjuju u 4 ciklusa. Za svaki ciklus definisano je vreme zadrške između sekvenci i ono je:

 

·         U prvom ciklusu 1000 ms (1. sekunda)

·         U drugom ciklusu 500 ms (0.5 sekundi)

·         U trećem ciklusu 250 ms (0.25 sekundi)

·         U četvrtom ciklusu 150 ms

 

         Na završetku svakog ciklusa izvede se dvostruko blinkanje led dioda. Nako završetka sva četiri cilkusa izvede se trostruko blinkanje led dioda i program počinje od početka.

 

         U slučaju ako koristite razvojni sistem Mikroelektronike nije vam neophodan pločica jer stanja dioda možete pratiti na samom sistemu.

 

http://vojo.milanovic.org
© Copyright, 2004 Milanović Vojo 
All right reserved