Timers->entendimento

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Mensagempor kaoalex » 01 Jun 2008 07:56

Funciona para mim.
Avatar do usuário
kaoalex
Byte
 
Mensagens: 237
Registrado em: 12 Out 2006 01:52

Mensagempor amboni » 02 Jun 2008 07:58

da uma olhadinha nisso aqui colega....

quen sabe te clareia alguma coisa....

http://www.edutecbauru.com.br/cursopic/aula14.htm

abraço
amboni
Nibble
 
Mensagens: 50
Registrado em: 23 Abr 2008 08:26
Localização: Içara - SC

Mensagempor fabim » 02 Jun 2008 08:46

pre-carga = 256 - ( T / (((1/Fosc) * 4)* prescaler).

Tõen.
Olha a formula à cima. Voce quis saber como descobre o valor a ser colocado no TMR0 certo.

Lembra em um post atráz que eu perguntei quantos 256uS cabem dentro de 10mS ?
Vamos descobrir intãozios.
Código: Selecionar todos
 
  0.010S                     /dividivo/                         0.000256 = 39,0625
  tempo desejado                               Tempo do prescaler
 
   Bom eu achei o valor 39,0625 8 bits apenas inteiro, como o valor após a virgula não passou de 0.5, então arredonda-se o valor para o inteiro "39".
 
   Bom eu sei que com a formula.
   Prescaler *(1/( Fcristal/4)).
   Eu descubro qual o tempo que leva para o prescaler rodando com cristal do pic, leva para incrementar 1 valor a mais no TIMER0.

   Assim, suponha que o TMR0 esta com um valor 101,  .....256uS,102,......256uS,103 sucessivo. quanto o TIMER0 chegar a 255, ele esta cheio certo ? mas o flag que indica estouro, ou a interrupção acontece quando ocorrer + 1 incremento e o timer passar de 255 para 0, "por isso diz-se que 8 bits tem 256 valores, de "0 a 255=256.

 Bom intendido.
 Quando eu uso o prescaler para tempos maiores, eu preciso descobrir qual o tempo de incremento do prescaler, depois descobrir  quantos incrementos cabem dentro do tempo que eu escolhi.
 
 Agora vem sua dúvida, ..

                    TIMER0  menos        valor achado a cima = 39 "pres 256"
 pre-carga = 256                     -       ( T / (((1/Fosc) * 4)* prescaler).
 
  256 - 39 = 217 << 217 é a dita pré carga.
 
  217 ......256uS, 218.....256uS, 219......256uS.....255 encheu.....256uS estourou.

 Pronto.. bizóia só.
 Eu descobri quantos 256uS cabém dentro do tempo que eu preciso"isso com prescaler setado para 256*", subtrai esse calor de 256, que é o maximo valor do TMR0, o resultado da subtração eu escrevo no TMR0.
 E um abraço.

 Es a aca  n o a tinta. 
 
 


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 Budweiser » 29 Jun 2008 01:36

Vixi...
Eu estou desorientado!

Quando preciso de um tempãaaao beeeeem grandeeee (como 500ms) e não quero usar um clock externo, eu uso o TIMER com prescaler em 1 mesmo, e uso uma variável em um loop para ir incrementando...
Código: Selecionar todos
void Delay_ms( unsigned int MSec)
{
  unsigned int delay_aux = MSec;
  // Timer 1 Prescaler 1:1
  T1CONbits.TON = 1;
  do
  {
    IFS0bits.T1IF  = 0; // Flag Status...
    PR1 = 20000; // 1ms a 80MHz;
    while (IFS0bits.T1IF == 0);
    delay_aux --;
  }
  while (delay_aux > 0);
  T1CONbits.TON = 0; // Desliga Timer 1...
  return;
}
Budweiser
Nibble
 
Mensagens: 68
Registrado em: 28 Mar 2008 15:37
Localização: Florianópolis - SC

Mensagempor Budweiser » 29 Jun 2008 01:43

Entenderam?
Vocês podem ter 65 535ms com uma variável de 16 bits...
Ou 4 294 967 295ms com uma variável de 32bits... eita tempãoooo grandeeeeeee....

Fui!
Budweiser
Nibble
 
Mensagens: 68
Registrado em: 28 Mar 2008 15:37
Localização: Florianópolis - SC

Mensagempor fabim » 29 Jun 2008 13:48

neca seu burro.rsres tira esse mS da frente.. na verdade tem que colocar cM.... Ciclo de maquina.rsrs

aiai

Bom cho ir esvaziar o cerebro o treim ta feio.

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 » 30 Jun 2008 07:49

hi, bud
o propósito do prescaler é economizar a cabecinha do uC deixando o trabalho sujo pro hw. Lembre-se que o uC de 8 bits gosta mais de variáveis de............8 bits. (Talvez até os 16 e 32, não?) Se tu és rico e tens memória e recursos de processamento sobrando, felicidades aos 2. Pelo jeito tem. 80Mhz!!
abrç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Budweiser » 30 Jun 2008 08:32

Isso, lellis, 80MHz... Neste caso, uso esta função para DSC...
E consigo uma boa margem de exatidão com ela...

Abraços!
Budweiser
Nibble
 
Mensagens: 68
Registrado em: 28 Mar 2008 15:37
Localização: Florianópolis - SC

Anterior

Voltar para PIC

Quem está online

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

cron

x