Ir ao conteúdo
  • Cadastre-se

Problema LCD e o PIC18F4550 utilizando o Compilador CCS PCW simulação no Proteus


Ir à solução Resolvido por Fernando Freitas_463780,

Posts recomendados

Ola Senhores do Conselho,

Estou enfrentando esse pequeno problema abaixo, não esta sendo exibido o segundo caracter no display no Proteus. estou utilizando a biblioteca lcd.c, ja tentei utilizar outras mas o mesmo erro persiste, tentei utilizar outras portas como as portas D e o erro também é o mesmo.

 

post-776050-0-27320400-1438355622_thumb.

 

Segue o código simples que eu fiz só para teste.

 

#include <18f4550.h>
#fuses hs,nowdt,noprotect,nolvp
#use delay(clock=20000000)
#use standard_io( B)
#define use_portb_lcd TRUE
#include "lcd.c"
 
void main()
{
   lcd_init();
   for(; ;)            // CICLO INFINITO
   {
   delay_ms(100);
   printf(lcd_putc,"\fFIND SYSTEMS\nPROCURANDO");
   delay_ms(5000);
   printf(lcd_putc,"\fCOMUNICATION");
   delay_ms(5000);
   printf(lcd_putc,"\fMOTOR ON");
   delay_ms(5000);
   }
}
 
Como observado pela imagem peço também para que seja escrito a palavra PROCURANDO, na segunda linha o mesmo não acontece. Em nenhum dos casos.
 
Senhores pois então se alguém tiver algum conselho desde já muito obrigado.
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

olá amigo. Não uso ccs e obviamente muito menos suas libs. Certeza que o \n faz ele pular de linha? No meu modo hard, envio um comando (com RD=1) 0x80 para a 1ª linha e 0xc0 para a 2ª. Se o /n faz isso, ótimo.

 

Outra coisa... talvez você esteja indo rápido d+...Se bem que o proteus avisaria. Tente diminuir o clock.

Também pode tentar um tal de lcdgotoxy() ou algo assim para posicionar na 2ª linha

Link para o comentário
Compartilhar em outros sites

  • Solução

Olá Senhores do Conselho,

 

Caso alguém tenha o mesmo problema algum dia, com a ajuda de um amigo conseguimos resolver o problema.

 

Dentro da biblioteca lcd.c possui esta função abaixo.

 

void lcd_send_nibble( BYTE n ) {
      lcd.data = n;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(2);
      lcd.enable = 0;
}
 
No qual é responsável por enviar os dados para o LCD, pois é esta função que realiza a borda de subida do display através do ENABLE, logo este ultimo comando transfere em 2 us, no qual não tem tempo de realizar o processamento em altas frequências logo é necessário colocar mais alguns delays. Logo ficou assim.
 
void lcd_send_nibble( BYTE n ) {
      lcd.data = n;
      delay_cycles(1);
      lcd.enable = 1;
      delay_us(2);
      lcd.enable = 0;
      delay_us(250);                                   // TEMPO ADICIONAL POR CONTA TA FREQUÊNCIA ALTA. TENTAMOS APENAS COM O PRIMEIRO NÃO                                                                                  FUNCIONOU, MAS A PARTIR DESTE SEGUNDO COM SEGUIMOS.
      delay_us(250);

}

 

E rodou bonito!!!! Espero poder ajudar alguém também.

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

kibon. Uma outra alternativa para caso de querer mais agilidade na comunicação display-mc, é ler o sinal busy do display. Neste caso não precisaria esperar os eternos 2x250uS. Num momento e num projeto oportuno, seria uma opção interessante.

Sucessos

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...