El circuito PIC no permanece encendido

Construí un secuenciador LED simple usando PIC 18f4550. Las salidas son 10 pines en los puertos C&D. Ahora he construido (soldado) este circuito 3 veces y todavía solo se enciende de forma intermitente. Instalé un LED de "encendido" de corriente muy baja para ayudar a solucionar problemas. Noto que si toco el chip o ciertas áreas de la placa, el circuito funciona (y la luz de encendido se enciende). Pero se apaga intermitentemente. Casi como si hubiera una conexión suelta o algún problema capacitivo. El circuito funciona bien cuando la luz de encendido está encendida. Los síntomas son los mismos, ya sea en tablero o soldado. ¿Ideas?

Gracias


por favor disculpe la crudeza de este dibujo.
secuenciador led para PIC18f4550

Un esquema y/o imagen del circuito sin duda ayudará.
¿Puso capacitores de desacoplamiento de 100nF en cada par de pines Vdd y Vss del PIC?
Yo pongo 0.1uF. Solo pongo en un lado ya que parecen ser "comunes" a través del chip. (vdd/vcc existen en la otra mitad a través de PIC). ¿Tal vez debería agregar el otro?
m.Alin, es un esquema dibujado a mano. Intentaré conseguir un digital para subirlo más tarde. gracias.
Un límite para todo el PIC debería ser suficiente, pero siempre agrego uno para cada par de pines Vdd/Vss, solo para estar seguro. Además, 100 nF = 0,1 uF
¡Uno no es suficiente! ¡Desacoplar siempre cada par!
@LeonHeller Me convenciste con tu !!! :-)
¿Cómo estás manejando MCLR?
ok, puse un pullup 4k en MCLR pero eso no lo solucionó. Estoy tratando de incluir el esquema.
Además, probé varias configuraciones para el interruptor en RB0. Intenté denunciado, pullup y ambos, pero el mismo problema de energía me hizo pensar que podrían estar contribuyendo, así que los eliminé. Cuando la alimentación está encendida, esta conexión a tierra simple a RB0 activará los LEDS como se esperaba.

Respuestas (7)

Probablemente te falte un pullup en el pin de reinicio (/MCLR)

Esto es más un comentario que una respuesta ...
@m.Alin - ¡NO! Es más una respuesta que un comentario. Sugiere una solución técnica específica que se recomienda que el usuario investigue.

"TODO" lo que debe hacer es pasar la lista de verificación de cordura estándar y funcionará:

Agréguelos, ajústelos para que se adapten a sus perspectivas, luego imprímalos y fíjelos en su frente para futuras referencias.

Cuando esté en problemas, reúnase, acorte las líneas de batalla, retírese tácticamente y concentre las fuerzas en las áreas de ataque conocidas, es decir, ponga en marcha el mínimo sistema posible que no falle, apague cualquier código que no sea necesario, deshabilite cualquier periférico, etc. necesita, deseche todo lo que pueda incluso de lo que "necesita" hasta que vuelva a un estado estable. LUEGO avance un cambio a la vez. Tenga en cuenta que si realiza 3 cambios abc en orden y a y b funcionan bien y c no, por ejemplo, a+c puede producir una falla combinada entre ellos; puede que no sea solo c la falla.

Si no muestra lo que hay en cada pin en su diagrama de circuito, entonces está abusando de aquellos que buscan ayudarlo y arriesgándose a engañarse a sí mismo*.

Si ha establecido un estado modificable programáticamente o de inicialización en cualquier pin, debe decir lo que ha hecho, ya que de lo contrario está abusando de aquellos que buscan ayudarlo y corre el riesgo de engañarse a sí mismo *.

Revise la hoja de datos y confirme que CADA pin esté conectado a algo válido en función de su estado lógico. Escriba lo que ha hecho en el diagrama del circuito y las notas asociadas.

Describa TODAS las acciones configurables mediante programación o de inicialización que haya realizado. Se asume el valor predeterminado de la hoja de datos para cualquier cosa que no diga que ha establecido. Indicar cuál es el valor predeterminado de la hoja de datos en cada caso ayuda a las personas a ayudarlo y lo ayuda a no engañarse a sí mismo.

Cada pin de tierra debe estar conectado a tierra.

Cada pin Vdd debe estar conectado a Vdd.

CADA entrada debe estar conectada a un estado definido conocido por una ruta de resistencia no superior a la permitida legalmente por la hoja de datos. (El caso límite, si no se especifica lo contrario, es (voltaje de compensación + corrientes de polarización x ruta de resistencia + voltaje del punto de terminación) todo configurado en el peor de los casos y la polaridad en cada caso siempre debe colocar el pin en un rango de voltaje válido. (Un pullup interno o pulldown califica como un estado conocido siempre que realmente lo implemente).

Cada estado de pin de control debe conocerse y establecerse en un nivel que especifique un estado que sea aceptable para usted en la configuración general que ha elegido.

Cualquier tiempo de generación de interrupción operativa debe producir resultados conocidos y conocibles.
Conocido: por ejemplo, si tiene un temporizador de vigilancia que interrumpe la operación, se debe evitar que actúe mediante el programa o la acción del hardware O debe producir un resultado válido cuando actúa.
Conocible: si tiene una interrupción en vivo, su vector debe establecerse y debe ir a un código válido cuyo resultado sea aceptable.
Las interrupciones de caída de voltaje deben configurarse para que las fuentes de alimentación utilizadas sean válidas.

Sepa qué hay en los registros de datos, ya sea mediante una configuración masiva durante el inicio o mediante una configuración explícita que es una parte inevitable de una rutina O sepa que no importa en un caso determinado. Si la configuración masiva al inicio, asegúrese de que esta sea una razón válida para usar el registro con confianza posteriormente. Sin condiciones ESD.

IC no dañado.

La fuente de alimentación no presenta picos, ruidos ni caídas de tensión.

"Demasiado difícil" y "no se puede entender" no son condiciones comprendidas por un microcontrolador o Murphy. Si un periférico o registro tiene opciones que no puede dominar con confianza, entonces, para estar seguro de los resultados, DEBE seleccionar alguna otra opción para ese periférico o registro que esté seguro [tm] de que comprende completamente. por ejemplo, si hay un temporizador que no domina, desactívelo. Si usa un vector de interrupción, entiéndalo completamente. Si no lo hace y no puede o no quiere pasar el tiempo NO ADIVINE.- Desactívelo en esta etapa hasta que el sistema se estabilice.

TODO lo anterior constituye un mínimo grado de rigor a la hora de programar e implementar incluso los sistemas de microcontroladores más triviales. Si no puede o no quiere hacer todo lo anterior en cada ocasión, entonces no está haciendo lo mínimo necesario para hacer el trabajo correctamente.

Permítanme tratar de decir lo obvio, pero a veces eso es lo que se necesita...

¿Conectó los pines 11, 12, 31 y 32 a la alimentación y GND? Sé que suena como una pregunta estúpida, pero no lo es. He visto chips que no tienen alimentación/GND conectados y que todavía funcionan debido a fugas y otras cosas en los pines de E/S. ¡Incluso he visto que esto sucede en PCB que estaban en producción en volumen! Su esquema muestra tapas en esos pines, pero no power/gnd. Pensé que valía la pena mencionarlo.

en realidad, al transferir a la protoboard soldada, no conecté 31/32. Estaban conectados en la placa de prueba, pero aún actuaban escamosos allí, así que me volví todo "minimalista" en la versión soldada. Lee vdd/vss en esos pines (31/32) del chip aunque solo 11/12 están conectados. Me preguntaba por qué se especifican dos veces si parecen ser comunes dentro del chip.
"actualmente" parece estar funcionando bien, pero eso no significa que no se desvanecerá. Si lo hace de nuevo, los agregaré de nuevo y veré. Gracias.
@Mark A menos que la hoja de datos indique lo contrario (esto es raro), siempre debe conectar todos los pines de alimentación/tierra. Esos pines están ahí por una razón y no se puede garantizar un funcionamiento correcto sin ellos. Este PIC tiene una corriente máxima de salida de pin de E/S de 200 mA (para todos los pines combinados), y probablemente no pueda acercarse a eso sin conectar todos los pines. Si está ejecutando sus 10 LED a 20 mA cada uno, entonces ya está en su límite de 200 mA.

Cada vez que puede tocar un componente y obtener el resultado deseado, casi siempre es un problema de conexión a tierra. Como se indicó anteriormente, asegúrese de que todos los pines de conexión a tierra necesarios estén bajados y use una conexión a tierra común. Por lo general, cuando toca la placa de circuito impreso, el chip o la placa y hace que la imagen funcione, se debe a que hay un problema de bucle de tierra y su cuerpo actúa como una resistencia gigante de mega ohmios que lleva el circuito a tierra y crea una conexión a tierra común para su circuito.

El PIC puede estar ingresando al modo de programación de bajo voltaje (LVP). De la hoja de datos PIC18f4550 :

Mientras se programa utilizando Programación de suministro único, VDD se aplica al pin MCLR/VPP/RE3 como en el modo de ejecución normal. Para ingresar al modo de programación, se aplica VDD al pin PGM.

Por defecto la programación LVP está habilitada. Esto significa que cada vez que el pin PGM sube, el PIC se reinicia.

Una manera fácil de verificar si esto soluciona el problema es agregar una resistencia desplegable (4.7k - 50k) desde el pin PGM en su dispositivo a tierra. Este es el pin 38 en el dispositivo en su esquema.

La otra solución es borrar el bit LVP en los registros de configuración de dispositivos:

registro de configuración

¡Sin embargo, no cambie el registro de configuración si necesita usar el modo LVP para programar su chip!

Ya hay muchas respuestas excelentes aquí, pero no he visto a nadie mencionar que no hay un oscilador en el esquema. ¿Estás usando un oscilador interno? Si no tiene un oscilador configurado correctamente, su circuito no funcionará. También estoy de acuerdo con KP44, el comportamiento intermitente suena como un problema de conexión a tierra.

Tuve un problema similar. En mi caso, /MCLR se elevó alto pero no había bajado PGM. Extraer el registro de PGM solucionó mi problema

Tal vez esto pueda ahorrarle a alguien un poco de tiempo.