timer0 .... Como calcular ?

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

timer0 .... Como calcular ?

Mensagempor geraldomelo » 09 Abr 2007 04:46

Pessoal , estou rodando esse programa num pic 12F629 :

#include <12F629.h>
#fuses INTRC,NOWDT,NOPROTECT, NOMCLR
#use fast _io (A)
#use delay(clock=4000000)
#include <regs_12F6xx.h>

#int_timer0

void trata_t0 ()
{
short int led;
led=!led; // inverte led
gpio=led; }
main()
{
osccal=0x5B; /* osccal .. valor que vem de fábrica , mas aqui
no caso , eu fui atribuindo valores e medindo
no frequencimetro para um valor melhor ..*/


trisio=0; // trisio zerado .. todos os gpios para saida
cmcon = 7 ; // todas as enradas como digitais
gpio=0; // iniciando o port gpio --> todo zerado

setup_timer_0 (rtcc_internal | rtcc_div_256) ;
enable_interrupts ( global | int_timer0 );


while(true)
{

}
}

Então eu teria o meu (fosc/4) / 256 do prescaler , e depois , dividido por 256 de novo , para estourar o timer0 ... então vai :

1000000/256/256 = 15,25 hz ... Ok até aqui ?

Mas ai , com o frequencimetro no pino gpio0 , marca a frequencia de 7,6 Hz ... exatamente a metade ...

What´s happening ?????

Abraços
Geraldo
geraldomelo
Byte
 
Mensagens: 267
Registrado em: 14 Out 2006 16:53
Localização: Ribeirão preto - SP

Mensagempor lucaszampar » 09 Abr 2007 09:29

Acho que está dando a metade da freqüência pois a cada 15,25Hz ele muda o estado do pino, então você precisa que ocorram duas interrupções para completar um ciclo... por isso está dando exatamente a metade.

Tente dividir o T0 por 128... Acho que funciona...
Avatar do usuário
lucaszampar
Byte
 
Mensagens: 105
Registrado em: 11 Out 2006 22:30
Localização: Limeira - SP

Mensagempor geraldomelo » 09 Abr 2007 18:28

Fala ai grande Lucas ..

Então , se eu dividir por 128 , dão os 15,3 hz , mas na verdade , oque eu queria entender , é como calcular a frequencia ...

Bom , pelo que vc disse Lucas , acho que deve ser por ai .. vamos ver ...

1 interrupção ... pino estado alto ... outra interrupção ... pino estado baixo ...mais uma interrupção ... pino estado alto ..

por ai tudo bem , mas então a formula para calcular o prescaler e a divisõa do timer não bate ué ...

tá meio confuso ainda ...... alguém mais se habilita ?

abraços
Geraldo
geraldomelo
Byte
 
Mensagens: 267
Registrado em: 14 Out 2006 16:53
Localização: Ribeirão preto - SP

Mensagempor Fernando Guimarães Aguiar » 10 Abr 2007 09:07

geraldo a formula que vc utilizou para calculo da frequencia de interrupcao do timer esta correta

Código: Selecionar todos
Então eu teria o meu (fosc/4) / 256 do prescaler , e depois , dividido por 256 de novo , para estourar o timer0 ... então vai :

1000000/256/256 = 15,25 hz ... Ok até aqui ?


mas o que o lucas explicou é que quando vc mede a frequencia de oscilacao do gpio0 vc esta medindo não a frequencia de interrupção do timer0, mas sim a frequencia de oscilação do gpio0 (1 interrupção ... pino estado alto ... outra interrupção ... pino estado baixo ). Ou seja a freq de oscilação do gpio0 é metade da freq de interrupcao do timer.

Então o que o lucas sugeriu é que caso vc queira que a oscilação do pino gpio0 em XXHz, vc deve setar a interrupção do timer em 2*XXHz, e uma saída para isso seria dividir o preescaler por 2.


Código: Selecionar todos
por isso está dando exatamente a metade.


Mas é o seguinte...
Vc tem que explicar melhor qual frequencia vc está querendo obter?
A frequencia de interrupção do timer ou a frequencia de oscilação do pino gpio0![/i]
Avatar do usuário
Fernando Guimarães Aguiar
Nibble
 
Mensagens: 53
Registrado em: 21 Out 2006 10:54
Localização: São Carlos


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x