Você está na página 1de 44

MICROCONTROLADORES

Prof: Maximiano Correia Martins, D.Sc


Plano de Aula: 4ª Aula de Microcontroladores
Tema: Display LCD de caracteres, display de 7 segmentos.

Objetivos:
• Compreender a utilização de displays em projetos com microcontroladores.
• Desenvolver programas com displays e microcontroladores.
Displays LCD de caracteres
Nós nos deparamos com displays (mostradores) LCD em todos os
lugares ao nosso redor. Computadores, calculadoras, televisores,
telefones celulares, relógios digitais usam algum tipo de exibição
para exibir a hora. Um LCD é um módulo de display eletrônico que
usa cristal líquido para produzir uma imagem visível. O display LCD
16 × 2 é um módulo básico comumente usado em projetos para
visualizar dados e informações. O 16 × 2 é um display de 16
caracteres por linha em duas linhas. Os caracteres escritos se
baseiam na tabela ASCII. Neste LCD, cada caractere é exibido em
uma matriz de 5 × 7 pixels. A figura apresenta a pinagem deste
módulo. O pino de terra (GND) é o pino 1.
Displays LCD de caracteres
Além do pino GND e Vcc (alimentação de 5V), o display possui 8
pinos para envio de dados em paralelo (DB0 a DB7), ajuste de
contrastes (VEE), pino de controle para selecionar envio de dados
para o registro de comando ou de dados (RS), leitura ou escrita no
registro (RW), pino de habilitação do dispositivo (EN) e entrada
para alimentação da luz de fundo (backlight) nos pinos Led+ e Led-

https://blogmasterwalkershop.com.br/arquivos/datasheet/Datasheet%20HD44780.pdf
Funções para uso de LCD de caracteres em PIC

Para programar a escrita em displays LCD de caracteres é preciso


seguir passos de envio de comandos, com temporização adequada,
para que o display esteja preparado para receber os dados, o valor
ASCII de cada caractere que se deseja escrever.
Todo display possui um controlador que define que comandos devem
ser utilizados. É esse controlador que define como devem ser os
comandos para operar o LCD.
Funções para uso de LCD de caracteres em PIC
As funções auxiliam a utilização do LCD, realizam a inicialização do
mesmo e os passos e temporizações necessárias para que o
controlador tenha tempo de enviar os dados e acender os
caracteres no display.
No compilador CCS, as funções lcd_init() e LCD_PUTC (utilizada
como parâmetro da função printf) são as principais usadas para
operar o LCD.
O código abaixo foi usado no exemplo inicial de uso do LCD da placa 4 (PicGenios) do simulador PICSimLab.
#include <18F4550.h>
#fuses HS, NOMCLR, NOWDT
#use delay(clock=20MHz)
#define LCD_DB0PIN_D0
#define LCD_DB1PIN_D1
#define LCD_DB2PIN_D2
#define LCD_DB3PIN_D3
#define LCD_DB4PIN_D4
#define LCD_DB5PIN_D5
#define LCD_DB6PIN_D6
#define LCD_DB7PIN_D7
#define LCD_EPIN_E1
#define LCD_RSPIN_E2
#include <meu_lcd.c>
void main () {
lcd_init();
printf(LCD_PUTC, "Usando LCD");
delay_ms(1000);
printf(LCD_PUTC, "\nTemp = %f", “23.6”);
}
Funções para uso de LCD de caracteres em Arduino
No IDE do Arduino existem muitas funções, dentro da biblioteca
LiquidCrystal, para operar um display LCD Esta biblioteca permite que
uma placa Arduino controle as telas (LCDs) baseadas no chipset Hitachi
HD44780 (ou compatível), encontrado na maioria dos LCDs baseados
em caracteres.

A biblioteca trabalha no modo de 4 ou 8 bits (isto é, usando 4 ou 8


linhas de dados, além das linhas de controle rs, enable e,
opcionalmente, rw).
As principais funções desta biblioteca serão mostradas aqui.
A lista completa pode ser vista em:
https://www.arduino.cc/en/Reference/LiquidCrystal.
Função LiquidCrystal()
Cria uma variável do tipo LiquidCrystal. O display pode ser
controlado usando 4 ou 8 linhas de dados. Para usar 4 bits,
omita os números dos pinos de d0 a d3 e deixe essas linhas
desconectadas. O pino RW pode ser ligado ao terra. Nesta
caso, omita-o dos parâmetros desta função.
Sintaxe: os parâmetros abaixo devem ser substituídos pelo
número do pino do Arduino onde o pino correspondente do
display está ligado.
LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)
Função begin()
Inicializa a interface para a tela LCD e especifica as dimensões (largura e
altura) da tela. begin() precisa ser chamada antes de qualquer outro
comando da biblioteca LCD.

Sintaxe:

lcd.begin (colunas, linhas)


Função setCursor()
Posiciona o cursor do LCD; isto é, define a localização na qual o texto subsequente
gravado no LCD será exibido.
Sintaxe:
lcd.setCursor (coluna, linha)

Função clear()
Limpa a tela LCD e posiciona o cursor no canto superior esquerdo.
Sintaxe:
lcd.clear()
Exemplo no Arduino:
Código para o Arduino:
/*
Circuito:
* Pino LCD RS ligado ao pino digital 12
#include <LiquidCrystal.h>
* Pino LCD Enable ligado ao pino digital 11
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
* Pino LCD D4 ligado ao pino digital 5
* Pino LCD D5 ligado ao pino digital 4
void setup() {
* Pino LCD D6 ligado ao pino digital 3 lcd.begin(16, 2);
* Pino LCD D7 ligado ao pino digital 2 lcd.print("Usando o LCD");
* Pino LCD R/W ligado ao GND }
* Pino LCD GND ligado ao GND
* Pino LCD VCC ligado ao 5V void loop() {
* Pino LCD VO ligado ao GND lcd.setCursor(0, 1);
* Pino LED+ ligado ao Resistor 220 Ohms lcd.print(“Aula 5”);
* Resistor 220 Ohms ligado ao 5V
}
* Pino LED- ligado ao GND
*/
• https://www.tinkercad.com/things/5N31SIwBWdr-lcd-exemplo-1
Exercício:
Construa um código que faça uma contagem de 1 a 10 mudando o
número a cada segundo passado

15 minutos
Exercício: Código para o Arduino:
/*
Circuito:
* Pino LCD RS ligado ao pino digital 12
#include <LiquidCrystal.h>
* Pino LCD Enable ligado ao pino digital 11
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
* Pino LCD D4 ligado ao pino digital 5
* Pino LCD D5 ligado ao pino digital 4
void setup() {
* Pino LCD D6 ligado ao pino digital 3 lcd.begin(16, 2);
* Pino LCD D7 ligado ao pino digital 2 lcd.print("Usando o LCD");
* Pino LCD R/W ligado ao GND }
* Pino LCD GND ligado ao GND
* Pino LCD VCC ligado ao 5V void loop() {
* Pino LCD VO ligado ao GND lcd.setCursor(0, 1);
* Pino LED+ ligado ao Resistor 220 Ohms // Imprime o número de segundos
* Resistor 220 Ohms ligado ao 5V
delay(1000);
lcd.print(millis() / 1000);
* Pino LED- ligado ao GND
}
*/
Exemplo de Projetos com Sensor de Temperatura
e luminosidade com visor LCD no arduino

http://www.comofazerascoisas.com.br/projeto-arduino-com-display-lcd-sensor-de-temperatura-e-sensor-de-luz.html
Continuando...Tema8
• Tema
Tema: Aquisição de dados com microcontroladores
• Palavras-chave
Aquisição de dados, conversores A/D, conversores D/A, comparadores.

OBJETIVOS:
• Compreender a aquisição de dados em sistemas com
microcontroladores.
• Compreender como funciona os conversores analógico-digitais (A/D) e
digitais/analógicos (D/A).
• Desenvolver programas com conversores A/D.
Aquisição de dados
Aquisição de dados é o processo de medir as condições do mundo
físico e fenômenos como eletricidade, som, temperatura e pressão.
Isso é feito através do uso de vários sensores que amostram os
sinais analógicos do ambiente e os transformam em sinais digitais
usando um conversor analógico para digital. Os valores numéricos
digitais resultantes podem então ser diretamente manipulados por
um sistema computadorizado, permitindo a análise, armazenamento
e apresentação desses dados. Microcontroladores podem atuar em
sistemas de aquisição de dados, controlando a aquisição e fazendo a
interface entre os sensores e o computador.
Alguns brinquedos úteis na aquisição de dados
Considerações sobre taxa de amostragem de aquisição de dados
• A taxa de amostragem expressa um intervalo de amostragem em uma
unidade de tempo ou uma taxa de amostragem em Hertz.
• Por exemplo, um intervalo de amostragem de 1 mS significa que o
instrumento faz a amostragem uma vez a cada milissegundo ou 1000
vezes por segundo.
• O mesmo instrumento pode ser especificado para amostrar a uma taxa
de 1 kHz.
• 1 kHz significa uma amostra a cada 1/1000 segundos(10-3s), ou um
milissegundo.
Considerações sobre taxa de amostragem de aquisição de dados

Independentemente de se ver a amostragem como uma taxa ou


um intervalo, deve se tomar cuidado para escolher as
especificações do instrumento para corresponder à excursão mais
rápida esperada dos sinais que você deseja medir. Se a taxa de
amostragem do instrumento estiver abaixo da taxa de desempenho
versus a taxa de excursão do sinal, você corre o risco de gerar
Temperatura = 74.78 C
dados com dados aproximados que sejam desastrosos para análise Temperatura = 74.77 C
e interpretação subsequentes. Da mesma forma, quem precisa Temperatura = 74.76 C
Temperatura = -27.71 C
amostrar dados de temperatura a uma taxa de 1 kHz (um a cada
Temperatura = 74.78 C
1 mS), sendo que temperatura é uma grandeza de alteração Temperatura = 456.21 C
Lenta.
Importância da aquisição de dados
Quer se perceba ou não, a aquisição de dados desempenha um
papel crítico em áreas como pesquisa em ciências da vida,
engenharia civil e manutenção industrial, para citar alguns. Entre em
qualquer usina siderúrgica, utilidade pública ou laboratório de
pesquisa no mundo e você encontrará algum tipo de dispositivo de
aquisição de dados, monitorando silenciosamente um parâmetro
ou outro.
Os dados coletados podem ser usados para melhorar a eficiência,
garantir confiabilidade ou garantir que o maquinário esteja
operando com segurança. Os dados registrados são recuperados
para garantir que o sistema em teste seja executado conforme o
esperado e para identificar áreas problemáticas que precisam de
ajustes.
Transdutor x Atuadores
A palavra Transdutor é o termo coletivo usado para os Sensores,
que podem ser usados para detectar uma ampla gama de
diferentes formas de energia, como movimento, sinais elétricos,
energia radiante, energia térmica ou magnética, e Atuadores, que
podem ser usados para alternar tensões ou correntes, "atuando"
em um sistema.
Sensores
Muitos sensores estão disponíveis para converter condições
variáveis para alterar quantidades elétricas. Existem fotocélulas que
convertem a quantidade de luz que incide sobre elas em uma
resistência variável; sensores flexíveis que alteram a resistência
quando são dobrados; Resistores sensíveis à força, que alteram a
resistência com base em uma força de alteração aplicada à
superfície; termistores que mudam de resistência em resposta à
mudança de calor; e muitos mais.
Divisor de tensão
Para ler mudanças de resistência, por exemplo,
pode-se colocar esta resistência em um circuito e
passar uma corrente através dela, de modo que se
possa ver a variação de tensão resultante.
Existem algumas variações neste circuito. O mais
simples é chamado de divisor de tensão.
Como os dois resistores estão em série, a tensão de
saída (Vsaída),que vai para a entrada do
microcontrolador, é proporcional à relação dos
resistores.
Se eles são iguais, então a tensão de entrada é
metade da tensão total.
Potenciômetro
No diagrama da figura usa-se um potenciômetro, que é
um resistor variável com três conexões.
O centro do potenciômetro é conectado ao
microcontrolador (tensão V entre b e c).
Os outros dois lados estão ligados à energia (a) e ao
terra (c).
O centro pode se mover de uma extremidade do
resistor para a outra.
Com efeito, ele divide o resistor em dois resistores e
fornece a tensão no ponto em que eles se encontram,
assim como um divisor de tensão.
Conversor A/D (Analógico-Digital) ou ADC
Microcontroladores são capazes de detectar sinais binários, como vimos nos exemplos, um botão
pressionado ou não.
Estes são sinais digitais. Quando um microcontrolador é alimentado a partir de cinco volts, ele
entende zero volts (0V) como nível lógico 0 e cinco volts (5V) como nível lógico 1.
Mas, muitas vezes precisamos medir os sinais que variam, como a temperatura, os sinais analógicos
que foram citados. Um sensor analógico de 5V pode produzir 0,01V ou 4,99V ou qualquer coisa
entre eles.
Felizmente, quase todos os microcontroladores têm um dispositivo embutido que permite
converter essas tensões em valores que podemos usar em um programa para tomar uma decisão,
um Conversor Analógico para Digital (ADC).
Este é um recurso muito útil, que converte uma tensão analógica em um pino para um número
digital. Ao converter do mundo analógico para o mundo digital, podemos começar a usar a
eletrônica para interagir com o mundo analógico ao nosso redor.
Conversor A/D (Analógico-Digital) ou ADC
ADCs vêm em várias arquiteturas básicas, embora existam muitas variações para cada tipo.
Diferentes tipos de equipamentos de teste precisam de tipos diferentes de ADCs.
Por exemplo, um osciloscópio digital precisa de altas velocidades de digitalização, mas pode
sacrificar a resolução.
Alguns digitalizadores de plug-in de PC e equipamentos de teste de RF usam ADCs de sub
dimensionamento, que oferecem melhor resolução do que os conversores de flash, mas às custas
da velocidade.
O equipamento de aquisição de dados para fins gerais geralmente fica entre os osciloscópios e os
voltímetros para velocidade e resolução da amostra. Este tipo de equipamento utiliza conversores
de registo de aproximação sucessiva (SAR) ou conversores sigma-delta.
Um multímetro digital (DMM) precisa de resolução fina e pode sacrificar altas velocidades de
medição.
https://www.newtoncbraga.com.br/index.php/microcontrolad
ores/138-atmel/15084-praticas-exercicios-e-codigo-de-
exemplo-para-as-entradas-analogicas-adc-do-arduino-uno-
mic169.html
As principais características do ADC no Arduino uno são:
• Resolução de 10 bits. (0 ~ 1023)
• Tempos de conversão entre 13 e 260 microssegundos.
• 6 canais de entrada multiplexados.
• Canal de entrada com sensor de temperatura.
• Ajuste de leitura opcional para a esquerda.
• Faixa de tensão de 0 a 5 Vcc.
• Tensão de referência de 1,1 Volts para o ADC.
• Modo de conversão simples ou livre.
• Interrupção quando a conversão estiver concluída.
• Cancelamento de ruído no modo de baixo consumo (SLEEP).
Aquisição de dados com microcontroladores
· Arduino Uno

Nem todos os pinos de um microcontrolador têm a capacidade de


fazer conversões analógicas para digitais. Na placa do Arduino Uno
são seis pinos, que têm um "A" na frente de sua etiqueta (A0 a A5).
ADCs podem variar muito entre os microcontroladores. O ADC no
Arduino Uno é de 10 bits, o que significa que tem capacidade para
detectar 1.024 (210) níveis analógicos discretos. O ADC, assumindo
5V na sua entrada, converte para um valor binário 1023, e qualquer
coisa menor que 5V será uma relação entre 5V e 1023.
Arduino Uno
A taxa de amostragem em uma placa de Arduino Uno depende, em
primeiro lugar, do clock usado. Para um Arduino de 16 MHz, o
clock do ADC é ajustado para 16 MHz/128 = 125 KHz. Cada
conversão no leva 13 ciclos de clock do ADC, ou 125 KHz /13 =
9615 Hz. Essa é a taxa de amostragem máxima possível, mas a taxa
de amostragem real depende do intervalo entre as chamadas de
conversões sucessivas.
Funções E/S analógicas no Arduino Uno
analogRead(): Lê o valor do pino analógico especificado.
analogReference(): Configura a tensão de referência usada para entrada
analógica (ou seja, o valor usado como o topo do intervalo de entrada).

As opções são:
DEFAULT: a referência analógica padrão de 5 volts (em placas 5V Arduino)
ou 3.3 volts (em placas 3.3V Arduino).
INTERNAL: uma referência interna, igual a 1,1 volts no ATmega328P.
EXTERNAL: a tensão aplicada ao pino AREF (apenas 0 a 5V) é usada como
referência.
Funções E/S analógicas no Arduino Uno
Funções E/S analógicas no Arduino Uno
analogWrite(): Escreve um valor analógico
(onda PWM) em um pino. Pode ser usado
para acender um LED com brilho variável
ou acionar um motor em várias
velocidades.
Praticando um pouco!!!
• Exercício 1: Simule um sensor com um potenciômetro, usando a
porta analógica, imprima na porta serial o valor lido na porta
analógica em questão
• Exercício 2: Construa um código onde você possa variar com o
potenciômetro o tempo que o led da porta 13 permanece acesso
• Exercício 3: Desafio: construa um código onde possamos controlar a
intensidade do brilho do led usando o potenciômetro.
https://www.tinkercad.com/
Exercício 1: Simulando um sensor com um
potenciômetro
Exercício 2: Variando o tempo que o led
permanece acesso
int potPin = 0; // selecione o pino de entrada ao potenciômetro
int ledPin = 13; // selecione o pino ao LED
int tempo= 0; // variável a guardar o valor proveniente do sensor

void setup() {

pinMode(ledPin, OUTPUT); // declarar o pino ledPin como saída


Serial.begin(9600);
}

void loop() {

tempo = analogRead(potPin); // ler o valor do potenciômetro


Serial.println(tempo); // printa na porta serial o valor do tempo
digitalWrite(ledPin, 1); // ligar o led
delay(tempo); // espera tempo ajustado no potenciômetro
digitalWrite(ledPin, 0); // desligar o led
delay(tempo); // espera tempo ajustado no potenciômetro

}
Exercício 3: Desafio controlar o brilho do led
Exemplo de sensores analógicos
Funções E/S analógicas no PIC
PIC16f628
Este modelo, que é usado na placa1 do PICSimLab, não possui ADC,
possui comparadores. Comparador, na linguagem eletrônica, é um
dispositivo analógico que compara dois valores de tensão. A saída
do comparador é um sinal digital que mostra qual é o maior. Os
comparadores analógicos são usados em muitas aplicações.
PIC18F4550
Mas existem vários modelos de PIC possuem ADC.
Um deles é o PIC18F4550, que pode ser usado no PICSimLab na placa 4. O
microcontrolador PIC18F4550 possui 13 canais ADC de 10 bits.
PIC16f628 PIC18F4550
Fim!!!

Você também pode gostar