NANOS CON MEGA328PU-TH
Como últimamente mis Nanos me tienen algo alterado, he estado investigando al respecto y estas son las conclusiones a las que he llegado:
En principio, me voy a centrar en el Atmega, principal culpable de los comportamientos raros.
En la nomenclatura MEGA328PU-TH, las siglas "TH" significan que es fabricado en Tailandia. (como ya dijo @cacharreo)
Revisando comentarios de diferentes personas en foros de Internet, con el mismo Atmega, he llegado a la conclusión, que se fabrican bajo esa nomenclatura, tres tipos, pudiendo diferenciarse por la "Firma" interna del chip.
- 1E 95 14 - MEGA328 (Normalmente, Old Bootloader no Picopower)
- 1E 95 0F - MEGA328P (con sus variantes)
- 1E 95 16 - MEGA328PB (Diferente a los dos anteriores y no sustituible entre ellos, según fabricante (aunque si funcionan))
* Código que nos facilitó @cacharreo para ver las firmas de los Atmega:
viewtopic.php?f=63&t=8751&start=950#p172629
En mi caso, mis Nanos con MEGA328PU-TH son realmente MEGA328PB (0x1E 0x95 0x16), con significativas diferencias con sus antecesores MEGA328 y MEGA328P.
Datasheet
http://ww1.microchip.com/downloads/en/D ... 01906C.pdf
Diferencias
https://www.microchip.com/content/dam/m ... T15007.pdf
Entre algunas diferencias, como los pines 3,6,19,22... Fuses... Una que me ha llamado bastante la atención, después de leer el Datasheet de casi 500 paginas, es que tiene un nuevo sistema de cancelación de ruidos del ADC, que actúa cuando no se está usando el canal. (Apartado 28.6 del Datasheet)
Cuando llegué a ese apartado ya tenía cocidos los ojos,
pero creo entender, que es el que hace que los canales suban su estado lógico a nivel alto.
*No concluyente la razón.
Realmente no es un cambio de estado a nivel lógico alto, es una muy leve polarización positiva, que no se manifiesta en los anteriores Mega328P.
También mucha gente dice, que les falla el uso del oscilador interno, que tienen que calentarlo con un soplete, para que llegue a oscilar a una frecuencia decente... que a nosotros no nos afecta, pero creí interesante decirlo.
Conectándolo con el IDE ARDUINO, al ser firma nueva, no reconocía este nuevo atmega, pero en las ultimas versiones, se ha solucionado incorporándolo a su lista de dispositivos (como si fuera un MEGA328P), pero solo en conexíon USB, por ISP sigue sin reconocerlo, sin poder cargar bootloader o HEX por el puerto ISP. (Por ahora no he encontrado solución, pero estoy en ello)
*Solucionado!!! Mas abajo en el mensaje
Arduino IDE avrdude.conf
Código: Seleccionar todo
part parent "m328"
id = "m328p";
desc = "ATmega328P";
signature = 0x1e 0x95 0x0F;
ocdrev = 1;
;
part parent "m328"
id = "m328pb";
desc = "ATmega328PB";
signature = 0x1e 0x95 0x16;
ocdrev = 1;
;
Se encuentran por Internet varios tutoriales, de como hacer que los MEGA328PU-TH puedan funcionar por ISP, pero en mi caso no funcionan, porque al ser 328PB tiene algunas diferencias que no le permite funcionar como un 328 o 328P.
Me imagino que sobre todo el tema de los fuses, que varían en este modelo y no valen ni las calculadoras que había hasta ahora, a no ser que se hayan actualizado a este modelo concreto.
Si tienes realmente un 328P, funcionará todo correctamente (Siempre y cuando sea original Atmega), si tienes un 328 (Old bootloader 1F 95 14) si puede que funcionen esas soluciones (me imagino, no lo he comprobado).
Tenía desahuciado un Arduino UNO, que me llegó con defecto, que curiosamente tiene el mismo Atmega MEGA328PU-TH... y me ha dado por repararlo (Falsa soldadura en el Atmega)... pues realmente es también un MEGA328PB!!!
Eso significa que puede estar montado en cualquier Arduino.
Los Arduinos con MEGA328PU-TH, son una lotería!!!!
Espero haber aclarado un poco el tema de estos misteriosos Atmega.
* Si he cometido algún error o inexactitud, por favor, decírmelo para corregirlo.
NOTA: La referencia Mega328PU-TH no está reconocida oficialmente por Microchip, por eso no existe un Datasheet.
EDITADO 31/05/2022
Por lo que deduzco, los Mega328PU-TH (328PB) Al ser dispositivos nuevos y no funcionar nativamente como los Mega328P, han hecho un "truco-chapuza" para que parezcan 328P (solo por el puerto serie) y poder venderlos.
El Arduino IDE y el AVRDUDESS (externo) lo reconocen como si fuera un 328P, conectándolos por el puerto USB.
Al intentar trabajar por el puerto ICSP, al acceder directamente al Atmega, no había truco que valga y no funcionan, porque los reconoce como un 328PB (realmente lo que es).
En Arduino IDE, gracias a MiniCore (by MCUdude), ya pueden funcionar nativamente, pero hay que reconvertirlos a 328PB, para que todo sea correcto.
En AVRDUDESS (externo) YA han incorporado este nuevo dispositivo y funciona, pero con algún fallo trabajando por ICSP, que me imagino corregirán.
Enlace de descarga :
https://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/
Los fuses que trae de origen el 328PU-TH (328PB) *Con el "truco-chapuza"
Código: Seleccionar todo
Boot signature: 1E 85 95 19 16 01 A5 A5 FF 84 FF F2 FF 82 43 30
54 53 41 48 69 06 28 19 17 02 12 06 13 06 FF FF
Signature: 1E 95 16
Low fuse: FF 11111111b
Lock fuse: CF 11001111b
Extended fuse: FD 11111101b
High fuse: DA 11011010b
Index: 15.63
Los fuses que tiene que tener como 328PB
Código: Seleccionar todo
Boot signature: 1E 85 95 19 16 01 A5 A5 FF 84 FF F2 FF 82 43 30
54 53 41 48 69 06 28 19 17 02 12 06 13 06 FF FF
Signature: 1E 95 16
Low fuse: FF 11111111b
Lock fuse: FF 11111111b
Extended fuse: F5 11110101b
High fuse: D6 11010110b
Index: 15.63
* Código que nos facilitó @cacharreo para ver las firmas y fuses de los Atmega:
viewtopic.php?p=172771#p172771
Como actualmente ya hay soporte para ellos, es recomendable reconvertirlos a lo que son realmente 328PB (Ademas de poder trabajar via ICSP).
Hacerlo es muy fácil.
*Por si hay alguien que no está familiarizado con estos temas, lo explico con imágenes para que no haya dudas.
PASOS A SEGUIR PARA RECONVERTIR LOS Mega328PU-TH (328PB)
Abrimos el Arduino IDE (mejor usar ultima versión disponible), abrimos ARCHIVO y pulsamos en PREFERENCIAS.
Una vez dentro, escribimos en GESTOR DE URLS ADICIONALES DE TARJETAS (o copia/pega) "
https://mcudude.github.io/MiniCore/package_MCUdude_MiniCore_index.json" (quitando las comillas) y pulsamos en OK para validar.
Luego Abrimos HERRAMIENTAS, vamos a PLACA: y pulsamos en GESTOR DE TARJETAS...
Una vez dentro de GESTOR DE TARJETAS, buscamos en la lista "MiniCore (by MCUdude)" y le damos a instalar la ultima versión disponible.
Una vez instalado, cerramos la pantalla.
Ya tenemos instalado el MiniCore y podemos acceder a los nuevos dispositivos, como vemos en esta pantalla.
Ahora vamos a reconvertir nuestro 328PB.
Necesitamos un programador USBasp (yo he usado este)
Conectamos el Nano al ordenador por el puerto ICSP con el interface de programación y tenemos que dejar todas las opciones del menú (dentro del rectángulo rojo) iguales a las de la foto.
Cuando estemos seguros que está todo igual, pulsamos en QUEMAR BOOTLOADER
*Ahora siempre trabajaremos los 328PB con estas opciones.
Si todo ha ido bien, saldrá como en la foto, que se ha grabado correctamente.
Ya solo nos falta pasar el LOCK BITS A 0xFF, que lo conseguimos cargando cualquier SKETCH (El BLINK está muy a mano) y subiéndolo con la opción SUBIR USANDO PROGRAMADOR (Porque estamos por ICSP).
Y ya lo tenemos Funcionando!!!!
Ahora bien, en Arduino IDE funcionará todo correctamente (por ICSP y USB)... sin olvidar, que ahora habrá que trabajar siempre con los 328PB seleccionando en el menú MiniCore (328PB), como en la foto de opciones del MiniCore y para trabajar con los demás Nanos, como hacíamos anteriormente.
En el programa AVRDUDESS (externo), podremos trabajar por puerto serie (USB), pero de momento no por ICSP, porque he comprobado que hay un error y cuando se programa por ICSP, trabaja correctamente, pero corrompe el bootloader y deja de funcionar por USB. (deja de reconocer el Atmega en el IDE y en AVRDUDESS por serie)
En caso que por error lo hagamos y deje de funcionar por USB, NO TE PREOCUPES... se revive fácilmente, subiendo al Nano cualquier Sketch por el puerto ICSP con el ARDUINO IDE (recupera el Bootloader).
*porque en las opciones del MiniCore, tenemos seleccionado que suba el bootloader al subir cualquier sketch.
Cuando saquen una nueva versión del AVRDUDESS (externo), me imagino que corregirán este error.
*Todo este tutorial, está probado en WINDOWS 7 Profesional.
Si queremos, podemos revertir el Mega328PU-TH (328PB) a como estaba antes de reconvertirlo, de la siguiente forma.
COMO REVERTIR EL PROCESO
Descargamos el AVRDUDESS externo (versión 2.14 o posterior) del enlace que está mas arriba y lo instalamos (o usamos la versión sin instalación).
Conectamos el Nano con el programador USBasp al ordenador, por vía ICSP.
Abrimos el programa AVRDUDESS. *Esta versión es multi idioma, se puede seleccionar Español en el apartado OPTIONS.
Seguimos los pasos de la foto siguiente.
1- Seleccionamos el programador USBasp.
2- pulsamos en DETECT, para que nos reconozca el 328PB, que se verá seleccionado en MCU automáticamente.
3- Seleccionamos una FLASH con Bootloader 328P, por ejemplo la "VdR-RAM-tester.0.05 con cargador" previamente descargada.
4- escribimos los fuses y lock bit, como en la foto. (los que corresponden con 328P)
5- Marcamos la opción SET FUSES (Para que modifique los fuses al programar la Flash)
6- Marcamos la opción SET LOCK (Para que modifique el bit lock al programar la Flash)
7- Comprobamos que todos los datos anteriores están bien y pulsamos en PROGRAM
Cuando finalice, NO tocar nada mas, desconectar el Nano del USB y cerrar el programa.
Ya lo tenemos como estaba antes de reconvertirlo y ahora lo reconocerá como un mega328P por serial (USB)
NO lo conectes por ICSP con el Arduino IDE con el MiniCore, porque modifica otra vez todo... úsalo solo por serie (USB)
NOTA:
Este tutorial ha sido comprobado con dos mega328PU-TH (328PB), varias veces, con resultados óptimos.
NO asumo ningún tipo de responsabilidad, si algo sale mal.
Jugar con los los fuses sin conocimiento, una mala ejecución del proceso e incluso un Atmega defectuoso, puede "brickear" tu Nano.
EDITADO 07/06/2022
He descubierto, que también hay MEGA328PU-TH (1E 95 0F) FALSOS, con casi toda la firma interna a "FF"
Un tipo mas para añadir a la lista de calamidades de esta nomenclatura.
Nano MEGA328PU-TH (328P FALSO) CH340G
Código: Seleccionar todo
Boot signature: 1E CE 95 FF 0F FF FF 26 FF FF FF FF FF FF 58 FF
DF FF DF FF FF FF FF FF FF FF FF FF FF FF FF FF
Signature: 1E 95 0F
Low fuse: FF 11111111b
Lock fuse: FF 11111111b
Extended fuse: FD 11111101b
High fuse: DA 11011010b
Index: 75.00