1 of 34

Sistemas Embarcados

Parte I: Fundamentos teóricos

3. Microprocessadores e Microcontroladores

Prof.: Alisson Brito (alisson@ci.ufpb.br)

Tutor: Moisés Bezerril (moisesc.bezerril@gmail.com)

2 of 34

Sistemas Embarcados

Aula 1: introdução aos Sistemas Embarcados

3 of 34

Microcontrolador vs. Microprocessador

Fonte: https://www.electronicsforu.com/resources/difference-between-microprocessor-and-microcontroller

4 of 34

Microcontrolador (MCU)

  • Memória Flash embarcada
  • Curto período de inicialização e execução mais rápida de código
  • Memória menor (na casa de alguns MB)
  • Programas menores
  • Mais periféricos inclusos (como conversor analógico, comunicação serial por hardware, gerador de clocks independentes e etc).
  • Consumo menor de energia

5 of 34

Microprocessador (MPU)

  • Memória interna e externa
  • Memória externa pode chegar a Terabytes (Ex.: Processadores Xeon)
  • Programas muito maiores e mais elaborados
  • Não possui periféricos
  • Maior tempo de leitura e escrita da memória de programa (geralmente armazenadas em memórias não voláteis)
  • Maior tempo de inicialização
  • Consumo maior de energia

6 of 34

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.

7 of 34

Como escolher?

8 of 34

Como escolher a partir das características do projeto

Microprocessador:

  • Pode ter memória e componentes de entrada e saída externos
  • Pode ter circuitos grandes (para conexão dos periféricos)
  • Maior disponibilidade de recursos financeiros
  • Tem alimentação de energia grande (ou ilimitada, ex. uma grande bateria ou ligado direto na tomada)
  • Necessita de mais processamento em paralelo
  • Grandes programas

Microcontrolador:

  • Circuitos pequenos e embarcados
  • Possui alimentação de energia pequena ou muito limitada
  • Menor disponibilidade de recursos financeiros
  • Precisa de um modo de ultra economia de energia
  • Processamento mais sequencial do que paralelo
  • Programas pequenos
  • Periféricos embarcados e inclusos
  • Comunicação com sensores especiais

9 of 34

Exemplos de aplicações práticas

Microprocessador:

  • Computadores pessoais
  • Servidores
  • Controladores lógicos programáveis industriais (CLP)
  • Celulares

fonte: https://media.kingston.com/kingston/content/ktc-custom-solutions-servers-data-centers-dc500-server.jpg

10 of 34

Exemplos de aplicações práticas

Microcontrolador:

  • Televisões
  • Osciloscópios
  • Impressoras
  • Velocímetro digital
  • Termômetro digital
  • Drones

Fonte: https://upload.wikimedia.org/wikipedia/commons/thumb/7/71/Arduino-uno-perspective-transparent.png/250px-Arduino-uno-perspective-transparent.png

11 of 34

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:

  • Sensor fotovoltaico
  • Sensor de temperatura
  • Sensor de umidade
  • Sensor de aceleração e velocidade angular

12 of 34

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:

  • Pistões hidráulicos ou pneumáticos
  • Servo motores
  • Eletroímãs

13 of 34

Exemplo de aplicação 1 - Drone

  • Um circuito contendo o microcontrolador e acelerômetro e giroscópio (seta amarela) é conectado a circuitos especiais para controle de motores (setas vermelhas)
  • O microcontrolador realiza a leitura do acelerômetro e do giroscópio, obtém a aceleração e a velocidade de rotação em que se encontra o drone, compara com o ângulo que deveria estar
  • Em seguida calcula a rotação necessária para alcançar o ângulo alvo na velocidade pré configurada
  • Por fim o microcontrolador gera os sinais de comunicação para os circuitos especiais para controle de motores, modificando a velocidade final nos motores que irão gerar um empuxo e rotacionar o drone no ar

14 of 34

Exemplo de aplicação 2 - Smart Garden

  • Um circuito contendo o microcontrolador é ligado a sensores de umidade de solo, umidade do ar e temperatura do ar, a controle de motores e relays.
  • O microcontrolador receberá a temperatura ideal e umidade ideal do solo e do ar das plantas que irá monitorar, caso estejam diferentes o microcontrolador irá:
    • Usar relays para acionar ventiladores e baixar a temperatura ou acionar aquecedores para aumentar a temperatura
    • Usar relays para acionar bombas de água para aumentar a umidade do solo, ou acionar umidificadores de ar para aumentar a umidade do ar
  • O controlador também receberá o horário em que as plantas devem receber a incidência de raios UV e acionará lâmpadas de ultravioleta no horário programado.
  • As plantas crescem bem mais saudáveis e mais rapidamente, porém é muito custoso para reprodução em larga escala.

15 of 34

Programação de microcontroladores

16 of 34

Programação de microcontroladores

  • Grande maioria recebe programas em C ou C++
  • Possuem compiladores próprios fornecidos pela fabricante (com alguns microcontroladores com suporte a compiladores de terceiros)
  • Muitos microcontroladores possuem IDE própria, fornecida pela fabricante
  • Programas curtos e de execução extremamente rápida

17 of 34

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++:�

  • Ponteiros
  • Binário para decimal e vice versa (se possível hexa)
  • Declaração e uso de objetos e structs
  • Declaração de uso de funções e argumentos das funções

18 of 34

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)

19 of 34

Primeiro programa

20 of 34

Primeiro programa

Pino 13 da Arduino Uno

21 of 34

Primeiro programa

Configurado como saída

22 of 34

Primeiro programa

Escreve alto no pino 13

23 of 34

Primeiro programa

Trava o microcontrolador por 1 segundo (sleep)

24 of 34

Primeiro programa

Escreve baixo no pino 13

25 of 34

Primeiro programa

Trava o microcontrolador por 1 segundo (sleep)

26 of 34

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.

27 of 34

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:

  • digitalRead(pino): Irá retornar 1 caso o pino esteja conectado a um nível lógico alto (HIGH) ou 0 caso o pino esteja conectado a um nível lógico baixo.
  • digitalWrite(pino, valor): Irá atribuído o nível lógico a um pino. Onde valor pode ser HIGH ou LOW.

28 of 34

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

29 of 34

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

30 of 34

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Ω.

31 of 34

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)

32 of 34

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!

33 of 34

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

34 of 34

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