ATmega1284 se ejecuta muy lentamente hasta que se vuelve a flashear

1

Cuando enciendo mi ATmega1284, se ejecuta de forma extremadamente lenta, probablemente menos de una décima de su velocidad normal, a juzgar por los LED de ciclo que ejecuta. Está configurado para usar el oscilador interno sin divisor, y he confirmado que CKOUT está dando un reloj de 8 MHz.

Restablecerlo no ayuda, pero si lo hago con un ISP (solo flash, no con fusibles), de repente comienza a funcionar a toda velocidad nuevamente. lfuse es 0xA2 (oscilador RC interno, sin divisor).

¿Cuál es la causa probable de esto? ¿Qué más debo probar?

    
pregunta Dan Ellis

1 respuesta

2

Aquí hay una lista de verificación de algunas cosas que podrían ayudar a rastrear más el problema:

  • Si está utilizando interrupciones de cualquier forma, asegúrese de que las líneas de E / S relacionadas se mantengan siempre en estado estable. Por ejemplo, si tiene un botón conectado sin un pull-up / down, es posible que factores externos lo hagan oscilar. La lentitud aparente puede ser que el procesador invierta todo su tiempo en dar servicio a las interrupciones.

  • Asegúrese de que los capacitores de desacoplamiento adecuados estén en su lugar. Si bien esto puede parecer poco probable porque la programación parece estar clara, también puede ser una condición del oscilador que se elimina moviéndolo físicamente o aplicando una fuente de voltaje externa durante la programación.

  • Comprueba que generalmente estás ejecutando todo dentro de las especificaciones. Por ejemplo, cuando se trata de indicadores LED, si observa la parte inferior de la página 324 hoja de datos de ATmega1284 verá que ciertos grupos Los pines de E / S tienen un límite de corriente total de 100 mA.

  • Has mencionado que el problema es difícil de repetir. Podría valer la pena tomar nota de las condiciones ambientales, como la temperatura, la proximidad de los teléfonos celulares, etc. en el momento en que ocurre. Para los circuitos que funcionan con baterías, tal vez verifique el voltaje de la batería en ese momento, para las operaciones con alimentación eléctrica, piense en cosas como los acondicionadores de aire que podrían degradar la calidad de la energía.

  • Si solo ha creado un solo dispositivo, si es práctico, podría valer la pena construir un segundo sistema en caso de que haya encontrado un componente defectuoso o algo dañado durante el ensamblaje / desarrollo. Si no, al menos probaría otro AVR.

  • Si bien no es una buena solución a largo plazo, tal vez pueda ver si habilitar el temporizador de vigilancia solucionará el problema al detectar el funcionamiento lento del programa y al reiniciarlo.

  • Has mencionado unas diez veces más lento. Tal vez podría reducir la velocidad de los ciclos de tiempo para obtener un tiempo de ciclo esperado de, por ejemplo, 10 segundos. Entonces podrás medir el tiempo exacto con un cronómetro y obtener una idea más precisa. Si fuera exactamente 8 veces, indicaría algo extraño con el fusible CKDIV8 . Parece que tienes eso cubierto al medir CKOUT pero lo dejo aquí para el beneficio de cualquier otra persona con problemas similares.

respondido por el PeterJ

Lea otras preguntas en las etiquetas