Introdução ao Microcontrolador ATMega328P

A demanda por aparatos tecnológicos de boa qualidade, alto desempenho, baixo custo e de fácil acesso tem tomado conta de todo o mundo. Contudo a utilização de microcontroladores tem favorecido a realização destes projetos por oferecer equipamentos de alta qualidade que alteram o seu comportamento ao alterar o seu programa.

Dessa forma, os microcontroladores têm possibilitado o desenvolvimento de equipamentos que atendam as necessidades de projetos e que sejam facilmente manipuláveis para atender cada necessidade, para isso a tecnologia apresenta, todos os dias, versões melhores de diversos produtos.

Isso não poderia ser diferente na família Arduino, já que é uma ferramenta excelente e popular capaz de executar instruções com diversos graus de complexidade, graças ao microprocontrolador que está acoplado na placa.

O Arduino do tipo, principalmente, Uno e Nano conta com um microcontrolador chamado ATmega328P, que podemos classificá-lo como o processador central da placa, ele é pertencente a família AVR lançada pela Atmel e possui uma arquitetura de 8 bits CMOS com arquitetura.

Ele conta com 23 entradas/saídas programáveis, sendo capaz de executar programas dos mais simples, como por exemplo piscar um LED, até programas complexos, como sistemas autônomos e robôs. Além disso, esse microcontrolador possui é a capacidade de operar com baixo consumo de potência

Pinos do ATmega328P

A pinagem do microcontrolador descreve as conexões que ele possui a fim de interagir com o estímulos externos, tanto recebendo sinais como emitindo sinais. A Figura 1 apresenta uma imagem ilustrativa do ATmega328P e seus pinos:

Ilustração do ATMega328P e a descrição de todos os seus pinos
Figura 1 – Descrição da pinagem do ATMega328P.
Fonte: http://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7810-Automotive-Microcontrollers-ATmega328P_Datasheet.pdf

Entendendo cada pino:

VCC: Alimentação do microcontrolador, aceita valores de 2,7V a 5,5V.

GND: Terra.

AREF: Pino de referência de tensão máxima para o conversor de sinais analógico para digital (ADC).

AVCC: Pino de alimentação do conversor ADC deste microcontrolador, deve ser ligado ao VCC.

PORTB: Porta bidirecional de 8 bits. Os pinos correspondentes são o PB0 (14), PB1 (15), PB2 (16), PB3 (17), PB4 (18), PB5(19), PB6 (9) e PB7(10).

PORTC: Porta bidirecional de 7 bits. Os pinos correspondentes são o PC0 (23), PC1 (24), PC2 (25), PC3 (26), PC4 (27), PC5 (28) e PC6 (1).

PORTD: Porta bidirecional de 8 bits. Os pinos correspondentes são o PD0 (2), PD1 (3), PD2 (4), PD3 (5), PD4 (6), PD5 (11), PD6 (12) e PD7 (13).

Visualização real de sua posição na placa Arduino Uno.

Descrição da placa Arduino Uno, realcionando os conectores da placa com os pinos do ATMega328P
Figura 2 – ATmega328P na placa Arduino Uno.
Fonte: Adaptado de https://i1.wp.com/www.elecrom.com/wp-content/uploads/2017/01/arduino-uno-pinout-pin-mapping.jpg?fit=848%2C637

Memórias do microcontrolador ATMega328P

Este microcontrolador possui uma memória Flash com 32 kB reprogramável. Como as instruções do ATMega328P são ou de 16 bites ou de 32 bites a memória foi organizada em 16.000 blocos de 16 bits. Dessa forma, pode-se dizer que o maior programa suportado pelo ATMega328P é de 16 quilo instruções.

A fim de fornecer segurança ao software a memória flash é dividida em duas partes, sendo uma parte de 0,5 kB para a criação de um boot loader e o restante para o software principal (o que deve ser executado). Além da memória flash este microcontrolador também possui uma memória SRAM de 2kB e uma EEPROM de 1kB.

A SRAM pode ser entendida como o equivalente a memória RAM de um computador, pois é nela que as variáveis do software serão armazenadas. Além disso, algumas posições de da memória SRAM têm funções especiais como controlar os pinos do microcontrolador. Ela é dividida da seguinte forma:

  • Banco de registro, com 32 bytes;
  • Memória de entrada/saída, de 64 bytes;
  • Memória de entrada/saída estendida, de 160 bytes;
  • SRAM de dados, de 2048 bytes.

Todas as posições da SRAM podem ser acessadas através de endereçamentos, que podem ser: endereçamento direto, endereçamento indireto com deslocamento, endereçamento indireto, endereçamento indireto com pré-decremento, endereçamento indireto com pós-incremento.

Por fim, a memória EEPROM. Essa memória tem a capacidade de guardar os dados mesmo depois de ter desligado o microcontrolador, por isso ela é muitas vezes utilizada para guardar valores referentes a, por exemplo, calibrações. Entretanto a EEPROM não deve ser utilizada para armazenar variáveis, pois ela tem uma limitação de que, cada posição, permite 100.000 ciclos de gravação/apagamento, além disso ela não garante o armazenamento dos dados.

A divisão da memória é ilustrada na Figura 3.

Ilustração da distribuição da memória do ATMega328P em: Memória de programa, Memória SRAM e memória EEPROM
Figura 3 – Memórias do ATmega328P.
Fonte: https://www.tecdicas.com/40/como-fazer-arduino-standalone

Arquitetura interna do microcontrolador ATMega328P

Tendo como base a arquitetura de Harvard, esse microcontrolador possui as memórias separadas, o que o torna capaz de executar a técnica Pipeline, que consiste na ideia de que enquanto uma instrução está sendo executada, a próxima já começa a ser analisada. Desse modo o ATMega328P consegue execute suas instruções em um único ciclo clock, atingindo o máximo de 20 MIPS (20 Milhões de Instruções por Segundo) quando possui uma fonte de clock de 20 MHz.

Interrupções no microcontrolador ATMega328P

Em casos de mudança no estado de um pino, se um byte chegou na porta serial, se um temporizador transbordou e etc., são casos que provocam interrupções no microcontrolador, ou seja, ele sai do programa principal e acompanha a interrupção.

As interrupções externas são desencadeadas pelo aumento da borda, queda da borda ou baixo nível e são acionadas pelos pinos INT0 ou INT1 e os pinos PCINT, mesmo que eles estejam configurados como saída.

Referências Bibliográficas:

Seja o primeiro a comentar

Faça um comentário

Seu e-mail não será publicado.


*