Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  
Key_46

PIC e TIMER0 - Problema com a Freqüencia

Recommended Posts

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.

Compartilhar este post


Link para o post
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

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites
o OPTION_REG no BIT 5 (T0CS) está configurado para contar a cada transição na entrada RA4
0xC3 não é 10100011

0xC3h=11000011b

rsrsrsrs só analisei o binario

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que na verdade eu esqueci de levar em conta que o Timer é por ciclo e nao por cada mudança no nivel do clock :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora
Entre para seguir isso  





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×