Ir ao conteúdo
  • Cadastre-se

PIC e TIMER0 - Problema com a Freqüencia


Key_46

Posts recomendados

Olá galera, estou com um projetinho que envolve o PIC16F628A e que usa um de seus timers internos, no caso o TIMER0, para atingir uma freqüencia precisa entre 100 e 400 KHz, estou usando o Compilador MikroC para trabalhar no código, o PIC está ligado em um Oscilador de Cristal de 4MHz pelos pinos OSC1 e 2 com capacitores cerâmicos de 27pF e o circuito está alimentado por uma fonte de um celular antigo à aproximadamente 5v / 700ma. Bom, agora ao problema:

O Timer0 não fica de jeito nenhum com a freqüencia que eu preciso, como o Oscilador tem 4MHz eu coloquei o Prescaler em 1:16, assim 4000000 / 16 = 250Khz com o valor de TMR0 = 255 assim ele 'estoura' logo no primeiro incremento, Porém em um teste no qual eu liguei um led a uma porta e fui incrementando uma variavel até 250000 (teoricamente 1 segundo) para mudar o estado do led, nada aconteceu, o valor que eu precisei chegar com a variavel para o led mudar de estado a cada 1 segundo foi de aproximadamente 22Khz, o que está muito longe do que eu esperava.

O que pode estar acontecendo?

Valores do OPTION_REG: 0xC3 ou 1 0 1 0 0 0 1 1

INTCON: 0xA0 ou 1 0 1 0 0 0 0 0

TMR0: 255

função de interrupção:

unsigned int t = 0;

void interrupt()

{

if(t < 250000) //valor que deveria funcionar

{

t++;

}

else

{

t = 0;

LED = !LED

}

}

Obrigado.

Link para o comentário
Compartilhar em outros sites

Key_46,

não manjo muito de C, mais pelo q ví, o OPTION_REG no BIT 5 (T0CS) está configurado para contar a cada transição na entrada RA4, para funcionar com clock interno o bit 5 tem q ser "0", quando usado clock interno, o TMR0 incrementa a cada ciclo de máquina, como um ciclo dura 4 clock's.... a conta deveria ser (4000000/4)/16=62,5Khz

Link para o comentário
Compartilhar em outros sites

Key_46,

não manjo muito de C, mais pelo q ví, o OPTION_REG no BIT 5 (T0CS) está configurado para contar a cada transição na entrada RA4, para funcionar com clock interno o bit 5 tem q ser "0", quando usado clock interno, o TMR0 incrementa a cada ciclo de máquina, como um ciclo dura 4 clock's.... a conta deveria ser (4000000/4)/16=62,5Khz

Obrigado pela dica Elanio, vou refazer minhas contas :wacko: e voltarei a postar.

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...