PIC: Configurando o Oscilador Interno
Os microcontroladores possuem uma fonte de clock interna. Mas nem todos os microcontroladores possuem, como é o caso do PIC16F877A.
O oscilador interno pode ser constituído por 1 ou 2 osciladores. O oscilador interno de alta-frequência HFINTOSC, está ligado á um divisor de frequência, e funciona a 8MHz.
O HFINTOSC é ligado escolhendo umas das sete frequências(8Mhz - 125Khz) e ativando o bit SCS (system Clock Select) do registro OSCCON.
O LFINTOSC funciona a 31Khz e não vem calibrado de fábrica.
OSCCON - esse registro configura a frequência do oscilador.
IRCF2:IRCF0 - Seleção da frequência do oscilador interno.
111 - 8Mhz
110 - 4Mhz
101 - 2Mhz
100 - 1Mhz
011 - 500Khz
010 - 250Khz
001 - 125Khz
000 - 31Khz
OSTS - Status de uso do oscilador. ( É somente leitura )
1- Oscilador externo em uso.
0 - Um dos osciladores interno está em uso.
IOFS - Status da estabilidade do oscilador interno.
1 - Estável
0 - Instável
SC1:SC0 - Seleção da fonte de clock.
OSCTUNE - quaisquer alteração no registro, afeta somente o HFINTOSC. Esse registro faz a sintonização da frequência, fazendo com que a frequência também varia.
INTSRC - No caso do PIC18F4550 a frequência de 31Khz pode ter duas origens
1 - 31.25Khz derivado do próprio HFINTOSC.
0 - 31Khz vem do INTRC.
TUN4:TUN0 - Sintonização
01111 - Máxima frequência
.
.
00000 - Frequência central
.
.
11111 - Mínima frequência
Quando você programar o microcontrolador para utilizar o oscilador interno, no caso do PIC18F4550 ele inicia com frequência de 1Mhz. No código de programação você pode escolher uma outra frequência.
EXEMPLO:
MikroC PRO PIC
void interrupt(){ portd.f2 = ~portd.f2;//inverte o estado da saida intcon.tmr0if = 0;//limpa a flag de overflow do TMR0 } void main(){ TRISD.F2 = 0;//pino de saida //Configura o oscilador interno para 8MHz OSCCON.IRCF2 = 1; OSCCON.IRCF1 = 1; OSCCON.IRCF0 = 1; // tmr0l = 0; t0con = 0b11010111;//timer0 configurado como temporizador intcon.tmr0ie = 1;//ativa interrupção timer0 intcon.tmr0if = 0; intcon.gie = 1;//ativa interrupção global intcon.peie = 1;//ativa interrupção perifericos }
Tenho um display 16×2, modelo JHD 162A, quando ligo ele ao pic 18F4550, com a rotina normal, o display exibe em sua primeira linha apresenta blocos preenchidos, e sua segunda linha fica em branco , gostaria de uma ajuda para que conseguisse imprimir algo no display, no proteus o programa funciona corretamente, mas quando coloco no protoboard acontece isto.
ResponderExcluirIsso acontece devido ao contraste, ajuste o contraste via potenciômetro. Deve corrigir.
ExcluirTiago, sabes se existe alguma forma de calibrar o oscilador interno do PIC, não estou falando do osctune e sim a frequência calibrada de fábrica, tenho alguns pic aqui que se programo para utilizar o oscilador interno de 4mhz e deixo o ra4 em clockout meço 1,377mhz neste pino que deveria estar próximo doa 1mhz, se configuro o osctune para que o oscilador trabalhe na menor frequência ele fica em 1,277mhz.
ResponderExcluir