Você está na página 1de 4

Laboratório de microcontroladores

Prática 6– Voltímetro
Turma 4
Dyogo de Holanda Antunes
Universidade Federal do Piauí - UFPI
dyogo_ha@hotmail.com
Resumo. Desenvolver, no Mikro C, um programa alguns baseados em LEDs orgânicos (OLED).
para o PIC18F4550, simulando a implementação
de um voltímetro digital, com display lcd 16x2. 2. METODOLOGIA
Palavras-chave: PIC, display, contador, compilar, 2.1. Materiais Utilizados
portas de entrada, portas de saída, TBJ.
- PIC 18F4550
- Jumpers
1.INTRODUÇÃO
- Button
-Dispplay LCD 16x2
O PIC 18F4550 é um microcontrolador 5
grupos de portas disponíveis (A,B,C,D, E), cada -Resistores de 10 k Ω
porta tem três registradores associados à
configuração - Potenciômetro de 10kΩ

Registrador TRIS: configura o sentido do - Capacitores 22 pF ,220nF


fluxo de dados de uma determinada porta; -Cristal 20MHz;
Registrador PORT: escreve e ler o nível dos
pinos associados a uma porta;
Registrador LAT: armazena o valor do 2.2. Procedimentos
último comando de escrita;
Nesta quarta prática, foi proposto a
O registrador TRIS é responsável po
simulação de um voltímetro digital para realizar a
determinar o sentido do fluxo de uma determinada leitura e apresentação da tensão de entrada
porta ,ou seja ,determina se a porta “B7” ,por fornecida pelo cabo usb(0-5v), ao ser variado por
exemplo ,será de entrada ou saída. um potenciômetro em um circuito divisor de tensão.
Módulos de display LCD de caracteres .
alfanuméricos são interfaces de comunicação
3. RESULTADOS E DISCUSSÕES
visual muito úteis e atraentes. Eles se encontram
em quase todos os aparelhos domésticos, A) Programa:
eletroeletrônicos, automóveis, instrumentos de
medição etc. São dispositivos que possuem
interfaces elétricas padronizadas e recursos #define VREF 5000
internos gráficos e de software que permitem #define INTERVALO_ATUALIZA 250
facilmente a permuta por outros de outros
// Config dos pinos para ligação
fabricantes, sem que seja necessário alterar o com display LCD
programa de aplicação. Por ser altamente
padronizado seu custo é baixo. É um recurso sbit LCD_RS at RD2_bit; // PINO 2 DO PORTD
INTERLIGADO AO RS DO DISPLAY
antigo, deve ter uns vinte anos de idade ou mais,
mas continua atual, com suas inúmeras formas, sbit LCD_EN at RD3_bit; // PINO 3 DO PORTD
INTERLIGADO AO EN DO DISPLAY
cores, tamanhos e preços. A tecnologia
predominante continua sendo o LCD (Liquid sbit LCD_D7 at RD7_bit; // PINO 7 DO PORTD
Crystal Display), porém já se pode encontrar INTERLIGADO AO D7 DO DISPLAY
sbit LCD_D6 at RD6_bit; // PINO 6 DO PORTD unsigned int val[2];
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 i;

sbit LCD_D4 at RD4_bit; // PINO 4 DO PORTD


INTERLIGADO AO D4 DO DISPLAY
val[0] = val_0; // Posicao do potenciometro

// Selecionando direção de
for(i=0; i<1; i++)
fluxo de dados dos pinos utilizados para a comunicação
com display LCD {
sbit LCD_RS_Direction at TRISD2_bit; // SETA val_int = (val[i] % 10000) / 1000;
DIREÇÃO DO FLUXO DE DADOS DO PINO 2 DO
PORTD val_frc = (val[i] % 1000);
sbit LCD_EN_Direction at TRISD3_bit; // SETA
DIREÇÃO DO FLUXO DE DADOS DO PINO 3 DO
PORTD Lcd_Out(1+i, 5, " ");

sbit LCD_D7_Direction at TRISD7_bit; // SETA


DIREÇÃO DO FLUXO DE DADOS DO PINO 7 DO
PORTD IntToStr(val_int, str_int); //Converte o numero para
string
sbit LCD_D6_Direction at TRISD6_bit; // SETA
DIREÇÃO DO FLUXO DE DADOS DO PINO 6 DO Ltrim(str_int); //Remove os espacos em branco
PORTD a esquerda do numero

sbit LCD_D5_Direction at TRISD5_bit; // SETA Lcd_Out_Cp(&str_int);


DIREÇÃO DO FLUXO DE DADOS DO PINO 5 DO
PORTD
IntToStr(val_frc, str_frc); //Converte o numero para
sbit LCD_D4_Direction at TRISD4_bit; // SETA string
DIREÇÃO DO FLUXO DE DADOS DO PINO 4 DO
PORTD Ltrim(str_frc); //Remove os espacos em branco
a esquerda do numero

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); //Toma uma amostra CONTA_TEMPO
no canal 0 do ADC =================================//
v = ( (long)v * VREF )/ 1023; // Converte para a int conta_tempo(int intervalo)
escala de 0 a 5000
{
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)

{
//Função configurar pinos PIC//
char str_int[6], str_frc[6];
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; // Inicia com todos os pinos da int tensao1; /,tsao2;


porta A apagados
int tempo = 0;
PORTE = 0X00; // Inicia com todos os pinos da
porta E apagados
configura_pic(); // Chama a subrotina

ADCON0 = 0X00; // Canal 0, A/D parado; A/D configura_lcd();


desligado

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; // Desabilita comparadores if(tempo == 0)
internos
{

tensao1 = le_tensao(0);
ADC_Init(); // Inicializa o conversor A/D
tensao2 = le_tensao(1);
}
atualiza_lcd(tensao1, tensao2); // Exibe
os valores da subrotina

PORTE = ~ PORTE ; // Varia o


valor de saída dos leds
//Função conficurar LCD //
}
void configura_lcd()
tempo =
{
conta_tempo(INTERVALO_ATUALIZA); // Serve
PORTE = 0X01; // Aciona o led RE0 para não sofrer muita variação ao exibir os valores

Delay_ms(500);
delay_ms(1);

Lcd_Init(); // Inicializa o modulo LCD }

Lcd_Cmd(_LCD_CLEAR); // Limpa a tela

Lcd_Cmd(_LCD_CURSOR_OFF); // Apaga o }}B) Montagem:


cursor

delay_ms(20); // Espera 20ms para


estabilizar o modulo LCD

PORTE = 0X02; // Aciona o led RE1

Lcd_Out(1,1, "V = V"); //Imprime os valores no lcd


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.

Você também pode gostar