Os microcontroladores são elementos complexos da eletrônica digital e são um dos responsáveis por dar vida aos sistemas embarcados.
Os sistemas embarcados são sistemas digitais completos e independentes com o objetivo de executar uma determinada tarefa repetidamente. E eles abrangem aplicações domésticas, industriais e hospitalares, como: máquina de lavar, balança, calculadora, sistemas veiculares, diversos equipamentos industriais, equipamentos hospitalares e entre outros.
Portanto, se seu objetivo é aprender a desenvolver um sistema embarcado utilizando microcontroladores, este curso irá atendê-lo. Mais adiante falarei sobre quais microcontroladores iremos aprender.
A outra “alternativa” dos sistemas embarcados são os chamados “Linux embarcado”, onde são utilizados processadores no lugar de microcontroladores (veremos a diferença adiante) para rodar sistemas operacionais baseados em Linux.
Requisitos
Como mencionei no começo do post, os microcontroladores fazem parte da eletrônica digital, embora possam acabar tendo elementos analógicos.
Por conta disto, é indispensável ter um bom conhecimento nesta área. E o Mundo Projetado possui um curso sobre eletrônica digital. Portanto, se você não sabe o básico dos sistemas digitais, recomendo estudar este outro curso primeiro.
Além disto, ser um bom desenvolvedor de sistemas embarcados exige também conhecimento nas mais diversas áreas da elétrica/eletrônica (e outras aplicáveis). Isto porque, dentro de uma aplicação, conhecer e entender as variáveis envolvidas te possibilita desenvolver a solução mais adequada possível (levando em conta necessidade, custo etc).
O Mundo Projetado possui diversos artigos sobre sensores, dispositivos de comunicação e teorias em geral. Portanto, recomendo ler outros assuntos do site para se inteirar.
O que são microcontroladores
Microprocessadores
Antes, vamos entender o que são os microprocessadores (ou processadores). Os microprocessadores nada mais são do que circuitos digitais capazes de executar instruções previamente estabelecidas.
As instruções podem ser relacionadas à operações algébricas entre dois valores. Ou então podem ser sobre guardar/extrair valores em espaços da memória.
Sendo assim, os processadores, como é o caso do seu computador, necessitam de memórias externas para funcionar (RAM e ROM). Isto porque as instruções são extraídas de uma memória e os valores manipulados também precisam ser guardados em uma.
Microcontroladores
No caso de um microcontrolador, ele também é um circuito digital. Porém, dentro dele existe um microprocessador já interligado à memórias além de outras estruturas. Normalmente é uma memória flash para armazenar as instruções de programa e uma memória RAM para armazenar o que vem a ser as variáveis do programa.
Existem outras memórias, mas o importante aqui é entender a base do conceito. Na aula seguinte iremos falar da arquitetura de um microprocessador e entrar mais nestes detalhes.
As outras estruturas do microcontrolador que mencionei são os chamados periféricos. Os periféricos são elementos que garantem certas funcionalidades ao microcontrolador. O mais básico de todos é o periférico chamado GPIO (General Purpose Input/Output). Isto é, um periférico que fornece entradas/saídas digitais ao microcontrolador. É por meio dele que podemos fazer acionamentos (acionar LEDs, transistores, reles…) ou então ler valores digitais (botões, chaves…).
Existem diversos outros periféricos, como Timers/Contadores, USART, SPI, Conversor AD etc. De todo modo, ao longo do curso iremos aprender a utilizar alguns deles.
Como são na prática
Os microcontroladores podem ser encontrador como Circuitos Integrados (CIs) em diferentes encapsulamentos. Existem várias empresas que os fabricam, então não existe um modelo nem formato padrão.
Veja a imagem abaixo que mostra 3 microcontroladores de 3 fabricantes diferentes (não me refiro a grupo de empresas, pois a Microchip e a Atmel são do mesmo grupo).
Normalmente um microcontrolador possui apenas um conjunto definido de periféricos, mas TODOS (pelo que conheço) possuem o GPIO. E quanto mais caro ele for, mais periféricos ele terá (além de outros possíveis benefícios). Para exemplificar, na imagem acima, temos (simplificadamente):
- PIC16F628A: GPIO de 16 pinos, 3 timers, comparadores, PWM, USART.
- ATtiny85: GPIO de 6 pinos, 2 timers, comparador, conversor AD, PWM.
- STM32F303: GPIO de 37 pinos, 11 timers, conversor AD, conversor DA, PWM, USART, I2C, SPI, CAN, RTC, pinos sensíveis a capacitância e entre outros…
Só citei os periféricos, mas existem muitas outras características importantes que são diferentes em cada microcontrolador citado acima.
Enfim, a escolha do microcontrolador ideal vai depender das necessidades do projeto de um sistema embarcado: funcionalidades, custo, consumo de energia…
Objetivo do curso
Neste curso, eu pretendo focar o ensino nos microcontroladores AVR (Atmel) e PIC (Microchip) (arquitetura 8 e 16 bits). Isto porque eles são relativamente simples de entender, o que nos possibilitará aprender a manipular estes microcontroladores de forma bem direta. E essa manipulação é importante para entender por completo os microcontroladores.
Existem arquiteturas “modernas” de microcontroladores (como é o caso do STM32) que já apresentam funções alto-nível na programação que te tiram o trabalho de entender como cada coisa funciona na raiz do microcontrolador (parecido com a ideia do Arduino).
Mas é bastante importante ter esta base para, justamente, desenvolver um projeto tendo consciência de cada detalhe. Além do mais, programar um microcontrolador diretamente te possibilita criar um programa mais eficiente, mais otimizado (mais rápido e que ocupe menos memória) e mais seguro (em termos de garantia de funcionamento correto).
Recomendações
Falando de forma genérica, se eu fosse desenvolver um produto hoje em dia, optaria por utilizar um microcontrolador AVR no lugar de um PIC. Isto envolve uma série de motivos: a IDE, a arquitetura, a facilidade de programar e entre outros. É por isto que irei ensiná-lo no curso.
Entretanto, o mercado de trabalho brasileiro (não sei quanto aos demais) tem uma certa preferência pelo PIC (não sei o(s) motivo(s)). Isto pelo menos até a data deste post (dezembro 2019). Por conta disto, e por conta do interesse de muitas pessoas, pretendo ensinar também sobre o PIC aqui neste curso.
Durante meu aprendizado do AVR, usei o livro “AVR e Arduino Técnicas de Projeto” como base, que é um livro excepcional, pois ele explica em detalhes o AVR. E os autores disponibilizam ele gratuitamente online, embora eu o tenha comprado por ter gostado bastante do livro.
Um lado bom do AVR é que você pode utilizar um Arduino (que é barato e rápido de usar) para testar sua ideia e depois simplesmente passar o seu código para o Atmel Studio (IDE própria do AVR) sem muita dor de cabeça. Portanto, para iniciantes nesta área, eu recomendo focar no AVR e comprar um Arduino para aprender.
Já no caso do PIC, eu cheguei a ler alguns livros a respeito, mas não gostei dos que li. Então não tenho nenhum para recomendar.
Observações finais
Esta aula foi só para introduzir o conceito de microprocessador/microcontrolador e dar algumas dicas para iniciantes. O assunto da próxima aula será sobre a arquitetura de um processador. Isto servirá para dar uma base para o entendimento das aulas futuras.