Sunteți pe pagina 1din 20

UNIVERSITATEA POLITEHNICA BUCURETI

Facultatea de Electronic, Telecomunicaii i Tehnologia Informaiei


Catedra Electronic Aplicat i Ingineria Informaiei

MICROCONTROLERE LABORATOR 4

.l.Dr. Ing Rodica Constantinescu


Dr.Ing. Teodor Costchioiu
Microcontrolere Laborator 4

Scopul lucrrii

Configurarea oscilatorului intern al PIC18F45K20


Pentru a utiliza oscilatorul intern al PIC18F45K20 setati registrii de configurare la INTIO67 sau
INTIO7. Aceasta ultima valoare va avea drept efect transmiterea semnalului de ceas pe pinul RA6

Frecventa ceasului intern al PIC18F45K20 poate fi setata prin intermediul registrului de


configurare OSCCON

Putem faca modificari fine ale frecventei de tast si putem actica/dezactiva bucla PLL prin
intermediul registrului de configurare OSCTUNE

Bucla PLL poate fi activata atunci cand frecventa de baza a oscilatorului intern este de 8MHz sau
de 16MHz. Activarea buclei PLL are drept efect multiplicarea cu 4 a frecventei oscilatorului,
obtinndu-se frecvente de lucru de 32MHz i respectiv 64MHz.

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 1

Schema bloc simplificata a oscilatorului intern al PIC18F45K20


INTOSC este un oscilator intern de 16MHz, calibrat, urmat de un divizor programabil (postscaler)
astfel incat s fie posibil generarea de frecvente de tact intre 31KHz i 16MHz

INTRC este un generator de tact de 31KHz i este utilizat i pentru operarea unor periferice i
funcii ale microcontrolerului, cum ar fi watchdog-ul.

Daca dorim operarea microcontrolerului la o frecventa de 31KHz putem alege ca sursa de tact
INTOSC, ce are avantajul de a fi calibrat , sau INTRC, ce ofera un consum de energie redus

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Schema bloc a oscilatorului intern al PIC18F45K20


Setarea default dup reset este de 1MHz

Prin setarea corespunzatoare a registrilor de configurare putem alege intre 10 frecvene de tact

Daca dorim operarea microcontrolerului la o frecventa de 31KHz putem alege ca sursa de tact
INTOSC, ce are avantajul de a fi calibrat , sau INTRC, ce ofera un consum de energie redus

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Oscilatorul intern al PIC18F45K20


Frecventa de tact se seteaza prin intermediul biilor IRCF2:0

Putem schimba frecventa de tact in timpul rularii unui program, astfel incat sa beneficiem de
putere de calcul maxima atunci cand este nevoie, ca apoi sa reducem frecventa de tact pentru un
consum redus de energie

Daca dorim operarea microcontrolerului la o frecventa de 31KHz putem alege ca sursa de tact
INTOSC, ce are avantajul de a fi calibrat , sau INTRC, ce ofera un consum de energie redus

Biii OSTS i IOFS sunt biti de stare, ce pot fi doar cititi

Biii SCS1:0 permit schimbarea sursei de tact n timpul rulrii unui program. n lucrarea noastr
vor fi setati la valoarea 00

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Desfsurarea lucrrii
Reluati codul 02_blink_LED.c de la laboratorul 1

Modificati codul surs pentru a seta oscilatorul intern la 2MHz

Ce valoare trebuie inscris n OSCON??

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Desfsurarea lucrrii
Reluati codul 02_blink_LED.c de la laboratorul 1

Modificati codul surs pentru a seta oscilatorul intern la 2MHz

Ce valoare trebuie inscris n OSCON??

In OSCCON va trebui s setm IRCF=100

restul biilor din OSCCON raman neschimbai

OSCON = 01000000 = 40h

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Codul surs 02_blink_LED.c


void main (void)

TRISD = 0b01111111; // PORTD bit 7 to output (0) ; bits 6:0 are inputs (1)

while (1)

LATDbits.LATD7 = ~LATDbits.LATD7; // toggle LATD

Delay1KTCYx(50); // Delay 50 x 1000 = 50,000 cycles; 200ms @ 1MHz

Unde introducem setarea pentru OSCCON?

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Codul surs 02_blink_LED.c


void main (void)

OSCCON=0x40;

TRISD = 0b01111111; // PORTD bit 7 to output (0) ; bits 6:0 are inputs (1)

while (1)

LATDbits.LATD7 = ~LATDbits.LATD7; // toggle LATD Delay1KTCYx(50); //


Delay 50 x 1000 = 50,000 cycles; 200ms @ 1MHz

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Exercitiu 2
Modificai codul surs precedent pentru a seta oscilatorul intern la 500 KHz

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Exercitiu 2
Modificai codul surs precedent pentru a seta oscilatorul intern la 500 KHz

IRCF = 010

OSCCON = 00100000 = 20h

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Codul surs pentru exercitiul 2


void main (void)

OSCCON=0x20;

TRISD = 0b01111111; // PORTD bit 7 to output (0) ; bits 6:0 are inputs (1)

while (1)

LATDbits.LATD7 = ~LATDbits.LATD7; // toggle LATD

Delay1KTCYx(50); // Delay 50 x 1000 = 50,000 cycles; 200ms @ 1MHz

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Exercitiul 3
Scrieti un program pentru microcontrolerul PIC18F45K20 care sa realizeze
urmatoarele:

Sa seteze oscilatorul intern la o frecventa de 2MHz

Sa aprind i s sting succesiv LED-ul conecta la pinul RB0, cu o intrziere de


50000 perioade de tact

La apsarea butonului s modifice frecventa de lucru a oscilatorului intern la


500KHz

Nu se vor folosi tehnici de debouncing

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Exercitiul 3
Pornim de la codul sursa al aplicatiei 04_Switch_input.c

Descrcai codurile surs, compilai i rulai codul initial

Cum modificam codul?

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Exercitiul 3
Pornim de la codul sursa al aplicatiei 02_blink_LED.c

Descrcai codul surs, compilai i rulai codul initial

Cum modificam codul?

Setarea oscilatorului intern


Pentru operare la 2MHz e nevoie sa punem in OSCCON valoarea 0x40

Pentru operare la 500KHz e nevoie sa punem in OSCCON valoarea 0x20

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Exercitiul 3

Codul sursa CONFIGURARE PORTURI

void main (void)


{
TRISD = 0b00000000; // PORTD bits 7:0 are all outputs (0)
INTCON2bits.RBPU = 0; // enable PORTB internal pullups
WPUBbits.WPUB0 = 1; // enable pull up on RB0
ANSELH = 0x00; // AN8-12 are digital inputs (AN12 on RB0)
TRISBbits.TRISB0 = 1; // PORTB bit 0 (connected to switch) is input (1)
OSCCON=0x40; // pornim cu oscilatorul la 2MHz
LATD=0x00; // toate LED-urile sunt initial stinse

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 4

Exercitiul 3
Codul sursa initial bucla while(1)

while (1)
{
LATDbits.LATD7 = ~LATDbits.LATD7; // toggle LATD
Delay1KTCYx(50); // Delay 50 x 1000 = 50,000 cycles; 200ms @ 1MHz
}

Codul sursa modificat introducem schimbarea frecventei de tact

while (1)
{
LATDbits.LATD7 = ~LATDbits.LATD7; // toggle LATD
Delay1KTCYx(50); // Delay 50 x 1000 = 50,000 cycles; 200ms @ 1MHz
if (PORTBbits.RB0==0) //butonul apasat
OSCCON=0x20;
else //daca nu e apasat atunci e liber
OSCCON=0x40;
}

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu


Microcontrolere Laborator 1

NTREBRI

.l.Dr. Ing Rodica Constantinescu, Dr.Ing. Teodor Costchioiu

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