Documente Academic
Documente Profesional
Documente Cultură
PIC12F675
ICSP
VPP VDD
PIC12F675 1
GP2
LED1 R1 330R
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Exemplu de conectare:
SIL5
PIC12F675
NIVEL 1
Laboratorul 1
NIVEL 1
Laboratorul 1
Lucrarea 1: Conectarea programatorului ICSP. Setarea porturilor n mod iesire
Exemple de cod: 1. Setarea valorii unui port
void main() { ANSEL.B2=0; TRISIO.B2=0; GPIO.B2=0; } // Setare port GP2 in mod digital // Setare port GP2 in mod iesire // Setare port GP2 in 1 logic
PIC12F675
VDD SW1
GP5
PIC12F675
VPP VDD VSS ICSPDAT GP2 ICSPCLK
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Exemplu de conectare:
List de componente: x1 LED 20mA x1 R1 = 330R x1 R2 = 10K IC1 = PIC12F675 x1 Pushbutton Switch x1
SIL5
PIC12F675
NIVEL 1
Laboratorul 1
NIVEL 1
Laboratorul 1
Lucrarea 2: Setarea porturilor n mod intrare
Exemple de cod: 1. Repetarea la un port de iesire a valorii citite de la un port de intrare
void main() { ANSEL.B2=0; TRISIO.B2=0; ANSEL.B5=0; TRISIO.B5=1; while(1){ GPIO.B2=GPIO.B5; } } // // // // Setare Setare Setare Setare port port port port GP2 GP2 GP5 GP5 in in in in mod mod mod mod digital iesire digital intrare
PIC16F88
VDD R1 6K8 C1 150nF LED1 R2 330R PIC16F88
OSC1 VPP VDD OSC2 VSS PGD RA2 PGC
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea 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:
.15
SIL5
PIC16F88 K A
NIVEL 1
Laboratorul 2
NIVEL 1
Laboratorul 2
Lucrarea 1: Operarea cu oscilator extern de tip RC
Exemple de cod: 1. Repetarea la un port de iesire a valorii citite de la un port de intrare
void main() { ANSEL=0; TRISA.B2=0; OSCCON.SCS1=0; OSCCON.SCS0=0; while(1){ PORTA.B2=1; delay_ms(500); PORTA.B2=0; delay_ms(500); } } // Setare mod digital // Setare port in mod ieire // Surs de ceas definit prin FOSC2:FOSC0 // // // // // Bucl infinit Setare port n stare 1 logic Pauz de 500 ms Setare port n stare 0 logic Pauz de 500 ms
10
PIC16F88
C1 XTAL1 22pF 8MHz PIC16F88
OSC1 VPP VDD OSC2 VSS PGD RA2 PGC
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Exemplu de conectare:
List de componente: x1 LED 20mA x1 R1 = 330R x2 C1, 2 = 22pF x1 Cuar de 8 MHz x1 IC1 = PIC16F88
22p
SIL5
8.00 0M
Hz
PIC16F88 K A
11
NIVEL 1
Laboratorul 2
22p
NIVEL 1
Laboratorul 2
Lucrarea 2: Operarea cu oscilator extern cu cuart/rezonator ceramic
Exemple de cod: 1. Repetarea la un port de iesire a valorii citite de la un port de intrare
void main() { ANSEL=0; TRISA.B2=0; OSCCON.SCS1=0; OSCCON.SCS0=0; while(1){ PORTA.B2=1; delay_ms(500); PORTA.B2=0; delay_ms(500); } } // Setare mod digital // Setare port in mod ieire // Surs de ceas definit prin FOSC2:FOSC0 // // // // // Bucl infinit Setare port n stare 1 logic Pauz de 500 ms Setare port n stare 0 logic Pauz de 500 ms
12
PIC16F88
DS32kHz VDD
VCC GND 32kHz
PIC16F88
OSC1 VPP VDD VSS PGD RA2 PGC
LED1 R1 330R
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea 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 DS32kHz
5V 32kHz
GND
Exemplu de conectare:
SIL5
DS32KHz K A
PIC16F88
13
NIVEL 1
Laboratorul 2
DS32KHZ
NIVEL 1
Laboratorul 2
Lucrarea 3: Operarea cu generator extern de ceas
Exemple de cod: 1. Repetarea la un port de iesire a valorii citite de la un port de intrare
void main() { ANSEL=0; TRISA.B2=0; OSCCON.SCS1=0; OSCCON.SCS0=0; while(1){ PORTA.B2=1; delay_ms(500); PORTA.B2=0; delay_ms(500); } } // Setare mod digital // Setare port in mod ieire // Surs de ceas definit prin FOSC2:FOSC0 // // // // // Bucl infinit Setare port n stare 1 logic Pauz de 500 ms Setare port n stare 0 logic Pauz de 500 ms
14
PIC16F88
7-seg. CA
a b c d e f g dp RB0 RB1 RB2 RB3 RB4 RB5 RB6 RB7
PIC16F88
VPP VDD VSS PGD PGC
CA
VDD
R1..R8 8x330R
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea succesiva a diferite caractere/digiti
MDE1123
a f e d g b c dp
e a f CA g c dp d CA b
Exemplu de conectare:
SIL5
PIC16F88
15
NIVEL 1
Laboratorul 3
NIVEL 1
Laboratorul 3
Lucrarea 1: Operarea cu generatorul intern de ceas (HF). Afisorul cu 7 segmente
Exemple de cod: 1. Afisarea constanta a unui singur caracter
void main() { ANSEL=0; TRISB=0; OSCCON.SCS1=0; OSCCON.SCS0=0; OSCCON.IRCF2=1; OSCCON.IRCF1=1; OSCCON.IRCF0=1; PORTB=0b10001000; } // Setare mod digital // Setare port in mod iesire // Surs de ceas definit prin FOSC2:FOSC0 // Ceas de 8 MHz
// Setare mod digital // Setare port in mod iesire // Ceas intern de 4 MHz // Caracterul 0 (anod comun) // Caracterul 1 (anod comun)
16
PIC16F88
R2 560R
COM NO L1
12V 12V
PIC16F88
VPP VDD VSS
LED1
L2
Q1 BC337
R1
RB0
PGD PGC
10K
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea succesiva a diferite caractere/digiti
L1
L2
COM NO
Exemplu de conectare:
12V DC
List de componente: Releu 12V DC x1 LED 20 mA x1 R1 = 10K x1 R2 = 560R x1 Q1 = BC337 x1 IC1 = PIC16F88 x1
SIL5
PIC16F88
17
NIVEL 1
Laboratorul 3
K A
NIVEL 1
Laboratorul 3
Lucrarea 2: Operarea cu generatorul intern de ceas (LF). Comanda unui releu
Exemple de cod: 1. Mentinerea constant a releului pornit
void main() { OSCCON.SCS1=0; OSCCON.SCS0=0; OSCCON.IRCF2=0; OSCCON.IRCF1=0; OSCCON.IRCF0=0; ANSEL.B0=0; TRISB.B0=0; PORTB.B0=1; } // Surs de ceas definit prin FOSC2:FOSC0 // Ceas intern de 31.25 kHz
// Setare port RB0 n mod digital // Setare port RB0 n mod ieire // Setare port RB0 n 1 logic
18
PIC16F684
ICSP
VPP VDD
VSS ICSPDAT
SW1
R3 10K
RC5
ICSPCLK
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
K1
K2
K1
K2
Exemplu de conectare:
K1
K2
List de componente: LED 20 mA x1 R1 = 330R x1 C1 = 100nF x1 R2, R3 = 10K x2 D1 = 1N4148 x1 IC1 = PIC16F684 x1 Pushbutton Switch x1
SIL5
PIC16F684
19
NIVEL 1
Laboratorul 4
.10
NIVEL 1
Laboratorul 4
Lucrarea 1: Operarea cu ntreruperea intern INT
Exemple de cod: 1. Modificarea strii portului RC5 la apsarea butonului cuplat la portul INT
void interrupt(){ PORTC.RC5=!PORTC.RC5; INTCON.INTF=0; } } void main() { OSCCON.SCS=0; OSCCON.IRCF2=0; OSCCON.IRCF1=0; OSCCON.IRCF0=0; ANSEL.RA2=0; TRISA.RA2=1; TRISC.RC5=0; INTCON.GIE=1; INTCON.INTE=1; INTCON.INTF=0; } // Inversare stare logic port RC5 // Revenire din ntrerupere
// // // // // //
Setare INT n mod digital Setare INT n mod intrare Setare RC5 n mod ieire Activare ntreruperi globale Activare ntrerupere intern INT Resetare flag ntrerupere intern INT
20
PIC16F684
PIC16F684
VPP VDD
RC0
LED1 R1 330R
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea 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 Formul de calcul a perioadei de generare a ntreruperilor: TTMR0 = 4 TOSC PS (256 - TMR0)
Exemplu de conectare:
A 1 SIL5 5
PIC16F684
21
NIVEL 1
Laboratorul 4
NIVEL 1
Laboratorul 4
Lucrarea 2: Operarea cu ntreruperea modulului Timer 0 si surs de ceas Fosc/4
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; TMR0=14; INTCON.T0IF=0; } void main() { OSCCON=0b00000000; ANSEL.B4=0; TRISC.RC0=0; PORTC.RC0=0; CMCON0.CM2=1; CMCON0.CM1=1; CMCON0.CM0=1; OPTION_REG.PS2=0; OPTION_REG.PS1=1; OPTION_REG.PS0=1; OPTION_REG.T0CS=0; OPTION_REG.PSA=0; TMR0=14; INTCON.GIE=1; INTCON.T0IE=1; INTCON.T0IF=0; } // Inversare stare port RC0 // Rescriere valoare registru TMR0 // Resetare flag ntrerupere Timer 0
// // // // //
Ceas intern de 31.25 kHz Setare RC0 n mod digital Setare RC0 n mod ieire Setare RC0 n stare 0 logic Setare RC0 n mod digital al comparatorului analogic
// // // // // //
Timer 0 utilizeaz ceasul principal Fosc/4 Prescaler legat la Timer 0 Setare valoare registru TMR0 Activare ntreruperi globale Activare ntrerupere Timer 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
22
PIC16F684
ICSP
VPP VDD VSS ICSPDAT
DS32kHz VDD
VCC GND 32kHz
PIC16F684
T0CKI
RC0
ICSPCLK
LED1 R1 330R
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea 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 Formul de calcul a perioadei de generare a ntreruperilor: DS32kHz TTMR0 = TT0CKI PS (256 - TMR0)
5V 32kHz
GND
Exemplu de conectare:
A 1 SIL5 5
PIC16F684
DS32KHz
23
NIVEL 1
Laboratorul 4
DS32KHZ
NIVEL 1
Laboratorul 4
Lucrarea 3: Operarea cu ntreruperea modulului Timer 0 si surs de ceas extern T0CKI
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; TMR0=2; INTCON.T0IF=0; } void main() { OSCCON=0b01110000; ANSEL.B2=0; ANSEL.B4=0; TRISC.RC0=0; PORTC.RC0=0; TRISA.RA2=1; CMCON0.CM2=1; CMCON0.CM1=1; CMCON0.CM0=1; OPTION_REG.PS2=1; OPTION_REG.PS1=0; OPTION_REG.PS0=1; OPTION_REG.T0CS=1; OPTION_REG.PSA=0; TMR0=2; INTCON.GIE=1; INTCON.T0IE=1; INTCON.T0IF=0; } // Inversare stare port RC0 // Rescriere valoare registru TMR0 // Resetare flag ntrerupere Timer 0
// // // // // // //
Ceas intern de 8 MHz Setare T0CKI n mod digital Setare RC0 n mod digital Setare RC0 n mod ieire Setare RC0 n stare 0 logic Setare T0CKI n mod intrare Setare RC0 n mod digital al comparatorului analogic
// // // // // //
Timer 0 utilizeaz semnalul de la portul T0CKI Prescaler legat la Timer 0 Setare valoare registru TMR0 Activare ntreruperi globale Activare ntrerupere Timer 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
24
PIC16F684
PIC16F684
VPP VDD
RC0
LED1 R1 330R
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea 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 Formul de calcul a perioadei de generare a ntreruperilor: TTMR1 = 4 TOSC PS (65536 - TMR1)
Exemplu de conectare:
A 1 SIL5 5
PIC16F684
25
NIVEL 1
Laboratorul 4
NIVEL 1
Laboratorul 4
Lucrarea 4: Operarea cu ntreruperea modulului Timer 1 si surs de ceas Fosc/4
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; TMR1H=194; TMR1L=247; PIR1.TMR1IF=0; } void main() { OSCCON=0b01000000; ANSEL.B4=0; TRISC.RC0=0; PORTC.RC0=0; CMCON0.CM2=1; CMCON0.CM1=1; CMCON0.CM0=1; T1CON.T1CKPS1=1; T1CON.T1CKPS0=1; T1CON.TMR1CS=0; T1CON.TMR1ON=1; TMR1H=194; TMR1L=247; INTCON=0b11000000; PIE1.TMR1IE=1; PIR1.TMR1IF=0; } // Inversare stare port RC0 // Rescriere valoare registru TMR1 // Resetare flag ntrerupere Timer 1
// // // // //
Ceas intern de 1 MHz Setare RC0 n mod digital Setare RC0 n mod ieire Setare RC0 n stare 0 logic Setare RC0 n mod digital al comparatorului analogic
// Setare prescaler Timer 1 la 1:8 // Timer 1 utilizeaz ceasul principal Fosc/4 // Pornire Timer 1 // Setare valoare registru TMR1 // Activare ntreruperi globale i periferice // Activare ntrerupere Timer 1 // 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
26
PIC16F684
PIC16F684
VPP VDD RC0 VSS ICSPDAT ICSPCLK
LED1 R1 330R
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea 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 Formul de calcul a perioadei de generare a ntreruperilor: TTMR2 = 4 TOSC PreS PostS PR2
Exemplu de conectare:
A 1 SIL5 5
PIC16F684
27
NIVEL 1
Laboratorul 4
NIVEL 1
Laboratorul 4
Lucrarea 5: Operarea cu ntreruperea modulului Timer 2
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; PIR1.TMR2IF=0; } void main() { OSCCON=0b00110000; ANSEL=0; TRISC.RC0=0; PORTC.RC0=0; CMCON0.CM2=1; CMCON0.CM1=1; CMCON0.CM0=1; T2CON.T2CKPS1=1; T2CON.T2CKPS0=1; T2CON.TOUTPS3=1; T2CON.TOUTPS2=1; T2CON.TOUTPS1=1; T2CON.TOUTPS0=1; T2CON.TMR2ON=1; PR2=243; INTCON=0b11000000; PIE1.TMR2IE=1; PIR1.TMR2IF=0; } // Inversare stare port RC0 // Resetare flag ntrerupere Timer 2
// // // //
Ceas intern de 500 kHz Setare porturi digitale Setare RC0 n mod ieire Setare RC0 n stare 0 logic
// // // // //
Pornire Timer 2 Setare valoare registru PR2 Activare ntreruperi globale i periferice Activare ntrerupere Timer 2 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
28
PIC16F684
PIC16F684 ICSP
VPP INT VDD VSS ICSPDAT ICSPCLK
VDD R1 5K A Encoder C B R2 5K
RB1
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Exemplu de conectare:
SIL5
PIC16F684
29
NIVEL 2
Laboratorul 4
NIVEL 2
30
Laboratorul 4
Lucrarea 6: Decodor pentru potentiometru digital cu codare
PIC16F684
VDD PIC16F684 R2 10K D1 1N4148
P1A VPP VDD VSS ICSPDAT RC2 ICSPCLK
SW1
R3 10K
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea 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 descresctor b) captur la fiecare front cresctor c) captur la fiecare al 4-lea front ccresctor d) captur la fiecare al 16-lea front cresctor
K1
K2
K1
K2
Exemplu de conectare:
K1
K2
List de componente: LED 20 mA x1 R1 = 330R x1 C1 = 100nF x1 R2, R3 = 10K x2 D1 = 1N4148 x1 IC1 = PIC16F684 x1 Pushbutton Switch x1
A 1 SIL5 5
PIC16F684
31
NIVEL 1
Laboratorul 5
.10
NIVEL 1
Laboratorul 5
Lucrarea 1: Operarea cu modulul ECCP n modul captur
Exemple de cod: 1. Generare de ntrerupere la fiecare front descresctor
void interrupt(){ PORTC.RC2=!PORTC.RC2; PIR1.CCP1IF=0; } void main() { OSCCON.SCS=0; OSCCON.IRCF2=1; OSCCON.IRCF1=1; OSCCON.IRCF0=1; ANSEL=0; TRISC.RC5=1; TRISC.RC2=0; CCP1CON.CCP1M3=0; CCP1CON.CCP1M2=1; CCP1CON.CCP1M1=0; CCP1CON.CCP1M0=0; INTCON.GIE=1; INTCON.PEIE=1; PIE1.CCP1IE=1; PIR1.CCP1IF=0; } // Inversare stare logic port RC3 // Revenire din ntrerupere
// // // //
Toate porturile n modul digital Setare port RC5/P1A n mod intrare Setare port RC2 n mod ieire Operare n mod captur, la fiecare front descresctor
// // // //
ntreruperi globale ntreruperi periferice ntrerupere modul CCP flag ntrerupere modul CCP
// // // // //
Toate porturile n modul digital Setare port RC5/P1A n mod intrare Setare port RC2 n mod ieire Operare n mod captur, la fiecare al 4-lea front cresctor
// // // //
ntreruperi globale ntreruperi periferice ntrerupere modul CCP flag ntrerupere modul CCP
32
PIC16F684
VDD PIC16F684 R2 10K D1 1N4148
INT VPP VDD VSS ICSPDAT P1A ICSPCLK
SW1
R3 10K
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On Formul de calcul a duratei:
K1 K2
Exemplu de conectare:
K1
K2
List de componente: LED 20 mA x1 R1 = 330R x1 C1 = 100nF x1 R2, R3 = 10K x2 D1 = 1N4148 x1 IC1 = PIC16F684 x1 Pushbutton Switch x1
SIL5
PIC16F684
33
NIVEL 1
Laboratorul 5
.10
NIVEL 1
Laboratorul 5
Lucrarea 2: Operarea cu modulul ECCP n modul comparare
Exemplu de cod: 1. Aprinderea sau stingerea unui LED conectat la portul P1A la o perioad de timp scurs de la apsarea unui buton conectat la portul INT
void interrupt(){ if (INTCON.INTF==1){ PIE1.CCP1IE=1; CCP1CON.CCP1M3=1; CCP1CON.CCP1M0=!CCP1CON.CCP1M0; T1CON.TMR1ON=1; } if (PIR1.CCP1IF==1){ PIE1.CCP1IE=0; T1CON.TMR1ON=0; } PIR1.CCP1IF=0; INTCON.INTF=0; } void main() { OSCCON=0b00110000; ANSEL.RA2=0; TRISA.RA2=1; TRISC.RC5=0; PORTC.RC5=0; T1CON.T1CKPS1=1; T1CON.T1CKPS0=1; T1CON.TMR1ON=0; CCPR1H=249; CCPR1L=249; CCP1CON=0b00000001; INTCON=0b11010000; } // // // // // Verificare apsare buton la portul INT Activare ntrerupere a modulului CCP Setare CCP n modul Compare Alternare setare sau resetare stare port P1A Pornire Timer 1
// Verificare ntrerupere generat de CCP // Dezactivare ntrerupere a modulului CCP // Oprire Timer 1 // Resetare flag ntrerupere modul CCP // Resetare flag ntrerupere INT
// // // //
// Setare prescaler Timer1 la 1:16 // Timer 1 oprit // Setare valori regitrii de comparare // Modulul CCP oprit // 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
34
PIC16F684
PIC16F684 Hitec HS-422 VDD
P1A VPP VDD VSS ICSPDAT ICSPCLK
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea pe osciloscop a semnalelor PWM generate Formule de calcul: perioada impulsurilor PWM: durata Impulsurilor PWM: TPWM = 4 TOSC T2CKPS (1+PR2) TDC = TOSC T2CKPS (DC1B9:DC1B0)
PWM VDD GND
Exemplu de conectare:
SIL5
PIC16F684
35
NIVEL 1
Laboratorul 5
NIVEL 1
Laboratorul 5
Lucrarea 3: Operarea cu modulul ECCP n modul PWM cu o singur iesire
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%)
void main() { OSCCON=0b00010000; TRISC.RC5=0; T2CON.T2CKPS1=0; T2CON.T2CKPS0=1; T2CON.TMR2ON=1; PR2=155; CCPR1L=0b00001001; CCP1CON.P1M1=0; CCP1CON.P1M0=0; CCP1CON.DC1B1=1; CCP1CON.DC1B0=0; CCP1CON.CCP1M3=1; CCP1CON.CCP1M2=1; } // Ceas intern de 125 kHz // Setare P1A in mod iesire // Setare prescaler Timer 2 la 1:4 // // // // Pornire Timer 2 Setare valoare registru PR2 Setare primii 8 bii DB1B9:DB1B2 Setare CCP n mod de lucru PWM cu ieire simpl pe P1A
// Setare ultimii 2 bii DB1B1:DB1B0 // Setare CCP n mod de lucru PWM cu ieire simpl
2. Generarea unui semnal PWM cu perioada de 20 ms (50 Hz) si durata impulsului de 1.8 ms (factor de umplere 9%)
void main() { OSCCON=0b00010000; TRISC.RC5=0; T2CON.T2CKPS1=0; T2CON.T2CKPS0=1; T2CON.TMR2ON=1; PR2=155; CCPR1L=0b00001110; CCP1CON.P1M1=0; CCP1CON.P1M0=0; CCP1CON.DC1B1=0; CCP1CON.DC1B0=0; CCP1CON.CCP1M3=1; CCP1CON.CCP1M2=1; } // Ceas intern de 125 kHz // Setare P1A in mod iesire // Setare prescaler Timer 2 la 1:4 // // // // Pornire Timer 2 Setare valoare registru PR2 Setare primii 8 bii DB1B9:DB1B2 Setare CCP n mod de lucru PWM cu ieire simpl pe P1A
// Setare ultimii 2 bii DB1B1:DB1B0 // Setare CCP n mod de lucru PWM cu ieire simpl
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 36
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
PIC16F684
VMOT DC Motor
1Y VCC1 VPP VDD M VCC2
L293D
VDD
PIC16F684 1
C1 100nF
1,2EN 1A
2Y GND
2A
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - verificarea celor dou sensuri de rotaie pentru diferite turaii ale motorului Formule de calcul: perioada impulsurilor PWM: durata Impulsurilor PWM: TPWM = 4 TOSC T2CKPS (1+PR2) TDC = TOSC T2CKPS (DC1B9:DC1B0) L293DNE DC Brushed Motor
.10
Exemplu de conectare:
6-12V DC
SIL5
PIC16F684
L293DNE
37
NIVEL 1
Laboratorul 5
L293DNE
NIVEL 1
Laboratorul 5
Lucrarea 4: Operarea cu modulul ECCP n modul PWM n semipunte H
Exemple de cod: 1. Comanda unui motor de curent continuu cu perii la 20% din turatia nominal
void main() { OSCCON=0b01110000; TRISC.RC5=0; TRISC.RC0=0; PORTC.RC0=1; T2CON.T2CKPS1=0; T2CON.T2CKPS0=0; T2CON.TMR2ON=1; PR2=9; CCPR1L=0b00000010; CCP1CON.P1M1=0; CCP1CON.P1M0=0; CCP1CON.DC1B1=0; CCP1CON.DC1B0=0; CCP1CON.CCP1M3=1; CCP1CON.CCP1M2=1; } // // // // // // // // // Ceas intern de 8 MHz Setare P1A in mod iesire Setare RC0 in mod iesire Setare RC0 in stare 1 logic Setare prescaler Timer 2 la 1:1 Pornire Timer 2 Setare valoare registru PR2 Setare primii 8 bii DB1B9:DB1B2 Setare CCP n mod de lucru PWM cu ieire simpl pe P1A
// Setare ultimii 2 bii DB1B1:DB1B0 // Setare CCP n mod de lucru PWM cu ieire simpl
2. Comanda unui motor de curent continuu cu perii la 80% din turatia nominal
void main() { OSCCON=0b01110000; TRISC.RC5=0; TRISC.RC0=0; PORTC.RC0=1; T2CON.T2CKPS1=0; T2CON.T2CKPS0=0; T2CON.TMR2ON=1; PR2=9; CCPR1L=0b00001000; CCP1CON.P1M1=0; CCP1CON.P1M0=0; CCP1CON.DC1B1=0; CCP1CON.DC1B0=0; CCP1CON.CCP1M3=1; CCP1CON.CCP1M2=1; } // // // // // // // // // Ceas intern de 8 MHz Setare P1A in mod iesire Setare RC0 in mod iesire Setare RC0 in stare 1 logic Setare prescaler Timer 2 la 1:1 Pornire Timer 2 Setare valoare registru PR2 Setare primii 8 bii DB1B9:DB1B2 Setare CCP n mod de lucru PWM cu ieire simpl pe P1A
// Setare ultimii 2 bii DB1B1:DB1B0 // Setare CCP n mod de lucru PWM cu ieire simpl
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]
38
PIC16F882
VDD
5V LED+ GND
PIC16F882
VPP VDD VSS ICSPDAT
VIN
CCP1
ICSPCLK
Algoritm: - setarea modulului CCP n mod de lucru captur la fiecare al 16-lea front cresctor - setarea prescalerului timerului 1 pentru durata maxim de timp msurabil fr overflow - activarea ntreruperii modulului CCP - la fiecare ntrerupere: - msurarea valorii curente de timp (T2) prin registrul CCPR1 (CCPR1H i CCPR1L) - determinarea numrului de impulsuri TTMR1 prin calculul diferenei 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 - afiarea rezultatului curent pe display VIN Formule de calcul: perioada impulsurilor TTMR1: nr. impulsuri pt. valoarea curent de timp T2: perioada T: frecvena: NetMedia 2x16 Serial LCD Exemplu de conectare:
VIN
16T TTMR1 = 4 / FOSC T1CKPS CCP1IF N2 = 256 CCPR1H+CCPR1L T = (N2 - N1) TTMR1 / 16 VTMR1 F = 1 / T = 16 / (N2 - N1) FOSC / 4 / T1CKPS
LED+ Rx* Rx 5 GND
T1 TTMR1
T2
SIL5
PIC16F882
39
NIVEL 2
Laboratorul 5
NIVEL 2
Laboratorul 5
Lucrarea 5: Frecventmetru numeric cu afisaj digital 2x16 caractere LCD
Exemplu de cod:
unsigned int N1,N2,N=0; void interrupt(){ N2=(unsigned int)(256*CCPR1H+CCPR1L); N=N2-N1; N1=N2; PIR1.CCP1IF=0; } void scrie(char m, char n, char tasta){ UART1_Write(17); UART1_Write(m); UART1_Write(n); UART1_Write(tasta); } void display(unsigned int val){ scrie(0,8,48+val/10000); val=val%10000; scrie(0,9,48+val/1000); val=val%1000; scrie(0,10,48+val/100); val=val%100; scrie(0,11,48+val/10); val=val%10; scrie(0,12,48+val); } void main() { OSCCON=0b01110000; TRISC.RC6=0; TRISC.RC2=1; UART1_Init(9600); UART1_Write(14); delay_ms(1000); UART1_Write(20); UART1_Write(255); UART1_Write(12); UART1_Write(13); UART1_Write_Text("Frecv.: T1CON.T1CKPS1=1; T1CON.T1CKPS0=1; T1CON.TMR1ON=1; CCP1CON=0b00000111; INTCON=0b11000000; PIE1.CCP1IE=1; PIR1.CCP1IF=0; while(1){ display(4000000/N); } } // Variabile pe 16 bii
// Calcul valoare curent registru TMR1 // Calcul interval de timp scurs ntre dou ntreruperi // Memorare valoare curent
// // // // //
Funcie scriere caracter la o anumit poziie Cod comand display scriere la poziie Alegere rnd Alegere coloan Scriere caracter
// Descompunere numr n digii i afiare // Digitul zecilor de mii // Digitul miilor // Digitul sutelor // Digitul zecilor // Digitul unitilor
// Ocilator intern de 8 MHZ // Portul TX ca port de ieire // Portul CCP1 ca port de intrare // // // // // // // // Iniializare comunicaie serial pe 9600 bauds Resetare display Ateptare resetare Setare backlight display Valoare backlight display Clear screen Carriage return Text iniial
Hz");
// Setare prescaler Timer 1 // Pornire Timer 1 // CCP n mod captur la al 16-lea front cresctor // Activare ntreruperi globale i periferice // Activare ntrerupere modul CCP // Resetare flag ntrerupere modul CCP
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
40
PIC12F675
VDD VR1 10K PIC12F675
VPP CINVDD VSS ICSPDAT COUT ICSPCLK
LED1 R1 330R
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Formule de calcul pentru tensiunea de referint: VRR = 1 (low range): VRR = 0 (high range): CVREF = VDD (VR3:VR0) / 24 CVREF = VDD (VR3:VR0) / 32 + VDD / 4
Exemplu de conectare:
A 1 SIL5 5
PIC12F675
41
NIVEL 1
Laboratorul 6
NIVEL 1
Laboratorul 6
Lucrarea 1: Utilizarea comparatorului analogic cu referint intern si semnal de intrare extern
Exemple de cod: 1. Compararea unei tensiuni reglabile de la un semireglabil cu o tensiune de referint intern de 2.5V
void main() { TRISIO.GP2=0; ANSEL.GP2=0; TRISIO.GP1=1; ANSEL.GP1=1; CMCON.CM2=0; CMCON.CM1=1; CMCON.CM0=1; CMCON.CINV=1; VRCON.VREN=1; VRCON.VRR=1; VRCON.VR3=1; VRCON.VR2=1; VRCON.VR1=0; VRCON.VR0=0; } // // // // // Setare Setare Setare Setare Mod de port COUT n mod ieire port COUT n mod digital port CIN- n mod intrare port CIN- n mod analogic lucru: compator cu Vref intern i o ieire
// // // //
Ieire inversat a comparatorului Pornire modul referint intern de tensiune Selectare gam Vref low range Stabilire valoare registru VR3:VR0
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
42
PIC12F675
VDD VR1 10K R1 4K3 VDD R3 1K4 LED1 R4 330R
CIN+
PIC12F675
CINVPP VDD VSS ICSPDAT COUT ICSPCLK
R2 4K3
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - msurarea tensiunilor VDD, VTH i VTL i compararea acestora cu valorile obinute prin calcul
Formule de calcul pentru tensiunile de referint: VAVG =(VTH+VTL) / 2 = VDD R2 / (R1+R2) VTH - VTL = VDD R1||R2 / (R3+R1||R2) 1K R1, R2 10K R3 < 100K
Exemplu de conectare:
VOUT
List de componente: LED 20 mA x1 R1, R2 = 4K3 x2 R3 = 1K4 x1 R4 = 330R x1 VR1 = 10K x1 IC1 = PIC12F675 x1
A 1 SIL5 5
PIC12F675
43
NIVEL 1
Laboratorul 6
NIVEL 1
Laboratorul 6
Lucrarea 2: Utilizarea comparatorului analogic cu histerezis
Exemple de cod: 1. Comparator cu histerezis
void main() { TRISIO.GP2=0; ANSEL.GP2=0; TRISIO.GP1=1; ANSEL.GP1=1; TRISIO.GP0=1; ANSEL.GP0=1; CMCON.CM2=0; CMCON.CM1=0; CMCON.CM0=1; CMCON.CINV=1; } // // // // // // // Setare Setare Setare Setare Setare Setare Mod de port COUT n mod ieire port COUT n mod digital port CIN- n mod intrare port CIN- n mod analogic port CIN+ n mod intrare port CIN+ n mod analogic lucru: comparator cu 2 intrri i o ieire
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
44
PIC16F88
VDD R3 4K3 VDD VR1 10K R2 6K2
C1INC1IN+
R4 LED1
C1OUT VPP VDD VSS PGD PGC C2OUT
C2IN+ C2IN-
PIC16F88
5 R5
R1 4K3 LED2
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On - msurarea tensiunilor VTH-HI i VTH-LO i compararea acestora cu valorile obinute prin calcul Formule de calcul pentru tensiunile de referint: VTH-LO =VDD R1 / (R1+R2+R3) VTH-HI =VDD (R1+R2) / (R1+R2+R3) 1K R1, R2, R3 1M Exemplu de conectare: VTH-HI VTH-LO VOUT2 VOUT1
List de componente: LED 20 mA x2 R1, R3 = 4K3 x2 R2 = 6K2 x1 R4, R5 = 330R x2 VR1 = 10K x1 IC1 = PIC16F88 x1
SIL5
PIC16F88
45
NIVEL 1
Laboratorul 6
A K
NIVEL 1
Laboratorul 6
Lucrarea 3: Utilizarea comparatorului analogic cu fereastr
Exemple de cod: 1. Comparator cu fereastr
void main() { ANSEL.RA0=1; TRISA.RA0=1; ANSEL.RA1=1; TRISA.RA1=1; ANSEL.RA2=1; TRISA.RA2=1; ANSEL.RA3=0; TRISA.RA3=0; ANSEL.RA4=0; TRISA.RA4=0; CMCON.CM2=1; CMCON.CM1=1; CMCON.CM0=0; CMCON.C1INV=0; CMCON.C1INV=1; } // // // // // // // // // // // Setare Setare Setare Setare Setare Setare Setare Setare Setare Setare Mod de port C1IN- n mod analogic port C1IN- n mod intrare port C2IN- n mod analogic port C2IN- n mod intrare port C2IN+ n mod analogic port C2IN+ n mod intrare port C1OUT n mod digital port C1OUT n mod ieire port C2OUT n mod digital port C2OUT n mod ieire lucru: comparatoare cu I/O externe
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
46
PIC16F882
VR3 10K VDD VR1 10K VDD VDD
VREF+ VREFAN0 RC7:0 RB7:6 VPP VDD VSS ICSPDAT ICSPCLK
VR2 10K
PIC16F882 1
LED1 R1 330R
Etape: - conectarea PICkit 2 la circuitul electronic si verificarea detectrii corecte a tipului microcontrolerului - crearea unui proiect nou n MikroC, alegnd 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 apsarea butonului Write - alimentarea circuitului electronic prin bifarea optiunii VDD PICkit 2 On
Exemplu de conectare:
List de componente: LED 20 mA x10 R1.. R10 = 330R x10 VR1..VR3 = 10K x3 IC1 = PIC16F882 x1
SIL5
PIC16F882
47
NIVEL 1
Laboratorul 7
NIVEL 1
Laboratorul 7
Lucrarea 1: Esantionarea unui semnal analogic cu frecvent constant
Exemplu de cod:
void interrupt() { PORTC=ADRESH; PORTB=ADRESL; delay_us(12); ADCON0.GO_DONE=1; PIR1.ADIF=0; } void main() { OSCCON=0b01110000; TRISA=0xFF; ANSEL=0xFF; ANSELH=0xFF; TRISC=0; TRISB=0; ADCON0.ADCS1=1; ADCON0.ADCS0=0; ADCON1.VCFG1=1; ADCON1.VCFG0=1; ADCON0.CHS3=0; ADCON0.CHS2=0; ADCON0.CHS1=0; ADCON0.CHS0=0; ADCON1.ADFM=0; ADCON0.ADON=1; PIE1.ADIE=1; INTCON.PEIE=1; INTCON.GIE=1; PIR1.ADIF=0; delay_us(12); ADCON0.GO_DONE=1; } // // // // // Afiare primii 8 MSB Afiare ultimii 2 LSB Ateptare Tacq Repornire achiziie tergere flag ntrerupere ADC
// Oscilator intern 8MHz // Portul A ca port de intrare // Portul A ca port analogic // // // // // // // // Portul C ca port de ieire Portul B ca port de ieire Frecvena de eantionare 32Tosc (ADCS1:0=10) Tensiune Vref+ pe pinul RA3 Tensiune Vref- pe pinul RA2 Selectare canal de intrare AN0 (CHS3:0=0000)
// // // // // // // //
Format date aliniat la dreapta Activare ADC Activare ntrerupere ADC Activare ntreruperi periferice Activare ntreruperi globale tergere flag ntrerupere ADC Ateptare Tacq Pornire achiziie
48