Sobre o microcontrolador ATMEGA328P
O ATmega328P é um microcontrolador CMOS de 8 bits e baixo consumo de energia baseado na arquitetura RISC aprimorada AVR. O chip foi desenvolvido pela Atmel Corporation (Microchip Technology). Tem uma velocidade de clock de 20 MHz, 32 KB de memória flash, temporizador de 16 bits e 23 linhas de E/S programáveis. É comumente usado em placas Arduino e outros projetos baseados em microcontroladores.
Características do ATMEGA328P
- Microcontrolador AVR de 8 bits de alto desempenho e baixo consumo de energia;
- Arquitetura RISC avançada;
- Segmento de memória não volátil de alta resistência;
- Reinicialização ao ligar e detecção programável de queda de energia;
- Oscilador calibrado internamente;
- Fontes de interrupção externas e internas;
- Seis modos de suspensão: Inativo, Redução de ruído ADC, Conservação de energia, Desligamento, Standby e Standby estendido.
Parâmetros ATMEGA328P
- Capacidade da memória flash: 32 KB
- SRAM: 2 KB
- Capacidade da memória EEPROM: 1 KB
- Frequência do clock: 20 MHz
- Tipo de interface: I2C, SPI, USART
- Tensão de alimentação mínima: 1,8 V máxima: 5,5 V
- Tensão de alimentação Dispositivos de montagem em superfície: Montagem em superfície
- Tipo de pacote: PDIP/TQFP
- Número de pinos: 28-PDIP, 32-TQFP
- Faixa de temperatura de operação: -40 °C a +85 °C
- Linhas de entrada/saída: 23
- Número de entradas ADC: 8
- Temporizador/contador de 8 bits: 2
- Temporizador/contador de 16 bits: 1
- PWM: 6 canais
- Método de programação: ISP, IAP, H/PV
- Método de simulação: debugWIRE
Pinagem do ATMEGA328P
O chip ATMEGA328P possui 28 pinos de entrada/saída de uso geral (GPIO), cada um dos quais pode ser configurado como entrada ou saída digital.

Pacote ATMEGA328P
O ATmega328P está disponível em várias opções de pacotes, como PDIP (Plastic Dual Inline Package), TQFP (Thin Quad Flat Package) e QFN (Quad Flat No-Lead). No contexto do microcontrolador ATmega328P, o "P" refere-se ao tipo de pacote do chip. Portanto, aqui o "P" indica especificamente o pacote PDIP.

Diagrama de blocos do ATMEGA328P

Como gravar o bootloader do Arduino no ATMEGA328P?
As placas de desenvolvimento Arduino compradas online foram programadas com BootLoader, pelo que pode utilizar diretamente o Arduino IDE para carregar programas.
No entanto, não há BootLoader em um novo microcontrolador ATMEGA328P, portanto, o IDE do Arduino não pode ser usado para carregar o programa diretamente, e o programa só pode ser programado através do ICSP.
Precisamos programar o BootLoader para o MCU por conta própria para poder usar o IDE do Arduino para desenvolvimento.
Materiais necessários
- ATmega328P;
- Oscilador de cristal de 16 MHz;
- Capacitor de 22 pf*2;
- Resistor de 10 K;
- Uma placa de desenvolvimento Arduino (Uno ou Nano).

Processo
- Carregue o programa ArduinoISP no Arduino Uno;
- Conecte o ATmega328P ao Arduino Uno;
- Gravar o BootLoader no ATmega328P;
- Teste o programa LED Blinking no ATmega328P.
Passo 1: Carregue o programa ArduinoISP para o Arduino Uno
Conecte a placa de desenvolvimento Arduino Uno ao computador. Localize e clique em "Arquivo>Exemplos>ArduinoISP" no software Arduino.

No código ArduinoISP, você pode ver que os pinos MOSI, MISO e SCK são definidos como 11, 12 e 13, respectivamente, que correspondem aos pinos na placa de desenvolvimento Arduino Uno.

Então, as configurações em Ferramentas no IDE são as seguintes:
- Placa: "Arduino Uno"
- Porta: "COM(Arduino Uno)"
- Programador: "Arduino como ISP"

Clique no ícone de upload e, após alguns instantes, o programa ArduinoISP será carregado na sua placa de desenvolvimento Arduino Uno.

Passo 2: Conectando o ATmega328P ao Arduino Uno
De acordo com a definição dos pinos ISP no código ArduinoISP acima, o método de ligação e o diagrama entre o Arduino e o ATmega328P são os seguintes:
| Arduino | ATmega328P |
|---|---|
| 10 | PIN1(RESET) |
| 11 | PIN17(MOSI) |
| 12 | PIN18(MISO) |
| 13 | PIN19(SCK) |
| GND | GND |
| VCC | VCC |

Passo 3: Gravar o BootLoader no ATmega328P
Depois de terminar a ligação entre o Arduino Uno e o ATmega328P, precisamos de ligar o Arduino Uno ao computador. Em seguida, clique em "Ferramentas>Gravar Bootloader" para gravar o Bootloader no ATmega328P.

Passo 4: Teste o programa LED Blinking no ATmega328P
Conecte o polo positivo do LED ao PIN2 do ATmega328P e o polo negativo ao D. O PIN2 do ATmega328P representa o PD0, portanto, é "0" no código.
const int LED_PIN = 2; // Define the LED pin
void setup() {
pinMode(0, OUTPUT); // Set the LED pin as output
}
void loop() {
digitalWrite(0, HIGH); // Turn on the LED
delay(1000); // Wait for one second
digitalWrite(0, LOW); // Turn off the LED
delay(1000); // Wait for one second
}

Como você pode ver na imagem gif acima, o programa de piscar LED está funcionando normalmente.




