Sunteți pe pagina 1din 44

Lucrarea 1: Conectarea programatorului ICSP.

Setarea porturilor n mod iesire


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
ICSP
VPP VDD

PIC12F675 1

GP2

VSS ICSPDAT ICSPCLK

LED1 R1 330R

VPP VDD GND PGD PGC

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

Registrii specifici: ANSEL TRISIO GPIO

Exemplu de conectare:

List de componente: LED 20mA x1 R1 = 330R x1 IC1 = PIC12F675 x1

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

2. Modificarea periodica a valorii unui port


void main() { ANSEL.B2=0; TRISIO.B2=0; while(1){ GPIO.B2=1; delay_ms(500); GPIO.B2=0; delay_ms(500); } } // Setare port GP2 in mod digital // Setare port GP2 in mod iesire // // // // Setare port GP2 in 1 logic Asteptare 500 ms Setare port GP2 in 0 logic Asteptare 500 ms

Lucrarea 2: Setarea porturilor n mod intrare


Obiective: 1. Conectarea unui dispozitiv de intrare la portul unui microcontroler 2. Operarea cu porturile n modul intrare

PIC12F675
VDD SW1
GP5

PIC12F675
VPP VDD VSS ICSPDAT GP2 ICSPCLK

ICSP 1 VPP VDD GND PGD PGC

R2 10K 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

Registrii specifici: ANSEL TRISIO GPIO

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

// Starea logica a GP2 identica cu GP5

Lucrarea 1: Operarea cu oscilator extern de tip RC


Obiective: 1. Setarea ceasului principal al unui microcontroler n modul oscilator extern de tip RC 2. Aprinderea si stingerea succesiv a unui LED conectat la un port n mod iesire

PIC16F88
VDD R1 6K8 C1 150nF LED1 R2 330R PIC16F88
OSC1 VPP VDD OSC2 VSS PGD RA2 PGC

ICSP 1 VPP VDD GND PGD 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

Registrii specifici: ANSEL TRISA PORTA OSCCON

Exemplu de conectare:

List de componente: x1 LED 20mA x1 R1 = 330R x1 R2 = 6K8 x1 C1 = 150nF x1 IC1 = PIC16F88

.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

Lucrarea 2: Operarea cu oscilator extern cu cuart/rezonator ceramic


Obiective: 1. Setarea ceasului principal al unui microcontroler n modul oscilator extern cu cuart sau rezonator ceramic 2. Aprinderea si stingerea succesiv a unui LED conectat la un port n mod iesire

PIC16F88
C1 XTAL1 22pF 8MHz PIC16F88
OSC1 VPP VDD OSC2 VSS PGD RA2 PGC

ICSP 1 VPP VDD GND PGD PGC

C2 22pF 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 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

Registrii specifici: ANSEL TRISA PORTA OSCCON

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

Lucrarea 3: Operarea cu generator extern de ceas


Obiective: 1. Setarea ceasului principal al unui microcontroler n modul generator extern 2. Aprinderea si stingerea succesiv a unui LED conectat la un port n mod iesire

PIC16F88
DS32kHz VDD
VCC GND 32kHz

PIC16F88
OSC1 VPP VDD VSS PGD RA2 PGC

ICSP 1 VPP VDD GND PGD 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

Registrii specifici: ANSEL TRISA PORTA OSCCON

GND

Exemplu de conectare:

List de componente: LED 20mA x1 R1 = 330R x1 IC1 = PIC16F88 x1 IC2 = DS32kHz x1

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

Lucrarea 1: Operarea cu generatorul intern de ceas (HF). Afisorul cu 7 segmente


Obiective: 1. Setarea ceasului principal al unui microcontroler n modul generator intern 2. Comanda unui afisor cu 7 segmente de tip anod comun

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

ICSP 1 VPP VDD GND 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

Registrii specifici: ANSEL TRISB PORTB OSCCON

MDE1123
a f e d g b c dp
e a f CA g c dp d CA b

Exemplu de conectare:

List de componente: Afisor MDE1123 x1 R1..8 = 330R x8 IC1 = PIC16F88 x1

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

// Caracterul A pentru anod comun

2. Afisarea succesiva a doua caractere la interval de 500 ms


void main() { ANSEL=0; TRISB=0; OSCCON=0b00110000; while(1){ PORTB=0b10000000; delay_ms(500); PORTB=0b11111001; delay_ms(500); } }

// Setare mod digital // Setare port in mod iesire // Ceas intern de 4 MHz // Caracterul 0 (anod comun) // Caracterul 1 (anod comun)

16

Lucrarea 2: Operarea cu generatorul intern de ceas (LF). Comanda unui releu


Obiective: 1. Setarea ceasului principal al unui microcontroler n modul generator intern 2. Comanda unui releu pentru aprinderea unui LED de la o tensiune extern de 12V

PIC16F88
R2 560R
COM NO L1

12V 12V

PIC16F88
VPP VDD VSS

ICSP 1 VPP VDD GND PGD PGC

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

Registrii specifici: ANSEL TRISB PORTB OSCCON

L1

L2

BC337 12V DC 250V~ AC C B E NC

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

BC337 12V DC 250V~ AC

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

2. Pornirea si oprirea succesiv a releului la interval de 500 ms


void main() { OSCCON=0b00000000; ANSEL.B0=0; TRISB.B0=0; while(1){ PORTB.B0=1; delay_ms(500); PORTB.B0=0; delay_ms(500); } } // Ceas intern de 31.25 kHz // Setare port RB0 n mod digital // Setare port RB0 n mod ieire // Setare port RB0 n 1 logic // Setare port RB0 n 1 logic

18

Lucrarea 1: Operarea cu ntreruperea intern INT


Obiective: 1. Operarea cu ntreruperea intern INT 2. Modificarea strii unui port la apsarea unui buton cuplat la portul INT 3. Circuite de debouncing hardware

PIC16F684
ICSP
VPP VDD

VDD PIC16F684 R2 10K D1 1N4148


INT

VSS ICSPDAT

SW1

R3 10K

C1 100nF LED1 R1 330R

RC5

ICSPCLK

VPP VDD GND PGD PGC

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

Registrii specifici: INTCON

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

// Surs de ceas definit prin FOSC2:FOSC0 // Ceas intern de 31.25 kHz

// // // // // //

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

Lucrarea 2: Operarea cu ntreruperea modulului Timer 0 si surs de ceas Fosc/4


Obiective: 1. Operarea cu ntreruperea modulului Timer 0 si surs de ceas Fosc/4 2. Calculul perioadei de generare a ntreruperilor 3. Generarea de ntreruperi periodice

PIC16F684
PIC16F684
VPP VDD

ICSP 1 VPP VDD GND PGD PGC

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.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)

Registrii specifici: OPTION_REG INTCON TMR0

Exemplu de conectare:

List de componente: LED 20 mA x1 R1 = 330R x1 IC1 = PIC16F684 x1

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

// Setare prescaler Timer 0 la 1:16

// // // // // //

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

Lucrarea 3: Operarea cu ntreruperea modulului Timer 0 si surs de ceas extern T0CKI


Obiective: 1. Operarea cu ntreruperea modulului Timer 0 si surs de ceas extern T0CKI 2. Calculul perioadei de generare a ntreruperilor 3. Generarea de ntreruperi periodice

PIC16F684
ICSP
VPP VDD VSS ICSPDAT

DS32kHz VDD
VCC GND 32kHz

PIC16F684
T0CKI

RC0

ICSPCLK

VPP VDD GND PGD 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 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

Registrii specifici: OPTION_REG INTCON TMR0

GND

Exemplu de conectare:

List de componente: LED 20 mA x1 R1 = 330R x1 IC1 = PIC16F684 x1 IC2 = DS32kHz x1

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

// Setare prescaler Timer 0 la 1:64

// // // // // //

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

Lucrarea 4: Operarea cu ntreruperea modulului Timer 1 si surs de ceas Fosc/4


Obiective: 1. Operarea cu ntreruperea modulului Timer 1 si surs de ceas Fosc/4 2. Calculul perioadei de generare a ntreruperilor 3. Generarea de ntreruperi periodice

PIC16F684
PIC16F684
VPP VDD

ICSP 1 VPP VDD GND PGD PGC

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

Registrii specifici: INTCON T1CON TMR1H TMR1L

Exemplu de conectare:

List de componente: LED 20 mA x1 R1 = 330R x1 IC1 = PIC16F684 x1

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

Lucrarea 5: Operarea cu ntreruperea modulului Timer 2


Obiective: 1. Operarea cu ntreruperea modulului Timer 2 2. Calculul perioadei de generare a ntreruperilor 3. Generarea de ntreruperi periodice

PIC16F684
PIC16F684
VPP VDD RC0 VSS ICSPDAT ICSPCLK

ICSP 1 VPP VDD GND PGD 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 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

Registrii specifici: INTCON T2CON PR2

Exemplu de conectare:

List de componente: LED 20 mA x1 R1 = 330R x1 IC1 = PIC16F684 x1

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

// Setare valoare prescaler la 1:16 // Setare valoare postscaler la 1:16

// // // // //

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

Lucrarea 6: Decodor pentru potentiometru digital cu codare


Obiective: 1. Generarea unei secvente de comand a motoarelor pas-cu-pas unipolare 2. Calculul vitezei de rotatie a axului motorului 3. Generarea de secvente de comand simple, duble si mixte

PIC16F684
PIC16F684 ICSP
VPP INT VDD VSS ICSPDAT ICSPCLK

VDD R1 5K A Encoder C B R2 5K
RB1

VPP VDD GND PGD PGC

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

Registrii specifici: INTCON

Exemplu de conectare:

List de componente: IC1 = PIC16F684 x1 STEC12E07 x1 R1, R2 = 5K x2

SIL5

PIC16F684

29

NIVEL 2

Laboratorul 4

NIVEL 2
30

Laboratorul 4
Lucrarea 6: Decodor pentru potentiometru digital cu codare

Lucrarea 1: Operarea cu modulul ECCP n modul captur


Obiective: 1. Operarea cu modulul ECCP n modul captur (Capture) 2. Generarea de ntreruperi la evenimente externe de tip apsare de buton

PIC16F684
VDD PIC16F684 R2 10K D1 1N4148
P1A VPP VDD VSS ICSPDAT RC2 ICSPCLK

ICSP 1 VPP VDD GND PGD PGC

SW1

R3 10K

C1 100nF 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 - 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

Registrii specifici: CCP1CON CCPR1H CCPR1L PIE1 PIR1

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

// Surs de ceas definit prin FOSC2:FOSC0 // Ceas intern de 8 MHz

// // // //

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

// // // //

Activare Activare Activare Resetare

ntreruperi globale ntreruperi periferice ntrerupere modul CCP flag ntrerupere modul CCP

2. Generare de ntrerupere la fiecare al 4-lea front cresctor


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=1; CCP1CON.CCP1M0=0; INTCON.GIE=1; INTCON.PEIE=1; PIE1.CCP1IE=1; PIR1.CCP1IF=0; } // Inversare stare logic port RC3 // Revenire din ntrerupere

// Surs de ceas definit prin FOSC2:FOSC0 // Ceas intern de 8 MHz

// // // // //

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

// // // //

Activare Activare Activare Resetare

ntreruperi globale ntreruperi periferice ntrerupere modul CCP flag ntrerupere modul CCP

32

Lucrarea 2: Operarea cu modulul ECCP n modul comparare


Obiective: 1. Operarea cu modulul ECCP n modul comparare (Compare) 2. Generarea unei ntreruperi si modificarea strii unui port la un interval predefinit dup apsarea unui buton

PIC16F684
VDD PIC16F684 R2 10K D1 1N4148
INT VPP VDD VSS ICSPDAT P1A ICSPCLK

ICSP 1 VPP VDD GND PGD PGC

SW1

R3 10K

C1 100nF 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 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

Registrii specifici: CCP1CON CCPR1H CCPR1L PIE1 PIR1

TCCP1 = 4 TOSC T1CKPS (1+CCPR1L) (1+CCPR1H)


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

// // // //

Ceas intern Setare port Setare port Setare port

de 500 INT n INT in P1A in

kHz modul digital mod intrare mod ieire

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

Lucrarea 3: Operarea cu modulul ECCP n modul PWM cu o singur iesire


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
PIC16F684 Hitec HS-422 VDD
P1A VPP VDD VSS ICSPDAT ICSPCLK

ICSP 1 VPP VDD GND PGD PGC

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

Registrii specifici: CCP1CON CCPR1L T2CON PR2

Exemplu de conectare:

List de componente: IC1 = PIC16F684 x1 Servo Hitec HS-422 x1

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

Lucrarea 4: Operarea cu modulul ECCP n modul PWM n semipunte H


Obiective: 1. Operarea cu modulul ECCP n modul generator de semnal PWM n semipunte 2. 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
VMOT DC Motor
1Y VCC1 VPP VDD M VCC2

L293D

VDD

PIC16F684 1

ICSP VPP VDD GND PGD PGC

C1 100nF

1,2EN 1A

RA0 P1A P1B

VSS ICSPDAT ICSPCLK

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

Registrii specifici: CCP1CON CCPR1L T2CON PR2

Exemplu de conectare:

6-12V DC

1,2EN 1A 1Y GND GND 2Y 2A Vcc2

Vcc1 4A 4Y GND GND 3Y 3A 3,4EN

List de componente: C1 100 nF x1 IC1 = PIC16F684 x1 IC2 = L293DNE x1 DC Motor Brushed x1

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

Lucrarea 5: Frecventmetru numeric cu afisaj digital 2x16 caractere LCD


Obiective: 1. Operarea cu modulul ECCP pentru msurarea duratelor de timp 2. Operarea cu un display 2x16 caractere LCD cu comand serial

PIC16F882
VDD
5V LED+ GND

NetMedia 2x16 Serial LCD


Rx* TX

PIC16F882
VPP VDD VSS ICSPDAT

ICSP 1 VPP VDD GND PGD PGC

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

Registrii specifici: CCP1CON CCPR1H CCPR1L T1CON

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

List de componente: NetMedia 2x16 x1 IC1 = PIC16F882 x1 IC2 = DS32kHz x1

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

// Calcul i afiare 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

40

Lucrarea 1: Utilizarea comparatorului analogic cu referint intern si semnal de intrare extern


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
VDD VR1 10K PIC12F675
VPP CINVDD VSS ICSPDAT COUT ICSPCLK

ICSP 1 VPP VDD GND PGD 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 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

Registrii specifici: CMCON VRCON

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:

List de componente: LED 20 mA x1 R1 = 330R x1 VR1 = 10K x1 IC1 = PIC12F675 x1

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

Lucrarea 2: Utilizarea comparatorului analogic cu histerezis


Obiective: 1. Utilizarea comparatorului analogic n modul de lucru cu dou intrri analogice externe si o iesire extern digital 2. Stabilirea valorilor de prag ale comparatorului cu histerezis

PIC12F675
VDD VR1 10K R1 4K3 VDD R3 1K4 LED1 R4 330R
CIN+

PIC12F675
CINVPP VDD VSS ICSPDAT COUT ICSPCLK

ICSP 1 VPP VDD GND PGD PGC

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

Registrii specifici: CMCON VRCON

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

VTH VAVG VTL

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

// Ieire 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

44

Lucrarea 3: Utilizarea comparatorului analogic cu fereastr


Obiective: 1. Utilizarea simultan a dou comparatoare analogice 2. Stabilirea valorilor de prag ale comparatorului cu fereastr

PIC16F88
VDD R3 4K3 VDD VR1 10K R2 6K2
C1INC1IN+

R4 LED1
C1OUT VPP VDD VSS PGD PGC C2OUT

330R ICSP 1 VPP VDD GND PGD PGC

C2IN+ C2IN-

PIC16F88

5 R5

R1 4K3 LED2

330R Registrii specifici: CMCON

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

// Ieire neinversat a comparatorului C1 // Ieire 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

46

Lucrarea 1: Esantionarea unui semnal analogic cu frecvent constant


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
VR3 10K VDD VR1 10K VDD VDD
VREF+ VREFAN0 RC7:0 RB7:6 VPP VDD VSS ICSPDAT ICSPCLK

VR2 10K

PIC16F882 1

ICSP VPP VDD GND PGD PGC

LED1 R1 330R

LED10 ... R10 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

Registrii specifici: ADCON0 ADCON1

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

S-ar putea să vă placă și