Autor Tema: Generar un tren de pulsos de 38KHz por TMR0 (asm)  (Leído 5592 veces)

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

Desconectado PulKon

  • PIC12
  • **
  • Mensajes: 70
Generar un tren de pulsos de 38KHz por TMR0 (asm)
« en: 14 de Junio de 2011, 01:20:11 »
Solicito ayuda para verificar el programa que a continuación expongo, ya que estoy tratando de implementar un Sensor Infra-Rojo con el PIC16F628A trabajando a 4 MHz, (por disponibilidad) y para esto, estoy tratando de usar el TMR0 para generar el tren de pulsos de 38 KHz, emitiendo esta frecuencia durante 33ms cada 333ms (ya que asi la utilizo con circuitos como NE556, LM339, etc. y opera correctamente para la detección y a gran distancia con sus respectivos dispositivos infra-rojos).
El programa esta implementado con base a notas del foro, pero es evidente que hay muchas cosas que desconozco, verifiqué con el osciloscopio la salida RA0, que es la salida que se activa con el desborde del TMR0, pero siempre está en 0V, la RA1 si opera correctamente.

Quisiera poder generar un tren de pulsos similar, aunque no fuese exactamente los 38 KHz y después si fuese necesario, cambiar al uso de XT externo y realizar los ajustes necesarios.

Saludos.
La felicidad no consiste en tener lo que quieres, sino en querer lo que tienes.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #1 en: 14 de Junio de 2011, 05:51:20 »
Código: [Seleccionar]
Creo que el problema esta en el reg. Contador. Chequeas si llega a 10 pero nunca llega porque no lo incrementas, cada vez que se desborda el TIMER0 TIENES QUE HACER "INCF  Contador".

[codebtfss INTCON,T0IF ; Consultamos si es por TMR0.
goto Fin_ISR ; No, entonces restauramos valores.
movlw .10 ; Si, consultamos si se han producido 10 desbordes
subwf Contador,0 ; para obtener t deseado.
btfss STATUS,Z ;
goto LED_Apagado ; No es Contador = 10.
goto PULSOS ; Si es Contador = 10.]

Desconectado PulKon

  • PIC12
  • **
  • Mensajes: 70
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #2 en: 14 de Junio de 2011, 14:21:41 »
tapi8, efectivamente como bien lo indicas, no lo estaba incrementando.

LED_Apagado
   bcf   LED      ; Apago LED
   decfsz   BUCLE4,1      ; Decremento BUCLE4 y preguntamos si es 0?
   goto   Actualizo_TMR0   ; No, cargo TMR0.
   decfsz   BUCLE3,1      ; Si es 0, decremento BUCLE3 y preguntamos si es 0?
   goto   Restauro_BUCLE4   ; No, restauro valor de BUCLE4 para el loop y actualizo TMR0.
   incf   Contador,1   ; Incrementamos contador  ..... Aqui esta el error, tenía 0 en lugar de 1.....
   goto   Actualizo_TMR0
Restauro_BUCLE4
   movlw   .125
   movwf   BUCLE4
   goto   Actualizo_TMR0

Tu comentario me ha sido de gran ayuda,  ya observé la señal en el osciloscopio y ya da un tren de pulsos aunque no es exactamente lo que esperaba porque tengo que ajustar los tiempos.

Te agradezco mucho la atención.

Saludos.
La felicidad no consiste en tener lo que quieres, sino en querer lo que tienes.

Desconectado PulKon

  • PIC12
  • **
  • Mensajes: 70
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #3 en: 15 de Junio de 2011, 14:09:03 »
Como nota informativa, trate de ajustar los tiempos del tren de pulsos, pero por las instrucciones que se emplean para el TMR0 y con este PIC a 4 MHz, no pude bajarlos a lo deseado, por lo que opté por generar el tren de pulsos en el programa principal, lo experimenté y si resultó satisfactoriamente, por lo que voy a sensar el estado de detección durante el tiempo alto de la onda de los 38 KHz.

Pongo el archivo asm como referencia.
 
La felicidad no consiste en tener lo que quieres, sino en querer lo que tienes.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #4 en: 15 de Junio de 2011, 15:49:04 »
Creo que si desbordases el timer menos veces, dando mas tiempo y bajando el offset te seria mas facil.
En el MPLAB con el "stop watch" abierto pones break points en los puntos que te interesa medir y ajustas tiempos perfectos. De todos modos las interrupciones yo las uso cuando son absolutamente necesarias, prefiero tener yo el control y hacer las cosas cuando yo quiero no cuando salte una interrupcion, con esto no digo que no sean necesarias.

Desconectado PulKon

  • PIC12
  • **
  • Mensajes: 70
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #5 en: 22 de Junio de 2011, 14:19:28 »
Gracias tapi8, trate de ver el Stop Watch pero no me dejó habilitarlo, no se porque ya que en otros programas si funciona, voy a buscar el problema en el MPLAB y lo haré.

También estoy pensando usar el PIC16F818 a 8 MHz que tengo disponible, a fin de no dejar esto sin resolver, aunque me parece muy bien tu comentario de tener uno el control.

Saludos.
La felicidad no consiste en tener lo que quieres, sino en querer lo que tienes.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #6 en: 22 de Junio de 2011, 15:47:04 »
Citar
Gracias tapi8, trate de ver el Stop Watch pero no me dejó habilitarlo, no se porque ya que en otros programas si funciona, voy a buscar el problema en el MPLAB y lo haré.

Tienes que abrir el simulador: en "Debugger" abres "MPLAB SIM" y vas a debugger otra vez y ya te aparece "stopwatch", no se que version tienes pero yo en todas las que tuve siempre me lo dejo abrir, es una herramienta que uso en el 99% de las simulaciones.


Desconectado PulKon

  • PIC12
  • **
  • Mensajes: 70
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #7 en: 23 de Junio de 2011, 21:37:58 »
tapi8,

Recientemente instalé la versión 8.70, pero ese no era el problema, ya lo pude abrir, de hecho lo que pensaba que no me dejaba abrirlo y se marcaba en gris stopwatch, era porque ya lo había abierto pero estaba fuera de la pantalla visual porque se modificó la resolución del monitor y no aparecía donde yo esperaba.

Gracias y ahora voy a verificar los tiempos de acuerdo a tu recomendación.

Saludos.
La felicidad no consiste en tener lo que quieres, sino en querer lo que tienes.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 178
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #8 en: 25 de Junio de 2011, 14:26:56 »
con el 16f628a podrias utilizar el modulo ccp en segundo plano y el micro para otras tareas

Desconectado PulKon

  • PIC12
  • **
  • Mensajes: 70
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #9 en: 05 de Julio de 2011, 13:40:47 »
Gracias Chrisbaf, voy a intentarlo también.

Esta es la señal que pretendo obtener, de hecho sin usar el TMR0 ya la obtengo, pero si deseo que el micro haga otras tareas, voy a ponerme a estudiar el módulo ccp.

Saludos.
La felicidad no consiste en tener lo que quieres, sino en querer lo que tienes.

Desconectado tapi8

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1506
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #10 en: 06 de Julio de 2011, 05:09:54 »
Haces bien en estudiar el modulo CCP, pero con TIMER0 y retardos por bucle tambien se hace:
durante 30ms que es poco tiempo (depende de la aplicacion) puedes generar retardos de 12us e ir haciendo BSF y BCF alternativamente, asi obtendrias los ciclos de 26us, y despues para el tiempo de 300ms usas el TIMER0 y en ese tiempo chequeas todo lo que tengas que controlar, bueno como digo antes depende la aplicacion, pero en la mayoria de las aplicaciones un tiempo de 30ms es aceptable, aunque no en todas.

Desconectado PulKon

  • PIC12
  • **
  • Mensajes: 70
Re: Generar un tren de pulsos de 38KHz por TMR0 (asm)
« Respuesta #11 en: 31 de Enero de 2012, 05:08:22 »
Gracias tapi8, me tardé en contestar y retomar este proyecto pero ya me voy a apurar para terminarlo.
Saludos.
La felicidad no consiste en tener lo que quieres, sino en querer lo que tienes.