TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: lemono en 16 de Febrero de 2004, 12:42:00
-
hola a todos recien ingreso a esta magnifica pagina, tambien empiezo a dejarme seducir por el mundo de los microcontroladores
escribo por que desde hace dias estoy tratando de resolver una inquietud de como puedo hacer para que un pic me maneje un retardo por ejemplo de 10 segundos para apagar y prender una luz pero a su vez me pueda seguir controlando la otra parte de lo que quiero que es por ejemplo apagar un motor, no se si esto se realiza con una interrupcion??? o si se hace con una temporizacion externa???, o por el tmro?? en fi n tengo muchas dudas con esto,se que los pic solo tienen un pc y entonces no se como hacerlo si alguien sabe por favor, cualquier ayuda es bien recibida
si tienen algun ejemplo magnifico
-
Hola Lemono:
Pues deberias de usar el TMR0 y a la vez activar las interrupciones (global y la que controla el TMR0). Para diez segundos, depende del cristal que uses, pero seguramente tendras que que hacer que el TMR0 temporize varias veces y configurar el preescaler al maximo (con un cristal de 4 Mhz coseguiras como maximo una temporizacion de 65,5 milisegundos, luego necesitaras que lo repitas unas 152 veces) y mientras el TMR0 hace su trabajo el resto del pic podra estar relizando otra cosa.
No se si te habre ayudado, si no por aqui estamos
Saludos


















-
Hola, puedes hacerlo como te manifesto Harry, solo que yo no empleo la interrupcion, simplemente, en alguna parte del codigo, realizo un XOR para verificar si la cuenta del tmr0 llego a un determinado valor... si llego, incremento o decremento otro contador...
de esta marera, empleo la interrupcion para otras cosas
TIMER_CERO
CLRF STATUS
MOVLW .250
XORWF TMR0,0
BTFSS STATUS,Z
; GOTO INICIO
CLRF TMR0
suerte!
Norberto
-
Eso es, tal y como te dicen los nenes
de arriba. Fíjate que controlar el desbordamiento del TMR0 y ejecutar otras instrucciones o atender a otras interrupciones, es una de las pocas ejecuciones paralelas que puede realizar un microprocesador PIC, ya que no es capaz de efectuar multiprocesamiento.
Una cosa: he abreviado un poquito el asunto de tu mensaje con el que abriste el tema, porque era demasiado largote..
-
Hola a todos.
Al igual que algunos de arriba, yo lo haría por interrupción. Pero discrepo en la interrupción a usar. Yo usaría la del Timer1 por varias razonas. Una razón importante es que con el timer 1 puedes contar muchisimo más tiempo que con el timer 0 si es que usas el reloj interno. Otra razón es que si estás empezando, el timer 0 seguro que lo usarás para el perro y así usando el timer1, aprendes a usar otro más que si además le colocas un cristal externo al timer1, veras el juego que te da.
En caso de duda de como hacerlo, pues ya saber post al canto.
-
Escrito originalmente por todopic
Hola, puedes hacerlo como te manifesto Harry, solo que yo no empleo la interrupcion, simplemente, en alguna parte del codigo, realizo un XOR para verificar si la cuenta del tmr0 llego a un determinado valor... si llego, incremento o decremento otro contador...
de esta marera, empleo la interrupcion para otras cosas
TIMER_CERO
CLRF STATUS
MOVLW .250
XORWF TMR0,0
BTFSS STATUS,Z
; GOTO INICIO
CLRF TMR0
suerte!
Norberto
Norberto, excelente aporte, no lo habia pensado asi....gracias
-

para la mayoria de los retardos largos, empleo esa disposicion... por ejemplo un minuto
255 * 256 * 230 * 4 +/- 1 minuto =256 es el preescaler (60057600 milisegundos)
60,057600 segundos... bastante buena!
y mientras tanto, se puede ir ejecutando otras cosas, y no empleo interrupcion... 
Norberto
-
Estoy de acuerdo con peddrorolo, ya ke con el TMR1 puedes contar más. Pero claro eso teniendo en cuenta que el micro que use tenga más de un timer.
Por cierto Norberto, has dado una muy buena idea!!! Creo ke la voy a utilizar más de una vez.
Saludos
-
Creo que ese mini programa tiene el inconveniente de que debes llamarlo cada cierto intervalo a fin de poder verificar si efectivamente la cuenta de TMR0 es ese valor, aun pienso que usar interrupciones es mejor...
-
TAMBIEN PUEDES USAR EL WDT (PERRO GUARDIAN) QUE TE PERMITE UN RETARDO MAXIMO DE 2,3 SEGUNDOS, ESTO TE RESETEA EL PIC, POR LO TANTO EN EL INICIO PROGRAMA LA RUTINA DE LO QUE QUIERAS HACER.
TAMBIEN PUEDES USAR EL PIN 0 DEL PUERTO B.
ESCRIBEME AL CORREO Y TE ENVIO UN EJEMPLO DEL TMR0 O CUALQUIER PROGRAMA QUE NECESITES DE EJEMPLO DEL PIC 16F84
-
Hola a todos:
Pienso que ambas solciones podrían ser utiles. Las ventaja de la solucción que menciona, Norberto, es que se puede utilizar la interrupción para otra tarea. Pero veo que el uso de la verificación de la cuenta podría ser crítica en el sentido de que
debemos procurar que si, estamos cunsultado 250, por ejemplo, se haga mas menos antes de aquella cuenta, de lo contrario corremos el riesgo de que se pase
a 00h. En resumen, la solución de Norberto, mirado desde el punto de vista que acabo de mencionar, puede ser critico y sería talvez más conveniente utilizar la interrupción del TMR0.
Saludos.
Daniel.
Escrito originalmente por fenix_jn
Creo que ese mini programa tiene el inconveniente de que debes llamarlo cada cierto intervalo a fin de poder verificar si efectivamente la cuenta de TMR0 es ese valor, aun pienso que usar interrupciones es mejor...