# ATmega328

O ATmega328 é um microcontrolador tipo chip único criado pela Atmel na família megaAVR.

## Especificações

O Atmel de 8 bits AVR é baseado em RISC, o microcontrolador combina 32 kB ISP flash de memória de leitura-enquanto-grava, 1 kB de EEPROM, 2 kB de SRAM, 23 linhas de I/O de propósito geral, 32 registradores para diversos propósitos, 3 timer/counters flexíveis com comparador de modos, interrupções internas e externas, serial programável USART, 1 interface I²C SPI porta serial, conversor A/D de 6-canais e 10-bits (8-canais nos encapsulamentos TQFP e QFN/MLF), temporizador do watchdog interno programável com oscilador, e 5 modos de economia de energia selecionáveis por software. O dispositivo opera entre 1,8 e 5,5 volts. O dispositivo alcança a taxa de transferência aproximando-se de 1 MIPS por MHz.

## Parâmetros-chaves

| Parâmetro | Valor |
| Tipo de CPU | 8-bit AVR |
| Desempenho | 20 MIPS às 20 MHz |
| Memória Flash | 32 kB |
| SRAM | 2 kB |
| EEPROM | 1 kB |
| Contagem de pinos | 28 pinos PDIP, MLF, 32 pinos TQFP, MLF |
| Frequência máxima | 20 MHz |
| Número de canais de toque | 16 |
| Hardware de Aquisição QTouch | Nenhum |
| Máximo de pinos de I/O | 23 |
| Interrupções externas | 2 |
| InterfaceUSB | Nenhum |
| Velocidade USB | – |

## Série de alternativas

Uma alternativa comum para o ATmega328 é o "picoPower" ATmega328P. Uma lista abrangente de todos os outros membros da série megaAVR pode ser encontrado no site da Atmel.

## Aplicações

A partir de 2013 o ATmega328 é comumente usado em muitos projetos e sistemas autónomos, onde um se precisa de um micro-controlador simples, de baixa potência e baixo custo$^[$ . Talvez a implementação mais comum do que este chip é no popular Arduino, plataforma de desenvolvimento, nomeadamente nos modelos Arduino Uno e o Arduino Nano.

## Programação

Confiabilidade de qualificação mostra que a retenção de dados projetada tem a taxa de falha muito menor do que 1 PPM para mais de 20 anos a 85 °C ou 100 anos a 25 °C.
Programa em modo paralelo :
| Sinal de programação | Nome Do Pino | I/O | Função |
| RDY/BSY | PD1 | O | Alto significa que o MCU está pronto para um novo comando, caso contrário ocupado. |
| OE | PD2 | I | Habilitação de saída (Ativo em baixo) |
| WR | PD3 | I | Pulso de Escrever (Ativo em baixo) |
| BS1 | PD4 | I | Seleção de Byte 1 ("0" = Byte baixo, "1" = Byte alto) |
| XA0 | PD5 | I | Bit 0 de Ação do CRISTAL |
| XA1 | PD6 | I | Bit 1 de Ação do CRISTAL |
| PAGEL | PD7 | I | Memória de programa e EEPROM de Dados da Página de Carregamento |
| BS2 | PC2 | I | Seleção de Byte 2 ("0" = Byte baixo, "1" = Byte alto) |
| DADOS | PC[1:0]:PB[5:0] | I/O | Barramento Bi-direcional de dados (Saída quando o OE é de baixo) |
O modo de programação é iniciado quando PAGEL (PD7), XA1 (PD6), XA0 (PD5), BS1 (PD4) devem ser colocados em zero. pino RESET para 0 V e V$_{CC}$ para 0V. V$_{CC}$ deve ser colocado em 4.5 - 5.5 V. Aguarde 60 µs, e o RESET deve ser colocado em 11.5 - a 12,5 V. Esperar mais de 310 µs. Coloque XA1:XA0:BS1:DADOS = 100 1000 0000, pulso XTAL1 para, pelo menos, 150 ns, dê um pulso no WR para zero. Isso inicia o processo de Apagar o Chip. Aguarde até que RDY/BSY (PD1) ir para o nível alto. XA1:XA0:BS1:DADOS = 100 0001 0000, pulso no XTAL1 , dê um pulso no WR em zero. Este é o comando de gravação na Flash. E assim por diante..
Programação Serial :
| Símbolo | Pinos | I/O | Descrição |
| MOSI | PB3 | I | Entrada Serial de Dados |
| MISO | PB4 | O | Saída Serial de Dados |
| SCK | PB5 | I | Clock Serial |
Serial de Dados para o MCU é cronometrado na borda de subida e de dados a partir do MCU é cronometrado na borda de descida. A alimentação é aplicada ao V$_{CC}$ , enquanto o RESET e SCK são colocados em zero. Espere por pelo menos 20 ms e, em seguida, a instrução de Programação serial será Habilitada 0xAC, 0x53, 0x00, 0x00 será enviado para o MOSI pin. O segundo byte (0x53) será ecoado pelo MCU.