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

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

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #90 en: 23 de Marzo de 2009, 04:34:00 »
Hola copper!

Yo pondría un par de condensadores de desacoplo en las patillas del PIC, uno de 220nF y otro de electrolítico de 10uF.

Otra cosa muy importante y con la que los amigos te pueden ayudar mucho es viendo el diseño de tu PCB. Si pudieras poner unas imágenes de la cara TOP y BOT sería genial.

Un saludo y no te preocupes que en unos días vencerás al ruido  :mrgreen:


Un saludo desde Alicante.

Desconectado Gonzalo_BlackHawk

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 519
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #91 en: 23 de Marzo de 2009, 14:33:29 »
MMMmmmhhhh... caviar del bueno...

Es de obligada lectura, pero, si estamos un poco perros (gandules, vagos) como mínimo leer desde la página 28 hasta la 34.

http://www.freescale.com/files/microcontrollers/doc/app_note/AN2764.pdf?fsrch=1

Azicuetano, si te tuviera cerca te daría un beso en la frente  :mrgreen:, es una de las mejores app notes que he leido en mi vida. Cada una de las 60 paginas valen la pena. Estoy casi seguro que hay mas de estas dando vueltas por las paginas de los fabricantes. Aca dejo algunas que tambien podrian ser interesantes:

Freescale AN2321 - Designing for board level electromagnetic compatibility

Circuit Cellar: I/O for embedded controllers - Parte 1

Circuit Cellar: I/O for embedded controllers - Parte 2

PCB design tutorial

Microchip - EMC: The art of compatibility

Bueno, todas estan en inglés, eso sí, me habia olvidado.

Saludos.
"Siempre piensa si el jugo vale la exprimida..."

"La muerte esta tan segura de vencer que nos da toda una vida de ventaja."

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5435
    • Electrónica Didacta
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #92 en: 24 de Marzo de 2009, 11:38:44 »
hola gonzalo.

uff si que hay bastante info, en la web de analog se consigue bastante, ellos tienen una sección llamada preguntas raras frecuentes (RAQ)

http://www.analog.com/en/content/RAQ_index/fca.html

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado copper

  • PIC10
  • *
  • Mensajes: 2
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #93 en: 26 de Marzo de 2009, 04:56:39 »
Gracias por la contestacion pero como ya habia comentado ya trate de colocar esos condesadores de desacoplo y no he tenido exito
todo lo que se refiera a hardware he estado leyendo muchos foros y creo que ya cumpli con lo basico
para eliminar el fastidioso ruido yo creo que el problema lo tengo en el programa ya imprimi todo este foro para leerlo con detinimiento
pero  quisiera que me ayudaran a hacer mas robusto mi programa y combatirlo desde sofware pondre el codigo asi me puedan ayudar o dar algunas sugerencias

PICC

#include <16F877A.h>
#use delay(clock=4000000)
#include <LCD.c>
#fuses XT,NOWDT,NOPROTECT,NOPUT,NOBROWNOUT,NOLVP //ordenes para el programador         

#use  fast_io(B)
#use  fast_io(C)

#use  fast_io(D)

#byte portb = 6
#byte portc = 7


#byte portd = 8

int acumulador_bueno=0 ;
int acumulador_malo=0 ;
int Total_buennomalo=0;

void main()
{

inicio:
   
   
lcd_init();           
port_b_pullups(TRUE);
set_tris_b(0b00111111); // B0-B1-B2-B3-B4-B5-Puertos entrada las demas salidas                       
set_tris_c(0x00);   //todo el puerto c como salida               

 while(1)         // verificar que este en lugar de inicio

{
   output_c(4);
   

   lcd_putc("\f");
   lcd_putc(" *Verificando*  ");
   lcd_putc("\n");
   lcd_putc(" Estado Inicial ");
   delay_ms(100);

    if(input(PIN_B0)!=1)
 
   
      {
           
            output_c(0);
           
            output_high(PIN_C1);
             delay_ms(600);
             output_low(PIN_C1);
         
       
            lcd_putc("\f");
            lcd_putc("    Ok Listo     Estado inicial ");
            lcd_putc("\n");
            lcd_putc("  *Pulse START  ");
           
           
            output_high(PIN_C4);  // abilita escobilla
           
            delay_ms(3000);
           
            break;
      }
     
 
     

}

 while(1)
 {
 
 output_high(PIN_C4);  // mantien la escobilla activada durante todo el proceso
 
 if(   input(PIN_B5)!=1)  // Boton de registro
      {   
     
      lcd_putc("\f");
   
   printf(lcd_putc,"    Registro    Bad  Box=%d      ",acumulador_malo);
   
   lcd_putc("\n");
 
    //linea       ("12345678901234561234567890123456")
   printf(lcd_putc,"Good Box=%d",acumulador_bueno);
   delay_ms(3000);
    //linea       ("12345678901234561234567890123456")
   lcd_putc("\f");
    //linea       ("12345678901234561234567890123456")
   printf(lcd_putc,"      Total            %d       ",Total_buennomalo);
          lcd_putc("\n");
          lcd_putc(" Cajas Checadas ");
       
   
   delay_ms(3000);
     
     
      goto inicio;
     
      }
 
 
 
   if(   input(PIN_B2)!=1)  // Boton de inicio de la prueba
      {   
      output_low(PIN_C1);
     output_high(PIN_C1);
         

          lcd_putc("\f");
          lcd_putc("  VERIFICACION       ESPERE      ");
          lcd_putc("\n");
          lcd_putc("      1-2      ");
         
         
      }
     
   if( input(PIN_B1)!=1)   //Sensor limite 2  cambia de sentido
      {   
          output_low(PIN_C1);
          delay_ms(10);
         
          output_high(PIN_C2);
         
         
          lcd_putc("\f");
        //linea   ("1234567890123456")
          lcd_putc("  VERIFICACION       ESPERE      ");
          lcd_putc("\n");
          lcd_putc("      2-2      ");
       
       
           
         
      }
     
   if(  input(PIN_B3)!=1)  // Entrada del error
      {
     
       delay_ms(100);
          while(1)
         
      {
     
     
          output_c(0);
         
           
         
          lcd_putc("\f");
       
            lcd_putc("    Producto     RETIRE LA CAJA ");
            lcd_putc("\n");
            lcd_putc("   DEFECTUOSO   ");
         
         
       
     
         
         
         output_high(PIN_C3);
       
         delay_ms(500);
         output_low(PIN_C3);
       
       
       
       
        if( input(PIN_B4)!=1)    //  Sale del error para iniciar de nuevo el proceso
        {
        acumulador_malo=acumulador_malo+1;
        Total_buennomalo=Total_buennomalo+1;
       
        goto inicio;
       
        }
         
         
      }
     
      }
     
      if( input(PIN_B0)!=1)
   
      {
            output_c(0); 
            break;
      }
     
 
 }
 acumulador_bueno=acumulador_bueno+1;
 Total_buennomalo=Total_buennomalo+1;
 goto inicio;
 
 
 
 }// parentesis de main



Estuve leyendo algo sobre los flags si pueden unos ejemplos por que a penas ando moviendome en este mundo de los pic
De antemano muchas gracias

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3574
    • Juntos es mejor
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #94 en: 23 de Mayo de 2009, 12:28:43 »
Amigo Ivan, gracias por ese gran documento de Freescale, realmente completo..  :)

Desconectado Azicuetano

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1020
    • Aplicaciones Electrónicas en Alicante.
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #95 en: 08 de Junio de 2009, 17:22:40 »
 :mrgreen:

Los documentos de Gonzalo y Mr. Palitroquez también son realmente buenos.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4583
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #96 en: 09 de Junio de 2009, 00:29:15 »
Muy buenos textos ...  :mrgreen:
El papel lo aguanta todo

Desconectado josmaroal

  • PIC10
  • *
  • Mensajes: 22
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #97 en: 19 de Junio de 2009, 05:37:19 »
Hola flacoclau, gracias por tus indicaciones, espero me puedan ayudar con esto de el ruido en las lecturas ADC, estoy haciendo la lectura de 64 potenciometros multiplexados con el 4051,  y en los 8 canales del pic 16F877, he leido en este hilo de algunos filtros usados para evitar la inestabilidad en la lectura, por favor alguien me podria guiar al respecto como obtener el diagrama. Yo nesecito leer a una velocidad aprox de 14 muestras x seg, y los potenciometrso dn una salida de 0 a 5v.
Gracias

Desconectado Desiderium

  • PIC10
  • *
  • Mensajes: 5
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #98 en: 02 de Diciembre de 2009, 15:26:57 »
Hola josmaroal, en sí no sé muy bien a qué filtros te refieres, si vas a hacer lecturas multiplexadas puedes solucionarlo por hardware de manera relativamente sencilla con un filtro RC , con sus respectivas limitaciones en cuanto a la frecuencia de corte, ya que si quieres un mejor filtro hay que hacer unos cuantos cálculos, o puedes hacer un filtro por software, para esto puedes usar los ya citados por los compañeros, aunque matemáticamente hay formas de obtener la ecuación para los diferentes tipos de filtros, sólo que necesitas saber un poco de sistemas discretos... no es tan complejo sacar la ecuación para el filtro digital, casi casi es formulazo, pero a mejor filtro mayor la complejidad de la ecuación resultante, por eso cuando hablan sobre filtros hablan sobre el orden del filtro (pj. Filtro pasabandas de 5to orden).

Un filtro tan especializado de octavo orden por ejemplo, es para cuando trabajamos con señales de determinada frecuencia, por ejemplo, si nos llega una señal en una frecuencia de 10Khz no queremos saber nada de las otras frecuencias entonces aplicamos un filtro pasabanda de entre 9.8Khz y 10.2Khz, ya dependerá de qué tan marcada quieres que sea tu frecuencia de corte (9.8 y 10.2 Khz) será el orden de tu filtro. Luego depende si lo quieres hacer digital, aplicas un filtro discreto, o si lo quieres hacer por hardware que generalmente aplicas un filtro de tiempo continuo.

Puede creerse que es más embrollo, pero sin duda alguna estos son los filtros que funcionan en equipos industriales y para ello hay que chutarse un par de libros, vale la pena de verdad.

Otra cosa importante que no se ha tratado mucho por lo que he visto es el ruido en la comunicación serial, espero pronto postear un código con protocolo aplicado en C que elimine estos ruidos de comunicación mediante software, si me queda tiempo espero estár posteando por aquí algunas ideas interesantes ya implementadas sobre un sistema que ya aplique. Saludos!
Velis nolis post mortem nihil est

Desconectado pelacable

  • PIC10
  • *
  • Mensajes: 38
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #99 en: 16 de Marzo de 2010, 12:54:54 »
Como dijo Jack el Destripador: ¡Vayamos por partes¡!

Solo con los fuses tenemos para escribir una novela.

#fuses XT, WDT, NOPROTECT, NOCPD, LVP, VREGEN, NOPBADEN, INTRC_IO, MCLR, BROWNOUT_SW, BORV20

LVP es mas peligroso que un tigre en tu dormitorio. En cuanto detecte 5V entra en modo programación. Usa NOLVP salvo que estés programando a bajo voltaje.

WDT sin Postscaler hace que el Reset por desbordamiento sea realmente rápido, quita WDT y empieza por WDT512 o WDT1024, después puedes ir disminuyendo el postscaler hasta que veas donde ocupas mas tiempo. Yo acostumbro a ponerlo muuuuy largo el tiempo del guardián y después lo ajusto a tiempo máximo de mi rutina mas larga (sin reestablecer el contador del Watch Dog).

Tienes también los fuses BROWNOUT_SW y BORV20. El primero anula al segundo y sirve para que tu mismo programa realice on-line el control del BOR.  Utiliza solo una combinación del estilo BROWNOUT,BORV43

INTRC_IO y XT son mutuamente excluyentes. O XT para un Cristal Externo menor o igual a 4 Mhz ó INTRC_IO para el oscilador interno pero no los dos al mismo tiempo.

VREGEN Activa el regulador de voltaje para el USB, si no estas usando el USB no te hace falta (Sobre todo si no tiene puesto el condensador en VUSB, patilla 18 del 18F4550, que le hace falta para realizar dicha regulación)

Conclusión: Pon unos fuses del estilo que te propongo mas abajo y prueba ...

#fuses XT, WDT512, NOPROTECT, NOCPD, NOLVP, NOPBADEN, MCLR, BROWNOUT, BORV43, NODEBUG

Y sobre todo Datasheet, mucho Datasheet.  :mrgreen:





Hola a todos
Este tema está muy bueno :-/
Yo recien estoy empezando a programar seguido, y cuando salté del 16F84 al 16F877A cometí varios errores que pude superar y darme cuenta de lo complicado del tema.
Si a alguno se le borra la eeprom yo les gané a todos :D :D Resulta que por desconocimiento cada vez que programaba con el ic prog. activaba el LVP, los programas funcionaban, pero no podía tocar ningun cable, se volvía inestable, el AD se volvía loco, y si tocaba el encapsulado, se reseteaba.

No entendía el porqué y decidí cambiar el integrado, fué justo ahi que me desperté. El nuevo pic se comportaba de manera muy diferente, cuando lo alimentaba directamente no funcionaba.
Lo leía con el grabador y estaba todo borrado...Otra que solo la EEprom ! a mi  se me borraba todo jejeje Desactivé el LVP y se solucionó todo.

En otra oportunidád el AD era muy inestable, y también tocando el encapsulado se producian interferencias extraordinarias.
No había programado con el LVP y los problemas eran parecidos. Como ví que el encapsulado era tan sensible, decidí colocarle una chapita de bronce por encima y ésta a masa.
Resultó, ahora el AD se había estabilizado y podía medir sin ruido, pero ¿que era lo que producía ese ruido?
El origen del mísmo era la resistencia que puse en el pin 1 MCLR, que era de un valor muy alto y que no polarizaba correctamente.  :mrgreen: estaba marcada como 10 K y tenía 1meghom :shock:

A medida que le bajaba el valor a la resistencia el comportamiento mejoraba, y podía ya sacarle la plaquita de bronce que cubría el PIC.

Hoy si la aplicación que le doy al PIC es en un ambiente ruidoso no dudo en poner un buen plano de masa en el PCB por debajo del micro y si no alcanza le pongo la plaquita por encima,
como la etapa de radio de un sintonizador, al margen de usar los capacitores de .1 uF directamente soldados a las patas. electrolíticos, inductores y demas yerbas

Otro tema que descubrí es que el 16F877 tiene entrada de alimentación por ambos lados del encapsulado, y que se le deben colocar no uno sino 2 capacitores de .1 (uno por cada entrada)

Tanto los PLCs como los equipos industriales de medicion en campo, están provistos de una placa de masa intermedia entre las dos caras de la plaqueta (ésto tiene un nombre que no me acuerdo) Hace las veces de pantalla.

Las fuentes conmutadas son las más sensibles al ruido de Fabrica, en cambio los transformadores que tienen una pantalla de papel metálico muy fino entre primario y secundario, y éste colocado a tierra, dan mejor resultado.
Lo pude comprobar con un variador de velocidad trifásico en el mísmo gabinete

Resumiendo: de mis errores pude aprender algo, y de mis experiencias en ambientes ruidosos
otro tanto.
Quizas le sirba a alguien que recien empieza como yo y no repita mis errores :oops: :oops:

 Si es así me pondré contento :P

Saludos

Desconectado XAVICOROSS

  • PIC12
  • **
  • Mensajes: 93
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #100 en: 15 de Noviembre de 2010, 01:13:26 »
Ahora recién leo todos los mensajes del foro y déjenme decir que estoy aprendiendo mucho.
Hablando de Kalman, una vez utilicé un algoritmo basado en este modelo predictivo, para deshechar valores erroneos
causados por interferencia electromagnética al medir frecuencia y posición angular mediante un sensor VR
(reluctancia variable). Es increíble el resultado, lo recomiento 100%...

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1339
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #101 en: 21 de Diciembre de 2010, 05:45:24 »
Muy buenos todos las cosas que se pueden hacer por software.. Yo para estas cosas me inclino mas para el software que para el hardware, pues siempre tengo la intencion de reducir este ultimo por los costos...

Bueno, he tenido el problema de la EEPROM del PIC (18F2550) que se borraba siempre de varias resets y falsos contactos con la fuente principal (12V) ya hacer tiempo... Esto lo arregle con su sistema Brown-Out Reset configurado a 4.2V. Me di cuenta que estas "fluctuaciones" de la EEPROM se generaban a un bajo voltaje. Por otro lado, tambien pongo un delay en el main de 300ms antes de hacer cualquier cosa. Tambien, muy recomendable el WDT si quieres vender el producto ("sacarlo afuera"). Ahora estoy usando un 10F222 a 4Mhz con su WDT a 18MS (el minimo) y todo va bien. Ah y el reset siempre lo pongo al incio del bucle. Y, porsupuesto, nunca poner un refresco de WDT (restart_wdt) en una ISR (interrupcion), pues me a pasado (y varias veces) que el contador de programa se queda en otro lado, mientras que las interrupciones SI siguen ejecutandose, COMPROBADO.

Aparte, para las entradas digitales (aparte de usar pullups interna por lo que comente de reducir los costos de hardware) siempre el delay de 30ms aprox. para saber que no es un ruido. En este caso, ahora ultimo, yo e echo lo mismo pero con un programa ciclico, pues el micro no se queda en un solo lugar esperando que pase este tiempo. Para esto, e echo un contador para que revise un numero X de veces el input()... cada ves que entre por ahi el programa, despues de esto lo considero como no-ruido. Tambien, cuando quiero interpretar ese mismo pin pero en su estado contrario hago lo mismo, si la aplicacion lo requiere.

Finalmente, aun no estoy muy seguro de esto y queria preguntarles a todos... Se que usar el #Fast_IO(X) mejora considerablemtne el consumo de ROM. Pero al hacer esto aique configurar los tris manualmente siquiera una vez en el main. Para cuestiones de ruido, no seria recomendable configurar el tris cada ves que se necesite/use (#STANDARD_IO(X)) ??? No estoy seguro (no lo recuerdo) si fue por esto pero creo haber tenido un problema de desconfiguracion de un tris o algo parecido que lo soluciones aplicando STANDAR_IO.... como digo no estoy seguro pero al interpretarlo parece buena idea para un "porsiacaso se me desconfigura los TRIS cuando configure en el main (se me convierte una salida a entrada o algo parecido); volviendose a reconfigurar automaticamente cuando mi programa lo necesite o use ese pin"... pues tampoco no es que los TRIS se vayan a gastar no?

Ahora, no recuerdo algunos otros trucos pero ahi estaremos.

Un saludo.  
« Última modificación: 21 de Diciembre de 2010, 06:03:30 por jeremylf »

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1339
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #102 en: 21 de Diciembre de 2010, 06:00:53 »
Además de todo esto también me gusta hacer lo siguiente:

Si pasamos por el bucle principal cada 10 ms (aproximadamente) configuro el wdt con 18ms y en el bucle principal (si la aplicación me lo permite) hago un retardo de unos 6 o 7 ms para que mi bucle principal tenga una duración de 17 ms (más o menos). Lo que consigo así es ajustar al máximo el wdt. Parece una tontería pero... por no ajustar bien el wdt en varias ocasiones que he tenido problemas de ruido y el wdt no me los ha solventado (porque se me ha refrescado aún sufriendo un salto el contador de programa).

---------------------------------------------------------------------------------------------------------------------------------------------

Esto que comenté hace ya un tiempo lo continuo haciendo. Tengo comprobado que si sufres ruido la ejecución normal del programa (el contador de programa)  salta a donde le da la real gana. Si no se ajusta bien el tiempo del WDT se puede dar el caso que, aún saltando a cualquier otra función, al WDT no le de tiempo a desbordarse y no te resetea la aplicación (la consecuencia es evidente, el programa se cuelga jeje).

Este es el truquillo que yo tengo para el WDT. Estoy de acuerdo que quizás es demasiado extremista mi postura, pero bueno, como no cuesta nada hacerlo y tengo comprobado que se pueden sufrir cuelgues si no lo ajustas bien... por eso lo hago  :-)
No estoy muy deacuerdo con este truquillo Azicuetano, pues (claro que depende de la aplicacion) hacer esto si que cuesta y me refiero al tiempo que desperdicias al poner ese delay para ajustar MAS el WDT. Almenos, en una aplicacion ciclica, como la que comento un post atras, hacer esto no me dejaria hacer esas reviciones. Por el contrario, he oido o leido de mchip ya hace tiempo de una forma para no tener ese tipo de fallas que tenias sin tener que hacerlo asi y es cubriendo toodo lo que no has usado de progrrama con un GOTO creo al incio de tu programa por si el contador de programa se le ocurre saltar por ahi. No recuerdo que nota era y la forma en que se hacia y tampoco lo he echo pero se lee muy interesante implementarlo. Tampoco estoy seguro como se aria eso en CCS, creo q con #ORG o #reserve... bueno.


Salu2

Desconectado setshomaru

  • PIC12
  • **
  • Mensajes: 66
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #103 en: 31 de Enero de 2011, 21:36:38 »
Bueno, voy con el 'restart_cause()' de mis amores.

Con esta función podemos saber cual fue la causa del reinicio del PIC.

Para que la utilizo? Pues... si nuestro hardware se resetea por causa mayor podemos hacer que el usuario ni se entere del cuelgue.

En que tipos de hard-software se puede utilizar esto?? Pues vamos con un ejemplo:

Imaginemos que tenemos una PBA que cada vez que se enciende el usuario la tiene que activar dándole a un pulsador. Si el equipo se cuelga por la noche, estará sin funcionar un buen número de horas. Sin embargo, si al principio de nuestro main somos capaces de saber que fué lo que pasó (por que se reseteó) podremos hacer que el equipo continue funcionando como si nada.

Evidentemente he puesto el ejemplo más tonto, pero, imaginaros que cuando se enciende la pba hace un pitido, o... espera iniciar algún evento que en ese momento no se puede hacer por lo que sea.

El caso es que se puede utilizar casi siempre y... es un buen método para que nadie se de cuenta de nuestra ineptitud (o de la suya propia) :D

Un ejemplo puede ser este. La pba siempre hace un pitido cuando se enciende y muestra por unos displays la versión del soft que tiene grabado. A continuación solo detectaremos cuando la PBA se reinicia por un fallo en la alimentación 'BROWNOUT_RESTART' y lo que haremos es omitir ese pitido inicial y que nos muestre la versión. Aunque el usuario estñe encima de la pba no se dará ni cuenta que se ha reseteado por un fallo en la alimenteción.  :mrgreen:

Código: [Seleccionar]
switch(restart_cause())
{

case WDT_FROM_SLEEP:

mostrar_version(); // VERSION

BIP();

case WDT_TIMEOUT:

mostrar_version(); // VERSION

BIP();

case MCLR_FROM_SLEEP:

mostrar_version(); // VERSION

BIP();

case MCLR_FROM_RUN:

mostrar_version(); // VERSION

BIP();

case NORMAL_POWER_UP:

mostrar_version(); // VERSION

BIP();

case BROWNOUT_RESTART:       // Aqui se mete casi siempre que sufre ruido la pba
                             // Reiniciamos la pba pero sin que el usuario se de cuenta
// output_high(PIN_C0);      // por eso ni encendemos leds, ni versión, ni pitamos ni nada.
// output_high(PIN_C1);
// output_high(PIN_C2);
// output_high(PIN_C3);


}


Un saludo desde Alicante.


Gracias colega, despues de Dios, me has salvado de ser un desempleado mas, este truco me ayudó a terminar un proyecto en la empresa para la que trabajo y no creo que hubiera sido posible sin esto.

Entrando en el tema creo que lo mas importante es tratar de minimizar el ruido por hardware, y prevenir por software, en mi experiencia, en cada circuito que hago coloco un condensador de 100uF lo mas cercano posible a los pines de alimentacion del pic, casi siempre basta con eso, y claro tener una muy buena fuente. 
entre mas se, me doy cuenta que no se nada

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: Luchando contra el ruido POR SOFTWARE
« Respuesta #104 en: 14 de Mayo de 2011, 23:06:23 »
Hola, bueno este tema que se toca acá es para nunca acabar, y como se han dicho en estas 6 páginas siempre hay algo que aprender, pero como dicen varios, casi siempre el problema de que el pic se quede pegado es por el motivo del ruido, y independiendo de que ruido afecte a nuestro circuito. En fin, yo siempre estoy haciendo cosas y mis PCB, en cuales en varios ocasiones tengo circuitos que tienen que funcionar siempre, ósea los 365 días del año sin descanso. Yo estoy aprendiendo a programar, como se ve en las muchas preguntas que e hecho en el foro, pero siempre me resultan bien los circuito cuando los llevo a la práctica, y es porque:
Como dicen varios separar las pistas de potencia con la de control
También filtrar muy bien la fuente de alimentación, condensadores y bobinas, esto último yo siempre las pongo en conjunto con varistores.
Luego pongo condensadores de 100nf cerca de los CI.
Pero para mí lo más importante es que siempre, pero siempre genero su plano a tierra del circuito y siempre pongo condensadores de filtrado en varias partes que yo creo que son criticas.
En cuanto a los malditos botones, aprendí que esto siempre hace que el pic se cuelgue en algún momento. Pero logre solucionar esto generando un anti-rebote por hard y otro pos soft. Como también que en un pic de los 16F no tengo que generar tantas funciones, ya que este es más propenso a perderse que los de la gama de los 18, y lo digo con fundamento esto último, ya que he probado esto.
Ahora ultimo lo que hago también es poner condensadores en las entradas y salidas del pic, ya que he cambiado mi tecnología de circuito y he emigrado a SMD, y bucha que es grato poder meter todo el circuito que quieras, y que te ocupe tan poco espacio, y sobre todo si ocupas doble faz.
También lo otro es que nunca dejo un pin sin conectar, y en esto ahora estoy aprueba que es mejor si dejarlo a VCC o a GND, pero son pruebas como digo que me tendrán que llevar a alguna conclusión buena, y no duden en que se las are saber.

http://construyasuvideorockola.com/fabricacion_impresos_04.php

A todo esto. Les dejo un video de cómo hacer PCB, y créanme que se logran muy buenos resultado, vean el video, es el método de serigrafía.
Y como acotación en la parte que va la soldadura, le pongo primero estaño liquido, y al horno y después del video y lo ultimo dicho, empiezo a poner los componentes.
« Última modificación: 14 de Mayo de 2011, 23:09:45 por japifer_22 »