Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
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

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

0xC3 não é 10100011

0xC3h=11000011b

Compartilhar este post


Link para o post
Compartilhar em outros sites

Desculpem foi um erro de digitação. Mas então, alguma ideia do problema?

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

Editado por Moley

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

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

×