Autor Tema: Luchando contra el ruido POR SOFTWARE  (Leído 83772 veces)

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

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7395
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #120 en: 30 de Diciembre de 2014, 12:09:27 »
Aca entramos en un problema si tenes muchos digitos luego de la coma va a variar siempre y mas si la señal de entrada varia por un ripple etc.

Quedan 2 formas:

  • Mostrarlo solo cada 1 segundo asi no varia tan rapidamente los ultimos digitos ( Va a seguir variando pero no tan rapido )
  • Disminuir la cantidad de digitos luego de la coma a mostrar. ( No va a variar mucho siempre y cuadno se mantenga en el valor que corresponde. )


Pero si aun asi tenes problema ya veria de hacer algo en hardware y no en software.
Por que si varia tanto la entrada no tiene sentido el sacar un promedio. Y convendria mas tomar un valor cada mucho tiempo aunque no sea lo correcto.
« Última modificación: 30 de Diciembre de 2014, 12:41:12 por KILLERJC »

Desconectado callecuatro1976

  • PIC12
  • **
  • Mensajes: 70
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #121 en: 30 de Diciembre de 2014, 13:56:51 »
me sirvió mucho tu ayuda gracias

Desconectado yenz

  • PIC10
  • *
  • Mensajes: 22
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #122 en: 04 de Marzo de 2015, 14:24:39 »
Esta técnica (la recuperación de una máquina despues de un apagado) es algo que se hace desde hace mucho tiempo en los sistemas microprocesados, se conoce como arranque en caliente (se mantienen los datos) o arranque en frio (se inicializa la máquina). Es muy conveniente realizar un checksum de la memoria en el momento del arranque y si los datos no son coherentes realizar una arranque en frio, en caso contrario realizar el arranque en caliente.

Un saludo

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 134
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #123 en: 07 de Noviembre de 2015, 01:21:11 »
Veo que este tema lleva mucho tiempo sin moverse, pero voy a escribir aqui antes de abrir un nuevo tema.

El caso es que es un tema muy interesante y el hilo es muy completo. Con mi nivel, la mayoria de los mensajes no les llego a entender del todo, pero me esta sirviendo para tener una referencia y saber por donde empezar.

Y es que en este hilo o en otros parecidos, se habla de como luchar contra el ruido, pero, a mi nivel todavia no entiendo muy bien como identificar si lo que esta afectando a mi PIC es ruido o mas bien otra causa (un fallo de programa, p.e.). Y, si de verdad es ruido, como saber exactamente por donde le esta entrando para saber la medida adecuada a tomar?/

Me explico con un ejemplo mas o menos real: disenas un circuito, funciona bien, tomas las medidas anti-ruido "estandar" (una buena fuente, condensadores de desacoplo, anti-rebote para los pulsadores....), "sacas fuera" unos 200, y esos 200 funcionan sin problemas en diferentes lugares durante meses. Pero, mira por donde, al hacer funcionar el cirucito 201 en cierto sitio, a los pocos minutos de funcionamiento las letras del LCD empiezan a bailar. Reseteas y lo mismo una y otra vez. "Esto tiene que ser fallo del programa, vete y arreglalo"... Despues de 200 circuitos sin ningun fallo, que el 201 tenga un fallo de programa no me lo llego a creer del todo. "Esto tiene que ser ruido" pienso y es hay donde viene el tema. Si me piden que explique por donde entra el ruido, que tengo que hacer?.

Me imagino que ir con un osciloscopio y medir la onda de la fuente de 5V....pero aunque mire la onda como puedo saber si el ruido es de verdad el casuante del problema? Y si la fuente no tiene ruido, por donde sigo la medicion?. Por la entradas del PIC?...

Me he alargado y no se si explicado bien el problema....



Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7395
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #124 en: 07 de Noviembre de 2015, 01:52:03 »
El ruido creo que es lo peor que uno se puede enfrentar.
El dificil de quitarlo. Y ahi ruidos que son imposibles de quitarlos, como el ruido termico

¿ Por donde puede ingresar ? Por todos lados. Por radiacion, por conduccion, etc.

Podes tener el mismo PCB con fuente en un lado u otro, pero tal ves ese lugar numero 201, tiene un equipo que no cumple con las especificaciones y envia armonicos a la "red" y al aire ( a la alimentacion ) y eso termine ingresando a tu PIC por tu fuente.

Tambien puede ser que tengas un cable que pase por lugares donde existen cambios en los campos magneticos y eso genera una corriente en tu cable. Supongamos un boton y que pase por las alimentaciones de unos contactores o salidas a motores.

Pero tambien puede ser que la misma PCB sus caminos terminen siendo una especie de antena. Y captando las EMI transmitidas en el aire.
La ultima es que afecte al PIC directamente, tal ves en los pines del oscilador, o tal ves el PIC en si.

Hay varios problemas que el software no te lo va a solucionar, puede ser algunas cosas, pero otras no.
Y la solucion mas simple es... una jaula de faraday. Sino podrias optar por una PCB de 4 capas asi tenes capas de GND que te sirvan como pantalla a los ruidos. al menos de radiacion.
Ponerle el anillo de guarda al cristal si es que usas. Y una jaula de faraday depende del material/frecuencia y intensidad de la onda. Segun eso va a tner un mayor/menor factor de absorcion el material ( Busca penetracion de onda electromagnetica )

Ver el ruido para mi me parece que es muy complejo. Al menos yo no se como lograrlo, por que a veces es un ruido en modo comun, y no veas cambios.
Con respecto a tu pregunta sobre si es el programa o no, es bastante simple de ver. Si de las 200 todas funcionan bien (y durante meses), quiere decir que el programa esta funcionando, pero esa 201 no funciona correctamente (y me refiero a 3 problemas por dia un suponer ), podrias reemplazar la placa (si tenes 201, tenes 202), de esa forma si sigue el problema saber que es ruido, y la otra es intentar determinar por donde viene el ruido. Si ocurre un problema cuando se activa algo en especial ( como un motor ) o no hay nada evidente.

Creo que finalmente es poner y probar , poner y probar. Lo mismo ocurre con el layout del PCB

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 134
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #125 en: 07 de Noviembre de 2015, 02:17:31 »
Gracias por la rapida respuesta.

La placa 201 la voy a sustituir por la 202 esta semana. Pero, como dije antes, no me acabo de creer que sea problema de software asi que me llevare el osciloscopio, aunque, segun tu explicacion creo que no va a valer de mucho....

Si el problema es ruido y va a ser dificil quitarlo, se me ocurre (como solucion de emergencia) un programa con un temporizador para que resetee la pantalla LCD, por ejemplo, 10 veces por segundo. Aunque las letras se vuelvan locas, pienso que el reseteo de la pantalla pueda "ocultar" el error y darme algo de tiempo hasta encontrar una solucion mas real.

Lo malo de esto es que, si reseteo la pantalla tantas veces, las letras van a parecer como intermitentes.....

Creo que estoy despedido jejeje  :lol:

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7395
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #126 en: 07 de Noviembre de 2015, 02:31:51 »
Ahora que nombras LCD, no recuerdo que persona tenia unos problemas parecidos y que por suerte tenia otro LCD igual. El LCD le fallaba en cierto tiempo. Primero pense que era un tema de tiempos, pero no era asi ya que le funcionaba bien y luego no. Esto fue aca en el foro y termino con esa solucion.

Asi que proba primero con otra placa.
Sino buscate algun metal ( una lata de gaseosa - como para probar ) y trata de crearte una jaula , soldandolo a GND y tratando obviamente que no toque nada mas. Si ya ahi no funciona empeza a mirar el tema de cuando es que grafica cosas raras / si se activa algo o no.

Mas no te puedo decir, ya que va a depender de donde este el circuito, el layout del circuito, las maquinas alrededor, cada situacion es particular.

PD: Sobre verlo en el osciloscopio no dije que sea inutil, sino mas bien complejo, por que todo depende de la naturaleza del ruido. Podes estar todo el dia ahi y nada. y en un momento vino la señora de casa, encendio su magnifico secador de pelo, y tenes tu ruido. Lo cual no hablamos si esto ocurre ocasionalmente, o continuamente apenas se usa el LCD.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 134
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #127 en: 07 de Noviembre de 2015, 03:27:58 »
Gracias de nuevo.

No se me habia ocurrido que fuera el LCD :shock:. Creo que tengo uno asi que lo llevare y lo probare. Y si no va empezare con la jaula puesta a tierra.

El PIC se alimenta de una fuente regulada de DC5V que a su vez se alimenta de una red AC200V 60z. Me han dicho que lleve algun filtro EMC(?) para poner en la linea de 200V, que puede funcionar si el ruido viene de alli.

En cuanto a lo del oscilocopio, lo siento, no me exprese bien. Habia entendido tu explicacion pero como es un viaje de casi 5 horas en tren hasta el "problema" pense que mejor no llevarlo para evitar equipaje, pero no creo que sea inutil. Me disculpo.

El miercoles me voy y lo vere "in situ". Cuando tenga algun resultado lo escribire en este hilo. A lo mejor le puede servir a alguien.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7395
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #128 en: 07 de Noviembre de 2015, 11:30:38 »
No te diria que te lleves una bateria por que es algo "complejo" de llevar y asi evitar el ruido de fuente, pero podrias verlo en el osciloscopio, siempre y cuando no sea un ruido en modo comun, ya que si es un ruido en modo comun entre GND y VCC no vas a ver nada nuevamente.

Tambien va a depender bastante de las fuente que sea. Switching o de transformador, si es switching considero mas facil que pase ruido de alta frecuencia, mientras que una fuente a transformador lo veo mas complejo que suceda. Ya que el transformador de 50/60Hz prefiere mas estas frecuencias que no unas altas.

Y no queda otra que ir al lugar, cambiar la placa, y si es ruido, ver donde esta posicionada, ver si el problema aparece cuando se enciende algun elemento y el cable pasa por ahi cerca o si no hay cable que pase cerca entonces es por radiacion. Si el LCD esta conectado por cables intenta cables mas cortos. Tal ves el ruido este entrando por ahi. Probaria de ponerle pull-ups a las entradas, podrias ver el caracter extraño que aparece y que relacion tiene con el que deberia aparecer. En fin es todo lo que se me ocurre para probar. Y que probaria yo al menos.

Asi que espero hasta el miercoles para que lo veas y espero que le logres encontrar solucion.
« Última modificación: 07 de Noviembre de 2015, 11:33:38 por KILLERJC »

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 134
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #129 en: 07 de Noviembre de 2015, 23:33:22 »
El problema del LCD no es que aparezcan caracteres extranos. Mas en detalle, el problema es la posicion donde salen.

Me explico: El circuito es bastante simple. Coje una senal de 0-5V por la entrada analogica, calcula el nivel de la senal(0~100%), y saca el resultado por un LCD de 16x2. El mensaje que sale es "OUTPUT:____100%" por la linea 1 del LCD y "WORKING_________"por la linea 2. Tambien tiene 3 botones para actuar sobre reles de DC5V y segun la accion saca un mensaje en la pantalla.

El problema es que el mensaje de output, tiene que salir la primera letra "O" en la posicion 1 de la primera linea. Pero cuando pasan varios minutos, la letra empieza a salir por la posicion 2, es decir, se corre un sitio hacia la derecha de tal manera que el resto del mensaje tambien se corre. Enseguida se pasa a la posicion 3 y a la 4 y asi una por una hacia la derecha. Mientras por la parte izquierda empieza a aparecer la parte del mensaje que se va borrando por la derecha.....

RESUMIENDO: se ha convertido en un cartel de letras giratorias cuando realmente deberian quedarse quietas. Pero, realmente las letras siguen saliendo bien, sin fallo "OUTPUT:".

En esta situacion, actuando sobre los botones, los reles se mueven bien, asi que el programa en realidad sigue funcionando.

Por eso pense que una solucion de emergencia seria el reseteo de la pantalla cada cierto tiempo. No soluciona el problema pero puede valer de momento?.

El PIC se comunica con el LCD por un cable flat de 300mm. Esta suelto sin tocar con otros cables del circuito. Tambien tengo intencion de cambiarlo junto al LCD pero no se si podre conseguir otro mas corto. Vere que puedo hacer.

En cuanto a la fuente, es de switching y tambien llevare una de repuesto. Aunque, si el ruido la esta afectando, sin encontrar la causa y cambiar la fuente no va a valer de mucho?



Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7395
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #130 en: 08 de Noviembre de 2015, 00:19:11 »
Ah.. entonces el problema no es que termina haciendo cualquier cosa, sino que es un error que se repite continuamente. Y el mismo error.

Y ahi si pienso que puede ser posible un problema de soft, el tema es que si me decis que las demas placas sometidas a la misma operacion ( es decir si estan siempre alimentado o se corta la alimentacion, etc ) funcionan perfectamente entonces no puedo decir eso, y me pareceria descabellado. Pero que justamente tengas un problema asi tan especifico y se repita en serio parece eso. probaria con una placa que funciona, probala antes de llevarla y que tenga el mismo ritmo de funcionamiento que la otra, y observa si presenta el mismo problema. Si ya reemplazas alla y sigue entonces si puedo pensar en ruido.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 134
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #131 en: 08 de Noviembre de 2015, 00:58:00 »
Totalmente de acuerdo. Por eso, la primera persona que vio el problema enseguida me dijo "Problema de software".

El numero exacto son 214 maquinas con la misma placa. Algunas solo funcionan unas horas al dia y otras estan conectadas las 24 horas.
Algunas estan en ambientes con ruido moderado pero, aun asi, es la primera vez que sale este mismo problema.

Por eso, no niego la posibilidad de un error del software, mas todavia cuando soy un novato en esto del PIC.
Pero todavia me resisto a aceptarla hasta que no cambie el circuito y lo compruebe por mi mismo.

Por otra parte, espero que no sea problema de software porque sino ya me veo viajando meses para actualizar todas las 213 placas restantes....

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7395
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #132 en: 08 de Noviembre de 2015, 01:17:57 »
Citar
Por otra parte, espero que no sea problema de software porque sino ya me veo viajando meses para actualizar todas las 213 placas restantes....

Seria un dolor terrible hacerlo. Asi que esperemos que sea solo un caso aislado.
Respecto a tus otras preguntas no las respondi por que cambio enteramente el panorama cuando me explicaste bien cual era el mal funcionamiento del LCD. Tanto que descartaria el ruido.
Por que es algo que:

- se repite ( el mismo error, otro error NO aparece ), si fuera un ruido que entra y modifica un bit de uno de los comandos (que modifique la direccion o realize un shift), se podria esperar que tambien pueda llegar a modificar cualquier letra enviada, pero esto no ocurre. tambien seria muy raro que unicamente afecte a un dato en particular
- acumulativo ( pasa a la 2, luego a la 3 etc) , esto quiere decir que hay una variable involucrada, ya que hay una "memoria". Supongo que tendras algo como lcd_xy(3,1); Linea 3 , posicion 1. si hay una variable tanto que lo pasas por ahi o que se maneja adentro, que se modifique en otro lado

Esto suponiendo que unicamente lo que se dezplaza es la palabra "output:___00%" y nada mas.
Asi que solo me queda que lleves un LCD + una placa, y con suerte si se arregla o es el LCD o es la Placa, si no se arregla entonces seria un problema de soft nomas creeria yo.

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 134
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #133 en: 08 de Noviembre de 2015, 01:47:46 »
Huummmmm....  :?

Despues de leer tu explicacion me estoy empezando a convencer de que si puede ser un error de software.

La rutina para ir a la primera posicion de la linea1 del LCD, seria algo asi (en ensamblador):

; LCD_Linea1             
;   movlw   b'10000000'       
;   bcf           LCD_PinRS      
;   movwf   LCD_GuardaDato      
;   call           LCD_EscribeLCD      
;   swapf   LCD_GuardaDato,W   
;   call           LCD_EscribeLCD      
;   btfss           LCD_PinRS      
;   call           Retardo_2ms      
;   call           Retardo_50micros
;   return   
;LCD_EscribeLCD
;   andlw   b'11110000'      
;   movwf   LCD_Dato      
;   movf           LCD_BusDatos,W      
;   andlw   b'00001111'      
;   iorwf           LCD_Dato,F      
;   banksel     TRISD      
;   movf           TRISD,W      
;       banksel   PORTD
;   movwf   LCD_GuardaTRISD
;       banksel   TRISD
;   movlw   b'00001111'      
;   andwf   PORTD,F         
;   clrf           STATUS      
;   movf           LCD_Dato,W      
;   movwf   LCD_BusDatos      
;   bsf           LCD_PinEnable      
;   nop
;   bcf           LCD_PinEnable      
;   banksel   PORTD
;   movf           LCD_GuardaTRISD,W   
;       banksel   TRISD
;   movwf   TRISD         
;   clrf           STATUS      
;   return

Esta rutina esta cogida de un libro pero la que utilizo se parece mucho. El caso es que, tambien la utilizo en otros proyectos (en laboratorio) y no he tenido especial problema con ella.

Como lo ves?.


Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 7395
Re:Luchando contra el ruido POR SOFTWARE
« Respuesta #134 en: 08 de Noviembre de 2015, 03:04:31 »
No veo demasiados problemas, lo que si no me gusta como se maneja el TRIS, mas cuando se estaria usando demoras y no lecturas desde el LCD para pasar al siguiente dato.

- Siempre deberias llamar a la funcion LCD_Linea1 con el banco 0.

- Tambien Podrias eliminar la parte de los TRIS. Ya que si te molestas para tomar el dato del puerto para no modificar las demas salidas. Es decir esto:

Código: ASM
  1.         movf    LCD_BusDatos,W          ; Tomo el port, le hago una AND con 0x0F y una OR con el dato guardado
  2.         andlw   b'00001111'      
  3.         iorwf   LCD_Dato,F              ; Asi no cambio ls demas bits, LCD_Dato es el valor a poner en el puerto

Asi solo modificarias las salida superior. Entonces cuando haces un

Código: ASM
  1.         banksel TRISD
  2.         movlw   b'00001111'             ; Nuevamente gracias al TRISD anterior toma los TRIS y solo
  3.         andwf   PORTD,F                 ; deja la parte alta como salida
(Solo notar que ese PORTD no es un PORTD sino que accederia a TRISD)
Cuando lo pones como entrada perdes totalmente los valores que tenias ahi. No se si va a afectar esto o no, pero si la parte baja de ese puerto el LCD lo usa, entonces puede que tengas unos errores ahi.

- Tenes una instruccion sin sentido:

   btfss   LCD_PinRS   

Pero que no va a afectar en tu programa.
Es lo unico que se me ocurre que pueda ocurrir ahi, y que pueda ser un problema de bancos.