You are on page 1of 10

Laboratorijska vježba br.

6
Naziv vježbe: Izrada projekta kontrole 7-segmentnih displeja

DIO 1.
1. Uvodni dio

Zadatak:
Potrebno je realizirati program za mikrokontroler PIC16F887 koji će na portovima od
PORTA do PORTD paliti i gasiti led diode u vremenskom razmaku od 1s. Pomoću kompajlera
prevesti kôd u HEX format. Nakon toga izvršiti simulaciju hardverskog sistema u
programskom paketu Proteus i potvrditi ispravnost napisanog programa učitavanjam u
mikrokontroler. Otkloniti eventualne greške u programskom kodu.

Implementacija rješenja:
U programskom paketu mikroC napraviti projekat pod nazivom LedBlink na slijedeći
način:

• Pokrenuti New Project Wizard iz menija Project->New Project

• Izabrati mikokontroler P16F887

• Odabrati frekvenciju oscilatora 8MHz

10
• Dati ime projektu i spremiti ga u za tu namjenu predviđen folder na D: disku (IV1-4
->MikroC->LedBlink)

• Preskočiti slijedeći korak klikom na Next i zavšiti Wizard klikom na Finish.


• Otvoriće se prazan projekat u kojeg je potrebno upisati slijedeći programski kôd

• U slijedećem koraku potrebno je kompajlirati napisani program odabirom


Project->Build. U donjem dijelu prozora prikazaće se statistika o procesu
kompajliranja i eventualnim greškama.
• Sada je u folderu gdje smo snimili projekat generiran fajl sa nastavkom .hex, u
ovom slučaju LedBlink.hex. Ovaj fajl je sve što nam je potrebno da pređemo
na slijedeći korak hardverske simulacije sistema.

U programskom paketu Proteus napraviti novi projekat pod nazivom LedBlink na


slijedeći način:
• Iz menija File izabrati New Design i snimiti ga (opcija Save Design As) pod
nazivom LedBlink u folder na D: disku (IV1-5->Proteus->LedBlink). Otvoriće se
prazna radna površina za unos nove sheme.
• Iz biblioteke komponenata izabrati mikrokontroler PIC16F887 i led diode
potrebne za projekat.

11
• Sastaviti shemu prema slijedećoj slici.

U1
1 15
RE3/MCLR/VPP RC0/T1OSO/T1CKI
16
RC1/T1OSI/CCP2
2 17
RA0/AN0/ULPWU/C12IN0- RC2/P1A/CCP1
R1 R2 R3 R4 R5 R6 3
RA1/AN1/C12IN1- RC3/SCK/SCL
18 R17 R18 R19 R20 R21 R22 R23 R24
1k 1k 1k 1k 1k 1k 4 23 1k 1k 1k 1k 1k 1k 1k 1k
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
5 24
RA3/AN3/VREF+/C1IN+ RC5/SDO
6 25
RA4/T0CKI/C1OUT RC6/TX/CK
7 26
RA5/AN4/SS/C2OUT RC7/RX/DT
14
RA6/OSC2/CLKOUT
D17 D18 D19 D20 D21 D22 13
RA7/OSC1/CLKIN RD0
19 D7 D6 D5 D1 D2 D3 D4 D8
LED-BIRG
LED-BIRG
LED-BIRG
LED-BIRG
LED-BIRG
LED-BIRG 20 LED-BIBY
LED-BIBY
LED-BIBY
LED-BIBY
LED-BIBY
LED-BIBY
LED-BIBY
LED-BIBY
RD1
33 21
RB0/AN12/INT RD2
34 22
RB1/AN10/C12IN3- RD3
35 27
RB2/AN8 RD4
36 28
RB3/AN9/PGM/C12IN2- RD5/P1B
37 29
RB4/AN11 RD6/P1C
38 30
RB5/AN13/T1G RD7/P1D
39
RB6/ICSPCLK
40 8
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
10
RE2/AN7
PIC16F887

R9 R10 R11 R12 R13 R14 R15 R16 R25 R26 R27 R28 R29 R30 R31 R32
1k 1k 1k 1k 1k 1k 1k 1k 1k 1k 1k 1k 1k 1k 1k 1k

D25 D26 D27 D28 D29 D30 D31 D32 D16 D9 D10 D11 D12 D13 D14 D15
LED-BIRY
LED-BIRY
LED-BIRY
LED-BIRY
LED-BIRY
LED-BIRY
LED-BIRY
LED-BIRY LED-BIGY
LED-BIGY
LED-BIGY
LED-BIGY
LED-BIGY
LED-BIGY
LED-BIGY
LED-BIGY

• Učitati LedBlink.hex u mikrokontroler na slijedeći način

12
• Podesiti frekvenciju oscilatora na 8MHz i pokrenuti simulaciju klikom na
dugme Play u donjem lijevom uglu.

• Ispraviti eventualne greške i analizirati rezultate simulacije.

Zadaća:
• Korištenjem User Manual-a za mikrokontroler PIC16F887 skicirati i ukratko
objasniti ulogu konfiguracijskih registara korištenih u ovom primjeru (TRISA,
TRISB, TRISC, TRISD).
• U help-u mikroC-a pronaći funkciju Delay_ms() i dokumentirati njen način
korištenja.
• Koristeći knjigu „Programski jezik C za mikrokontrolere“ objasniti način rada
do-while beskonačne petlje.
• Pročitati poglavlje o tajmerima u knjzi PIC mikrokontroleri i ukratko sastaviti.
• Za slijedeći put donijeti skicu rješenja ili gotovo rješenje paljenja led dioda po
portovima sekvencijalno (znači prvo PORTA pa kašnjenje, pa PORTB pa
kašnjenje itd).
• Na internetu pronaći jednostavne primjere korištenja 7-segmentnih displeja i
tastera kod sistema sa mikrokonrolerima.

13
2. DIO 7-segmentni display – Implementacija rješenja

Zadatak:
Potrebno je osmisliti algoritam upravljanja sa 7-segmentnim display-om. Detaljno
analizirati rad diplay-a, nacrtati njegovu internu shemu, nacrtati tablicu kombinacija
za paljenja pojedinih segmenata u heksadecimalnom i binarnom sistemu. Napisati
programski kod prema tabelama u programskom paketu MikroC, kompajlirati i
provjeriti njegovu ispravnost u Proteusu.

Rješenje:

sl.1 Interna struktura 7-segmentnog display-a

Unutar jednog 7-segmentnog displeja imamo 7 svjetlećih dioda obilježenih sa A,


B, C, D, E, F i G i dodatak DP - decimalnu tačku. Postoje dvije vrste 7 segmentnih
displeja, sa zajedničkom anodom i zajedničkom katodom.

Pojedinačni pin mikrokontrolera se ne smije opteretiti strujom većom od 20mA


tako da moramo ograničiti struju kroz svaki pojedini segment na manji iznos. Ovo
ćemo uraditi dodavanjem otpornika od 330ohm u seriju sa svakim segmentom (led
diodom).
Tabela koja je u nastavku prikazana predstavlja osnov za pisanje programa. U
tabelu je potrebno upisati binarne i heksadecimalne vrijednosti koje odgovaraju
decimalnim brojevima sa lijeve strane tabele, odnosno redosljedu paljenja
segmenata da bi se prikazala svaka pojedinačna decimalna cifra.

14
Decimalni broj koji se Heksadecimalna Binarna kombinacija
prikazuje kombinacija RD0 RD1 RD2 RD3 RD4 RD5 RD6

Tabela 1. Stanja pojedinih segmenata

Program za upravljanje 7-segmentnim display-om prikazan je u nastavku:

unsigned short maska(unsigned short kombinacija); //Deklaracija


funkcije maska

unsigned short i; //Deklaracija brojačke varijable

void main() {
INTCON = 0; //Isključi GIE, PEIE,INTE,RBIE,T0IE
PORTA = 0;
TRISA = 0;
PORTD = 0;
TRISD = 0;
do {
for (i = 0; i <= 9; i++) {//Brojačka petlja
PORTA = 1; //Upali tranzistor i omogući
paljenje segmenata
PORTD = maska(i); //Postavi odgovarajuću
kombinaciju na PORTD
Delay_ms(500);
}
} while (1); //Beskonačna petlja

15
}
//Tijelo funkcije maska
unsigned short maska(unsigned short kombinacija) {
switch (kombinacija) {
case 0 : return 0x3F;
case 1 : return 0x06;
case 2 : return 0x5B;
case 3 : return 0x4F;
case 4 : return 0x66;
case 5 : return 0x6D;
case 6 : return 0x7D;
case 7 : return 0x07;
case 8 : return 0x7F;
case 9 : return 0x6F;
}
}

Sastaviti shemu u Proteus-u, učitati .HEX file i provjeriti ispravnost programa.

U1
1 15
RE3/MCLR/VPP RC0/T1OSO/T1CKI
16
RC1/T1OSI/CCP2
2 17
RA0/AN0/ULPW U/C12IN0- RC2/P1A/CCP1
3 18
RA1/AN1/C12IN1- RC3/SCK/SCL
4 23
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
5 24
RA3/AN3/VREF+/C1IN+ RC5/SDO
6 25
RA4/T0CKI/C1OUT RC6/TX/CK
7 26
RA5/AN4/SS/C2OUT RC7/RX/DT RN1
14
RA6/OSC2/CLKOUT
13 19 1 16
RA7/OSC1/CLKIN RD0
20 2 15
RD1
33 21 3 14
RB0/AN12/INT RD2
34 22 4 13
RB1/AN10/C12IN3- RD3
35 27 5 12
RB2/AN8 RD4
36 28 6 11
RB3/AN9/PGM/C12IN2- RD5/P1B
37 29 7 10
RB4/AN11 RD6/P1C
38 30 8 9
RB5/AN13/T1G RD7/P1D
39
RB6/ICSPCLK
40 8 330
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
10
RE2/AN7
PIC16F887

R1 Q1
2N2222
2k

sl.2 Shematski prikaz sklopa za upravljanje 7-segmentnim display-om u Proteus-u

Zadaća:
• Napisati program koji će ispisivati dvocifrene brojeve na dva 7-seg display-a

16
Laboratorijska vježba br.7
Naziv vježbe: Izrada projekta kontrole 2x16 matričnog (LCD) displeja
1. Uvodni dio

Zadatak: Potrebno je osmisliti shemu spoja i napisati program koji će na LCD displej-u
ispisivati zadate poruke. Shema treba da se sastoji od mikrokontrolera PIC16F887 na čijem
PORTu-B treba da je spojen LCD displej (2x16) baziran na Hitachi HD44780 kontroleru.
Program treba da koristi gotove funkcije MikroC kompajlera za rad sa LCD displej-ima. Svaku
od funkcija je potrebno detaljno analizirati i komentirati.

Implementacija rješenja:
Na osnovu napisanog programa u programskom paketu Proteus nacrtati shemu spoja
zadatog sklopa. Pomoću zadate literature (Pic Mcu Input And Output Device Interfacing) definisati
svaki pojedini pin na LCD displeju. Zadato programsko rješenje problema potrebno je komentarisati i
svaku funkciju posebno analizirati i ukratko opisati. Prepraviti programski kôd tako da pravilno
ispisuje kompletnu poruku “Srednja Elektrotehnicka Skola Bihac”. Izvršit simulaciju rada cjelokupnog
rješenja i ispraviti eventualne pogreške.

Programski kôd:
Lcd_Init();
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit; Lcd_Cmd(_LCD_CLEAR);
sbit LCD_D4 at RB0_bit; Lcd_Cmd(_LCD_CURSOR_OFF);
sbit LCD_D5 at RB1_bit; Lcd_Out(1,6,txt3);
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit; Lcd_Out(2,6,txt4);
Delay_ms(2000);
sbit LCD_RS_Direction at TRISB4_bit; Lcd_Cmd(_LCD_CLEAR);
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit; Lcd_Out(1,1,txt1);
sbit LCD_D5_Direction at TRISB1_bit; Lcd_Out(2,5,txt2);
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit; Delay_ms(2000);

char txt1[] = "Srednja"; for(i=0; i<4; i++) {


char txt2[] = "Elektrotehnicka"; Lcd_Cmd(_LCD_SHIFT_RIGHT);
char txt3[] = "Skola"; Move_Delay();
char txt4[] = "Bihac"; }

char i; while(1) {
for(i=0; i<8; i++) {
void Move_Delay() { Lcd_Cmd(_LCD_SHIFT_LEFT);
Delay_ms(500); Move_Delay();
} }

void main(){ for(i=0; i<8; i++) {


ANSEL = 0; Lcd_Cmd(_LCD_SHIFT_RIGHT);
ANSELH = 0; Move_Delay();
C1ON_bit = 0; }
C2ON_bit = 0; }
}

17
Laboratorijska vježba br.8
Naziv vježbe: Manuelno upravljanje brojem okretaja istosmjernog
motora korištenjem PWM (Pulse Width Modulation) modulacije

Zadatak: Potrebno je osmisliti algoritam upravljanja brojem okretaja motora


istosmjerne struje koristeći PWM (objasniti) modulaciju. Mikrokontroler treba na osnovu
stanja tastera koji se nalaze prikopčani na PORTu-A da poveća ili smanji DC (Duty Cycle) od 0-
100%. Na taj način se regulira struja kroz armaturu motora, a samim tim i broj okretaja. Za
PWM izlaz koristiti RC2 pin mikrokontrolera. U MikroC-u napisati softversko rješenje
problema, a simulaciju rada cjelokupnog sistema izvršiti u Proteus-u.

Implementacija: Napraviti novi projekat( u MikroC-u) pod nazivom PWM i spremiti ga


na za to predviđenu lokaciju. Prekucati dole napisani kôd i izvršiti kompajliranje. Ispraviti
eventualne greške. Napisati programske komentare za svaku liniju ili blok kôda.

sbit LCD_RS at RB4_bit; TRISA = 0;


sbit LCD_EN at RB5_bit; PORTB = 0;
sbit LCD_D4 at RB0_bit; TRISB = 0;
sbit LCD_D5 at RB1_bit; PORTC = 0;
sbit LCD_D6 at RB2_bit; TRISC = 0;
sbit LCD_D7 at RB3_bit; PWM1_Init(500);
}
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit; void main() {
sbit LCD_D4_Direction at TRISB0_bit; InitMain();
sbit LCD_D5_Direction at TRISB1_bit; current_duty = 220;
sbit LCD_D6_Direction at TRISB2_bit; PWM1_Start();
sbit LCD_D7_Direction at TRISB3_bit; PWM1_Set_Duty(current_duty);
Lcd_Init();
unsigned short current_duty, Lcd_Cmd(_LCD_CLEAR);
old_duty, current_duty1, old_duty1; Lcd_Cmd(_LCD_CURSOR_OFF);
void LCD(unsigned short DC){ Lcd_Out(1,1,"DC[%]:");
char text[4]; LCD(100-current_duty/2.55);
char text1[4]; while (1) {
ByteToStr(DC, text); if (RA0_bit) {
Lcd_Out(1,7,text); Delay_ms(30);
Lcd_Out(2,1,"Freq[Hz]:"); current_duty--;
Lcd_Out(2,10,"500"); LCD(100-current_duty/2.55);
} PWM1_Set_Duty(current_duty);
void InitMain() {
ANSEL = 0; }
ANSELH = 0; if (RA1_bit) {
C1ON_bit = 0; Delay_ms(30);
C2ON_bit = 0; current_duty++;
PORTA = 0; LCD(100-current_duty/2.55);

18
PWM1_Set_Duty(current_duty); }
} }
Delay_ms(25);

Napraviti novi projekat pod nazivom PWM u programskom paketu Proteus prema
shemi. Izvršiti učitavanje pwm.hex fajla u simulator i izvršiti simulaciju. Šta se može zaključiti iz
rezultata simulacije. Objasniti prednosti korištenja tzv. prekidačkog načina rada tranzistora
nad linearnim. Koji je način upravljanja motorom efikasniji i zašto? (koristiti Internet)

LCD1
LM016L
VDD
VSS

VEE

RW
RS

D0
D1
D2
D3
D4
D5
D6
D7

D
E

B
1
2
3

4
5
6

7
8
9
10
11
12
13
14

+88.8
B1
12V

B2
12V

D1
UF4004

U1 R4 Q2
1 15 1k BC547
RE3/MCLR/VPP RC0/T1OSO/T1CKI
16
RC1/T1OSI/CCP2
2
RA0/AN0/ULPWU/C12IN0- RC2/P1A/CCP1
17 Q1
3 18 R2 IRF540Z
RA1/AN1/C12IN1- RC3/SCK/SCL
4 23
RA2/AN2/VREF-/CVREF/C2IN+ RC4/SDI/SDA
5 24 10
RA3/AN3/VREF+/C1IN+ RC5/SDO
6
RA4/T0CKI/C1OUT RC6/TX/CK
25 R5 Q4
7
RA5/AN4/SS/C2OUT RC7/RX/DT
26 BC547 Q3
14 1k BC557
RA6/OSC2/CLKOUT
13 19
RA7/OSC1/CLKIN RD0
20
RD1
33 21
RB0/AN12/INT RD2
34 22
RB1/AN10/C12IN3- RD3
35 27
RB2/AN8 RD4

+88.8
Amps
36 28
RB3/AN9/PGM/C12IN2- RD5/P1B
37 29
RB4/AN11 RD6/P1C
38 30
RB5/AN13/T1G RD7/P1D
39
RB6/ICSPCLK
40 8
RB7/ICSPDAT RE0/AN5
9
RE1/AN6
RE2/AN7
10 R3
0.39
PIC16F887

Shema u Proteusu

Nakon izvršenih simulacija, spojiti sklop na matador ploči, izvršiti spajanje sa razvojnim
sistemom, učitati hex kôd u mikrokontroler, pokrenuti rad sistema i analizirati dobivene
rezultate.

19

You might also like