Upload
iulian-ungureanu
View
80
Download
1
Embed Size (px)
DESCRIPTION
science
Citation preview
Laboratorul 1Lucrarea 1: Conectarea programatorului ICSP. Setarea porturilor în mod iesire NI
VEL
1
Obiective:1. Conectarea unui programator PICkit 2 sau PICkit 3 la un microcontroler2. Compilarea unui program scris în mediul MikroC3. Scrierea codului HEX în memoria program a microcontrolerului4. Alimentarea microcontrolerului de la programatorul PICkit 2 / PICkit 3
PIC12F675
GP2
LED1
R1330R
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC12F675 si frecventa ceasului de 4 MHz - setarea în Edit Project a sursei de ceas de tip Internal RC no Clock - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
A KSIL51 5
Exemplu de conectare:
PIC12F675
5
PIC12F675
Registrii specifici:ANSELTRISIO
GPIO
Listã de componente:x1x1x1
LED 20mAR1 = 330RIC1 = PIC12F675
Laboratorul 1Lucrarea 1: Conectarea programatorului ICSP. Setarea porturilor în mod iesireNI
VEL
1
Exemple de cod:1. Setarea valorii unui port
2. Modificarea periodica a valorii unui port
6
void main() { ANSEL.B2=0; // Setare port GP2 in mod digital TRISIO.B2=0; // Setare port GP2 in mod iesire GPIO.B2=0; // Setare port GP2 in 1 logic}
void main() { ANSEL.B2=0; // Setare port GP2 in mod digital TRISIO.B2=0; // Setare port GP2 in mod iesire while(1){ GPIO.B2=1; // Setare port GP2 in 1 logic delay_ms(500); // Asteptare 500 ms GPIO.B2=0; // Setare port GP2 in 0 logic delay_ms(500); // Asteptare 500 ms }}
Laboratorul 1Lucrarea 2: Setarea porturilor în mod intrare NI
VEL
1
Obiective:1. Conectarea unui dispozitiv de intrare la portul unui microcontroler2. Operarea cu porturile în modul intrare
PIC12F675
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC12F675 si frecventa ceasului de 4 MHz - setarea în Edit Project a sursei de ceas de tip Internal RC no Clock - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Exemplu de conectare:
Registrii specifici:ANSELTRISIO
GPIO
7
PIC12F675
GP5
R210K
SW1
VDD
GP2
LED1
R1330R
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
Listã de componente:x1x1x1x1x1
LED 20mAR1 = 330RR2 = 10KIC1 = PIC12F675Pushbutton Switch
A KSIL51 5
PIC12F675
Laboratorul 1Lucrarea 2: Setarea porturilor în mod intrareNI
VEL
1
Exemple de cod:1. Repetarea la un port de iesire a valorii citite de la un port de intrare
8
void main() { ANSEL.B2=0; // Setare port GP2 in mod digital TRISIO.B2=0; // Setare port GP2 in mod iesire ANSEL.B5=0; // Setare port GP5 in mod digital TRISIO.B5=1; // Setare port GP5 in mod intrare while(1){ GPIO.B2=GPIO.B5; // Starea logica a GP2 identica cu GP5 }}
Laboratorul 2Lucrarea 1: Operarea cu oscilator extern de tip RC NI
VEL
1
Obiective:1. Setarea ceasului principal al unui microcontroler în modul oscilator extern de tip RC2. Aprinderea si stingerea succesivã a unui LED conectat la un port în mod iesire
PIC16F88
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F88 si frecventa ceasului de 0.001 MHz - setarea în Edit Project a sursei de ceas de tip EXTRC -OSC2 as Clock Out - dezactivarea în Edit Project a optiunii Fail-Safe Clock Monitor Enable - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea pe osciloscop a semnalului de la pinul OSC2 al microcontrolerului
Exemplu de conectare:
9
Listã de componente:x1x1x1x1x1
LED 20mAR1 = 330RR2 = 6K8C1 = 150nFIC1 = PIC16F88
PIC16F88
RA2
LED1
OSC1R16K8
R2330R
C1150nF
VSS
VDD
VPP
PGC
PGD
OSC2
VPP
VDD
GND
PGD
PGC
ICSP
1
5
VDD
SIL5 51
AK
.15
PIC16F88
Registrii specifici:ANSELTRISA
PORTAOSCCON
Laboratorul 2Lucrarea 1: Operarea cu oscilator extern de tip RCNI
VEL
1
Exemple de cod:1. Repetarea la un port de iesire a valorii citite de la un port de intrare
10
void main() { ANSEL=0; // Setare mod digital TRISA.B2=0; // Setare port in mod ieşire OSCCON.SCS1=0; // Sursă de ceas definită prin FOSC2:FOSC0 OSCCON.SCS0=0; while(1){ // Buclă infinită PORTA.B2=1; // Setare port în stare 1 logic delay_ms(500); // Pauză de 500 ms PORTA.B2=0; // Setare port în stare 0 logic delay_ms(500); // Pauză de 500 ms }}
Laboratorul 2Lucrarea 2: Operarea cu oscilator extern cu cuart/rezonator ceramic NI
VEL
1
Obiective:1. Setarea ceasului principal al unui microcontroler în modul oscilator extern cu cuart sau rezonator ceramic2. Aprinderea si stingerea succesivã a unui LED conectat la un port în mod iesire
PIC16F88
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F88 si frecventa ceasului de 8 MHz - setarea în Edit Project a sursei de ceas de tip HS - dezactivarea în Edit Project a optiunii Fail-Safe Clock Monitor Enable - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Exemplu de conectare:
11
Listã de componente:x1x1x2x1x1
LED 20mAR1 = 330RC1, 2 = 22pFCuarţ de 8 MHzIC1 = PIC16F88
PIC16F88
RA2
VSS
VDD
VPP
PGC
LED1
PGD
OSC1
R1330R
OSC2
XTAL18MHz
C122pF
C222pF
VPP
VDD
GND
PGD
PGC
ICSP
1
5
SIL51 5
AK
8.00
0MHz
22p 22p
PIC16F88
Registrii specifici:ANSELTRISA
PORTAOSCCON
Laboratorul 2Lucrarea 2: Operarea cu oscilator extern cu cuart/rezonator ceramicNI
VEL
1
Exemple de cod:1. Repetarea la un port de iesire a valorii citite de la un port de intrare
12
void main() { ANSEL=0; // Setare mod digital TRISA.B2=0; // Setare port in mod ieşire OSCCON.SCS1=0; // Sursă de ceas definită prin FOSC2:FOSC0 OSCCON.SCS0=0; while(1){ // Buclă infinită PORTA.B2=1; // Setare port în stare 1 logic delay_ms(500); // Pauză de 500 ms PORTA.B2=0; // Setare port în stare 0 logic delay_ms(500); // Pauză de 500 ms }}
Laboratorul 2Lucrarea 3: Operarea cu generator extern de ceas NI
VEL
1
Obiective:1. Setarea ceasului principal al unui microcontroler în modul generator extern2. Aprinderea si stingerea succesivã a unui LED conectat la un port în mod iesire
PIC16F88
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F88 si frecventa ceasului de 0.032768 MHz - setarea în Edit Project a sursei de ceas de tip EXTCLK as Port IO - dezactivarea în Edit Project a optiunii Fail-Safe Clock Monitor Enable - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea pe osciloscop a semnalului de la pinul 32kHz al generatorului extern DS32kHz
Exemplu de conectare:
Registrii specifici:ANSELTRISA
PORTAOSCCON
13
Listã de componente:x1x1x1x1
LED 20mAR1 = 330RIC1 = PIC16F88IC2 = DS32kHz
PIC16F88
RA2
VSS
VDD
VPP VPP
VDD
GND
PGD
PGC
ICSP
1
5PGC
LED1
PGD
OSC1
R1330R
DS32kHz
VCC
GND
32kHzVDD
DS32KHZ
32kHz
5V
GND
DS32kHz
SIL51 5
AK
PIC16F88DS32KHz
Laboratorul 2Lucrarea 3: Operarea cu generator extern de ceasNI
VEL
1
Exemple de cod:1. Repetarea la un port de iesire a valorii citite de la un port de intrare
14
void main() { ANSEL=0; // Setare mod digital TRISA.B2=0; // Setare port in mod ieşire OSCCON.SCS1=0; // Sursă de ceas definită prin FOSC2:FOSC0 OSCCON.SCS0=0; while(1){ // Buclă infinită PORTA.B2=1; // Setare port în stare 1 logic delay_ms(500); // Pauză de 500 ms PORTA.B2=0; // Setare port în stare 0 logic delay_ms(500); // Pauză de 500 ms }}
Laboratorul 3Lucrarea 1: Operarea cu generatorul intern de ceas (HF). Afisorul cu 7 segmente NI
VEL
1
Obiective:1. Setarea ceasului principal al unui microcontroler în modul generator intern2. Comanda unui afisor cu 7 segmente de tip anod comun
PIC16F88
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F88 si frecventa ceasului intern cu oscilator de înaltă frecvenţă (HF) - setarea în Edit Project a sursei de ceas de tip INTRC -OSC2 as RA6 - dezactivarea în Edit Project a optiunii Fail-Safe Clock Monitor Enable - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea succesiva a diferite caractere/digiti
SIL51 5
Exemplu de conectare:
Registrii specifici:ANSELTRISB
PORTBOSCCON
15
Listã de componente:x1x8x1
Afisor MDE1123R1..8 = 330RIC1 = PIC16F88
PIC16F88
VSS
VDD
VPP VPP
VDD
GND
PGD
PGC
ICSP
1
5PGC
PGD
RB7
RB0
R1..R88x330R
7-seg. CA
CA
a
VDD
RB6RB5RB4RB3RB2RB1
cdefgdp
b
CA
b
g
c
dp
d
a
f
CA
e
MDE1123a
c
d
e
f g
dp
b
PIC16F88
Laboratorul 3Lucrarea 1: Operarea cu generatorul intern de ceas (HF). Afisorul cu 7 segmenteNI
VEL
1
Exemple de cod:1. Afisarea constanta a unui singur caracter
2. Afisarea succesiva a doua caractere la interval de 500 ms
16
void main() { ANSEL=0; // Setare mod digital TRISB=0; // Setare port in mod iesire OSCCON.SCS1=0; // Sursă de ceas definită prin FOSC2:FOSC0 OSCCON.SCS0=0; OSCCON.IRCF2=1; // Ceas de 8 MHz OSCCON.IRCF1=1; OSCCON.IRCF0=1; PORTB=0b10001000; // Caracterul A pentru anod comun}
void main() { ANSEL=0; // Setare mod digital TRISB=0; // Setare port in mod iesire OSCCON=0b00110000; // Ceas intern de 4 MHz while(1){ PORTB=0b10000000; // Caracterul 0 (anod comun) delay_ms(500); PORTB=0b11111001; // Caracterul 1 (anod comun) delay_ms(500); }}
Laboratorul 3Lucrarea 2: Operarea cu generatorul intern de ceas (LF). Comanda unui releu NI
VEL
1
Obiective:1. Setarea ceasului principal al unui microcontroler în modul generator intern2. Comanda unui releu pentru aprinderea unui LED de la o tensiune externã de 12V
PIC16F88
Exemplu de conectare:
Registrii specifici:ANSELTRISB
PORTBOSCCON
17
Listã de componente:x1x1x1x1x1x1
Releu 12V DCLED 20 mAR1 = 10KR2 = 560RQ1 = BC337IC1 = PIC16F88
PIC16F88
VSS
VDD
VPP VPP
VDD
GND
PGD
PGC
ICSP
1
5PGC
PGD
RB0
R1
10K
Q1BC337
12VLED1
R2
560R12V
NOCOM
L1
L2
12V DC250V~ AC
L2
COM
L1
NC
NO
BC337
C B E
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F88 si frecventa ceasului intern cu oscilator de joasă frecvenţă (LF) - setarea în Edit Project a sursei de ceas de tip INTRC -OSC2 as RA6 - dezactivarea în Edit Project a optiunii Fail-Safe Clock Monitor Enable - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea succesiva a diferite caractere/digiti
SIL51 5
PIC16F8812V DC
250V~ AC
BC337
12V DC
AK
Laboratorul 3Lucrarea 2: Operarea cu generatorul intern de ceas (LF). Comanda unui releuNI
VEL
1
Exemple de cod:1. Mentinerea constantã a releului pornit
2. Pornirea si oprirea succesivã a releului la interval de 500 ms
18
void main() { OSCCON.SCS1=0; // Sursă de ceas definită prin FOSC2:FOSC0 OSCCON.SCS0=0; OSCCON.IRCF2=0; // Ceas intern de 31.25 kHz OSCCON.IRCF1=0; OSCCON.IRCF0=0; ANSEL.B0=0; // Setare port RB0 în mod digital TRISB.B0=0; // Setare port RB0 în mod ieşire PORTB.B0=1; // Setare port RB0 în 1 logic}
void main() { OSCCON=0b00000000; // Ceas intern de 31.25 kHz ANSEL.B0=0; // Setare port RB0 în mod digital TRISB.B0=0; // Setare port RB0 în mod ieşire while(1){ PORTB.B0=1; // Setare port RB0 în 1 logic delay_ms(500); PORTB.B0=0; // Setare port RB0 în 1 logic delay_ms(500); }}
Laboratorul 4Lucrarea 1: Operarea cu întreruperea internã INT NI
VEL
1
Obiective:1. Operarea cu întreruperea internã INT2. Modificarea stãrii unui port la apãsarea unui buton cuplat la portul INT3. Circuite de debouncing hardware
PIC16F684
Exemplu de conectare:
Registrii specifici:INTCON
19
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F684 si frecventa ceasului intern la alegere - setarea în Edit Project a sursei de ceas de tip INTERNAL RC No Clock - dezactivarea în Edit Project a optiunii Monitor Clock Fail-Safe - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
PIC16F684
INT
R210K
SW1
VDD
RC5
LED1
R1330R
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
C1100nF
R310K
D11N4148
Listã de componente:x1x1x1x2x1x1x1
LED 20 mAR1 = 330RC1 = 100nFR2, R3 = 10KD1 = 1N4148IC1 = PIC16F684Pushbutton Switch
K1 K2
K1 K2
K1 K2
SIL51 5
PIC16F684
A K
.10
Laboratorul 4Lucrarea 1: Operarea cu întreruperea internã INTNI
VEL
1
Exemple de cod:1. Modificarea stãrii portului RC5 la apãsarea butonului cuplat la portul INT
20
void interrupt(){ PORTC.RC5=!PORTC.RC5; // Inversare stare logică port RC5 INTCON.INTF=0; // Revenire din întrerupere }}
void main() { OSCCON.SCS=0; // Sursă de ceas definită prin FOSC2:FOSC0 OSCCON.IRCF2=0; // Ceas intern de 31.25 kHz OSCCON.IRCF1=0; OSCCON.IRCF0=0; ANSEL.RA2=0; // Setare INT în mod digital TRISA.RA2=1; // Setare INT în mod intrare TRISC.RC5=0; // Setare RC5 în mod ieşire INTCON.GIE=1; // Activare întreruperi globale INTCON.INTE=1; // Activare întrerupere internă INT INTCON.INTF=0; // Resetare flag întrerupere internă INT}
Laboratorul 4Lucrarea 2: Operarea cu întreruperea modulului Timer 0 si sursã de ceas Fosc/4 NI
VEL
1
21
Obiective:1. Operarea cu întreruperea modulului Timer 0 si sursã de ceas Fosc/42. Calculul perioadei de generare a întreruperilor3. Generarea de întreruperi periodice
PIC16F684
Exemplu de conectare:
Registrii specifici:OPTION_REG
INTCONTMR0
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F684 si frecventa de 0.03125 MHz - setarea în Edit Project a sursei de ceas de tip INTERNAL RC No Clock - dezactivarea în Edit Project a optiunii Monitor Clock Fail-Safe - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - efectuarea calculelor și a codului pentru o altă perioadă de timp a întreruperilor, la alegere
PIC16F684
RC0
LED1
R1330R
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
Listã de componente:x1x1x1
LED 20 mAR1 = 330RIC1 = PIC16F684
SIL51 5
PIC16F684
A K
Formulã de calcul a perioadei de generare a întreruperilor:
TTMR0 = 4 · TOSC · PS · (256 - TMR0)
Laboratorul 4Lucrarea 2: Operarea cu întreruperea modulului Timer 0 si sursã de ceas Fosc/4NI
VEL
1
22
Exemplu de cod:1. Aprinderea si stingerea alternativã a unui LED la intervale de 0.5 s generate cu întreruperi de la Timer 0
void interrupt(){ PORTC.RC0=!PORTC.RC0; // Inversare stare port RC0 TMR0=14; // Rescriere valoare registru TMR0 INTCON.T0IF=0; // Resetare flag întrerupere Timer 0}
void main() { OSCCON=0b00000000; // Ceas intern de 31.25 kHz ANSEL.B4=0; // Setare RC0 în mod digital TRISC.RC0=0; // Setare RC0 în mod ieşire PORTC.RC0=0; // Setare RC0 în stare 0 logic CMCON0.CM2=1; // Setare RC0 în mod digital al comparatorului analogic CMCON0.CM1=1; CMCON0.CM0=1; OPTION_REG.PS2=0; // Setare prescaler Timer 0 la 1:16 OPTION_REG.PS1=1; OPTION_REG.PS0=1; OPTION_REG.T0CS=0; // Timer 0 utilizează ceasul principal Fosc/4 OPTION_REG.PSA=0; // Prescaler legat la Timer 0 TMR0=14; // Setare valoare registru TMR0 INTCON.GIE=1; // Activare întreruperi globale INTCON.T0IE=1; // Activare întrerupere Timer 0 INTCON.T0IF=0; // Resetare flag întrerupere Timer 0}
Exemplu de calcul pentru TTMR0 = 0.5 s :
a) determinarea produsului 4 · TOSC
4 · TOSC = 4 / 31250 = 0.000128 s
b) determinarea raportului n
n = TTMR0 / 4 · TOSC = 0.5 / 0.000128 = 3906.25
c) alegerea prescalerului PS
PS = 1:16
d) determinarea valorii registrului TMR0
(256 - TMR0) = n / PS = 3906.25 / 16 = 244.140625 ≈ 244 TMR0 = 256 - 244 = 12 TMR0 = TMR0 + 2 = 14 (valoare corectată)
e) verificarea rezultatului
TTMR0 = 4 · TOSC · PS · (256 - TMR0) = 4 / 31250 · 16 · (256 - 12) = 0.499712 s
Laboratorul 4Lucrarea 3: Operarea cu întreruperea modulului Timer 0 si sursã de ceas externã T0CKI NI
VEL
1
23
Obiective:1. Operarea cu întreruperea modulului Timer 0 si sursã de ceas externã T0CKI2. Calculul perioadei de generare a întreruperilor3. Generarea de întreruperi periodice
PIC16F684
Exemplu de conectare:
Registrii specifici:OPTION_REG
INTCONTMR0
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F684 si frecventa ceasului internă la alegere - setarea în Edit Project a sursei de ceas de tip INTERNAL RC No Clock - dezactivarea în Edit Project a optiunii Monitor Clock Fail-Safe - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - efectuarea calculelor și a codului pentru o altă perioadă de timp a întreruperilor, la alegere
Listã de componente:x1x1x1x1
LED 20 mAR1 = 330RIC1 = PIC16F684IC2 = DS32kHz
SIL51 5
PIC16F684
A K
Formulã de calcul a perioadei de generare a întreruperilor:
TTMR0 = TT0CKI · PS · (256 - TMR0)
PIC16F684
RC0
VSS
VDD
VPP VPP
VDD
GND
PGD
PGC
ICSP
1
5ICSPCLK
LED1
ICSPDAT
T0CKI
R1330R
DS32kHz
VCC
GND
32kHzVDD
DS32KHz
DS32KHZ
32kHz
5V
GND
DS32kHz
Laboratorul 4Lucrarea 3: Operarea cu întreruperea modulului Timer 0 si sursã de ceas externã T0CKINI
VEL
1
24
Exemplu de cod:1. Aprinderea si stingerea alternativã a unui LED la intervale de 0.5 s generate cu întreruperi de la Timer 0
void interrupt(){ PORTC.RC0=!PORTC.RC0; // Inversare stare port RC0 TMR0=2; // Rescriere valoare registru TMR0 INTCON.T0IF=0; // Resetare flag întrerupere Timer 0}
void main() { OSCCON=0b01110000; // Ceas intern de 8 MHz ANSEL.B2=0; // Setare T0CKI în mod digital ANSEL.B4=0; // Setare RC0 în mod digital TRISC.RC0=0; // Setare RC0 în mod ieşire PORTC.RC0=0; // Setare RC0 în stare 0 logic TRISA.RA2=1; // Setare T0CKI în mod intrare CMCON0.CM2=1; // Setare RC0 în mod digital al comparatorului analogic CMCON0.CM1=1; CMCON0.CM0=1; OPTION_REG.PS2=1; // Setare prescaler Timer 0 la 1:64 OPTION_REG.PS1=0; OPTION_REG.PS0=1; OPTION_REG.T0CS=1; // Timer 0 utilizează semnalul de la portul T0CKI OPTION_REG.PSA=0; // Prescaler legat la Timer 0 TMR0=2; // Setare valoare registru TMR0 INTCON.GIE=1; // Activare întreruperi globale INTCON.T0IE=1; // Activare întrerupere Timer 0 INTCON.T0IF=0; // Resetare flag întrerupere Timer 0}
Exemplu de calcul pentru TTMR0 = 0.5 s :
a) determinarea raportului n
n = TTMR0 / TT0CKI = 0.5 · 32768 = 16384
b) alegerea prescalerului PS
PS = 1:64
c) determinarea valorii registrului TMR0
(256 - TMR0) = n / PS = 16384 / 64 = 256 TMR0 = 256 - 256 = 0 TMR0 = TMR0 + 2 = 2 (valoare corectată)
d) verificarea rezultatului
TTMR0 = TT0CKI · PS · (256 - TMR0) = (1 / 32768) · 64 · (256 - 0) = 0.5 s
Laboratorul 4Lucrarea 4: Operarea cu întreruperea modulului Timer 1 si sursã de ceas Fosc/4 NI
VEL
1
25
Obiective:1. Operarea cu întreruperea modulului Timer 1 si sursã de ceas Fosc/42. Calculul perioadei de generare a întreruperilor3. Generarea de întreruperi periodice
PIC16F684
Exemplu de conectare:
Registrii specifici:INTCONT1CON
TMR1HTMR1L
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F684 si frecventa de 1 MHz - setarea în Edit Project a sursei de ceas de tip INTERNAL RC No Clock - dezactivarea în Edit Project a optiunii Monitor Clock Fail-Safe - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - efectuarea calculelor și a codului pentru o altă perioadă de timp a întreruperilor, la alegere
PIC16F684
RC0
LED1
R1330R
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
Listã de componente:x1x1x1
LED 20 mAR1 = 330RIC1 = PIC16F684
SIL51 5
PIC16F684
A K
Formulã de calcul a perioadei de generare a întreruperilor:
TTMR1 = 4 · TOSC · PS · (65536 - TMR1)
Laboratorul 4Lucrarea 4: Operarea cu întreruperea modulului Timer 1 si sursã de ceas Fosc/4NI
VEL
1
26
Exemplu de cod:1. Aprinderea si stingerea alternativã a unui LED la intervale de 0.5 s generate cu întreruperi de la Timer 1
void interrupt(){ PORTC.RC0=!PORTC.RC0; // Inversare stare port RC0 TMR1H=194; // Rescriere valoare registru TMR1 TMR1L=247; PIR1.TMR1IF=0; // Resetare flag întrerupere Timer 1}
void main() { OSCCON=0b01000000; // Ceas intern de 1 MHz ANSEL.B4=0; // Setare RC0 în mod digital TRISC.RC0=0; // Setare RC0 în mod ieşire PORTC.RC0=0; // Setare RC0 în stare 0 logic CMCON0.CM2=1; // Setare RC0 în mod digital al comparatorului analogic CMCON0.CM1=1; CMCON0.CM0=1; T1CON.T1CKPS1=1; // Setare prescaler Timer 1 la 1:8 T1CON.T1CKPS0=1; T1CON.TMR1CS=0; // Timer 1 utilizează ceasul principal Fosc/4 T1CON.TMR1ON=1; // Pornire Timer 1 TMR1H=194; // Setare valoare registru TMR1 TMR1L=247; INTCON=0b11000000; // Activare întreruperi globale și periferice PIE1.TMR1IE=1; // Activare întrerupere Timer 1 PIR1.TMR1IF=0; // Resetare flag întrerupere Timer 1}
Exemplu de calcul pentru TTMR0 = 0.5 s :
a) determinarea produsului 4 · TOSC
4 · TOSC = 4 / 1000000 = 0.000004 s
b) determinarea raportului n
n = TTMR0 / 4 · TOSC = 0.5 / 0.000004 = 125000 = 8 · 15625 = 4 · 31250 = 2 · 62500
c) alegerea prescalerului PS
PS = 1:8
d) determinarea valorii registrului TMR1
(65536 - TMR1) = n / PS = 15625 TMR1 = 49911 TMR1H = | TMR1 / 256 | = | 49911 / 256 | = | 194.96484375 | = 194 TMR1L = TMR1 - 256*TMR1H = 49911 - 49664 = 247
e) verificarea rezultatului
TTMR0 = 4 · TOSC · PS · (65536 - TMR1) = 4 / 1000000 · 8 · (65536 - 49911) = 0.5 s
Laboratorul 4Lucrarea 5: Operarea cu întreruperea modulului Timer 2 NI
VEL
1
27
Obiective:1. Operarea cu întreruperea modulului Timer 22. Calculul perioadei de generare a întreruperilor3. Generarea de întreruperi periodice
PIC16F684
Exemplu de conectare:
Registrii specifici:INTCONT2CON
PR2
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F684 si frecventa de 0.5 MHz - setarea în Edit Project a sursei de ceas de tip INTERNAL RC No Clock - dezactivarea în Edit Project a optiunii Monitor Clock Fail-Safe - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - efectuarea calculelor și a codului pentru o altă perioadă de timp a întreruperilor, la alegere
PIC16F684
RC0
LED1
R1330R
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
Listã de componente:x1x1x1
LED 20 mAR1 = 330RIC1 = PIC16F684
SIL51 5
PIC16F684
A K
Formulã de calcul a perioadei de generare a întreruperilor:
TTMR2 = 4 · TOSC · PreS · PostS · PR2
Laboratorul 4Lucrarea 5: Operarea cu întreruperea modulului Timer 2NI
VEL
1
28
Exemplu de cod:1. Aprinderea si stingerea alternativã a unui LED la intervale de 0.5 s generate cu întreruperi de la Timer 2
void interrupt(){ PORTC.RC0=!PORTC.RC0; // Inversare stare port RC0 PIR1.TMR2IF=0; // Resetare flag întrerupere Timer 2}
void main() { OSCCON=0b00110000; // Ceas intern de 500 kHz ANSEL=0; // Setare porturi digitale TRISC.RC0=0; // Setare RC0 în mod ieşire PORTC.RC0=0; // Setare RC0 în stare 0 logic CMCON0.CM2=1; CMCON0.CM1=1; CMCON0.CM0=1; T2CON.T2CKPS1=1; // Setare valoare prescaler la 1:16 T2CON.T2CKPS0=1; T2CON.TOUTPS3=1; // Setare valoare postscaler la 1:16 T2CON.TOUTPS2=1; T2CON.TOUTPS1=1; T2CON.TOUTPS0=1; T2CON.TMR2ON=1; // Pornire Timer 2 PR2=243; // Setare valoare registru PR2 INTCON=0b11000000; // Activare întreruperi globale și periferice PIE1.TMR2IE=1; // Activare întrerupere Timer 2 PIR1.TMR2IF=0; // Resetare flag întrerupere Timer 2}
Exemplu de calcul pentru TTMR0 = 0.5 s :
a) determinarea produsului 4 · TOSC
4 · TOSC = 4 / 500000 = 0.000008 s
b) determinarea raportului n
n = TTMR2 / 4 · TOSC = 0.5 / 0.000008 = 62500
c) alegerea prescalerului PresS si a postscalerului PostS
PreS = 1:16, PostS = 1:16
d) determinarea valorii registrului PR2
PR2 = n / PreS / PostS = 62500 / 256 = 244.140625 ≈ 244 PR2 = PR2 - 1 = 243 (valoare corectată)
e) verificarea rezultatului
TTMR2 = 4 · TOSC · PreS · PostS · PR2 = 4 / 500000 · 16 · 16 · 244 = 0.499712 s
Laboratorul 4Lucrarea 6: Decodor pentru potentiometru digital cu codare
29
Obiective:1. Generarea unei secvente de comandã a motoarelor pas-cu-pas unipolare2. Calculul vitezei de rotatie a axului motorului3. Generarea de secvente de comandã simple, duble si mixte
PIC16F684
Exemplu de conectare:
Registrii specifici:INTCON
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F684 si frecventa calculată - setarea în Edit Project a sursei de ceas de tip INTERNAL RC No Clock - dezactivarea în Edit Project a optiunii Monitor Clock Fail-Safe - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Listã de componente:x1x1x2
IC1 = PIC16F684STEC12E07R1, R2 = 5K
SIL51 5
PIC16F684
NIVE
L 2
PIC16F684
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
INT
RB1
VDD
R15K
R25K
Encoder
A B
C
Laboratorul 4Lucrarea 6: Decodor pentru potentiometru digital cu codare
30
NIVE
L 2
Laboratorul 5Lucrarea 1: Operarea cu modulul ECCP în modul capturã NI
VEL
1
Obiective:1. Operarea cu modulul ECCP în modul capturã (Capture)2. Generarea de întreruperi la evenimente externe de tip apãsare de buton
PIC16F684
Exemplu de conectare:
Registrii specifici:CCP1CON
CCPR1HCCPR1L
PIE1 PIR1
31
Listã de componente:x1x1x1x2x1x1x1
LED 20 mAR1 = 330RC1 = 100nFR2, R3 = 10KD1 = 1N4148IC1 = PIC16F684Pushbutton Switch
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F684 si frecventa ceasului intern la alegere - setarea în Edit Project a sursei de ceas de tip INTERNAL RC No Clock - dezactivarea în Edit Project a optiunii Monitor Clock Fail-Safe - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea succesiva a celor patru moduri diferite de functionare: a) captură la fiecare front descrescător b) captură la fiecare front crescător c) captură la fiecare al 4-lea front ccrescător d) captură la fiecare al 16-lea front crescător
PIC16F684
P1A
R210K
SW1
VDD
RC2
LED1
R1330R
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
A K
SIL51 5
PIC16F684
C1100nF
.10
R310K
D11N4148
K1 K2
K1 K2
K1 K2
Laboratorul 5Lucrarea 1: Operarea cu modulul ECCP în modul capturãNI
VEL
1
Exemple de cod:1. Generare de întrerupere la fiecare front descrescãtor
2. Generare de întrerupere la fiecare al 4-lea front crescãtor
32
void interrupt(){ PORTC.RC2=!PORTC.RC2; // Inversare stare logică port RC3 PIR1.CCP1IF=0; // Revenire din întrerupere}
void main() { OSCCON.SCS=0; // Sursă de ceas definită prin FOSC2:FOSC0 OSCCON.IRCF2=1; // Ceas intern de 8 MHz OSCCON.IRCF1=1; OSCCON.IRCF0=1; ANSEL=0; // Toate porturile în modul digital TRISC.RC5=1; // Setare port RC5/P1A în mod intrare TRISC.RC2=0; // Setare port RC2 în mod ieşire CCP1CON.CCP1M3=0; // Operare în mod captură, la fiecare front descrescător CCP1CON.CCP1M2=1; CCP1CON.CCP1M1=0; CCP1CON.CCP1M0=0; INTCON.GIE=1; // Activare întreruperi globale INTCON.PEIE=1; // Activare întreruperi periferice PIE1.CCP1IE=1; // Activare întrerupere modul CCP PIR1.CCP1IF=0; // Resetare flag întrerupere modul CCP }
void interrupt(){ PORTC.RC2=!PORTC.RC2; // Inversare stare logică port RC3 PIR1.CCP1IF=0; // Revenire din întrerupere}
void main() { OSCCON.SCS=0; // Sursă de ceas definită prin FOSC2:FOSC0 OSCCON.IRCF2=1; // Ceas intern de 8 MHz OSCCON.IRCF1=1; OSCCON.IRCF0=1; ANSEL=0; // Toate porturile în modul digital TRISC.RC5=1; // Setare port RC5/P1A în mod intrare TRISC.RC2=0; // Setare port RC2 în mod ieşire CCP1CON.CCP1M3=0; // Operare în mod captură, CCP1CON.CCP1M2=1; // la fiecare al 4-lea front crescător CCP1CON.CCP1M1=1; CCP1CON.CCP1M0=0; INTCON.GIE=1; // Activare întreruperi globale INTCON.PEIE=1; // Activare întreruperi periferice PIE1.CCP1IE=1; // Activare întrerupere modul CCP PIR1.CCP1IF=0; // Resetare flag întrerupere modul CCP }
Laboratorul 5Lucrarea 2: Operarea cu modulul ECCP în modul comparare NI
VEL
1
Obiective:1. Operarea cu modulul ECCP în modul comparare (Compare)2. Generarea unei întreruperi si modificarea stãrii unui port la un interval predefinit dupã apãsarea unui buton
PIC16F684
Exemplu de conectare:
Registrii specifici:CCP1CON
CCPR1HCCPR1L
PIE1 PIR1
33
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F684 si frecventa ceasului intern de 500 kHz - setarea în Edit Project a sursei de ceas de tip INTERNAL RC No Clock - dezactivarea în Edit Project a optiunii Monitor Clock Fail-Safe - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
PIC16F684
INT
R210K
SW1
VDD
P1A
LED1
R1330R
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
C1100nF
R310K
D11N4148
Listã de componente:x1x1x1x2x1x1x1
LED 20 mAR1 = 330RC1 = 100nFR2, R3 = 10KD1 = 1N4148IC1 = PIC16F684Pushbutton Switch
K1 K2
K1 K2
K1 K2
SIL51 5
PIC16F684
A K
.10
Formulã de calcul a duratei:
TCCP1 = 4 · TOSC · T1CKPS · (1+CCPR1L) · (1+CCPR1H)
Laboratorul 5Lucrarea 2: Operarea cu modulul ECCP în modul comparareNI
VEL
1
Exemplu de cod:1. Aprinderea sau stingerea unui LED conectat la portul P1A la o perioadã de timp scursã de la apãsarea unui buton conectat la portul INT
34
void interrupt(){ if (INTCON.INTF==1){ // Verificare apăsare buton la portul INT PIE1.CCP1IE=1; // Activare întrerupere a modulului CCP CCP1CON.CCP1M3=1; // Setare CCP în modul Compare CCP1CON.CCP1M0=!CCP1CON.CCP1M0; // Alternare setare sau resetare stare port P1A T1CON.TMR1ON=1; // Pornire Timer 1 } if (PIR1.CCP1IF==1){ // Verificare întrerupere generată de CCP PIE1.CCP1IE=0; // Dezactivare întrerupere a modulului CCP T1CON.TMR1ON=0; // Oprire Timer 1 } PIR1.CCP1IF=0; // Resetare flag întrerupere modul CCP INTCON.INTF=0; // Resetare flag întrerupere INT}
void main() { OSCCON=0b00110000; // Ceas intern de 500 kHz ANSEL.RA2=0; // Setare port INT în modul digital TRISA.RA2=1; // Setare port INT in mod intrare TRISC.RC5=0; // Setare port P1A in mod ieşire PORTC.RC5=0; T1CON.T1CKPS1=1; // Setare prescaler Timer1 la 1:16 T1CON.T1CKPS0=1; T1CON.TMR1ON=0; // Timer 1 oprit CCPR1H=249; // Setare valori regiştrii de comparare CCPR1L=249; CCP1CON=0b00000001; // Modulul CCP oprit INTCON=0b11010000; // Activare întreruperi globale, periferice şi INT}
Exemplu de calcul:
TCCP1 = 4 · TOSC · T1CKPS · (1+CCPR1L) · (1+CCPR1H) = 4 / 500000 · 8 · (1+249) · (1+249) = 4 s
Laboratorul 5Lucrarea 3: Operarea cu modulul ECCP în modul PWM cu o singurã iesire NI
VEL
1
Obiective:1. Operarea cu modulul ECCP în modul generator de semnal PWM cu iesire simplã2. Generarea unei semnal PWM cu perioadã de 20 ms si durata impulsului între 1.2 si 1.8 ms pentru comanda unui motor servo
PIC16F684
Exemplu de conectare:
Registrii specifici:CCP1CON
CCPR1LT2CON
PR2
35
Listã de componente:x1x1
IC1 = PIC16F684Servo Hitec HS-422
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F684 si frecventa de 0.125 MHz - setarea în Edit Project a sursei de ceas de tip INTRC -OSC2 as RA6 - dezactivarea în Edit Project a optiunii Fail-Safe Clock Monitor Enable - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea pe osciloscop a semnalelor PWM generate
PIC16F684
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
P1A
VDDHitec HS-422
Formule de calcul:
perioada impulsurilor PWM: TPWM = 4 · TOSC · T2CKPS · (1+PR2)
durata Impulsurilor PWM: TDC = TOSC · T2CKPS · (DC1B9:DC1B0)
SIL51 5
PIC16F684
PWM
VDD
GND
Laboratorul 5Lucrarea 3: Operarea cu modulul ECCP în modul PWM cu o singurã iesireNI
VEL
1
Exemple de cod:1. Generarea unui semnal PWM cu perioada de 20 ms (50 Hz) si durata impulsului de 1.2 ms (factor de umplere 6%)
2. Generarea unui semnal PWM cu perioada de 20 ms (50 Hz) si durata impulsului de 1.8 ms (factor de umplere 9%)
36
void main() { OSCCON=0b00010000; // Ceas intern de 125 kHz TRISC.RC5=0; // Setare P1A in mod iesire T2CON.T2CKPS1=0; // Setare prescaler Timer 2 la 1:4 T2CON.T2CKPS0=1; T2CON.TMR2ON=1; // Pornire Timer 2 PR2=155; // Setare valoare registru PR2 CCPR1L=0b00001001; // Setare primii 8 biţi DB1B9:DB1B2 CCP1CON.P1M1=0; // Setare CCP în mod de lucru PWM cu ieşire simplă pe P1A CCP1CON.P1M0=0; CCP1CON.DC1B1=1; // Setare ultimii 2 biţi DB1B1:DB1B0 CCP1CON.DC1B0=0; CCP1CON.CCP1M3=1; // Setare CCP în mod de lucru PWM cu ieşire simplă CCP1CON.CCP1M2=1;}
void main() { OSCCON=0b00010000; // Ceas intern de 125 kHz TRISC.RC5=0; // Setare P1A in mod iesire T2CON.T2CKPS1=0; // Setare prescaler Timer 2 la 1:4 T2CON.T2CKPS0=1; T2CON.TMR2ON=1; // Pornire Timer 2 PR2=155; // Setare valoare registru PR2 CCPR1L=0b00001110; // Setare primii 8 biţi DB1B9:DB1B2 CCP1CON.P1M1=0; // Setare CCP în mod de lucru PWM cu ieşire simplă pe P1A CCP1CON.P1M0=0; CCP1CON.DC1B1=0; // Setare ultimii 2 biţi DB1B1:DB1B0 CCP1CON.DC1B0=0; CCP1CON.CCP1M3=1; // Setare CCP în mod de lucru PWM cu ieşire simplă CCP1CON.CCP1M2=1;}
Exemplu de calcul pentru TPWM = 20 ms si TDC = 1.2 ms:
a) determinarea produsului 4 · TOSC
4 · TOSC = 4 /125000 = 0.000032 s
b) determinarea raportului n
n = TPWM / 4 · TOSC = 0.02 / 0.000032 = 625
c) alegerea prescalerului PS
PS = 1:4
d) determinarea valorii registrului PR2
(PR2+1) = n / PS = 625 / 4 = 156.25 ≈ 156 PR2 = 156 - 1 = 155
f) determinarea valorii registrului DC1B9:DC1B0
DC1B9:DC1B0 = TDC / TOSC / PS = 0.0012 · 125000 / 4 = 37.5 ≈ 38 DC1B9:DC1B0 = 0b0000100110 = 0b [00001001] [10]
e) verificarea rezultatului
TPWM = 4 · TOSC · PS · (PR2+1) = 4 / 125000 · 4 · 155 = 0.01984 s TDC = TOSC · PS · DC1B9:DC1B0 = 1 / 125000 · 4 · 38 = 0.001216 s
Exemplu de calcul pentru TPWM = 20 ms si TDC = 1.8 ms:
a) determinarea produsului 4 · TOSC
4 · TOSC = 4 /125000 = 0.000032 s
b) determinarea raportului n
n = TPWM / 4 · TOSC = 0.02 / 0.000032 = 625
c) alegerea prescalerului PS
PS = 1:4
d) determinarea valorii registrului PR2
(PR2+1) = n / PS = 625 / 4 = 156.25 ≈ 156 PR2 = 156 - 1 = 155
f) determinarea valorii registrului DC1B9:DC1B0
DC1B9:DC1B0 = TDC / TOSC / PS = 0.0018 · 125000 / 4 = 56.25 ≈ 56 DC1B9:DC1B0 = 0b0000111000 = 0b [00001110] [00]
e) verificarea rezultatului
TPWM = 4 · TOSC · PS · (PR2+1) = 4 / 125000 · 4 · 155 = 0.01984 s TDC = TOSC · PS · DC1B9:DC1B0 = 1 / 125000 · 4 · 56 = 0.001792 s
Laboratorul 5Lucrarea 4: Operarea cu modulul ECCP în modul PWM în semipunte H NI
VEL
1
Obiective:1. Operarea cu modulul ECCP în modul generator de semnal PWM în semipunte2. Generarea unei semnal PWM de 200 kHz si factor de umplere între 20% si 80% ms pentru comanda unui motor de c.c cu perii
PIC16F684
Exemplu de conectare:
37
Listã de componente:x1x1x1x1
C1 100 nFIC1 = PIC16F684IC2 = L293DNEDC Motor Brushed
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F684 si frecventa de 8 MHz - setarea în Edit Project a sursei de ceas de tip INTRC -OSC2 as RA6 - dezactivarea în Edit Project a optiunii Fail-Safe Clock Monitor Enable - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea celor două sensuri de rotaţie pentru diferite turaţii ale motorului
PIC16F684
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
RA0
VDDL293D
VCC1
GND
DC Motor
M
2Y
P1A
P1B
1,2EN
1A
2A
1Y
L293DNE
Vcc1
4A
4Y
GND
GND
3Y
3A
3,4EN
1,2EN
1A
1Y
GND
GND
2Y
2A
Vcc2
L293DNE
VMOT
VCC2
SIL51 5
PIC16F684 L293DNE
6-12V DC
DC Brushed Motor
Registrii specifici:CCP1CON
CCPR1LT2CON
PR2
Formule de calcul:
perioada impulsurilor PWM: TPWM = 4 · TOSC · T2CKPS · (1+PR2)
durata Impulsurilor PWM: TDC = TOSC · T2CKPS · (DC1B9:DC1B0)
.10
C1100nF
Laboratorul 5Lucrarea 4: Operarea cu modulul ECCP în modul PWM în semipunte HNI
VEL
1
Exemple de cod:1. Comanda unui motor de curent continuu cu perii la 20% din turatia nominalã
2. Comanda unui motor de curent continuu cu perii la 80% din turatia nominalã
38
void main() { OSCCON=0b01110000; // Ceas intern de 8 MHz TRISC.RC5=0; // Setare P1A in mod iesire TRISC.RC0=0; // Setare RC0 in mod iesire PORTC.RC0=1; // Setare RC0 in stare 1 logic T2CON.T2CKPS1=0; // Setare prescaler Timer 2 la 1:1 T2CON.T2CKPS0=0; T2CON.TMR2ON=1; // Pornire Timer 2 PR2=9; // Setare valoare registru PR2 CCPR1L=0b00000010; // Setare primii 8 biţi DB1B9:DB1B2 CCP1CON.P1M1=0; // Setare CCP în mod de lucru PWM cu ieşire simplă pe P1A CCP1CON.P1M0=0; CCP1CON.DC1B1=0; // Setare ultimii 2 biţi DB1B1:DB1B0 CCP1CON.DC1B0=0; CCP1CON.CCP1M3=1; // Setare CCP în mod de lucru PWM cu ieşire simplă CCP1CON.CCP1M2=1;}
Exemplu de calcul pentru TPWM = 5 µs si TDC = 1 µs:
a) determinarea produsului 4 · TOSC
4 · TOSC = 4 / 8000000 = 0.0000005 s
b) determinarea raportului n
n = TPWM / 4 · TOSC = 0.000005 / 0.0000005 = 10
c) alegerea prescalerului PS
PS = 1:1
d) determinarea valorii registrului PR2
(PR2+1) = n / PS = 10 / 1 = 10 PR2 = 10 - 1 = 9
f) determinarea valorii registrului DC1B9:DC1B0
DC1B9:DC1B0 = TDC / TOSC / PS = 0.000001 · 8000000 / 1 = 8 DC1B9:DC1B0 = 0b0000001000 = 0b [00000010] [00]
Exemplu de calcul pentru TPWM = 5 µs si TDC = 4 µs:
a) determinarea produsului 4 · TOSC
4 · TOSC = 4 / 8000000 = 0.0000005 s
b) determinarea raportului n
n = TPWM / 4 · TOSC = 0.000005 / 0.0000005 = 10
c) alegerea prescalerului PS
PS = 1:1
d) determinarea valorii registrului PR2
(PR2+1) = n / PS = 10 / 1 = 10 PR2 = 10 - 1 = 9
f) determinarea valorii registrului DC1B9:DC1B0
DC1B9:DC1B0 = TDC / TOSC / PS = 0.000001 · 8000000 / 1 = 32 DC1B9:DC1B0 = 0b0000100000 = 0b [00001000] [00]
void main() { OSCCON=0b01110000; // Ceas intern de 8 MHz TRISC.RC5=0; // Setare P1A in mod iesire TRISC.RC0=0; // Setare RC0 in mod iesire PORTC.RC0=1; // Setare RC0 in stare 1 logic T2CON.T2CKPS1=0; // Setare prescaler Timer 2 la 1:1 T2CON.T2CKPS0=0; T2CON.TMR2ON=1; // Pornire Timer 2 PR2=9; // Setare valoare registru PR2 CCPR1L=0b00001000; // Setare primii 8 biţi DB1B9:DB1B2 CCP1CON.P1M1=0; // Setare CCP în mod de lucru PWM cu ieşire simplă pe P1A CCP1CON.P1M0=0; CCP1CON.DC1B1=0; // Setare ultimii 2 biţi DB1B1:DB1B0 CCP1CON.DC1B0=0; CCP1CON.CCP1M3=1; // Setare CCP în mod de lucru PWM cu ieşire simplă CCP1CON.CCP1M2=1;}
Laboratorul 5Lucrarea 5: Frecventmetru numeric cu afisaj digital 2x16 caractere LCD NI
VEL
2
Obiective:1. Operarea cu modulul ECCP pentru mãsurarea duratelor de timp2. Operarea cu un display 2x16 caractere LCD cu comandã serialã
Exemplu de conectare:
39
Listã de componente:x1x1x1
NetMedia 2x16IC1 = PIC16F882IC2 = DS32kHz
Algoritm: - setarea modulului CCP în mod de lucru captură la fiecare al 16-lea front crescător - setarea prescalerului timerului 1 pentru durata maximă de timp măsurabilă fără overflow - activarea întreruperii modulului CCP - la fiecare întrerupere: - măsurarea valorii curente de timp (T2) prin registrul CCPR1 (CCPR1H și CCPR1L) - determinarea numărului de impulsuri TTMR1 prin calculul diferenței dintre valoarea curentă (T2) și cea anterioară (T1) a CCPR1 - memorarea valorii curente a registrului CCPR1 (T1 ¬ T2) - resetarea flagului de întrerupere a modulului CCP - afișarea rezultatului curent pe display
SIL51 5
VIN
Registrii specifici:CCP1CON
CCPR1HCCPR1LT1CON
Formule de calcul:
perioada impulsurilor TTMR1: TTMR1 = 4 / FOSC · T1CKPS
nr. impulsuri pt. valoarea curentă de timp T2: N2 = 256 · CCPR1H+CCPR1L
perioada T: T = (N2 - N1) · TTMR1 / 16
frecvența: F = 1 / T = 16 / (N2 - N1) · FOSC / 4 / T1CKPS
CCP1IFT1 T2
16·T
VTMR1
TTMR1
VIN
T
PIC16F882
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
TX
CCP1
NetMedia 2x16 Serial LCD
Rx*
VDD
GND
5V
LED+
VIN
PIC16F882
PIC16F882
LED+Rx*Rx5GND
NetMedia2x16
Serial LCD
Laboratorul 5Lucrarea 5: Frecventmetru numeric cu afisaj digital 2x16 caractere LCDNI
VEL
2
Exemplu de cod:
40
unsigned int N1,N2,N=0; // Variabile pe 16 biți
void interrupt(){ N2=(unsigned int)(256*CCPR1H+CCPR1L); // Calcul valoare curentă registru TMR1 N=N2-N1; // Calcul interval de timp scurs între două întreruperi N1=N2; // Memorare valoare curentă PIR1.CCP1IF=0;}
void scrie(char m, char n, char tasta){ // Funcție scriere caracter la o anumită poziție UART1_Write(17); // Cod comandă display scriere la poziție UART1_Write(m); // Alegere rând UART1_Write(n); // Alegere coloană UART1_Write(tasta); // Scriere caracter}
void display(unsigned int val){ // Descompunere număr în digiți și afișare scrie(0,8,48+val/10000); // Digitul zecilor de mii val=val%10000; scrie(0,9,48+val/1000); // Digitul miilor val=val%1000; scrie(0,10,48+val/100); // Digitul sutelor val=val%100; scrie(0,11,48+val/10); // Digitul zecilor val=val%10; scrie(0,12,48+val); // Digitul unităților}
void main() { OSCCON=0b01110000; // Ocilator intern de 8 MHZ
TRISC.RC6=0; // Portul TX ca port de ieșire TRISC.RC2=1; // Portul CCP1 ca port de intrare
UART1_Init(9600); // Inițializare comunicație serială pe 9600 bauds UART1_Write(14); // Resetare display delay_ms(1000); // Așteptare resetare UART1_Write(20); // Setare backlight display UART1_Write(255); // Valoare backlight display UART1_Write(12); // Clear screen UART1_Write(13); // Carriage return UART1_Write_Text("Frecv.: Hz"); // Text inițial T1CON.T1CKPS1=1; // Setare prescaler Timer 1 T1CON.T1CKPS0=1; T1CON.TMR1ON=1; // Pornire Timer 1 CCP1CON=0b00000111; // CCP în mod captură la al 16-lea front crescător INTCON=0b11000000; // Activare întreruperi globale și periferice PIE1.CCP1IE=1; // Activare întrerupere modul CCP PIR1.CCP1IF=0; // Resetare flag întrerupere modul CCP while(1){ display(4000000/N); // Calcul și afișare frecvență }}
Exemplu de calcul pentru TTMR1 MAX = 0.2 s:
a) determinarea produsului 4 · TOSC
4 · TOSC = 4 / 8000000 = 0.0000005 s
b) determinarea raportului n
n = TTMR1 MAX / 4 · TOSC = 0.2 / 0.0000005 = 400000
c) determinarea prescalerului PS
T1CKPS = n / 65536 = 400000 / 65536 = 6.103515625 (se alege 8)
d) determinarea noii valorii maxime a TTMR1 MAX
TTMR1 MAX = 4 · TOSC · T1CKPS · 65536 = 0.262144 s
Laboratorul 6Lucrarea 1: Utilizarea comparatorului analogic cu referintã internã si semnal de intrare extern NI
VEL
1
Obiective:1. Utilizarea comparatorului analogic în modul de lucru cu o intrare analogicã externã, o referintã internã si o iesire externã digitalã2. Stabilirea unei valori a referintei interne de tensiune
PIC12F675
Exemplu de conectare:
41
Listã de componente:x1x1x1x1
LED 20 mAR1 = 330RVR1 = 10KIC1 = PIC12F675
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC12F675 si frecventa ceasului intern la alegere - setarea în Edit Project a sursei de ceas de tip Internal RC no Clock - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Registrii specifici:CMCONVRCON
Formule de calcul pentru tensiunea de referintã:
VRR = 1 (low range): CVREF = VDD · (VR3:VR0) / 24 VRR = 0 (high range): CVREF = VDD · (VR3:VR0) / 32 + VDD / 4
A K
SIL51 5
PIC12F675
PIC12F675
CIN-VR110K
VDD
COUT
LED1
R1330R
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
Laboratorul 6Lucrarea 1: Utilizarea comparatorului analogic cu referintã internã si semnal de intrare externNI
VEL
1
Exemple de cod:1. Compararea unei tensiuni reglabile de la un semireglabil cu o tensiune de referintã internã de 2.5V
42
void main() { TRISIO.GP2=0; // Setare port COUT în mod ieşire ANSEL.GP2=0; // Setare port COUT în mod digital TRISIO.GP1=1; // Setare port CIN- în mod intrare ANSEL.GP1=1; // Setare port CIN- în mod analogic CMCON.CM2=0; // Mod de lucru: compator cu Vref internă şi o ieşire CMCON.CM1=1; CMCON.CM0=1; CMCON.CINV=1; // Ieşire inversată a comparatorului VRCON.VREN=1; // Pornire modul referintă internă de tensiune VRCON.VRR=1; // Selectare gamă Vref low range VRCON.VR3=1; // Stabilire valoare registru VR3:VR0 VRCON.VR2=1; VRCON.VR1=0; VRCON.VR0=0;}
Exemplu de calcul pentru CVREF = 2.5 V:
Varianta 1 (VRR = 1)
CVREF = VDD · (VR3:VR0) / 24 = 2.5 V VR3:VR0 = 24 · CVREF / VDD = 24 · 2.5 / 5 = 12 = 0b1100
Varianta 1 (VRR = 0)
CVREF = VDD · (VR3:VR0) / 32 + VDD / 4 = 2.5 V VR3:VR0 = 32 · CVREF / VDD - 8 = 32 · 2.5 / 5 - 8 = 8 = 0b1000
Laboratorul 6Lucrarea 2: Utilizarea comparatorului analogic cu histerezis NI
VEL
1
Obiective:1. Utilizarea comparatorului analogic în modul de lucru cu douã intrãri analogice externe si o iesire externã digitalã2. Stabilirea valorilor de prag ale comparatorului cu histerezis
PIC12F675
Exemplu de conectare:
43
Listã de componente:x1x2x1x1x1x1
LED 20 mAR1, R2 = 4K3R3 = 1K4R4 = 330RVR1 = 10KIC1 = PIC12F675
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC12F675 si frecventa ceasului intern la alegere - setarea în Edit Project a sursei de ceas de tip Internal RC no Clock - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - măsurarea tensiunilor VDD, VTH şi VTL şi compararea acestora cu valorile obţinute prin calcul
Registrii specifici:CMCONVRCON
Formule de calcul pentru tensiunile de referintã:
SIL51 5
PIC12F675
PIC12F675
CIN-VR110K
VDD
COUT
LED1
R4330R
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
CIN+R31K4
VDD
R24K3
R14K3
VOUT
VAVG
VTH
VTL
A K
VAVG =(VTH+VTL) / 2 = VDD · R2 / (R1+R2) VTH - VTL = VDD · R1||R2 / (R3+R1||R2) 1K ≤ R1, R2 ≤ 10K R3 < 100K
Laboratorul 6Lucrarea 2: Utilizarea comparatorului analogic cu histerezisNI
VEL
1
Exemple de cod:1. Comparator cu histerezis
44
void main() { TRISIO.GP2=0; // Setare port COUT în mod ieşire ANSEL.GP2=0; // Setare port COUT în mod digital TRISIO.GP1=1; // Setare port CIN- în mod intrare ANSEL.GP1=1; // Setare port CIN- în mod analogic TRISIO.GP0=1; // Setare port CIN+ în mod intrare ANSEL.GP0=1; // Setare port CIN+ în mod analogic CMCON.CM2=0; // Mod de lucru: comparator cu 2 intrări şi o ieşire CMCON.CM1=0; CMCON.CM0=1; CMCON.CINV=1; // Ieşire inversată a comparatorului}
Exemplu de calcul pentru VTL = 1.0 V si VTH = 4.0 V:
a) determinarea VAVG
VAVG =(VTH+VTL) / 2 = (4+1) / 2 = 2.5 V
b) determinarea valorilor rezistentelor R1 si R2
R1 / R2+1 = VDD / VAVG = 5 / 2.5 = 2 R1 / R2 = 1 R1 = R2 = 4K3
c) determinarea valorii rezistentei R3
R3 = R1||R2 · [VDD / (VTH - VTL) - 1] = 2K15 · [5 / (4 - 1) - 1] = 1K43(3) ≈ 1K4
d) verificarea rezultatului
(VTH + VTL) /2 = VAVG = VDD · R2 / (R1+R2) = 5 · 4K3 / 8K6 = 2.5 V VTH - VTL = VDD · R1||R2 / (R3+R1||R2) = 5 · 2K15 / (1K4 + 2K15) = 5 · 2K15 / 3K55 = 3.028 V VTH = VAVG + (VTH - VTL) / 2 VTH = 2.5 + 3.028 / 2 = 4.014 V VTL = VAVG - (VTH - VTL) / 2 VTL = 2.5 - 3.028 / 2 = 0.986 V
Exemplu de calcul pentru VTL = 2.0 V si VTH = 3.0 V:
a) determinarea VAVG
VAVG =(VTH+VTL) / 2 = (3+2) / 2 = 2.5 V
b) determinarea valorilor rezistentelor R1 si R2
R1 / R2+1 = VDD / VAVG = 5 / 2.5 = 2 R1 / R2 = 1 R1 = R2 = 4K3
c) determinarea valorii rezistentei R3
R3 = R1||R2 · [VDD / (VTH - VTL) - 1] = 2K15 · [5 / (3 - 2) - 1] = 8K6
d) verificarea rezultatului
(VTH + VTL) /2 = VAVG = VDD · R2 / (R1+R2) = 5 · 4K3 / 8K6 = 2.5 V VTH - VTL = VDD · R1||R2 / (R3+R1||R2) = 5 · 2K15 / (8K6 + 2K15) = 5 · 2K15 / 10K75 = 1 V VTH = VAVG + (VTH - VTL) / 2 VTH = 2.5 + 1 / 2 = 3 V VTL = VAVG - (VTH - VTL) / 2 VTL = 2.5 - 1 / 2 = 1 V
Laboratorul 6Lucrarea 3: Utilizarea comparatorului analogic cu fereastrã NI
VEL
1
Obiective:1. Utilizarea simultanã a douã comparatoare analogice2. Stabilirea valorilor de prag ale comparatorului cu fereastrã
Exemplu de conectare:
45
Listã de componente:x2x2x1x2x1x1
LED 20 mAR1, R3 = 4K3R2 = 6K2R4, R5 = 330RVR1 = 10KIC1 = PIC16F88
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC18F88 si frecventa ceasului intern la alegere - setarea în Edit Project a sursei de ceas de tip Internal RC no Clock - dezactivarea în Edit Project a optiunii Fail-Safe Clock Monitor Enable - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - măsurarea tensiunilor VTH-HI şi VTH-LO şi compararea acestora cu valorile obţinute prin calcul
Registrii specifici:CMCON
Formule de calcul pentru tensiunile de referintã:
PIC16F88
SIL5 51
AK
PIC16F88
PIC16F88
C1IN-
C2IN-
VSS
VDD
VPP
PGC
PGD
VPP
VDD
GND
PGD
PGC
ICSP
1
5
C1IN+
C2IN+
C1OUT
C2OUT
LED2
R5
330R
LED1
R4
330R
R26K2
R14K3
R34K3
VR110K
VDD
VDD
VOUT2
VTH-HI
VTH-LO
VOUT1
AK
VTH-LO =VDD · R1 / (R1+R2+R3) VTH-HI =VDD · (R1+R2) / (R1+R2+R3) 1K ≤ R1, R2, R3 ≤ 1M
Laboratorul 6Lucrarea 3: Utilizarea comparatorului analogic cu fereastrãNI
VEL
1
Exemple de cod:1. Comparator cu fereastrã
46
void main() { ANSEL.RA0=1; // Setare port C1IN- în mod analogic TRISA.RA0=1; // Setare port C1IN- în mod intrare ANSEL.RA1=1; // Setare port C2IN- în mod analogic TRISA.RA1=1; // Setare port C2IN- în mod intrare ANSEL.RA2=1; // Setare port C2IN+ în mod analogic TRISA.RA2=1; // Setare port C2IN+ în mod intrare ANSEL.RA3=0; // Setare port C1OUT în mod digital TRISA.RA3=0; // Setare port C1OUT în mod ieșire ANSEL.RA4=0; // Setare port C2OUT în mod digital TRISA.RA4=0; // Setare port C2OUT în mod ieșire CMCON.CM2=1; // Mod de lucru: comparatoare cu I/O externe CMCON.CM1=1; CMCON.CM0=0; CMCON.C1INV=0; // Ieşire neinversată a comparatorului C1 CMCON.C1INV=1; // Ieşire inversată a comparatorului C2}
Exemplu de calcul pentru VTH-LO = 1.45 V si VTH-HI = 3.55 V:
a) alegerea lui R1
R1 = 4K3
b) determinarea valorii rezistentei R2
R2 = R1 · (VTH-HI - VTH-LO) / VTH-LO = 4K3 · (3.55 - 1.45) / 1.45 = 6K2276 ≈ 6K2
c) determinarea valorii rezistentei R3
R3 = R1 · (VDD - VTH-HI) / VTH-LO = 4K3 · (5.0 - 3.55) / 1.45 = 4K3
d) verificarea rezultatului
VTH-LO = VDD · R1 / (R1+R2+R3) = 5 · 4K3 / 14K8 = 1.4527 V VTH-HI = VDD · (R1+R2) / (R1+R2+R3) = 5 · 10K5 / 14K8 = 3.5473 V
Laboratorul 7Lucrarea 1: Esantionarea unui semnal analogic cu frecventã constantã NI
VEL
1
Obiective:1. Utilizarea convertorului analog-numeric al microcontrolerului pentru esantionarea unui semnal analogic cu frecventã constantã2. Afisarea rezultatului conversiei A/D pe 10 LEDuri
PIC16F882
Exemplu de conectare:
47
Listã de componente:x10x10
x3x1
LED 20 mAR1.. R10 = 330RVR1..VR3 = 10KIC1 = PIC16F882
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectării corecte a tipului microcontrolerului - crearea unui proiect nou în MikroC, alegând modelul PIC16F882 si frecventa ceasului de 8 MHz - setarea în Edit Project a sursei de ceas de tip Internal RC no Clock - dezactivarea în Edit Project a optiunii Fail-Safe Clock Monitor Enable - scrierea codului - compilarea codului pentru obtinerea fisierului de tip HEX - importarea fisierului HEX cu programul PICkit2 - scrierea fisierului HEX în memoria program a microcontrolerului prin apăsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Registrii specifici:ADCON0ADCON1
PIC16F882
VREF+
VR110K
VDD
RB7:6
VSS
VDD
VPP
ICSPCLK
ICSPDAT
VPP
VDD
GND
PGD
PGC
ICSP
1
5
RC7:0
LED10
R10330R
LED1
R1330R
...
VREF-
AN0
VR210K
VDD
VR310K
VDD
SIL51 5
PIC16F882
Laboratorul 7Lucrarea 1: Esantionarea unui semnal analogic cu frecventã constantãNI
VEL
1
Exemplu de cod:
48
void interrupt() { PORTC=ADRESH; // Afi are primii 8 MSB PORT =ADRESL; // Afi are ultimii 2 LSB delay_us(12); // A teptare Tacq ADCON0.GO_DONE=1; // Repornire achizi ie PIR1.ADIF=0; // tergere flag ntrerupere ADC}
void main() { OSCCON=0b01110000; // Oscilator intern 8MHz TRISA=0xFF; // Portul A ca port de intrare ANSEL=0xFF; // Portul A ca port analogic ANSELH=0xFF; TRISC=0; // Portul C ca port de ie ire TRIS =0; // Portul ca port de ie ire ADCON0.ADCS1=1; // Frecven a de e antionare 32Tosc ADCON0.ADCS0=0; // (ADCS1:0=10) ADCON1.VCFG1=1; // Tensiune Vref+ pe pinul RA3 ADCON1.VCFG0=1; // Tensiune Vref- pe pinul RA2 ADCON0.CHS3=0; // Selectare canal de intrare AN0 ADCON0.CHS2=0; // (CHS3:0=0000) ADCON0.CHS1=0; ADCON0.CHS0=0; ADCON1.ADFM=0; // Format date aliniat la dreapta ADCON0.ADON=1; // Activare ADC PIE1.ADIE=1; // Activare întrerupere ADC INTCON.PEIE=1; // Activare întreruperi periferice INTCON.GIE=1; // Activare întreruperi globale PIR1.ADIF=0; // Ștergere flag întrerupere ADC delay_us(12); // Așteptare Tacq ADCON0.GO_DONE=1; // Pornire achiziție}
șB ș
ș ț
Ș î
șB B ș
ț ș