Autor Tema: Falsos disparos en RA4 y migracion de pic  (Leído 5026 veces)

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

Desconectado juankah72

  • PIC10
  • *
  • Mensajes: 13
Falsos disparos en RA4 y migracion de pic
« en: 09 de Febrero de 2010, 14:26:02 »
Buenas tardes a todos. Tengo dos preguntas.

1. Tengo un programa con el 16f84a  que funciona ok hace tiempo y decidí cambiarlo al 16f628a. Cuando lo ensamblo y lo simulo en el pc funciona muy bien (igual que con el f84a), pero a la hora de programarlo me aparece un mensaje de ERROR en la posición 0001h, o 0005h, etc. Es decir, no me deja programar el chip. La pregunta es, Cuál puede ser el error?

2. Uso un programa con interrupción por pulso en RA4 (16F84A).  El pin va con una resistencia de 1k a tierra y un pulsador normalmente abierto N.A a +5v para que cause la interrupción.  El sistema funciona bien pero en algunas ocasiones se ¨dispara solo¨sin haber pulsado lo cual me causa un gran problema pues el programa se queda esperando en la rutina de interrupcion. Cómo puedo resolver este inconveniente?

Mil gracias a todos por las respuestas que me puedan dar.






 



 
 

Desconectado mtristan

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 395
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #1 en: 09 de Febrero de 2010, 14:41:33 »
.

Buenas, juankah.

Sobre la 1º pregunta: ¿Qué programador estás usando? En el mío, por ejemplo, tengo que asegurarme de marcar la tilde en la casilla de configuración MCLRE, puesto que de lo contrario, el PIC conecta directamente la pata de reset a vdd y no deja al programador meterle los 12v necesarios para la programación.

Sobre la 2º: Hay que aceptar que los pulsadores no son perfectos y que a veces generan "rebotes" como estos:
Lo mejor sería colocar un capacitor entre el pulsador y gnd, además de agregar en el programa del uC una pequeña demora (unos 50ms andan bien) a partir de que se lee el pulsador, para dejar pasar los rebotes.

Espero haber sido de ayuda.
Saludos.
When you see a good move, look for a better one (Emanuel Lasker)

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #2 en: 09 de Febrero de 2010, 16:25:39 »
Tambien se puede emplear un pequeño delay por software para evitar el efecto del rebote producidos al abrirse o cerrarse los contacto de la mayoria de contactos moviles como: reles, ulsadores, interruptores,..........


Fermin
Todos los días se aprende algo nuevo.

Desconectado juankah72

  • PIC10
  • *
  • Mensajes: 13
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #3 en: 09 de Febrero de 2010, 20:37:44 »
Primero que todo muchas gracias por las respuestas. Primero que todo, el quemador que yo uso no es el original de microchip. es EPIWIN si mal no recuerdo. De todas maneras, siempre me ha funcionado bien con otros pic como el F84a, F877, F508, etc sin ningún problema.
Lo segundo me parece interesante lo de los retardos por software, entonces el retardo se agregaría al inicio de la rutina de la interrupción o como se hace?
Me surge una duda pues cuando se presiona el pulsador, el programa recibe ok la orden y no hay problemas de rebote, el problema es que incluso quité el pulsador y dejé el pin solo con la resistencia de 1k a tierra y sin embargo a veces parece recibir el pulso. (no se de dónde proviene).
Un condensador a tierra estaría bien de que valor?

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #4 en: 09 de Febrero de 2010, 20:59:58 »
Un par de comentarios. En ocasiones con el WinPic800 me da el mismo error cuando quiero programar. Por lo que leí (y/o al menos lo que entendí) es un error que se da en los procesadores de doble núcleo que calcula mal la velocidad y entonces genera mal los tiempos para las rutinas de grabación. Lo soluciono reiniciando la PC, no sé porque pero cuando reinicio y ejecuto el WinPic800 funciona todo joya.

Con respecto al tema del puerto, ¿Como está el resto de las interrupciones? ¿No será que hay otra que se está activando? ¿El MasterClear, está activado o desactivado? ¿El WDT? ¿La alimentación del PIC está bien filtrada?
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Fer_TACA

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4154
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #5 en: 10 de Febrero de 2010, 15:56:19 »
El retardo por software basicamente se basa es que despues de que lees el estado del interruptor, puedes guaardar o no el valor detectado, esperas un pequeño tiempo y despues vuelves a leer el valor del interruptor, puedes compararlo con el valor guardado si lo realizaste con anterioridad.
 Tambien debes comprobar:
- el filtrado de la tension de alimentacion del pic, es recomendable colocar uno de 0,1uF entre la alimentacion y lo mas cerca posible del pic.
- comprobar si tienes habilitado el wachdog
- la linea de reset este conectada a Vcc
- que el oscilador esté bien funcionando
- ........

Fer.
Todos los días se aprende algo nuevo.

Desconectado juankah72

  • PIC10
  • *
  • Mensajes: 13
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #6 en: 10 de Febrero de 2010, 22:05:46 »
El programa tiene solo una interrupción (cambio estado del pin RA4), entre los pines 5 y 14 tengo un condensador de 0.1uf, el pin 4 MCLR está directamente a +5v, y no está habilitado el WDT, el oscilador funciona OK.
Voy a probar lo del retardo que me parece una muy buena opción, lo que pasa es que como me activa una interrupción no se muy bien como acomodarla.
Espero que sea así:       Una vez se active la interrupción, en la rutina que debe ejecutar ésta apago la bandera y hago el retardo y vuelvo a esperar si se genera de nuevo la interrupción. Si es así, entonces fue que realmente se pulsó el interruptor. Si no,  entonces fué un pulso error (que no se de donde saldría) y  retorno saliendo de la interrupción con un RETFIE.... Es correcto? espero que si.
Voy también a probar reiniciando el PC para programar el pic a ver si me pasa igual que a AngelGris.
Gracias mil a todos. Probaré y luego les cuento que me pasa.

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #7 en: 10 de Febrero de 2010, 23:29:24 »
Estuve leyendo más detenidamente tu primer mensaje y no entiendo algo.

Vos decis "Uso un programa con interrupción por pulso en RA4 (16F84A)." Pero RA4 es la entrada externa del TMR0 y de no genera interrupción de por sí sola, sino que generará una interrupción el Timer0 cuando haya overflow.

El puerto de interrupción externa es RB0. No será que tenés al aire dicho pin y por tal motivo se te dispara erráticamente.

En cuanto al tema del delay "antirrebote", tenés que tener en cuenta que la interrupción es por flanco y no por estado. Así que si hacés lo que mencionas no va a funcionar porque el pin ya tiene un estado determinado... yo lo haría del siguiente modo

Dentro de la rutina de interrupción, hago la espera que puede ser de unos 8 ms. Luego testeo el estado del puerto, si es el que me interesa (en tu caso sería el estado alto) hago lo que tenga que hacer; Borro el flag y retorno. Tanto las lineas de borrado de flag como de retorno se cumplen siempre, independientemente del estado del puerto.

rutina de interrupcion

delay (8ms)

if puerto alto trabajo

borro el flag

retorno
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #8 en: 11 de Febrero de 2010, 08:33:15 »
Muchas veces, se dan falsas interrupciones. Cuando el CP se dirige a la posición 0004h, tienes que analizar si se activó la bandera de dicha interrupción deseada. En caso de que no se halla activado la bandera, sales inmediatamente y continúa el programa original.
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado juankah72

  • PIC10
  • *
  • Mensajes: 13
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #9 en: 14 de Febrero de 2010, 22:57:11 »
Si AngelGris, tienes razón pues la interrupción es por overflow del TMR0 lo que pasa es que está cargado con 255 y al cambiar el estado del pin causa el overflow y por ende la interrupción se da. Muy pertinente la aclaración. :oops:
Estaba pensando en lo siguiente con lo del delay pero no se funcione:
Teniendo en cuenta que para que en mi circuito hay un pulsador a RA4 y cada vez que se pulsa causa el Overflow (precargado el TMR0 con 255), en el momento que entre en la interrupción, apagar la bandera de interrupción y recargar el TMR0, hacer un retardo antirrebote de unos 50 msg o mas. Si es verdad que se oprimió el pulsador, este estará presionado mas que esos milisegundos del Delay y volverá a  causar el Overflow, lo cual confirmaría que si es una pulsación real.
Si fuera un pulso error, luego del Delay, no se volvería a causar el Overflow.
Bueno, eso es lo que creo que puede suceder pero la verdad no se si funcione, no soy muy diestro en esto de los pic.

Será que funciona compañeros??? :shock:

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #10 en: 14 de Febrero de 2010, 23:47:27 »
Pero no es necesario borrar el flag y volver a ver como está, de hecho el incremento en el Timer0 se produce también por flanco y no por estado del puerto.

Una vez que entrás en la rutina de interrupción y esperás el tiempo antirrebote tenés que testear el estado del pin y no el estado del flag.

¿Lo estás haciendo en asm?

Código: [Seleccionar]
bcf INTCON,GIE ; anulo las interrupciones para que no haya recursividad (evitar entrar otra vez al vector)
btfss INTCON,T0IF ; testeo a ver si es 1 el flag del Timer0
goto final ; voy al final si no está activado el flag del Timer0
......
......
......  ; instrucciones necesarias para hacer el delay (retardo antirrebote)
btfss PORTA,4 ; testeo si es que sigue en 1 el bit 4 del puerto A (RA4)
goto final ; si está en 0 voy al final porque fue un rebote
.....
.....
..... ; hago todo lo que quiera hacer

final
 movlw .255 ; decimal 255
 movwf TMR0 ; preparo el Timer0
 bcf INTCON,T0IF ; borro el flag del Timer0 para que pueda generar otra vez la interrupcion cuando haya overflow
 retfie ; retorno de la interrupcion activando las mismas
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado juankah72

  • PIC10
  • *
  • Mensajes: 13
Re: Falsos disparos en RA4 y migracion de pic
« Respuesta #11 en: 15 de Febrero de 2010, 23:03:10 »
 :) :) mil gracias AngelGris por tu ayuda.. lo voy a probar y les cuento como me va... es posible que para muchos de los que somos nuevos se nos presenten problemas como este y la solución no sea tan difícil como yo lo creía.