Fise Lab SCS

44
Laboratorul 1 Lucrarea 1: Conectarea programatorului ICSP. Setarea porturilor în mod iesire NIVEL 1 Obiective: 1. Conectarea unui programator PICkit 2 sau PICkit 3 la un microcontroler 2. Compilarea unui program scris în mediul MikroC 3. Scrierea codului HEX în memoria program a microcontrolerului 4. Alimentarea microcontrolerului de la programatorul PICkit 2 / PICkit 3 PIC12F675 GP2 LED1 R1 330R 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 K SIL5 1 5 Exemplu de conectare: PIC12F675 5 PIC12F675 Registrii specifici: ANSEL TRISIO GPIO Listã de componente: x1 x1 x1 LED 20mA R1 = 330R IC1 = PIC12F675

description

science

Transcript of Fise Lab SCS

Page 1: Fise Lab SCS

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

Page 2: Fise Lab SCS

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 }}

Page 3: Fise Lab SCS

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

Page 4: Fise Lab SCS

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 }}

Page 5: Fise Lab SCS

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

Page 6: Fise Lab SCS

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 }}

Page 7: Fise Lab SCS

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

Page 8: Fise Lab SCS

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 }}

Page 9: Fise Lab SCS

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

Page 10: Fise Lab SCS

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 }}

Page 11: Fise Lab SCS

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

Page 12: Fise Lab SCS

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); }}

Page 13: Fise Lab SCS

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

Page 14: Fise Lab SCS

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); }}

Page 15: Fise Lab SCS

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

Page 16: Fise Lab SCS

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}

Page 17: Fise Lab SCS

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)

Page 18: Fise Lab SCS

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

Page 19: Fise Lab SCS

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

Page 20: Fise Lab SCS

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

Page 21: Fise Lab SCS

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)

Page 22: Fise Lab SCS

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

Page 23: Fise Lab SCS

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

Page 24: Fise Lab SCS

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

Page 25: Fise Lab SCS

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

Page 26: Fise Lab SCS

Laboratorul 4Lucrarea 6: Decodor pentru potentiometru digital cu codare

30

NIVE

L 2

Page 27: Fise Lab SCS

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

Page 28: Fise Lab SCS

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 }

Page 29: Fise Lab SCS

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)

Page 30: Fise Lab SCS

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

Page 31: Fise Lab SCS

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

Page 32: Fise Lab SCS

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

Page 33: Fise Lab SCS

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

Page 34: Fise Lab SCS

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;}

Page 35: Fise Lab SCS

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

Page 36: Fise Lab SCS

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

Page 37: Fise Lab SCS

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

Page 38: Fise Lab SCS

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

Page 39: Fise Lab SCS

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

Page 40: Fise Lab SCS

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

Page 41: Fise Lab SCS

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

Page 42: Fise Lab SCS

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

Page 43: Fise Lab SCS

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

Page 44: Fise Lab SCS

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 ș

ț ș