College Online
0%

Microcontroladores

Modulo 2 · Aula 2 ~20 min de leitura Nivel: Intermediario

Video da aula estara disponivel em breve

Microcontrolador vs. Microprocessador

Um microprocessador (CPU) e projetado para processamento generico de alto desempenho — precisa de componentes externos (RAM, ROM, controladores de I/O) para funcionar. Um microcontrolador (MCU) integra CPU, memoria e perifericos em um unico chip, formando um sistema em chip (SoC) otimizado para controle e automacao.

Comparacao
  Caracteristica      Microprocessador        Microcontrolador
  ──────────────────────────────────────────────────────────────
  CPU                 Sim                     Sim
  RAM                 Externa (GB)            Interna (KB)
  ROM/Flash           Externa                 Interna (KB-MB)
  Perifericos         Externos                Integrados
  Clock               1-5 GHz                 8-200 MHz
  Consumo             10-150 W                0.001-0.5 W
  Custo               $50-$500                $0.50-$10
  Uso                 PCs, servers            Embarcados, IoT

  Exemplos:
  Microprocessador: Intel Core, AMD Ryzen, Apple M-series
  Microcontrolador: ATmega328P, STM32, ESP32, PIC

ATmega328P — O Coracao do Arduino Uno

O ATmega328P (Atmel, hoje Microchip) e um microcontrolador AVR de 8 bits usado no Arduino Uno. Sua arquitetura Harvard modificada separa memorias de programa e dados:

Diagrama — ATmega328P
  ┌─────────────────────────────────────────────────┐
  │                  ATmega328P                      │
  │                                                  │
  │  ┌──────────┐  ┌──────────┐  ┌──────────┐       │
  │  │ Flash    │  │   SRAM   │  │  EEPROM  │       │
  │  │ 32 KB    │  │   2 KB   │  │  1 KB    │       │
  │  │(programa)│  │ (dados)  │  │(persist) │       │
  │  └────┬─────┘  └────┬─────┘  └────┬─────┘       │
  │       │             │             │              │
  │  ┌────┴─────────────┴─────────────┴────┐         │
  │  │          CPU AVR (8-bit)            │         │
  │  │   32 registradores de 8 bits        │         │
  │  │   ALU, PC, Stack Pointer            │         │
  │  │   Clock: ate 20 MHz                 │         │
  │  └────────────────┬───────────────────┘         │
  │                   │                              │
  │  ┌────────────────┴───────────────────────┐      │
  │  │              Perifericos                │      │
  │  │                                         │      │
  │  │  GPIO (23 pinos)    Timer/Counter (3x)  │      │
  │  │  UART (1x)          SPI (1x)            │      │
  │  │  I2C/TWI (1x)       ADC 10-bit (6ch)   │      │
  │  │  PWM (6 canais)     Watchdog Timer      │      │
  │  │  Comparador Analogico                   │      │
  │  └─────────────────────────────────────────┘      │
  └─────────────────────────────────────────────────┘
           |  |  |  |  |  |  |  |  |  |  |
           Pinos externos (28 pinos DIP)
i
Por que o Arduino e tao popular? O Arduino nao e o ATmega328P — e uma plataforma que simplifica o uso do microcontrolador com: um bootloader (permite programar via USB sem programador externo), uma IDE amigavel, e uma API em C++ (digitalWrite, analogRead) que abstrai o acesso direto a registradores. Por baixo, tudo se traduz em manipulacao de registradores de I/O mapeados em memoria.

ARM Cortex-M — A Familia STM32

Os microcontroladores ARM Cortex-M sao a familia mais usada profissionalmente. A linha STM32 (STMicroelectronics) e a mais popular, com dezenas de subfamilias:

Subfamilias Cortex-M
  Core         Bits   Pipeline  Uso tipico                      Exemplo
  ──────────────────────────────────────────────────────────────────────
  Cortex-M0    32     3-stage   Ultra-baixo consumo, simples    STM32F0
  Cortex-M0+   32     2-stage   Otimizado em energia            STM32L0
  Cortex-M3    32     3-stage   Uso geral, bom custo-beneficio  STM32F1
  Cortex-M4    32     3-stage   DSP + FPU, audio, controle      STM32F4
  Cortex-M7    32     6-stage   Alto desempenho, cache interno  STM32H7
  Cortex-M33   32     3-stage   Seguranca (TrustZone), IoT      STM32L5

  Comparacao ATmega328P vs. STM32F411:
  ┌──────────────┬────────────┬──────────────┐
  │              │ ATmega328P │  STM32F411   │
  ├──────────────┼────────────┼──────────────┤
  │ Arquitetura  │ AVR 8-bit  │ ARM 32-bit   │
  │ Clock        │ 20 MHz     │ 100 MHz      │
  │ Flash        │ 32 KB      │ 512 KB       │
  │ SRAM         │ 2 KB       │ 128 KB       │
  │ GPIO         │ 23         │ 81           │
  │ ADC          │ 10-bit 6ch │ 12-bit 16ch  │
  │ DMA          │ Nao        │ 2 controlad. │
  │ Preco        │ ~$2        │ ~$4          │
  └──────────────┴────────────┴──────────────┘

Perifericos Integrados

Os perifericos sao a razao de existir dos microcontroladores — sem eles, seria apenas um processador fraco. Os perifericos mais comuns sao:

GPIO (General Purpose Input/Output)

Pinos digitais configuraveis como entrada ou saida. Cada pino pode ler um nivel logico (0 ou 1) ou gerar um nivel logico. Configuracoes incluem: pull-up, pull-down, open-drain, push-pull.

Comunicacao Serial

Comparacao de Protocolos
              UART          SPI            I2C
  ──────────────────────────────────────────────────
  Fios        2 (TX/RX)    4 (+ 1/slave)  2 (SDA/SCL)
  Tipo        Assincrono   Sincrono       Sincrono
  Topologia   Ponto-a-ponto Master-slave   Multi-master
  Velocidade  115 kbps     50+ MHz        400 kHz (std)
  Dispositivos 2           1 master + N   128 por bus
  Complexidade Baixa       Media          Media
  Uso tipico  Debug/GPS    Display/SD     Sensores

ADC (Analog-to-Digital Converter)

Converte sinais analogicos (tensao) em valores digitais. Resolucao tipica: 10-12 bits. Um ADC de 10 bits com referência de 3.3V tem resolucao de 3.3V/1024 = 3.2 mV por nivel.

Timers/Counters

Contadores de hardware que podem gerar interrupcoes periodicas, medir intervalos de tempo, gerar sinais PWM (Pulse Width Modulation), e contar eventos externos.

Tratamento de Interrupcoes

Uma interrupcao e um sinal que suspende a execucao normal do programa para atender um evento urgente. O processador salva o contexto atual, executa a ISR (Interrupt Service Routine), e depois restaura o contexto e retoma a execucao normal.

Diagrama — Fluxo de Interrupcao
  Programa principal          Interrupcao
  ─────────────────          ───────────
  instrucao A
  instrucao B
  instrucao C  <── sinal de interrupcao chega!
     │
     ├── 1. CPU termina instrucao atual
     ├── 2. Salva PC e registradores na pilha
     ├── 3. Busca endereco da ISR na tabela de vetores
     │
     │   ┌─── ISR ────────────────────┐
     │   │  Limpa flag de interrupcao │
     │   │  Processa o evento         │
     │   │  RETI (return from ISR)    │
     │   └────────────────────────────┘
     │
     ├── 4. Restaura registradores da pilha
     ├── 5. Retoma execucao do PC salvo
     │
  instrucao D  (continua normalmente)
  instrucao E
C (Arduino)
// Exemplo: interrupcao externa no Arduino
volatile bool botaoPressionado = false;

// ISR: executada quando o pino 2 muda de estado
void botaoISR() {
    botaoPressionado = true;  // flag simples, nao faca nada pesado aqui
}

void setup() {
    pinMode(2, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(2), botaoISR, FALLING);
    Serial.begin(9600);
}

void loop() {
    if (botaoPressionado) {
        botaoPressionado = false;
        Serial.println("Botao pressionado!");
    }
    // ... outras tarefas ...
}
!
Regras para ISRs Uma ISR deve ser o mais curta possivel — setar uma flag e sair. Nao use delay(), Serial.print(), ou alocacao dinamica dentro de ISRs. Variaveis compartilhadas entre ISR e loop principal devem ser declaradas volatile para evitar otimizacoes do compilador que ignorariam a mudanca.

No harness.os

A arquitetura de microcontroladores tem paralelos diretos com o design do harness.os:

Exercicios

  1. Compare o ATmega328P e o STM32F411 em termos de capacidade de memoria, clock e perifericos. Em que tipo de projeto voce escolheria cada um?
  2. Projete um sistema que lê temperatura de um sensor I2C (LM75) e envia os dados via UART para um computador. Descreva os perifericos necessarios e o fluxo de dados.
  3. Um ADC de 12 bits com referência de 3.3V le o valor digital 2048. Qual e a tensao analogica correspondente?
  4. Explique por que variaveis compartilhadas entre ISR e codigo principal devem ser declaradas volatile. O que pode acontecer sem volatile?
  5. Compare SPI e I2C para conectar 8 sensores de temperatura a um microcontrolador. Qual protocolo e mais adequado e por quê?

Resumo

Verifique seu entendimento

Qual a principal diferenca entre SPI e I2C?

  • SPI e assincrono e I2C e sincrono
  • I2C e mais rapido que SPI
  • SPI usa mais fios mas e mais rapido; I2C usa apenas 2 fios com enderecamento e suporta multiplos dispositivos
  • SPI suporta mais dispositivos que I2C no mesmo barramento