Autor Tema: Dudas Al Crear Un retardo:  (Leído 2295 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado patadino

  • PIC10
  • *
  • Mensajes: 20
Dudas Al Crear Un retardo:
« en: 15 de Mayo de 2004, 14:19:00 »
Hola a todos, vamos a ver, no entiendo bien como se calculan los retardos, o el MPLAB se me vuelve loco porque no me salen...Pongamos de ejemplo que quiero crear un retardo de 1 segundo, que serian 1000000 us, como lo haria?es que poniendo el presscaler a 256 y TMR0 a 0 solo conseguiria 256*256 us de retardo.....que son milisegundos...como haria para un segundo??

Otra dudilla que tengo es si la epprom del 16f84a se borra al desconectar la alimentacion del chip , yo creo que no? tengo razon??

Desconectado khasistos

  • PIC18
  • ****
  • Mensajes: 493
RE: Dudas Al Crear Un retardo:
« Respuesta #1 en: 15 de Mayo de 2004, 14:33:00 »
Hola:
si trabajas en asembler hay un programa free que se llamam picloops,que te genera una rutina de retardo que tu le especifiques ,por el foro hay otro con otro nombre,y si trabajas en pro o plus es mas sencillo todavia pausems xxxms o pauseus xxx las xx son el tiempo que desear retardar.El picloops lo unico qu ehace es crearte una rutina de conteo que demora de acuerdo al numero del conteo tantos ciclos de reloj como el tiempo programado ,si no tienes que poner la instruccion nop que es un ciclo o tantas como necesites si es un tiempo corto.
Saludos
khasistos

Desconectado Ginho_rj

  • PIC12
  • **
  • Mensajes: 87
RE: Dudas Al Crear Un retardo:
« Respuesta #2 en: 15 de Mayo de 2004, 14:36:00 »
SE FOR EM C ,POSTO UM EXEMPLO AQUI!

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Dudas Al Crear Un retardo:
« Respuesta #3 en: 15 de Mayo de 2004, 15:50:00 »
Hola.

La formula para calcular un retardo es la siguiente:
T=256XPrescalerX(4/Fosc)

eso quiere decir que con un prescaler de 256 y un cristal de digamos 4Mhz solo podrías temporizar como máximo

0.065536 segundos que son 65536us

si quisieras temporizar por ejemplo 5 segundos con este prescaler y este cristal deberias hacer bucles.

Por ejemplo puedes temporizar 0,05 segundos y repetir la temporización 100 veces y asi tienes los 5 segundos.

Entonces sería 0,05=NºciclosX256X(4/4Mhz), aqui sacas el nº de ciclos que serían 195,31, redondeas a 195 ciclos y
llevas al TMR0= 256-195 ; TMR0=61 ciclos.

En resumen temporizando 0,05 segundos (61 ciclos en el tmr0) durante 100 veces tendrías tus 5 segundos aproximadamente.


Esta es una de las formas de hacer temporizaciones, hay varias, ademas de otras como te indican mas arriba mediante un software
con lo cual te ahorras los cálculos.

Espero que te hayas aclarado.

Saludos.

PD: La memoria EEPROM significa Electrical Erasable Read Only Memory, o sea que solo la borras eléctricamente, si quitas alimentación al pic se borra la RAM, nunca la EEPROM ni la ROM.

Desconectado patadino

  • PIC10
  • *
  • Mensajes: 20
RE: Dudas Al Crear Un retardo:
« Respuesta #4 en: 15 de Mayo de 2004, 16:12:00 »
Muchas Gracias oshow por tus aclaraciones, me han servido de mucho,pero hay una cosilla que no entiendo y no me kiero quedar sin entenderla; tu dices que la formula basica para el calculo de retardos es:
   Tretardo=256*Prrescaler*4/Fosc

En primer lugar el 256 es debido si duda al máximo TMR0 que se puede conseguir antes de que salte la interrupcion de overflow del TMR0...en segundo lugar esta el incremento del Preescaler, ok!, pero lo que no entiendo es por que pones 4/Fosc???
A que se debe ese4/...???ya que el periodo de un ciclo de un PIC a 4MHz seria 1/4MHZ, lo cual serian 0.25 us... No entiendo eso
De todos modos muchas gracias a todos por las claraciones, me habeis sido de gran ayuda!!un saludo

Desconectado oshow

  • PIC18
  • ****
  • Mensajes: 321
RE: Dudas Al Crear Un retardo:
« Respuesta #5 en: 15 de Mayo de 2004, 16:28:00 »
No, el periodo seria de 1us que es el resultado de dividir 4/4Mhz, si miras el data de cuaquier pic veras que cada ciclo son 4 pulsos de reloj , de ahí viene ese 4, si tienes 4Mhz cada instruccion tarda 1us que es el resultado de la división, si tuvieras un cristal de 20Mhz cada instrucción tardaria menos, exactamente el resultado de dividir 4/20Mhz.

Todo esto viene mas detallado en el data.

Saludos.

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
RE: Dudas Al Crear Un retardo:
« Respuesta #6 en: 15 de Mayo de 2004, 22:20:00 »
Puedes bajar el siguiente programa que está en todopic.com.ar

http://www.todopic.com.ar/utiles/calcular_retardos.zip

Sólo llama una subrutina y el sólo genera el código para el retardo que requieras.

Desconectado Ginho_rj

  • PIC12
  • **
  • Mensajes: 87
RE: Dudas Al Crear Un retardo:
« Respuesta #7 en: 16 de Mayo de 2004, 03:55:00 »
tente este codigo ele faz piscar um led no pino b1  a cada 1 s
utilizando timer0:

#include <16f877a.h>
#use delay(clock=4000000)
#fuses HS,NOWDT,PUT,NOLVP

#int_timer0
void trata_t0 ()
{
   static boolean led;
   static int conta;
   // reinicia o timer 0 em 131 mais a contagem que já passou
   set_timer0(131+get_timer0());
   conta++;
   // se já ocorreram 125 interrupções
   if (conta == 125)
   {
      conta=0;
      led = !led;  // inverte o led
      output_bit (pin_b1,led);
   }
}

main()
{
   // configura o timer 0 para clock interno e prescaler dividindo por 64
   setup_timer_0 ( RTCC_INTERNAL | RTCC_DIV_64 );
   set_timer0(131); // inicia o timer 0 em 131
   // habilita interrupções
   enable_interrupts (global | int_timer0);
   while (true); // espera interrupção
}



obs:ele não é muito preciso, tenho um codigo com mais precisao,se necessitar!!!