PIC18F2550 se ejecuta y luego se detiene

Tengo un PIC18F2550 en el que estoy tratando de ejecutar un programa simple de tipo hello world. El código está configurado para encender y apagar un LED con retrasos de 250 ms entre los ciclos. Tengo un cristal de 4Mhz conectado a los pines 9 y 10 con 2 capacitores de 18pF. Cuando conecto mi osciloscopio al pin de salida y enciendo el chip, puedo ver que las señales altas y bajas van de 0 V a 5 V durante aproximadamente 3 a 5 segundos y luego solo líneas planas.

ingrese la descripción de la imagen aquí

Si apago el chip por un tiempo y lo vuelvo a enchufar, comienza a funcionar nuevamente, pero después de 3-5 segundos volverá a 0.

¿Qué puedo hacer para solucionar este problema?

Actualizar

También debo agregar que después de repetir todo el proceso varias veces (es decir, encender y apagar el dispositivo), eventualmente no encenderá la salida.

Probé varios chips PIC18F2550 con el mismo software y obtuve el mismo efecto, por lo que no es el procesador PIC.

Estoy pensando que esto debe ser un problema de hardware ya que el software se copió de una muestra de trabajo. En caso de que alguien piense que se trata de un problema de software, aquí está el código de MikroC (aunque no creo que este sea el sitio de Stack Exchange correcto para el código fuente):

void main() {
    TRISB = 0; //Make all PortB pins output

    while(1)
    {
        PORTB = 0; //Turn off the port
        Delay_ms(250);
        PORTB = 255; //Turn on the port
        Delay_ms(250);
    }
}

Aquí un esquema (muy) aproximado del circuito. Tengo el visor conectado al pin 24.

ingrese la descripción de la imagen aquí

Aquí están las partes que estoy usando

Condensadores de cristal

Necesita condensadores de derivación a través de las conexiones de la fuente de alimentación. Como un condensador de 0,1 uF entre los pines 19 y 20, lo más cerca posible del IC.

Respuestas (2)

En mi experiencia, dejar flotando accidentalmente el pin _MCLR provoca un comportamiento errático como el tuyo. Asegúrese de que esté conectado a +5 V a través de una resistencia (47 kΩ más o menos), para evitar que el PIC se reinicie aleatoriamente.

@Matt La hoja de datos especifica que el pin _MCLR está conectado a algún voltaje (+5 V aquí) (después de todo, son programables) y no permite que supere el voltaje del sistema. Si lo hace, entra en el modo de programación. Entonces, para todos los micros (y muchos circuitos integrados en general), conecte todos los pines de suministro y tierra, además de que cualquier cosa que quede flotando debería tener una buena razón para estar flotando; de lo contrario, tire de ellos hacia abajo o hacia arriba con una resistencia (prefiero resistencias porque puede anular durante la depuración sin romper pistas).
Sí, lo he leído antes, pero hasta ahora me he escapado sin hacerlo (supongo que se me acabó la suerte). Me aseguraré de no dejar alfileres flotando en el futuro. Gracias por el consejo.

Por lo general, establecer puntos de interrupción es la mejor manera de hacerlo, pero esto parece un problema de inicialización/configuración.

Intenta deshabilitar el perro guardián

   WDTCON  = 0;

¿Configuraste tu oscilador? ¿Qué tal borrar la mayoría de los registros? (TRISx, INTCON, TxCON, UCON, etc.)

Configuré los osciladores y configuré el registro TRIS adecuado; los ejemplos que he visto parecen que todo lo que necesito hacer es configurar el registro TRISB.
¿Estás usando un bucle forever while?while(1){ [code] };
Sí, agregaré el código a mi publicación, aunque no creo que sea un problema de software.
FYI, intenté deshabilitar el perro guardián, pero no ayudó. ¿Alguna otra idea?
Establecería algunos puntos de interrupción y miraría sus bits de estado después del inicio y luego después de la línea plana. Eso podría aislar el problema. ¿Una simulación muestra el mismo comportamiento? (es un poco improbable, pero si lo hace, entonces es un problema de configuración)
¿Ha configurado ADCON para que el pin del puerto b sea E/S digital? ¿Tienes otro chip para verificar que es un problema de software?
Configuré el registro ADCON para hacer que el puerto b sea digital; sin embargo, según la hoja de datos, esto no es necesario ya que los puertos de salida continúan funcionando incluso si están configurados para entrada analógica. Desafortunadamente, el programador que estoy usando no está configurado para la depuración. Necesito obtener un programador PIC Kit, o un cable para mi programador que permita la programación en circuito.
¿Puede darnos TODA la información de configuración, un diagrama de circuito y algunos datos sobre cómo se enciende y se omite? Obtendrás una respuesta mejor y más rápida. Un número de parte para su cristal también podría ayudar a ver si 18 bocanadas es el número correcto
@ScottSeidman Buena idea. Prepararé un esquema ahora.