Retardos por software

February 9, 2007 at 4:53 pm | Posted in Tutorial | 31 Comments

La semana pasada, en la segunda parte del tutorial 1, se habló un poco sobre los retardos por software. Ahora vamos a ver esto de la lógica de los retardos un poco más a fondo para poder crear nuestras propias subrutinas.

Como ya se dijo el pic 16F628A tiene un oscilador interno de 4MHz, si utilizamos ese oscilador tenemos que todas las instrucciones se ejecutan en 1uS, exceptuando los saltos que tardan 2 ciclos, es decir 2uS. Tomando en cuenta eso vamos a generar nuestros retardos, pero siempre partiendo de la suposición de que se esta trabajando a una frecuencia de 4MHz, si es así, crear rutinas de retardo para nuestro pic es muy sencillo.

Supongamos que tenemos la siguiente rutina:

ret11.png

A la derecha de cada instrucción aparece el número de ciclos que tomará cada una. Las primeras dos toman solamente 1 ciclo, la tecera decfsz toma (N-1)+2, porque decrementará N-1 veces la variable N y en el último decremento hará un salto, es por eso el +2.

Lea el artículo completo en el blog Circuitos electronicos.

31 Comments »

RSS feed for comments on this post. TrackBack URI

  1. me ayudo un poco para comprender acerca de los retardos ya que tenia algunas dudas de lo que veo en clase. me gustaria me enviaran mas informacion con respecto a la programacion de pics

  2. Para más información sigue visitando este sitio, tal vez en próximas actualizaciones encuentres algo que te sirva, y espero que sea así.

  3. hola yo ando haciendo un programilla balazo kon retardos pero kiero hacer los retardos de 2.5 segundos pero no entendi komo aria para hacerlo de 2.5 segundo veo ke se multiplikan por dekadas pero no comprendo komo hacerlo mas shiko

  4. El ejemplo que expuse fue para 1 segundo, pero sirve para hacer retardos de cualquier duración. Por ejemplo, tu quieres un retardo de 2.5 segundos, eso es igual a 2500000 micro segundos, si utilizas un oscilador de 4MHz entonces un retardo 2.5 segundos te toma 2500000 ciclos de instruccion, si tomas el mismo retardo del ejemplo y los mismos valores para m y n entonces al final sustituyes esos 2500000 en la “formula” para calcular el valor de P por lo que tienes que 9995P+1=2500000 y entonces P=(2499999)/9995 y de ahi sale que el valor que debe tener P es aproximadamente igual a 250.
    Asi que para un retardo de 2.5 segundos ocupas que N tenga un valor de d’33’, M uno de d’97’ y P uno de d’250′.
    Espero que te sirva!

  5. HOLA QUISIERA SAVER COMO FUNCIONA EL CMCOM QUE FUNCION TIENE POR QUE LO UTILIZAS Y DIME EL DELAY TAMBIEM COMO FUNCIONA GRACIAS

  6. el CMCON sirve para configurar los comparadores analógicos del pic, en los ejemplos que aparecen en esta página utilizo CMCON para desactivar los comparadores y poder usar los pines del puerto A como entradas y salidas digitales, checa la hoja de datos para que tengas mas informacion.

    Y el delay, pues creo que esta muy bien explicado como funciona.

  7. savez quisiera saver por que lo cargar el cmcon con el numero 7 gracias

  8. es decir como se que se desactiva en que registro lo desactivo no entiendo

  9. Daniel, lee la hoja de datos del pic, consulta la sección en la que se hable de los comparadores analógicos para que sepas como funciona el registro CMCON

    Lo de cargar el número 7 al CMCON es, como ya te dije, para desactivar los comparadores analógicos, consulta la hoja de datos del pic, la puedes encontrar en la página de microchip, ahi esta toda la información referente al registro CMCON y los comparadores analógicos

  10. […] Este modo sirve para generar temporizaciones y bases de tiempo de la misma forma que los retardos por software, sin embargo las temporizaciones con el Timer 0 pueden ser más exactas y además se cuenta con la […]

  11. Hola…entendi un poco mas ya de retardos …con lo d mi clase y lo de esta pag ps si me ayudo..pero quisiera saber como serian los cálculos…pero como seria un retardo de un minuto 16 MHZ

  12. solo tengo una duda
    ¿cuanto es el tiempo maximo de retardo por cada variable ?

  13. o cual seria el valor maximo de n,m,p,etc???
    sin mas por el momento

    grasias

  14. el valor máximo para cualquier variable (n,m,p,etc) es 255 decimal o lo que es igual 0xFF en hexadecimal.

  15. HOLA A TODO ESPERO QUE ALGUIN PUEDA AYUDARME QUIERO HACER UN PROGRAMA PARA CONTROLAR UN MOTOR DC CON ENCODER PARA CONTROLAR LA POSICION RPM SENTIDO DE GIRO CON UAN PANTALLA LCD ESPERO POR FAVOR ES URGENTE

  16. Hola, me gustaria si me pudieseis ayudar a crear un programa que al poner un 1 en cualquiera de 6 de las entradas del pic activase una salida durante 1-2 segundos.

    Muchas gracias de antemano.

  17. me gustaria qu me ayuden a hacer un temporizador 16f84A al poner un 1 en cualquier pata temporizar una salida de 15 seg. Espero su respuesta a mi mail.

  18. Te vas a quedar esperando sebastian, aqui tienes toda la información que necesitas para hacer tu programa y aqui no se hacen tareas.

    Espero que leas este tutorial y que te ayude a que realices tu programa.

  19. EL TUTORIAL ES MUY BUENO FUE DE MUCHA AYUDA
    ESTA MUY BIEN EXPLICADO LO DE RETARDOS ANIDADOS

    GRACIAS

  20. Muy bien explicado el procedimiento para realizar retardos.
    Tengo que decirte que me aclaro mucho algunas dudas y resolvi todo con un papel y lapicera haciendo las ecuaciones.
    Estoy estudiando sobre microcontroladores desde hace unos tres meses por mi cuenta y explicaciones como las tuyas me sirven como base en mi aprendizaje diario.
    Muchas gracias.

  21. holas, esta muy bueno..
    una pregunta.. como seria el cordigo para 1,2segundos?

  22. Hola, ando en una tarea de la escuela el cual me dejaron hacer un programa de una rutina de retardo configurable en microsegundos y milisegundos el cual encienda y apague los leds del puerto B segun el retardo, espero me puedan ayudar, Gracias

  23. hola, lo que yo quiero hacer es realizar una tarea cada cierto tiempo (ahi es donde usaria retardos) va en realidad dos tareas. La idea es por ejemplo esperar una hora realizar una tarea (un pata del micro a uno)durante 2 hs,esperar 5 hs mas y realizar otra tarea que dure 1 hora (otra pata del micro a uno).
    Bueno sabiendo esto me puse a leer acerca de retardos con lo que estendi bien con esta explicacion y llegue a hacer retardos de una hora. debido que los retardos son muy largos me gustaria ver las horas (solo horas no minutos ni seg) y no puedo hacerlo de la manera convencional ya que el pic estara atendiendo la interrupcion y no podre mostrar por display. Lo unico que se me acurrio es algo sencillo, medio que escapando del pic. Bueno si yo ocupo RA0 a RA4 para las tareas, o sea 5 tareas y utilizo de RB0 a RB3 para un convertidor de 7 segmentos y de RB4 a RB7 para otro puedo ver las horas sin tener que usar el barrido para ver los displays.
    Hay alguna manera mas censilla que esta con pics. por que no se me ocurre otra cosa.
    Espero que se entienda lo que quiero explicar.
    Desde ya gracias.

  24. Oye, que buen tutorial! Me estoy adentrando en la programación de PICs y tu blog me ha sido muy útil. Felicidades por tan buen material.

  25. hola a todos, el tutorial esta perfecto, gracias micropic, con esto se pueden hacer retardos de larga duración, pero tengo una pregunta:
    quiero que un led prenda 200ms y apague 200ms, todo esto lo debe hacer en un tiempo de 10 seg. Lo de los 200 ms lo arregle utilizando tmr0 y el retardo de 15 seg lo tengo hecho con el metodo utilizado en este apartado. Ahora; nose como unirlos para que trabajen juntos.El pic que utlizó es el 16f877a, se que existen los tmr1 y tmr2 pero los implemento para otras acciones asi que por favor necesito un ejemplo de como hacerlo mediante los ejemplos anteriores. gracias adios.

  26. por favor es urgente

  27. hola, los ejemplos de retrados estan bien explicados, me ayudo a entender mejor. gracias

  28. de verdad muchas gracias por estas instrucciones..

  29. en que cambiaria las rutinas si se usa un crystal de 20 mhz ???

  30. hola amigos me parece muy execelente el foro: tengo una duda
    vimos en::..:. RETARDO
    MOVLW N
    MOVWF CONT
    CICLO
    DECFSZ CONT,F
    GOTO CICLO
    LA PREGUNTA ES la CONT se declara como una variable como
    CBLOCK
    CONT
    ENDC

    PERO A ESTE QUE VALOR SE LE ASIGNA O QUE VALOR DEL REGISTRO¡? ES NECESASRIO ASIGNAR¡? POR FAVOR ESO ES LA DUDA QUE TENGO.

  31. saludos:
    los valores de las variables sabemos que pueden variar… entonces mi pregunta es, cual es el metodo para sacar un resultado optimo¿?


Leave a comment

Blog at WordPress.com.
Entries and comments feeds.