Manual
do
Maker
.
com
Já escrevi 2 posts relacionados a display LCD com Arduino; o com 5 botões e backlight e o display sem botões e sem backlight. Nesse post será exemplificada a configuração do display LCD sem backlight com PIC16F1827. Algumas variáveis de ambiente mudam conforme o modelo e família do PIC, mas nada de tão drástico.
O modelo 16F1827 foi escolhido pelo número de pinos e recursos disponíveis (que vão além do inicialmente necessário), além de ser um modelo de baixo consumo. Apesar da apresentação desse post tratar apenas da configuração desse display em PIC utilizando a IDE MikroC, o propósito vai um pouco além; utilizarei essa composição para fazer sniffing e debugging de outras controladoras que estiver programando, fazendo a comunicação entre as MCUs utilizando UART ou I2C e exibindo os resultados no display; acredito que seja um tanto mais informativo que 'debugar' no LED.
As conexões de exemplo da IDE são um pouco diferente, pois o display possui apenas 14 pinos no exemplo, enquanto o display em uso possui 16. Mas isso não é nada de mais. Na verdade, os pinos sobressalentes são pertinentes ao backlight, os demais pinos seguem o mesmo padrão dos demais displays.
Também utilizo um potenciômetro de 10k para controlar o contraste do display.
Então, para esse modelo as conexões ficam assim:
PIC/Display
RB5/6
RB4/4
RB3/14
RB2/13
RB1/12
RB0/11
Verifique também os pinos de GND e +5:
Display
1 - Gnd
2 - Vdd
5 - Gnd
3 - PotOut
O potenciômetro é ligado assim:
1 - Gnd
2 - PotOut
3 - +5v
O esquema em Fritzing:
O código é esse:
// sinais
sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;
sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
//mensagens de texto a exibir
char txt1[] = " suhanko.com ";
char txt2[] = "PIC16F1827";
char txt3[] = "Display LCD";
char txt4[] = "com PIC";
char i; // Loop variable
void Move_Delay() { // delay do deslocamento horizontal
Delay_ms(2);
}
void main(){
ANSELA = 0; // configurar pinos analógicos como digital (ANSEL em alguns PICs)
ANSELB = 0;
WPUA = 0;
WPUB = 0;
C1ON_bit = 0; // Desabilitando comparadores
C2ON_bit = 0;
Lcd_Init(); // inicializa LCD
Lcd_Cmd(_LCD_CLEAR); // limpa display
Lcd_Cmd(_LCD_CURSOR_OFF); // desliga o cursor
Lcd_Out(1,2,txt3); // texto na primeira linha
Lcd_Out(2,3,txt4); // texto na segunda linha
Delay_ms(20); // esse delay normalmente deverá ser 2000ms para 2 segundos
//trocar a mensagem do display agora...
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,txt1);
Lcd_Out(2,3,txt2);
Delay_ms(2);
// Deslocamento de texto
for(i=0; i<4; i++) {
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
while(1) {
for(i=0; i<8; i++) {
Lcd_Cmd(_LCD_SHIFT_LEFT);
Move_Delay();
}
for(i=0; i<8; i++) {
Lcd_Cmd(_LCD_SHIFT_RIGHT);
Move_Delay();
}
}
}
E um video para finalizar.
Um pouquinho mais trabalhoso que com Arduino, mas graças à IDE Mikroc, nada que 5 minutos a mais não resolvam!
Se gostou, não deixe de compartilhar; dê seu like no video e inscreva-se no nosso canal Manual do Maker Brasil no YouTube.
Próximo post a caminho!
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.