Timers->entendimento

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Timers->entendimento

Mensagempor antonio » 29 Mai 2008 12:50

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
antonio
Byte
 
Mensagens: 209
Registrado em: 15 Out 2006 12:34

Mensagempor fabim » 29 Mai 2008 13:39

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
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Sergio38br » 29 Mai 2008 14:22

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
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor fabim » 29 Mai 2008 15:00

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
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor ze » 29 Mai 2008 15:38

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ç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor antonio » 29 Mai 2008 16:12

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
antonio
Byte
 
Mensagens: 209
Registrado em: 15 Out 2006 12:34

Mensagempor fabim » 29 Mai 2008 16:34

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
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor Sergio38br » 29 Mai 2008 16:40

Antonio qual o PIC que vc esta utilizando?

Sergio
Avatar do usuário
Sergio38br
Word
 
Mensagens: 759
Registrado em: 22 Nov 2007 13:39
Localização: São Paulo - SP

Mensagempor ze » 29 Mai 2008 16:42

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ç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor fabim » 29 Mai 2008 16:50

lelis você errou a tabela ASC vou foi de proposito ?

Fiquei mesmo..rsrs
Mano, ve só.
Sou responsável pelo que escrevo!!! E não pelo que você entende !!!
fabim
Dword
 
Mensagens: 5001
Registrado em: 16 Out 2006 10:18
Localização: aqui uái!!!?

Mensagempor ze » 29 Mai 2008 17:29

0x43 0x6F 0x72 0x72 0x69 0x67 0x69 0x21
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor antonio » 30 Mai 2008 19:02

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
antonio
Byte
 
Mensagens: 209
Registrado em: 15 Out 2006 12:34

Mensagempor antonio » 31 Mai 2008 05:04

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??
antonio
Byte
 
Mensagens: 209
Registrado em: 15 Out 2006 12:34

Mensagempor Muga » 31 Mai 2008 15:39

Muga
Bit
 
Mensagens: 33
Registrado em: 21 Out 2006 09:41
Localização: Guaira - SP

Mensagempor antonio » 31 Mai 2008 19:03

brigado amigo Muga!

Muga fiz o dowload no endereço que vc postou ,mas não deu para abrir o arquivo?

Atè
antonio
Byte
 
Mensagens: 209
Registrado em: 15 Out 2006 12:34

Próximo

Voltar para PIC

Quem está online

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

x