El ATmega328 es un microcontrolador de un solo chip creado por Atmel en la familia megaAVR (posteriormente Microchip Technology adquirió Atmel en 2016). Tiene un núcleo de procesador RISC de 8 bits con arquitectura Harvard modificada .
El microcontrolador Atmel 8-bit AVR basado en RISC combina una memoria flash ISP de 32 KB con capacidades de lectura y escritura, 1 KB de EEPROM , 2 KB de SRAM , 23 líneas de E/S de propósito general, 32 registros de trabajo de propósito general, 3 temporizadores/ contadores flexibles con modos de comparación, interrupciones internas y externas , USART programable en serie , una interfaz en serie de 2 cables orientada a bytes, puerto serie SPI , convertidor A/D de 10 bits y 6 canales (8 canales en paquetes TQFP y QFN / MLF ), temporizador de vigilancia programable con oscilador interno y 5 modos de ahorro de energía seleccionables por software. El dispositivo funciona entre 1,8 y 5,5 voltios. El dispositivo alcanza un rendimiento cercano a 1 MIPS /MHz. [1]
Una alternativa común al ATmega328 es el "picoPower" ATmega328P. En el sitio web de Atmel se puede encontrar una lista completa de todos los demás miembros de la serie megaAVR. [3]
El ATmega328 se utiliza habitualmente en muchos proyectos y sistemas autónomos en los que se necesita un microcontrolador sencillo, de bajo consumo y bajo coste. Quizás la implementación más habitual de este chip se encuentra en la popular plataforma de desarrollo Arduino , concretamente en los modelos Arduino Uno , Arduino Pro Mini [4] y Arduino Nano .
La calificación de confiabilidad muestra que la tasa de falla de retención de datos proyectada es mucho menor que 1 PPM durante 20 años a 85 °C o 100 años a 25 °C. [5]
El modo de programación se ingresa cuando PAGEL (PD7), XA1 (PD6), XA0 (PD5), BS1 (PD4) se establece en cero. [2] Pin RESET a 0 V y V CC a 0 V. V CC se establece a 4,5–5,5 V. Espere 60 μs y RESET se establece a 11,5–12,5 V. Espere más de 310 μs. [2] Establezca XA1:XA0:BS1:DATA = 100 1000 0000 , pulse XTAL1 durante al menos 150 ns, pulse WR a cero. Esto inicia el borrado del chip. Espere hasta que RDY/BSY (PD1) se active. XA1:XA0:BS1:DATA = 100 0001 0000 , pulso XTAL1, pulso WR a cero. Este es el comando de escritura flash. [2] Y así sucesivamente.
Los datos en serie que van a la MCU se registran en el flanco ascendente y los datos que llegan a la MCU se registran en el flanco descendente. Se aplica energía a V CC mientras que RESET y SCK se establecen en cero. Espere al menos 20 ms y luego se envía la instrucción en serie de habilitación de programación 0xAC, 0x53, 0x00, 0x00 al pin MOSI. La MCU repetirá el segundo byte (0x53). [2]