ATMega32 vs. ATMega32A: uno funciona, el otro no [cerrado]

Tengo una configuración con un ATMega32 funcionando perfectamente. Al reemplazar el ATMega32 con un ATMega32A, ya no pasa nada, ni siquiera oscila el oscilador de cristal. De acuerdo con la nota de cambio de Atmel, la resistencia pull-up de restablecimiento tiene un buen valor y los capacitores pull junto al cristal también están en su lugar. Probé con muchas partes diferentes (todas de un envío) del ATMega32A, siempre con el mismo comportamiento. Cambiando de nuevo a ATMega32 todo está bien de nuevo.

Finalmente configuro un circuito solo con el AVR, restablezco pull-up, crystal y pull-capacitors. ATMega32 funciona (cambios de cristal), ATMega32A no funciona (cambios de cristal no).

¿Se te ocurre algo que no sea que todos los ATMega32A que tengo en el laboratorio están rotos?

Experimenté algo similar al intentar colocar un 164A en lugar de un 164P: electronics.stackexchange.com/questions/15760/… Nunca descubrí cuál era el problema
¿Has comprobado los bits del fusible entre los dos?
No debe excluir la posibilidad de que haya descargado su ATmega32A con ESD .
@m.Alin Claro, creo que debería obtener más piezas de este tipo de una fuente diferente para verificarlas dos veces.

Respuestas (4)

No ha mencionado los bits de fusibles en ninguna parte; es posible que deba configurar los bits de fusibles ATmega32A en los valores adecuados. Ese suele ser el problema cuando el oscilador no funciona. Los dos dispositivos pueden tener bits de fusible configurados para diferentes osciladores y/o tiempos de inicio.

Miré la hoja de datos entre los dos: la hoja de datos afirma que ambos tienen los mismos bits de reloj predeterminados. Pero si va a engbedded.com/fusecalc y mira, 32A tiene bits de fusible bajos 0xF1, 32 tiene bits de fusible bajos 0xE1. Tal vez leí mal la hoja de datos...
Tienes razón, me olvidé por completo de los fusibles. Volví a leer la hoja de datos e intenté leer los fusibles usando avrdude pero ni siquiera pude leerlos. ¿Es este el comportamiento correcto del chip cuando el reloj no está funcionando? Tal vez tenga que conectar una fuente de reloj externa e intentar leer (y escribir) los fusibles de esa manera.
iirc con la configuración incorrecta del oscilador, debe decirle a avrdude que se comunique extremadamente lento
@ChrisStratton Puse una señal de 1MHz en la entrada del oscilador del chip e intenté leer los fusibles, sin éxito. Creo que primero debería obtener más partes de este tipo de una fuente diferente para verificar dos veces, como se mencionó anteriormente.
Podrías tener falsificaciones; pero si tiene un dispositivo genuino que de alguna manera tiene sus bits de fusible configurados para funcionar con el oscilador interno de 32 KHz, deberá configurar avrdude para que hable aún más lento; consulte, por ejemplo, evilmadscientist.com/2007/ ...

Aunque las especificaciones son las mismas, es posible que obtenga diferentes comportamientos al ejecutar las piezas ligeramente fuera de las especificaciones, debido a los diferentes procesos de fabricación. Por ejemplo, si sus condensadores de carga en el cristal no estuvieran en el rango correcto, el ATmega32 podría haber funcionado de todos modos, mientras que el ATmega32A podría ser más exigente. Lo mismo ocurre con el voltaje, la corriente de suministro, el ruido de suministro, las restricciones de tiempo en el programador, etc.

Hola para mi ATMEGA32A PUesto ayuda:

avrdude -c usbasp -p m32 -B 3

Para escribir un archivo hexadecimal en el microcontrolador, uso:

avrdude -c usbasp -p m32 -B 3 -U flash:w:Program.hex

Finalmente, descubrí lo que estaba saliendo mal y fue completamente mi culpa, y fue Chris Stratton quien dio la pista importante.

Los dispositivos AVR más antiguos se han configurado con los fusibles para que funcionen con un cristal externo. Los más nuevos están configurados para funcionar con el oscilador interno. De hecho, este es mucho más lento y mi avrdude simplemente estaba hablando demasiado rápido ... esa fue también la razón por la que no pude leer o escribir los fusibles. Después de encontrar el interruptor -B de avrdude, todo vuelve a estar bien.

Gracias de nuevo a todos los que respondieron y comentaron aquí.

¿Qué tal publicar la línea de comando avrdude completa que usó y luego aceptar su propia respuesta?