Laboratório de microcontroladores microcontroladores Prática 6– Voltímetro Turma 4 Dyogo de Holanda Antunes Universidade Federal Federal do Piauí - UFPI
[email protected] alguns baseados em LEDs orgânicos (OLED).
Desenvolver, no Mikro C, um programa Resumo. Desenvolver, para o PIC18F4550, simulando a implementação de um voltímetro digital, com display lcd 16x2.
2. METODOLOGIA
Palavras-chave: PIC,
2.1. Materiais Utilizados
display, contador, compilar, portas de entrada, portas de saída, TBJ.
- PIC 18F4550 1.INTRODUÇÃO
- Jumpers - Button
O PIC 18F4550 é um microcontrolador 5 grupos de portas disponíveis (A,B,C,D, E), cada porta tem três registradores associados à configuração Registrador TRIS: configura o sentido do fluxo de dados de uma determinada porta; Registrador PORT: PORT: escreve e ler o nível dos pinos associados a uma uma porta; Registrador LAT: armazena o valor do último comando de escrita; O registrador TRIS é responsável po determinar o sentido do fluxo de uma determinada porta ,ou seja ,determina se a porta “B7” ,por exemplo ,será de entrada ou saída. Módulos de display LCD de caracteres alfanuméricos são interfaces de comunicação visual muito úteis e atraentes. Eles se encontram em quase todos os aparelhos domésticos, eletroeletrônicos, automóveis, instrumentos de medição etc. São dispositivos que possuem interfaces elétricas padronizadas e recursos internos gráficos e de software que permitem facilmente a permuta por outros de outros fabricantes, sem que seja necessário alterar o programa de aplicação. Por ser altamente altamente padronizado seu custo é baixo. baixo. É um recurso antigo, deve ter uns vinte anos de idade ou mais, mas continua atual, com suas inúmeras formas, cores, tamanhos e preços. A tecnologia predominante continua sendo o LCD LCD ( Liquid Crystal Display), porém já se pode encontrar
-Dispplay LCD 16x2 -Resistores de 10 k Ω - Potenciômetro de 10kΩ - Capacitores 22 pF ,220nF -Cristal 20MHz;
2.2. Procedimentos
Nesta quarta prática, foi proposto a simulação de um voltímetro digital para realizar a leitura e apresentação da tensão de entrada fornecida pelo cabo usb(0-5v), ao ser variado por um potenciômetro em um circuito divisor de tensão. . 3. RESULTADOS E DISCUSSÕES A) Programa:
#define VREF 5000 #define #defin e INTERVALO_A INTERVALO_ATUALIZA TUALIZA 250 25 0 // Config dos pinos para ligação com display LCD sbit LCD_RS at RD2_bit; // PINO 2 DO PORTD PORTD INTERLIGADO AO RS DO DISPLAY sbit LCD_EN at RD3_bit; // PINO 3 DO PORTD PORTD INTERLIGADO AO EN DO DISPLAY sbit LCD_D7 at RD7_bit; // PINO 7 DO PORTD PORTD INTERLIGADO AO D7 DO DISPLAY
unsigned int val[2];
sbit LCD_D6 at RD6_bit; // PINO 6 DO PORTD INTERLIGADO AO D6 DO DISPLAY
unsigned int val_int, val_frc;
sbit LCD_D5 at RD5_bit; // PINO 5 DO PORTD INTERLIGADO AO D5 DO DISPLAY
char
sbit LCD_D4 at RD4_bit; // PINO 4 DO PORTD INTERLIGADO AO D4 DO DISPLAY
val[0] = val_0;
// Selecionando direção de fluxo de dados dos pinos utilizados para a comunicação com display LCD
{ val_int = (val[i] % 10000) / 1000; val_frc = (val[i] % 1000);
sbit LCD_EN_Direction at TRISD3_bit; // SETA DIREÇÃO DO FLUXO DE DADOS DO PINO 3 DO PORTD
sbit LCD_D6_Direction at TRISD6_bit; // SETA DIREÇÃO DO FLUXO DE DADOS DO PINO 6 DO PORTD
Lcd_Out(1+i, 5, " ");
IntToStr(val_int, str_int); //Converte o numero para string Ltrim(str_int); a esquerda do numero
//Remove os espacos em branco
Lcd_Out_Cp(&str_int);
sbit LCD_D5_Direction at TRISD5_bit; // SETA DIREÇÃO DO FLUXO DE DADOS DO PINO 5 DO PORTD sbit LCD_D4_Direction at TRISD4_bit; // SETA DIREÇÃO DO FLUXO DE DADOS DO PINO 4 DO PORTD
// Posicao do potenciometro
for(i=0; i<1; i++)
sbit LCD_RS_Direction at TRISD2_bit; // SETA DIREÇÃO DO FLUXO DE DADOS DO PINO 2 DO PORTD
sbit LCD_D7_Direction at TRISD7_bit; // SETA DIREÇÃO DO FLUXO DE DADOS DO PINO 7 DO PORTD
i;
IntToStr(val_frc, str_frc); //Converte o numero para string Ltrim(str_frc); a esquerda do numero
//Remove os espacos em branco
Lcd_Out_Cp("."); Lcd_Out_Cp(str_frc);
//Função leitura da tensão pelo pic//
}
int le_tensao(char canal) }
{ int v; v = ADC_Get_Sample(canal); no canal 0 do ADC v = ( (long)v * VREF )/ 1023; escala de 0 a 5000
//Toma uma amostra // Converte para a
//============================== CONTA_TEMPO =================================// int conta_tempo(int intervalo) {
return v;
static int tempo = 0;
}
tempo = (tempo == intervalo-1)? 0 : tempo+1; return tempo; //Função para atualização da tensão no LCD//
}
void atualiza_lcd(unsigned int val_0, unsigned int val_1) { char
str_int[6], str_frc[6];
//Função configurar pinos PIC// void configura_pic()
{
} TRISA = 0xFF; // Porta A configurada como entrada TRISB = 0xFF; // Porta B configurada como entrada TRISC = 0xFF; // Porta C configurada como entrada
void main()
TRISE = 0x00;
{
// Porta E configurada como saída
char u,d,c,m; PORTA = 0X00; porta A apagados
// Inicia com todos os pinos da
PORTE = 0X00; porta E apagados
// Inicia com todos os pinos da
int tensao1; /,tsao2; int tempo = 0;
configura_pic(); ADCON0 = 0X00; desligado
// Canal 0, A/D parado; A/D
// Chama a subrotina
configura_lcd();
ADCON1 = 0X0D; // Vref- = GND; Vref+ = VDD; Entradas analogicas: AN0 E AN1 ADCON2 = 0X8A; // Justificado à direita; Tad = 2x; conversion clk = 32 Tosc
while(1) {
CMCON = 0X07; internos
// Desabilita comparadores
if(tempo == 0) {
ADC_Init();
tensao1 = le_tensao(0);
// Inicializa o conversor A/D
tensao2 = le_tensao(1);
}
atualiza_lcd(tensao1, tensao2); os valores da subrotina PORTE = ~ PORTE ; valor de saída dos leds
//Função conficurar LCD //
{ PORTE = 0X01;
// Aciona o led RE0
tempo = conta_tempo(INTERVALO_ATUALIZA); // Serve para não sofrer muita variação ao exibir os valores
Delay_ms(500); delay_ms(1); // Inicializa o modulo LCD
Lcd_Cmd(_LCD_CLEAR);
PORTE = 0X02;
Lcd_Out(1,1, "V = V");
}
// Limpa a tela
Lcd_Cmd(_LCD_CURSOR_OFF); cursor delay_ms(20); estabilizar o modulo LCD
// Varia o
}
void configura_lcd()
Lcd_Init();
// Exibe
// Apaga o
// Espera 20ms para
// Aciona o led RE1
//Imprime os valores no lcd
}} B) Montagem:
Figura 1 - Simulação da montagem realizada no software Proteus 8[Voltímetro digital com lcd 16x2]
4. CONCLUSÕES
Com o fim do experimento foi possível analisar a função de codificador e decodificador do PIC 18F4550 , funcionamento do display lcd , criando funções mais complexas para leitura de tensão ,aprofundando o estudo destes componentes.