Autor Tema: Deteccion de la desconexion de dispositivo conectado a PIC  (Leído 2866 veces)

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

Desconectado josemb

  • PIC10
  • *
  • Mensajes: 6
Deteccion de la desconexion de dispositivo conectado a PIC
« en: 21 de Noviembre de 2014, 09:01:56 »
Hola a todos!

Os cuento un poco el problema que tengo:

He desarrollado un programa para un PIC16F876A que basicamente recibe un string de datos procedente de una maquina, la decodifica y en funcion de su contenido enciende o apaga una serie de Leds. Al conectar mi PCB con el PIC a la maquina, todo funciona "casi" perfectamente, y digo "casi" porque hay un pequeno problema, y es que si apago la maquina, los LEDs quedan encendidos segun la ultima cadena de datos que le llego al PIC (es como si quedara congelado en el ultimo estado), claro, no queda bien. Si la vuelvo a encender, el PIC vuelve a funcionar correctamente. He estado buscando informacion sobre el tema pero no he encontrado nada especifico para esto. En un intento de solucionarlo, he anadido un codigo para apagar todos leds si no hay variacion en la entrada de datos tras un determindado numero de strings de entrada:

while (1) {
//...
//codificacion del string de datos actual mediate el uso de "gets"
//...
if (valorNW==valorNW_Temp) {       
contador=contador+1;
} else {
contador=0;
}

if (contador<10) {
//tratamiento de la cadena de texto (encendido de leds)...
} else {
//apagar todos los leds...
}
//...
}

y funciona bien, pero solo mientras la maquina esta encendida (efectivamente he creado un "sleep" mode para los leds), pero si apago la maquina en el momento en que hay Leds encendidos, de nuevo se queda todo como estaba. Si abro el Hyperterminal para ver que esta pasando con la cadena de datos, al apagar la maquina, la lectura sigue siendo la ultima, pero obviamente no se "refresca".

En resumidas cuentas, lo que necesito es que al pulsar "OFF" para apagar la maquina (aun cuando todavia hay alimentacion al PIC), el pic se resetee con todas las salidas a 0

Con lo que he podido investigar, y dada mi gran ignorancia en el mundo de los microcontroladores, intuyo que la solucion puede pasar por el uso de interrupciones, pero sinceramente no veo como aplicarlas a mi problema

Espero haberme explicado bien, agradezco de antemano cualquier ayuda!

Saludos!

PD. Siento la ausencia de tildes y de algun que otro caracter, pero es que me encuentro en el extranjero, todo configurado en ingles

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Deteccion de la desconexion de dispositivo conectado a PIC
« Respuesta #1 en: 21 de Noviembre de 2014, 09:54:44 »
Hola te paso 2 ideas:

1. Si el envío de información de la máquina al PIC es relativamente frecuente, puedes usar un temporizador de tl amnera de que si no detecta data uart, hacer lo que deseas cuando la maquina esté apagada.

2. Si existe la posibilidad, sacar un hilo de voltaje de alimentación de la maquina, lo metes a un pin del PIC y alli sabrás si está encendida o no.

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Deteccion de la desconexion de dispositivo conectado a PIC
« Respuesta #2 en: 21 de Noviembre de 2014, 11:14:30 »
1. Si el envío de información de la máquina al PIC es relativamente frecuente, puedes usar un temporizador de tl amnera de que si no detecta data uart, hacer lo que deseas cuando la maquina esté apagada.

O tambien que lo haga frecuente y cada tanto envie un caracter de "control" esperando que la maquina responda, ejemplo evio una A y la maquina me tiene que responder B, sino me responde es por que esta apagada. que configure un timer para eso.

Desconectado josemb

  • PIC10
  • *
  • Mensajes: 6
Re: Deteccion de la desconexion de dispositivo conectado a PIC
« Respuesta #3 en: 21 de Noviembre de 2014, 11:31:39 »
En primer lugar muchas gracias por vuestras respuestas, Kallitos yb Killerjc.

Mi maquina enviar cadenas de texto fijas cada 100 milisegundos, y definitivamente descartado lo de pasar un hilo del voltaje, ya que para la salida la obtengo de la placa prinicpal de la maquina y no dispongo de dicho voltaje.

Lo del caracter de control podria ser una solucion, pero prefiero evitar cualquier posibilidad de causar error en la recepcion de datos en la maquina, aunque si no hubiera otra opcion, lo intentaria.

Finalmente, para utilizar un timer, tendre que investigar porque nunca lo he hecho, pero el problema es que no se como hacer para el pic se de "cuenta" de que el string que tiene en la entrada tras apagar la maquina no se esta actualizando. Se que detecta algo porque en el bucle "while" pregunto continuamente por el valor de entrada y los leds quedan segun la ultima configuracion que tenian antes de apagar la maquina. Tambien me surge la duda de si realmente el programa se esta ejecutando o si se ha quedado bloqueado y por eso los Leds permanecen asi.  Si fuera posible agraderecia un ejemplo sobre como aplicar un timer en mi caso

Muchas gracias de nuevo!
Saludos

Desconectado manwenwe

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2211
Re: Deteccion de la desconexion de dispositivo conectado a PIC
« Respuesta #4 en: 21 de Noviembre de 2014, 11:37:59 »
Lo mejor es que uses interrupciones aunque tp es necesario del todo. Cada vez que recibas un dato  resetea un timer (ponolo a 0) y en el bucle principal (while) ves testeando si el timer supera los 100ms (p.e.: 1 segundo) sí es así es que has perdido la conexión: apaga los leds. Vamos: haz "polling".

Saludos.
« Última modificación: 21 de Noviembre de 2014, 12:56:09 por manwenwe »
Ojo por ojo y todo el mundo acabará ciego - Mahatma Gandhi -

Desconectado KALLITOS

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1256
Re: Deteccion de la desconexion de dispositivo conectado a PIC
« Respuesta #5 en: 21 de Noviembre de 2014, 11:54:34 »
Pues la solución esta presente, ahora debes implementarla.

saludos
A un microcontrolador hay que sacarle hasta el ultimo byte....(YO)

Cómo puede ser que un pic24EP512 me quede corto de memoria, señores de MICROCHIP saquen pics con más memoria flash

Más de 45 mil lineas de codigo y aun no termino el equipo, asu mare!!

S34ML08G1TFI200 no necesito mas memoria externa.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re: Deteccion de la desconexion de dispositivo conectado a PIC
« Respuesta #6 en: 21 de Noviembre de 2014, 12:07:29 »
Finalmente, para utilizar un timer, tendre que investigar porque nunca lo he hecho, pero el problema es que no se como hacer para el pic se de "cuenta" de que el string que tiene en la entrada tras apagar la maquina no se esta actualizando. Se que detecta algo porque en el bucle "while" pregunto continuamente por el valor de entrada y los leds quedan segun la ultima configuracion que tenian antes de apagar la maquina. Tambien me surge la duda de si realmente el programa se esta ejecutando o si se ha quedado bloqueado y por eso los Leds permanecen asi.  Si fuera posible agraderecia un ejemplo sobre como aplicar un timer en mi caso

Ejemplos de timer encontras por todos lados con solo poner "PIC16F876A timer" en google y si queres le agregas el tipo de compilador XC8 o CSS y seguro tenes algo, Como saber si recibio algo? Podes hacer que cuando reciba algo se active una interrupcion (hacer lo que tengas que hacer) y borrar el temporizador (ponerlo a 0 ). Mas otra interrupcion del timer para el apagado de los leds cuando se cumpla el tiempo y el contado de vueltas ( asi llegas a los 100ms ).

Para problemas de que el micro se quede bloqueado existe el WDT ( watchdog timer ), en si es un temporizador igual que el otro, nomas que corre continuamente y el usuario debe ponerlo a 0 cada tanto asi de esa forma si el micro salta a una pocision de memoria no valida o se "bloquea" al no resetearse el WDT, este resetea el micro pasado un tiempito. La mayoria lo saca a esto y creo que deberia ser una de las ultimas cosas a poner en un proyecto, debuggear todo lo demas y luego agregarle esto.
« Última modificación: 21 de Noviembre de 2014, 12:13:17 por KILLERJC »

Desconectado josemb

  • PIC10
  • *
  • Mensajes: 6
Re: Deteccion de la desconexion de dispositivo conectado a PIC
« Respuesta #7 en: 26 de Noviembre de 2014, 06:31:58 »
Perfecto, problema resuelto!, muchisimas gracias por vuestras respuestas!. Ahora tengo un problema (bastante serio) con respecto al conjunto de mi PIC PCB conectada a la maquina, pero que pondre en otro hilo, ya que no tiene nada que ver con el tema de este hilo

Muchas gracias de nuevo!