Microcontroladores
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.
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:
┌─────────────────────────────────────────────────┐
│ 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)
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:
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
- UART (Universal Asynchronous Receiver/Transmitter): comunicacao assincrona ponto-a-ponto. Usa dois fios (TX/RX). Baudrate tipico: 9600, 115200 bps. Usado para debug via serial monitor.
- SPI (Serial Peripheral Interface): comunicacao sincrona master-slave. Usa 4 fios (MOSI, MISO, SCLK, CS). Rapida (ate 50+ MHz). Usada para displays, SD cards, sensores rapidos.
- I2C (Inter-Integrated Circuit): comunicacao sincrona com enderecamento. Usa 2 fios (SDA, SCL). Ate 128 dispositivos no mesmo barramento. Mais lenta (100-400 kHz). Usada para sensores, EEPROMs, RTCs.
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.
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
// 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 ...
}
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:
- Perifericos integrados = MCP tools: assim como um MCU integra GPIO, UART, SPI e ADC em um chip, o harness.os integra multiplas ferramentas (knowledge, decisions, learnings, rules) em um unico servidor MCP. A integracao elimina a necessidade de configuracao externa.
- Interrupcoes = Event-driven processing: o harness.os pode reagir a eventos (nova decisao, novo commit) de forma assincrona, assim como um MCU reage a interrupcoes. O padrao "setar flag na ISR, processar no loop principal" e analogo a "registrar evento no banco, processar na proxima sessao".
- UART/SPI/I2C = Protocolos de integracao: diferentes ferramentas MCP usam diferentes protocolos (stdio, HTTP, WebSocket), assim como perifericos usam diferentes protocolos de comunicacao. O MCP padroniza a interface, como o barramento interno do MCU padroniza o acesso a perifericos.
- Consumo e eficiência: microcontroladores priorizam eficiência sobre desempenho bruto. O harness.os prioriza eficiência de tokens sobre volume de contexto.
Exercicios
- Compare o ATmega328P e o STM32F411 em termos de capacidade de memoria, clock e perifericos. Em que tipo de projeto voce escolheria cada um?
- 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.
- Um ADC de 12 bits com referência de 3.3V le o valor digital 2048. Qual e a tensao analogica correspondente?
- Explique por que variaveis compartilhadas entre ISR e codigo principal devem ser declaradas
volatile. O que pode acontecer semvolatile? - Compare SPI e I2C para conectar 8 sensores de temperatura a um microcontrolador. Qual protocolo e mais adequado e por quê?
Resumo
- Microcontroladores integram CPU, memoria e perifericos em um unico chip — otimizados para controle
- ATmega328P (AVR 8-bit): base do Arduino, 32KB Flash, 2KB RAM, 20 MHz
- ARM Cortex-M (STM32): familia profissional 32-bit, de M0 (simples) a M7 (alto desempenho)
- Perifericos: GPIO, UART, SPI, I2C, ADC, timers — cada um com seu protocolo e uso
- Interrupcoes permitem resposta assincrona a eventos; ISRs devem ser curtas e usar
volatile
Verifique seu entendimento
Qual a principal diferenca entre SPI e I2C?