Moderadores: andre_luis, 51, guest2003, Renie
Más então no mundo digital o que é o tempo ?
R- O tempo é apenas números... Ao inverso de um numero de vezes que algo acontece dentro de 1..
fabim escreveu:maninho quando eu estava aprendendo sobre timer's do pic eu sofri, por não entender os conceitos de funcionamento de um relógio digital comum.
Como você deve saber, o tempo é algo contável de alguma forma, seja por engrenagens, luz do dia e noite, água areia. Mas tudo tem algo em comum !!! Números..
1 segundo é igual ao quê em sua concepção ?
1 segundo pode ser uma fração de algum tempo, ou um valor elevado E10+9 por exemplo.
Más então no mundo digital o que é o tempo ?
R- O tempo é apenas números... Ao inverso de um numero de vezes que algo acontece dentro de 1..
Por exemplo. Tu sabe que um cristal ressoa a 32767-X por segundo. Algum fabricante tem uma base de tempo de 1 segundo muito preciso e contou dentro disto 32767 oscilações do cristal.
Ou seja. para nosso um segundo o nosso numero é de 32767 + 1."+1 não vou explicar se vira".
Bom excluindo detalhes sórdidos.
Veja, qual o numero de bits necessários, para acomodar o valor 32768 ?
R-15 bits
Como você sabe, o pic tem um contador de 16 bits, isso quer dizer que ele conta até o dobro de 32678, ou seja 65536+1.
Bom, se sabemos que, nosso valor numérico para um segundo é de 32768, e temos um contador que conta o dobro disso, quantos segundos nós temos ??
R-2 segundos.
Lembrando que: No pic podemos gerar um sinal dizendo ao programa que o timer estourou e voltou a zero. Este sinal pode ser usado de inúmeras formas possíveis.
Por exemplo por interrupção.
Seguindo a linha de raciocínio.
Bom, sei que tenho algo que comporta 65537 e está para 2, e tenho 32768 que esta para 1.
Como posso utilizar meu numero para gerar uma interrupção a cada 1 segundo ao invés de 2 segundos ?
Fácil !!
O timer é acessível para escrita e leitura. CORRETO !!
E se, nós manualmente colocarmos dentro do timer o valor 32768 ? eim eim ?
Entenda.
Você demora 2 minutos para encher um recipiente de 2L usando 1 de um litro!!
Você coloca 1 litro no recipiente de 2 litros, dispara o contador e coloca só mais um litro. Quando tempo demorou ?
R- 1 minuto !!!
Chamamos de reload!!
Quando acontece a interrupção, você coloca um valor tal no contador de tempo, que a diferença deste valor colocado, até o máximo valor que o contador alcança gere a interrupção pela seu valor matemático de tempo!!
EX:
Quero que meu contador de 16 bits, gere uma interrupção a cada 500mS, meu valor matemático para o tempo de 1 segundo é de 32768.
1 segundo está para 32768.
1/2 segundo esta para 32768/2.
65536 fundo - 16384 nosso valor matemático para 1/2 segundo = 49152.
Quando interromper, você carrega o timer com o valor do resultado. O resultado do calculo acima mais 16384 que esta para meio segundo, é igual a 65536, que irá gerar outra interrupção.
Resumindo, tempo de meio segundo.
Agora como encontrar nosso valor matemático para 1 segundo ?
1 = frequência do cristal do pic / 4.
EX: 4mhz / 4 = 1 mhz!!
Fabim, nossa, 1mhz ?
Não cabe dentro de 65536 vai estourar um monte de vezes por segundo!!!
Para isto existe um divisor antes do timer, chamado preescaler !!
Ele pega este 1mhz, e divide por 2,4,8,16,128 por exemplo.
Seu valor matemático para um segundo é 1.000.000, se usar o preescaler dividindo por 16 por exemplo.
Seu valor matemático novo que é a base de um segundo fica.
1000000/16 = 62500 !!!!
Bom, já deu para você entender né ?
xultz escreveu:Más então no mundo digital o que é o tempo ?
R- O tempo é apenas números... Ao inverso de um numero de vezes que algo acontece dentro de 1..
Ô Fabim, me dá um pouco disso que você tá usando, porque deve se do bom!!!
edybahia escreveu:...preciso enteder como setar um código para que por exemplo durante 1 segunda acenda o led e logo após apague este led...
#int_TIMER2
void TIMER2_isr(void)
{
contador_8ms++;
if(contador_8ms == 125)
{
contador_8ms = 0;
segundos++;
}
}
xultz escreveu:Ele jamais diria isso, ele diria que o tempo pode ser dividido at� chegar a 1.10^-457 s e que menos que isso o tempo d� uns pulos. Ou coisa parecida.
Sobre o timer do PIC, vou dar um micro exemplo. Estou neste momento infelizmente e n�o por vontade pr�pria, eu podia estar matando, roubando, mas estou mexendo num firmware com PIC18F4520, e precisava de uma base de tempo precisa de 1s. Estou programando no CCS, n�o por vontade pr�pria, eu podia estar matando, roubando... acho que j� disse isso.
Ent�o assim:
O PIC est� rodando em cima de um cristal de 20MHz. Ele deveria estar com um cristal de 10MHz, e com PLL rodando a 40MHz, mas eu tamb�m podia estar matando... voc� entendeu.
O clock das instru��es vem do cristal, por�m dividido por 4. Ou seja, o clock das instru��es � de 5MHz, ou 200ns.
A� eu configurei o timer 2 assim:
setup_timer_2(T2_DIV_BY_16,249,10);
O que isso quer dizer:
Primeiro ele tem um prescaler de 16. Isso quer dizer que antes de entrar no timer, o clock � dividido por 16. O que era 5MHz, passou a ser 312,5kHz, ou 3,2us.
O timer tem um contador, que no caso do timer 2, come�a em zero e vai aumentando a cada clock, no meu caso, a cada 3,2us. E ele tamb�m tem um comparador, que quando � igual, ele gera um trigger. Eu configurei o comparador para 249. Como ele come�a em zero, ele precisa de 250 clocks para ficar igual a 249. Ao chegar neste valor, ele zera o contador e gera um trigger e reinicia a contagem.
Dessa forma, eu gero um trigger a cada 800us.
E o timer 2 tamb�m tem um postscale, que no meu caso eu configurei para 10. Ou seja, quando ele receber 10 triggers, ele gera uma interrup��o. O que no meu caso quer dizer que o timer 2 recebe uma interrup��o a cada 8ms.
Minha ISR do timer 2 ficou assim:
- Código: Selecionar todos
#int_TIMER2
void TIMER2_isr(void)
{
contador_8ms++;
if(contador_8ms == 125)
{
contador_8ms = 0;
segundos++;
}
}
Ou seja, na ISR eu fa�o um contador at� 125, isso quer dizer que ele chega a 125 em 8ms*125 = exatamente 1s.
Para a ISR ser chamada, logo depois de configurar o timer 0 precisa habilitar as interrup��es:
enable_interrupts(INT_TIMER2);
enable_interrupts(GLOBAL);
Note que isto serve para o timer2 do 4520, eu n�o lembro mais (gra�as a Deus) como s�o os timers do 628, mas espero que isto tenha ajudado de alguma forma.
edybahia escreveu:...a rotina de comando por exemplo quero que o led seja acionado qdo tiver 1 segundo por exemplo, ela deve esta no programa principal ?? sendo "testada" com um flag de estouro do timer ou deve estar na rotina de interrupção do timer ??
andre_teprom escreveu:edybahia escreveu:...a rotina de comando por exemplo quero que o led seja acionado qdo tiver 1 segundo por exemplo, ela deve esta no programa principal ?? sendo "testada" com um flag de estouro do timer ou deve estar na rotina de interrupção do timer ??
Fica � seu crit�rio.
Ambas funcionam : Interrup��o ou pesquiza.
Por�m, para voce come�ar a aprender a mexer com o microcontrolador, ser� mais f�cil por pesquiza, mas num passo seguinte, voce deve aprimorar o programa para trabalhar com interrup��o.
+++
Usuários navegando neste fórum: Google [Bot] e 1 visitante