Sistemas Embarcados
Parte I: Fundamentos teóricos
3. Microprocessadores e Microcontroladores
Sistemas Embarcados
Aula 1: introdução aos Sistemas Embarcados
Microcontrolador vs. Microprocessador
Fonte: https://www.electronicsforu.com/resources/difference-between-microprocessor-and-microcontroller
Microcontrolador (MCU)
Microprocessador (MPU)
Qual é melhor?
Depende muito da aplicação!
A decisão qual utilizar no projeto deverá ser feita apenas após analisar todo o projeto e suas necessidades.
Em vários casos a solução é a combinação dos dois no mesmo sistema!
Exemplo: Todos os computadores atuais, que usam um microprocessador para realizar o processamento do sistema operacional enquanto um microcontrolador na placa de rede faz a administração e filtragem de pacotes recebidos e decide quais serão enviados ao microcontrolador.
Como escolher?
Como escolher a partir das características do projeto
Microprocessador:
Microcontrolador:
Exemplos de aplicações práticas
Microprocessador:
fonte: https://media.kingston.com/kingston/content/ktc-custom-solutions-servers-data-centers-dc500-server.jpg
Exemplos de aplicações práticas
Microcontrolador:
Fonte: https://upload.wikimedia.org/wikipedia/commons/thumb/7/71/Arduino-uno-perspective-transparent.png/250px-Arduino-uno-perspective-transparent.png
Sensores
São equipamentos capazes de monitorar características de um ambiente e transformar em sinais elétricos que podem ser interpretados por microcontroladores e assim permitir que “sintam” o ambiente e serem utilizados para tomadas de decisões durante a execução programa. Ex:
Atuadores
São equipamentos capazes de receber sinais elétricos de microcontroladores e, através de uma fonte de energia, transformar em movimento, permitindo assim que ele “atue” em um ambiente. Ex:
Exemplo de aplicação 1 - Drone
Exemplo de aplicação 2 - Smart Garden
Programação de microcontroladores
Programação de microcontroladores
Atenção!
Para que o aproveitamento das aulas seja maximizado, é recomendado a revisão dos seguintes tópicos de programação em C e C++:�
Primeiro programa
O primeiro programa que será executado neste curso chama-se Blink, que será o nosso “hello world” de embarcados.
Será utilizada uma arduino Uno como plataforma de execução deste programa.
O objetivo do programa é apenas acender um LED e apaga-lo com intervalos de 1 segundo, demonstrando assim o correto funcionamento da IDE e da placa Arduino.
(vídeo 1)
Primeiro programa
Primeiro programa
Pino 13 da Arduino Uno
Primeiro programa
Configurado como saída
Primeiro programa
Escreve alto no pino 13
Primeiro programa
Trava o microcontrolador por 1 segundo (sleep)
Primeiro programa
Escreve baixo no pino 13
Primeiro programa
Trava o microcontrolador por 1 segundo (sleep)
Configurando pinos
Microcontroladores se comunicação através de pinos que podem ser configurados como entrada (input) ou saída (output).
Ao iniciar um programa, os pinos que serão usados devem ser sempre configurados antes do uso (algumas bibliotecas realização a configuração automaticamente, assim não é necessário configurar manualmente como no blink).
A função para configurar no arduino é:
pinMode(pino, modo);
Onde pino é um valor inteiro correspondente ao pino que deseja-se usar e modo assume o valor OUTPUT para configurar o pino como saída ou INPUT para configurar o pino como entrada.
Utilizando os pinos
Para utilizar os pinos, o programa deve ler um valor do pino ou escrever um valor no pino através das funções:
Exemplo prático real - I2C
No protocolo I2C, um pino chamado de SCL é usado como sincronizado, recebendo o valor alto e baixo em um intervalo fixo.
Antes do SCL receber o valor alto, o SDA recebe alto ou baixo, representando o bit que será transmitido e então o SCL é escrito alto.
Após o tempo de intervalo em alto, o pino SCL recebe o valor baixo e então o pino SDA recebe o valor correspondente ao próximo bit e assim por diante até que todos os bits tenham sido transmitidos.
digitalWrite - HIGH
digitalWrite - LOW
Exemplo prático real - I2C
No receptor, ao ler o pino SCL como alto, ele lê e salva o valor lido no SDA em um array de bits.
Ao ler o SCL como 0, o receptor desloca os bits para a esquerda, verifica se a transmissão foi finalizada. Caso tenha sido finalizada, processa os bits, caso contrário, volta a esperar o SCL ir para alto novamente e assim por diante.
O valor de frequência padrão utilizado na maioria dos microcontroladores para comunicação I2C é 400KHz, ou seja, o pino SCL muda 800 mil vezes de valor em um único segundo, enquanto o pino SDA é escrito ou lido 400 mil vezes em um único segundo!
digitalWrite - HIGH
digitalWrite - LOW
Entrada de sinais - Botões
Para o segundo exemplo prático de código, será necessário o uso de um botão momentâneo (push button).
Ele será ligado conforme na imagem.
O resistor que deverá ser usado deve possui a resistência de um valor qualquer entre 1KΩ e 10KΩ.
Entrada de sinais - Botões
Nesse programa, o LED embutido que é ligado ao pino 13, ficará desligado, e quando o botão for pressionado, o LED irá permanecer acionado até que o botão seja solto.
(Vídeo 3)
Entrada de sinais - Botões
Quando o botão é pressionado, irá conectar o pino 2 ao 5 volts fazendo assim com que o pino 2 fique no nível lógico alto.
Porém, quando o botão é solto, qual o nível lógico que o pino 2 ficará?
Nesse circuito irá para o nível lógico baixo, pois existe um resistor de pull-down!
Resistores de pull-up e pull-down
O resistores de pull-up e pull-down são utilizados para evitar que o pino, ao ser configurado como entrada e enquanto não for conectado ou acionado, fique em flutuação, ou seja, evitar que fiquem oscilando aleatoriamente entre nível lógico alto e baixo fazendo assim com que o programa tome decisões erradas.
Devem ser utilizados sempre que houver um circuito que possui pinos não conectados ou acionados inicialmente.
Os resistores devem ser sempre colocados entre o nível lógico que será padrão e o MCU (corrente sempre procura o caminho mais fácil).�
Fonte: https://circuitdigest.com/tutorial/pull-up-and-pull-down-resistor
Resistores de pull-up e pull-down
Os valores devem ser altos os suficiente para evitar um curto circuito ao acionar o interruptor (observe na imagem ao lado), porém, não pode muito alto pois cada MCU possui uma corrente mínima para detecção de nível lógico, conforme será descrito no datasheet do MCU.
Resistores de pull-up e pull-down dever ser utilizados em sistemas low-power e ultra-low-power pois pode gerar um pequeno vazamento de corrente, mesmo com o MCU desligado.
Existem microcontroladores que possuem pull-up e pull-down internamente conectados e que podem ser configurados no momento que configurar o modo de operação do pino.�
Fonte: https://circuitdigest.com/tutorial/pull-up-and-pull-down-resistor