Complementando o que vimos no post anterior, vamos dar uma rápida olhada nos recursos disponíveis na entrada digital.
| Estrutura lógica de um pino do RP2040 (fonte: datasheet) |
Complementando o que vimos no post anterior, vamos dar uma rápida olhada nos recursos disponíveis na entrada digital.
| Estrutura lógica de um pino do RP2040 (fonte: datasheet) |
A saída digital em microcontroladores parece ser muito simples, principalmente se você está acostumado a programar com a biblioteca Arduino. Com um comando você coloca um pino em nível alto ou baixo. Isso é tudo? Não... vamos ver neste post algumas considerações importantes no caso particular do RP2040 (o microcontrolador usado na Raspberry Pi Pico).
| Display de 7 segmentos acionado pela Pi Pico |
Mais um livro de memórias de um desenvolvedor de jogos. Desta vez são as memórias de Sid Meier, mais conhecido por Civilization mas que trabalhou também em vários outros títulos de sucesso.
No final das contas, 2021 foi um ano bastante agitado. Mantendo a tradição, é hora de rever as resoluções do ano passado e fazer novas.
Domingo, estou desligando a TV para dormir e o celular dispara: mensagem, email e chamada de voz! É um cliente preocupado com a vulnerabilidade no log4j descrita no CVE-2021-44228. Neste post vou falar um pouco sobre o que é, porque preocupa (e porque não), como resolver e algumas divagações filosóficas sobre como essas falhas surgem.
| "Foi o Java que me deu" |
Seis anos atrás a Raspberry Foundation surpreendia muita gente ao lançar a Raspberry Pi Zero, uma pequena placa com capacidade computacional próxima à Raspberry Pi original e o incrível preço de US$5. Pouco mais de um ano depois ela foi seguida pela versão Zero W, com WiFi e Bluetooth, por US$10 (veja minhas mini avaliações aqui). No final de outubro passado foi anunciada uma nova versão, o Raspberry Pi Zero 2 W. Vamos ver o que mudou e o que permanece o mesmo?
![]() |
| No alto, à esquerda, a Raspberry Pi Zero. À direita, a Zero W. Na frente, a Zero 2 W. |
Neste post vamos dar uma olhada na placa Vespa da Robocore, que é uma placa voltada para robótica utilizando o microcontrolador ESP32.
Desta vez, ao invés de falar em um ADC interno a um microcontrolador, vamos falar de um ADC em um circuito integrado separado. Módulos com o ADS1115 são facilmente encontráveis e são uma opção popular para os Raspberry Pi.
![]() |
| Módulo ADS1115 |
Já faz mais de três anos desde o último post com um projeto com a Franzininho DIY! Finalmente acho que estou avançando em uma ideia daquela época: juntar todos estes projetos em um livro. Daí veio a busca por ideias para novos projetos. O primeiro resultado está aqui.
Chegou a vez de falar do conversor analógico digital do RP2040, que é o microcontrolador usado na Raspberry Pi Pico.
![]() |
| Diagrama de Blocos do ADC do RP2040 (fonte: datasheet) |
Embora seja mais conhecido por incorporar WiFi e Bluetooth, o ESP32 é bastante rico em recursos. Um deles é o ADC, que é bastante complexo. Vamos dar uma olhada rápida no que é oferecido.
O ESP32 possui dois conversores analógico digitais de 12 bits, capazes de operar de forma simultânea e independente. As opções de entrada incluem 18 pinos e mais 4 sinais internos; os resultados podem ir para cinco controladores diferentes (ADCn CTRL), conforme mostrado na figura abaixo (atenção que pad-in[n:0] indica n+1 pinos).
![]() |
| Diagrama de Blocos do ADC do ESP32 (fonte: manual de referência técnica) |
Publicados entre 1991 e 1993, os três livros que compõem a Trilogia Thrawn tem sido bastante mencionados desde o anúncio da terceira trilogia de filmes (muitos afirmam que a trama neles é muito superior à da "trilogia Disney"). Resolvi dar um tempo na minha leitura de livros físicos (e sérios) e verificar.
Faz algum tempo que não falo no MSP430, um microcontrolador muito interessante mas que não fez muito sucesso com os makers. O modelo MSP430F2013 foi o primeiro que eu tive contato como parte da ferramenta eZ430-F2013. E este modelo contém um ADC Sigma Delta (SD16).
![]() |
| Diagrama de bloco do SD16 (fonte: MSP430x2xx Family User Guide) |
Vamos examinar agora o ADC de um microcontrolador específico: o ATmega328 usado no Arduino Uno (de um modo geral o que vamos ver aplica também a outros membros da família ATmega e mesmo ao ATtiny).
![]() |
| O diagrama de blocos do ADC do ATmega328 (fonte: datasheet) |
Nesta fase das minhas memórias não vou tentar ser cronológico, nem muito específico ao trabalho na Seal; vou tentar falar de algumas coisas mais genéricas sobre trabalhar com software em empresas cuja atividade principal é vender hardware.
Embora o mais comum nos microcontroladores seja implementar o ADC usando a Aproximação Sucessiva (SAR - que vimos no post anterior), alguns utilizam o mais sofisticado (e complicado) Sigma Delta (também chamado de Delta Sigma).
![]() |
| Diagrama de um ADC Sigma Delta (extraído da ref 3) |
Uma forma bastante comum de implementar um ADC é através de aproximação sucessiva. Como veremos, este método fornece um resultado preciso com um circuito de (relativo) baixo custo, em troca de um tempo maior de conversão.
![]() |
| Diagrama de Blocos - Adaptado de https://en.wikipedia.org/wiki/Successive-approximation_ADC |
Vou quebrar a sequência cronológica dos meus posts de memória e voltar alguns anos atrás para falar de um sistema que eu conheci nos anos 90 e que eu vi em prática recentemente: o PSS (Personal Shopper System). Neste sistema, o cliente do supermercado realiza ele mesmo a leitura dos códigos de barras dos produtos à medida em que os pega nas gôndolas (prateleiras) e coloca no carrinho. Parece uma viagem? Está funcionando desde os anos 90 em lojas do supermercado Albert Heijn na Holanda.
Este post é o primeiro de uma série a respeito de um recurso importante dos microcontroladores: o conversor (de) analógico (para) digital. Depois que a gente aprende o analogRead do Arduino, corre-se o risco de tratar o ADC como se fosse um periférico perfeito, que magicamente converte uma tensão em um número. Nesta série vou estudar o que é um ADC, quais suas características importantes, as formas comuns dele ser implementado e ver como ele é em alguns microcontroladores populares (e também num componente externo).
![]() |
| Um dos exemplos de AnalogRead na IDE do Arduino |