subrutina de retardo de un segundo
| #1 subrutina de retardo de un segundo |
| #2 Re: demora |
|
maunix
Colaborador
|
¿A qué llamas 1 segundo exacto? ¿Para que microcontroaldor lo quieres hacer? |
|||||||||||||
|
|
||||||||||||||
| #3 |
|
Ivan Alejandro Godoy
|
Gracias por responder. Yo necesito la duración de un segundo que tiene cualquier reloj. Lo quiero usar en un pic 16f84 y en un pic 16f877a. Se que tienen distinta frecuencia de trabajo, pero rengo ese dilema con el retardo.
las demoras del programa PICDEL son buenas?. Gracias. Ivan |
|||||||||||
|
|
||||||||||||
| #4 |
|
mario18560
|
Hola:
1- Si lo que necesitas es una subrutina de temprorizacion y ya, utiliza con confianza el PICDEL. 2- Si quieres hacerla "casera", te explico como. Para hacer una rutina de 1 segundo exacto, tendras que repetir un multiplo de veces una temporizacion mas pequeña basada en la cuenta del timer del PIC. Por ejemplo, si quieres 1 segundo, tendras que repetir 100 veces una tempo mas pequeña, de 10 ms por ejemplo (100 por 10ms = 1 segundo). Para dicha tempo tienes que usar la formula: Tempo de 10ms = 4 . Tclk . valor de cuenta de timer . prescaler Ten en cuenta que los valores a setear en el timer dependeran de la frecuencia del oscilador con que el PIC trabaje, es decir Tclk = 1 / fclk, donde fclk es la frecuencia del cristal u oscilador que utilices. Luego puedes cargar un registro auxiliar CONTA con el valor d'100' e irlo decrementando hasta 0. Cada vez que decrementes, deberas ejecutar tu tempo de 10ms. Si lo que quieres es 1 segundo muy exacto -el caso de un reloj-, tendras que seguir muy de cerca la cantidad de instrucciones que realizas luego de temporizar, calcular las diferencias que estas introducen en tu tempo, y compensarlas. Espero haberte sido util. Un cordial saludo. |
|||||||||||
|
|
||||||||||||
| #5 |
|
maunix
Colaborador
|
A lo que iba con el 'tiempo exacto' es que es 100% dependiente de la precisión del cristal que uses y del corrimiento que tenga en definitiva el circuito oscilador que va conectado al PIC. Un corrimiento de un 0,01% hará que no obtengas 1.000000000000000000 segundos, sino algo 'similar' . Si quieres hacer un reloj, entonces tendrás problemas a la hora de hacer 'varios en serie', a eso apuntaba la pregunta. Si quieres medir 1 segundo con una precisión de un reloj comun y solo lo usarás para medir ese segundo , como te dice mario está ok. Ahora bien, si quieres hacer 'un reloj', te aseguro que tendrás grandes dolores de cabeza a la hora de ponerlo a punto. Saludos |
|||||||||||||
|
|
||||||||||||||
| #6 |
|
Ivan Alejandro Godoy
|
Muchísimas gracias maunix y Mario por la ayuda, cuando tenga el proyecto terminado les cuento como me fue. hasta la próxima pregunta!!
|
|||||||||||
|
|
||||||||||||
| #7 |
|
ben99
|
; Code generated by PDEL ver 1.0 on 14/08/2006 at 05:54:45 p.m.
; Description: Waits 1000000 cycles ;------------------------------------------------------------- PDelay movlw .14 ; 1 set number of repetitions (C) movwf PDel0 ; 1 | PLoop0 movlw .72 ; 1 set number of repetitions (B) movwf PDel1 ; 1 | PLoop1 movlw .247 ; 1 set number of repetitions (A) movwf PDel2 ; 1 | PLoop2 clrwdt ; 1 clear watchdog decfsz PDel2, 1 ; 1 + (1) is the time over? (A) goto PLoop2 ; 2 no, loop decfsz PDel1, 1 ; 1 + (1) is the time over? (B) goto PLoop1 ; 2 no, loop decfsz PDel0, 1 ; 1 + (1) is the time over? (C) goto PLoop0 ; 2 no, loop PDelL1 goto PDelL2 ; 2 cycles delay PDelL2 clrwdt ; 1 cycle delay return ; 2+2 Done |
|||||||||||
|
|
||||||||||||
| #8 |
|
ilpancho
|
Buenas, quisiera saber que estoy haciendo mal. Trato de usar esa ecuación con y pic 16f877 a 20 mhz busco conseguir un retardo de un segundo. me quedo asi, 4*(1/20*106)=200nseg tiempo = 200nseg* 256*256 =13 10mseg La deberia repetir 1seg/13mseg= 76 veces para lograr el segundo, pero cuando lo hago correr no tarda un segundo sino practicamente medio segundo. No entiendo por que, reseteo el tmr0 antes de empezar y limpio la bandera del mismo, si alguien puede darme una mano, gracias. |
|||||||||||||
|
|
||||||||||||||
| #9 |
|
natrix
|
Normalmente la velocidad del cristal es el doble de la CPU multiplica por 2. He programado los ST7 y ese mismo efecto ocurre con el timer.
|
|||||||||||
|
|
||||||||||||
| #10 |
|
maunix
Colaborador
|
natrix, creo que estas errado. Fíjate, está hablando de un PIC. En los PIC la relación entre ciclo de instrucción y ciclo de clock es 1:4 . Para un cristal de 20Mhz, el PIC procesará 5MIPs. |
|||||||||||||
|
|
||||||||||||||
|
| Temas de interés | |
|---|---|
| Temporizador con retardo al apagado | |
| hacer reset 2 veces con un retardo | |
| alguna rutina de retardo de tiempo en assembler | |
| Retardo de sonido "delay" | |
| Retardo | |
| Foros de Electronica |
| ||
Cuestiones Elementales de Electrónica ||
Fuentes de alimentacion ||
Circuitos de radio ||
Diseño de circuitos en general || || Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión || || Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos || |
Site Map
© Foros de Electrónica
Comunidad Internacional de Electrónicos
Powered by phpBB © 2001, 2005 phpBB Group
Acerca de || Política de privacidad
Generada en = 0.16305 segundos, Consultas = 13
© Foros de Electrónica
Comunidad Internacional de Electrónicos
Powered by phpBB © 2001, 2005 phpBB Group
Acerca de || Política de privacidad
Generada en = 0.16305 segundos, Consultas = 13

