Página 1 de 2
Timers->entendimento

Enviado:
29 Mai 2008 12:50
por antonio
Pessoal
tudo bem !!
A mais uma vez estou pedindo ajuda,porque não estou entendendo direito a formulas com os Timersè assim;
Estou a ler sobre o funcionamentos dos timers e procurando pele net encontrei umas formulas de trabalhar com os timers que eu fiquei voando a tenter entender mas não foi capaz,isto para o timer0
A formula para encontrar um valor para cargar o timer,com um preescaler de 16 e o oscilador de 4Mhz .
T = (256 -carga) * Preescaler * 4 / Fosc
T = (256 - carga) * 16 * 4 / 4 MHz
=> precarga = 256 - T * 62500
No exemplo acima que tirei da net não estou entendendo como é como o autor que escreveu o codigo acima consegue aqueles 62500, porque a mim não da não... olha aí só! esta parte ...16 * 4 / 4 MHz è igual a .0000016 e não 62500
Afinal a onde eu estou confundindo a bagunça!!
Algem tem explicaçao par isto??
Desde jA agradeço

Enviado:
29 Mai 2008 13:39
por fabim
mim quer saber uma coisa.
estas formulas, são para cagar o que ?
Você quer criar um timer ou um delay com o TIMER0 ?
Se você operar com 4mhz, o clock real dos periféricos é de 4/4 = 1mhz ou 1uS=0.000001.
Voce pode usar o preescaler de preenchimento para o TMR0.
Se não me engano os valores deste preescaler.
8,16,64,128,256.
Olha que interessante.
TMR0 = 256 para estouro
O processo tem ck de 0.000001S.
256*0.000001 = 256uS.
Se voce utilizar o preescaler no valor de 128.
Tempo de estouro do timer 0 =
256 * 128 * 0.000001 = 0,032768S.
é +/- isso que vocÊ quer entender ?
Fabim

Enviado:
29 Mai 2008 14:22
por Sergio38br
Boas, algumas fontes da net mostram uma formula mas detalhada do calculo do timer0,
pre-carga = 256 - ( T / (((1/Fosc) * 4)* prescaler) onde
T = periodo do timer em segundos
prescaler = valor escolhido para o ranger desejado
Fosc = frequencia do cristal
Sergio

Enviado:
29 Mai 2008 15:00
por fabim
não sei se o amigo esta no inicio do começo.rsrs
Mais sobre temporização..
Contador primario... preescaler
Contador secundario .... TIMER0.
Funcionamento.
Na pratica.
É simplesmente o preescaler, um outro Timer0, configuravel com valores com potencia de 2 fixo. cuja este fornece pulsos para alimentar outros periféricos, dado como o WDT por exemplo ou mesmo o Timer0.
Este prescaler pode ser configurado entre estes valores à baixo.
2,8,16,32,64,128,256 - quando o mesmo é utilizado para o TMR0
E
1,2,4,8,16,32,64,128 - quando o mesmo é utilizado para o WDT.
Vamos em um exemplo simplão.
Cristal de 4mhz.
Como se sabe as instruções internas do pic rodam FCK/4.
Tempo base intão de
1/ (FCK/4) = 1uS ou 0.000001S.
Quero usar o TMR0 de tal forma que são multiplos de 256uS
Seto o Prescaler para 256*0.000001S = a cada 256uS o TMR0 é incrementado.
Bom vamos lá.
Quero setar o TMR0 para estouro a cada 10mS+/-.
Quantos 256uS cabem dentro de 10mS ?
39, que se aprossima mais.
39 * 0.000256 = 0,009984S.
Agora a técnica do zoiômetro!!
Sei que a interrupção do Timer 0, acontece a cada estouro dos 256 valores possiveis, voltando a contar de zero novamente.
Porêm cada valor é equivalente a 256uS.
Se eu sei que são necessarios 39 valores em 256uS para proximo dos 10mS..
Begin...
256 - 39 = 217.!!!
Eu escrevo 217 no timer0
de 217 para 256 são 39 * 256uS que dá aproximadamente 10mS para o estouro acontecer.!!
"obs. isto não é muito funcional para tempos precisos.. pois nunca se sabe qual oi valor atual do preescaler" Existem outros periféricos mais precisos dentro do pic..
Espero que entenda.
Fabim

Enviado:
29 Mai 2008 15:38
por ze
particularmente nunca usei estas fórmulas. p.ex. veja por outro zóio: (é a lesma lerda que disse fabim evacuando de ôta cabeça):
quero 100Hz na saída do timer0 e sei que nele entra 1MHz/prescaler. xuto 128=>7812.5hz entrando nele. se na saída quero 100 => 7812.5/100 =78.12 devo cargá-lo com 256-78.12=~178. já era...
o uso de fórmula deixa teu cód + inteligente (não é o meu caso)
podes usar #defines. ex:
#define T 1/100
#define FOSC 4000000
#define prescaler 128
#define pre_carga 256 - ( T / (((1/Fosc) * 4)* prescaler)
...
TMR0=pre_carga
...
se quiseres precisão, usa cristal múltiplo de 2
abrç

Enviado:
29 Mai 2008 16:12
por antonio
Pessoal
o que pertendo entender é calcular que valor que hà escreber no TIMER0 para obter um tempo desejado de desbordamento da RTCC:
Ou seja TIMER0 = 256 - (Time / (4/FOSC) )+preescaler, isto è coreto? ou como faço? para obter com timer um desbordamento a cada 400ms?
Nota.Nisto de trabalhar com os timers eu estou começando por isso peço acompreenção de todos, jä agora as minhas desculpas se por vezes nao falo direito ok
gratos

Enviado:
29 Mai 2008 16:34
por fabim
bom. 400mS certo.!! mais qual cristal voce vai utilizar ? qual a frequencia do cristal !! ?
Veja o valculo.!!
pre-carga = 256 - ( T / (((1/Fosc) * 4)* prescaler) onde
Desmembrando isso, chegasse ao que eu expliquei atraz..
(((1/Fosc) * 4) =
Se o cristal for de 4mhz...
1/4 000 0000 * 4 = 1uS * prescaler "2,4,8,16,32,64,128,256".
Vamos chutar prescaler = 256
(1/4kk)*256 = 256uS
T/ valor aí em cima =
0.400/0.000256 =
se o timer zero vai até 256 !!
Como você vai subtrai 15623 dele ?..
T máximo que voce consegue =
8 bits * prescaler * ((1/F)*4)
256 * 256 * 0.000 001 = 0,065536S...
pra voce saber quanto é o maximo de tempo que consegue com uma dada frequencia de cristal..
Valor do contador * valor do prescaler * ((1/Frequencia do xtal)*4)
VLW

Enviado:
29 Mai 2008 16:40
por Sergio38br
Antonio qual o PIC que vc esta utilizando?
Sergio

Enviado:
29 Mai 2008 16:42
por ze
400mS&timer0... esquece.(pic16F648 no meu ex.)
timer1..16bits..65536
400mS=2,5Hz 1000000hz/prescaler(xut8)=125Khz-->125000/2.5=50000 => 65536-50000=15536 = 0x3cb0 => TMR1H=0X3C;TMR1L=0XB0;
será????
não te preocupes com tua inexperiência e com o que vão pensar de ti.
quem pergunta é bobo por 5 minutos. Quem não, pra sempre.
abrç

Enviado:
29 Mai 2008 16:50
por fabim
lelis você errou a tabela ASC vou foi de proposito ?
Fiquei mesmo..rsrs

Enviado:
29 Mai 2008 17:29
por ze
0x43 0x6F 0x72 0x72 0x69 0x67 0x69 0x21

Enviado:
30 Mai 2008 19:02
por antonio
Brigado gente ,mesmo aqules que estao brincando!!
Desculpe ,mas s'o hoje è que tenho um pouquinho para passar por cá!
Bem eu estou a brincar com o 16F877A ja vi o seu datasheet mas como o meu ingles è meio fraco ficou a bagunça cheio de duvidas !!
O que eu realmente pertendia era saber era saber calcular o valor para o TIMER0 para obter o tais 400ms
O exemplo que eu postei no primeiro topico deixou-me voando por nao entendi como foram obtidos aqueles 62500,
Eu gostaria de saber se está certo ou errado ?a formula do primeiro topico
Um abraço

Enviado:
31 Mai 2008 05:04
por antonio
Pessoal não esquenta não, eu só quero vossa ajuda plase!
Aqui vai mais exemple que me deixa sofrendo ,como com esta formula se comdegue o valor 106?? para carregar o TMRO?
Se desejo un desbordamento do TIMER0, uma RTCC,a cada 100 microsegundos, com um cristal de 6 Mhz calcularíamos:
TIMER0 = 256 - (0.000100 / (4/6.000.000)) = 106
Logo caregando TIMER0 com 106 (6Ah ) obteríamos uma RTCC cada 100 microsegundos ou 0.1 milisegundos o
Algem me consegue clareficar isto??

Enviado:
31 Mai 2008 15:39
por Muga

Enviado:
31 Mai 2008 19:03
por antonio
brigado amigo Muga!
Muga fiz o dowload no endereço que vc postou ,mas não deu para abrir o arquivo?
Atè