
Blog de Luiz Oscar Ruschel Pilger destinado ao estudo de Microcontroladores PIC18F4550. O material deste blog é fruto de um trabalho iniciado em 2013 para as aulas de microcontroladores do curso de Técnico em Eletrônica da Escola Técnica Estadual Parobé de Porto Alegre - RS. Ele vem a substituir o antigo blog picparobe.
sexta-feira, 9 de setembro de 2016
Programação Menus
Atividade:
O programa
deve piscar um led com a opção de tempo selecionada.
Um menu com 4
opções de forma que apareça:
·
No programa (piscar o led):
o
1ª linha do LCD: Tempo selecionado
o
2ª linha do LCD: Opção para entrar no menu
·
No menu (trocar o tempo, LED apagado):
o
1ª linha do LCD: A opção corrente
o
2ª linha do LCD: As funções dos botões
Botões:
·
Up (+) Rola o menu para cima
·
Down (-) Rola
o menu para baixo
·
Menu/OK Entra
e sai do menu
Opções do menu:
·
Tempo = 1s (default = ao iniciar o programa)
·
Tempo = 2s
·
Tempo = 3s
·
Tempo = 4s
=====================================================
quarta-feira, 7 de setembro de 2016
Atividades com Conversor A/D
Utilizando como base o exemplo do conversor A/D onde é realizada a leitura de tensão da saída variável de um potenciômetro de 0 a +5V
Apresentar as tarefas no hardware.
Monte um voltímetro que meça uma tensão entre 0 e +12V.
Escolha um potenciômetro de qualquer valor e ajuste para aparecer no LCD o valor correspondente
Como o LM35 possui o limite de 150ºC (saída com 1,5V), modifique o a tensão de referência positiva (VREF+).
Mostra no LCD a temperatura do sensor.
Sensor 1 controla a saída Led 1 e uma carga (relé de +12V)
Apresentar as tarefas no hardware.
Atividade 1 – Voltímetro de 5V
Implemente o hardware para funcionamento do programa de exemplo do conversor A/DAtividade 2 – Voltímetro de 12V
Monte um voltímetro que meça uma tensão entre 0 e +12V.
Atividade 3 – Potenciômetro
Implemente o programa para informar o valor do potenciômetro em ΩEscolha um potenciômetro de qualquer valor e ajuste para aparecer no LCD o valor correspondente
Atividade 4 – LDR
- Ligue um divisor de tensão com um LDR
- Faça a leitura do divisor através do conversor A/D
- Crie 3 faixas de iluminação
- Baixa
- Média
- Alta
- Mostre o LCD o tipo de intensidade de acordo com a escala acima
Atividade 5 – Termômetro
Implemente um termômetro, utilizando o sensor LM35.Como o LM35 possui o limite de 150ºC (saída com 1,5V), modifique o a tensão de referência positiva (VREF+).
Mostra no LCD a temperatura do sensor.
Dica de implementação para modificar a tensão de referência positiva (VREF+):
- Registrador ADCON1<4> (Bit 4)- VCFG2: seleção da +Vref
- 1: +Vref = AN3
- 0: +Vref = VDD
- Definir A3 – RA3/AN3/+Vref como entrada no registrador TRIS
Atividade 6 – Leitura de 2 temperaturas
Faça a leitura de 2 sensores LM35 (AN0 e AN1).Dica de implementação:
- Na função config_AD: Registrador ADCON1: AN0 -> AN0 + AN1
- Registrador TRIS: AN0 -> AN0 + AN1
- Laço while (1)
- Seleção AN0 pelo registrador ADCON0
- Leitura do A/D
- Mostrar valor no LCD
- Seleção AN1 pelo registrador ADCON0
- Leitura do A/D
- Mostrar valor no LCD
Atividade 7 – Controle de acionamento de ar condicionado em 2 pontos
Sensor 0 controla a saída Led 0 e uma carga (relé de +12V)- Liga em 35ºC
- Desliga em 30ºC
Sensor 1 controla a saída Led 1 e uma carga (relé de +12V)
- Liga em 32ºC
- Desliga em 28ºC
Dica de implementação: faça os testes com a temperatura antes de mostrar ela no LCD.
Atividade - Questionário sobre Hardware
Fonte de Consulta:
- · Datasheet
- · Micontroladores PIC18 – Aprenda e Programe em Linguagem C – Alberto Noboru Miyadaira
- Explique para que servem os Special Function Register (SFR).
- Explique para que servem os General Porpouse Register (GPR).
- Explique para que servem a memória de programa, vetores e stack e onde estão localizados.
- Como pode ser configurado o oscilador do PIC18F4550?
- Quais as frequências possíveis no oscilador interno e em qual registrador/bits ele é configurado?
- Em que módulo/periférico do PIC18F4550 funciona o oscilador secundário e em que registrador/bits ele é configurado?
- Quais são os modos e frequências podemos configurar via oscilador externo?
- Monte uma tabela associando oscilador/cristal/capacitor para ser utilizado no oscilador externo.
Convertendo números decimais em binários
Para converte um número
decimal existem várias formas. Uma delas consiste na diminuição de multiplos de
2 (2x). Basta saber os múltiplos, abaixo os múltiplos até 212
:
·
212 = 4096
·
211 = 2048
·
210 = 1024
·
29 = 512
·
28 = 256
·
27 = 128
·
26 = 64
·
25 = 32
·
24 = 16
·
23 = 8
·
22 = 4
·
21 = 2
·
20 = 1
Exemplo:
O processo
consiste em começar subtraindo o maior valor múltiplo de 2 possível, e
repetindo o processo parando somente quando chegar a zero.
Após o final
marca-se com 1 os bits referentes aos múltiplos que foram subtraídos e com 0 os
demais.
Vamos mostrar
como converter um número, por exemplo 185.
Sugestão de fluxograma para 8 bits:
- · Crie inicialmente um vetor com o número de bits necessários a conversão (unsigned char binario[8];).
- · Guarde o valor utilizando uma variável auxiliar.
- · Teste se a variável auxiliar se ela é maior que 128, se for subtraia 128 do número e marque o bit 7 como 1 (binario[7]=1;) se não marque o bit 7 como 0 (binario[7]=0;).
- · Repita o processo para os outros múltiplos de 2 (64, 32, 16, 8, 4, 2, 1 e 0).
Tratamento de variáveis numéricas no LCD 2 x 16
A biblioteca, “biblioteca_lcd_2x16_48M_XC.h” não dispõe de funções
para imprimir variáveis numéricas no LCD, e sim somente funções que imprimem
caracteres no LCD.
Para imprimir variáveis numéricas é necessário converte-las
para caracteres.
Segue abaixo um exemplo de impressão de uma variável numérica
no LCD
Programa em linguagem C para o
hardware descrito acima
#define _XTAL_FREQ 48000000
#include <stdio.h>
#include <xc.h>
#include "c:\h\Config_PIC18F4550.h"
#include "c:\h\biblioteca_lcd_2x162_48M_XC.h"
void delay_ms(int i) {
for (int x = 0; x < i; x++) {
__delay_ms(1);
}
}
for (int x = 0; x < i; x++) {
__delay_ms(1);
}
}
void
main(void) {
char numero=0;
char texto[16];
TRISD = 0x00;
LATD = 0;
lcd_inicia(0x28, 0x0f, 0x06);
lcd_LD_cursor(0);
lcd_posicao(1, 1);
imprime_string_lcd("Var num no
LCD");
while (1) {
lcd_posicao(2, 1);
sprintf(texto,"Numero = %3d
",numero); // guarda na varável
texto a string com o número com 3 dígitos
imprime_buffer_lcd(texto, 15); // imprime a variavel texto com 15
posições
++numero;
delay_ms(1000);
}
}
Atividade - Escrevendo variáveis numéricas no LCD 16x2
Tarefa 1:
Utilizando a
ideia do contador binário com 4 teclas, implemente o programa
para mostrando o valor da variável no LCD e modifique o seu valor de acordo com
as teclas:
o
rst – Botão que inicializa o contador em 0
o
inc – Botão que incrementa o contador em 1
unidade
o
dec – Botão que decrementa o contador em 1
unidade
o
set – Botão que seta o contador para o número
128
Tarefa 2:
Modifique o programa para mostrar
o valor em hexadecimal
Tarefa 3:
Modifique o programa para mostrar
o valor nos formatos
- decimal
- hexadecimal
- binário
Para a conversão em binário leia o post Convertendo números decimais em binários
Assinar:
Postagens (Atom)