Ir ao conteúdo
  • Cadastre-se

[Resolvido]Display Não Inicializa utilizando PIC18f4520


SOMA190

Posts recomendados

Estou tentando inicializar o display manualmente sem usar as bibliotecas do mikroC, porém estou seguindo a risca "acredito eu" o datasheet do HD44780.

Porém nada acontece quando eu ligo minha giga de teste.

Vou postar o codigo da bagaça: :lol:

/*******************************************************************************

Autor: Eduardo P.S

Display 16x2, PIC18f4520;

Objetivo: Iniciar e Escrever no display Manualmente sem utilizar bibliotecas

do compilador mikroC

*******************************************************************************/

#define RS PORTE.RE2

#define EN PORTE.RE1

#define DATA PORTD

void Dec_Ports(void);

void inicia_display(void);

void escreve_display(void);

/*******************************************************************************

Função Principal Main

*******************************************************************************/

void main (){

Dec_Ports();

inicia_display();

escreve_display();

while(1){

}

}

/*******************************************************************************

Declarando Entradas e Saidas

*******************************************************************************/

void Dec_Ports(void){

ADCON1 = 0x06; //define todas as i/o como portas digitais

TRISD = 0x00;

TRISE.RE1 = 0x00;

TRISE.RE2 = 0x00;

DATA = RS = EN = 0x00;

}

/*******************************************************************************

Inicialização do display

*******************************************************************************/

void inicia_display(void){

delay_ms(40);

EN = 0xff;

DATA = 0x01; //Limpa o Display

EN = 0x00;

delay_ms(1);

EN = 0xff;

DATA = 0x07; //coloca o display em modo incremento

EN = 0x00;

delay_ms(1);

EN = 0xff;

DATA = 0x0C; //retira o curso blink e essas frescuras

EN = 0x00;

delay_ms(1);

EN = 0xff;

DATA = 0x38; /* Declara o Display tendo 2linhas trabalhando no modo

8bits e 5x8 Dots*/

EN = 0x00;

delay_ms(1);

}

/*******************************************************************************

Escrevendo no Display

*******************************************************************************/

void escreve_display(void){

EN = 0xff;

RS = 0xff;

DATA = 0x9D;

RS= 0x00;

EN =0x00;

delay_ms(1);

}

Link para o comentário
Compartilhar em outros sites

"Mother of God"

A ordem de inicialização está errada, o correto é primeiro declarar o modo de operação do display que exige um delay diferenciado, em torno de 15ms dependendo do dispositivo.

Para escrever em um display ou enviar comandos existe uma combinação entre os estados das linhas EN e RS.

Veja só,

Escrita de caractere:


RS = 1;
LCD_DADOS = Caractere;
EN = 1;
Delay;
EN = 0;
Delay;

Escrita de comando:


RS = 0;
LCD_DATA = Comando;
EN = 1;
Delay;
EN = 0;
Delay;


No mais, parabéns pelo esforço de fazer a coisa na mão.

Abs.

Link para o comentário
Compartilhar em outros sites

kkkkkkkk voh volta e edita o primeiro codigo e deixar ele com o erro inicial e no final o codigo arrumado então kkkkkkkkkl

Não testei ainda o código, algoritmo, porém pelo que o Felipe falou deve ficar mais ou menos assim.

/************************************************** *****************************

Autor: Eduardo P.S

Display 16x2, PIC18f4520;

Objetivo: Iniciar e Escrever no display Manualmente sem utilizar bibliotecas

do compilador mikroC

************************************************** *****************************/

#define RS PORTE.RE2

#define EN PORTE.RE1

#define DATA PORTD

void Dec_Ports(void);

void inicia_display(void);

void escreve_display(void);

/************************************************** *****************************

Função Principal Main

************************************************** *****************************/

void main (){

Dec_Ports();

inicia_display();

escreve_display();

while(1){

}

}

/************************************************** *****************************

Declarando Entradas e Saidas

************************************************** *****************************/

void Dec_Ports(void){

ADCON1 = 0x06; //define todas as i/o como portas digitais

TRISD = 0x00;

TRISE.RE1 = 0x00;

TRISE.RE2 = 0x00;

DATA = RS = EN = 0x00;

}

/************************************************** *****************************

Inicialização do display

************************************************** *****************************/

void inicia_display(void){

delay_ms(40);

DATA = 0x01; //Limpa o Display

EN = 0xff;

delay_ms(1);

EN = 0x00;

delay_ms(1);

DATA = 0x07; //coloca o display em modo incremento

EN = 0xff;

delay_ms(1);

EN = 0x00;

delay_ms(1);

DATA = 0x0C; //retira o curso blink e essas frescuras

EN = 0xff;

delay_ms(1);

EN = 0x00;

delay_ms(1);

DATA = 0x38; /* Declara o Display tendo 2linhas trabalhando no modo

8bits e 5x8 Dots*/

EN = 0xff;

delay_ms(1);

EN = 0x00;

delay_ms(1);

}

/************************************************** *****************************

Escrevendo no Display

.************************************************** *****************************/

void escreve_display(void){

RS = 0xff;

DATA = 0xD9;

EN = 0xff;

delay_ms(1);

EN = 0x00;

}

Link para o comentário
Compartilhar em outros sites

Escrevendo no Display

.************************************************* * *****************************/

void escreve_display(void){

RS = 0xff;

DATA = 0xD9;

EN = 0xff;

delay_ms(1);

EN = 0x00;

}

falta o delay após o desligamento do bit EN

Escrevendo no Display

.************************************************* * *****************************/

void escreve_display(void){

RS = 0xff;

DATA = 0xD9;

EN = 0xff;

delay_ms(1);

EN = 0x00;

delay_ms(1);

}

obs.: em se tratando de bit, a intrução acima não deveria ser:

EN = 0

EN = 1

RS = 0

RS = 1

Link para o comentário
Compartilhar em outros sites

parei pra dar uma corrigida ahsuahsuahsuash eu estava mandando o cursor correr para esquerda o codigo esta correto porém a cabaçada foi minha auhsuahsuahs

/*******************************************************************************

Autor: Eduardo P.S

Display 16x2, PIC18f4520;

Objetivo: Iniciar e Escrever no display Manualmente sem utilizar bibliotecas

do compilador mikroC

*******************************************************************************/

#include "display.h"

/*******************************************************************************

Função Principal Main

@Brief Função principal responsavel pelas chamadas dos prototipos das funções

Entrada: nenhum

Retorno: nenhum

*******************************************************************************/

void main ()

{

Dec_Ports();

inicia_display();

escreve_display();

while(1)

{

}

}

/*******************************************************************************

Declarando Entradas e Saidas

@Brief Declaração dos TRIS e PORT, e Registradores

Entrada: nenhum

Retorno: nenhum

*******************************************************************************/

void Dec_Ports(void)

{

ADCON1 = 0x06; //define todas as i/o como portas digitais

DATA = RS = EN = 0x00;

TRISD = 0x00;

TRISE.RE1 = 0x00;

TRISE.RE2 = 0x00;

}

/*******************************************************************************

Inicialização do display

@brief = Inicia o Display e retorna para a função Main

Entrada: nenhum

Retorna: nenhum

*******************************************************************************/

void inicia_display(void)

{

delay_ms(40);

DATA = 0x38; /* Declara o Display tendo 2linhas trabalhando no modo

8bits e 5x8 Dots*/

EN = 0xff;

delay_ms(1);

EN = 0x00;

delay_ms(5);

DATA = 0x0C; //retira o curso blink e essas frescuras

EN = 0xff;

delay_ms(1);

EN = 0x00;

delay_ms(1);

DATA = 0x01; //Limpa o Display

EN = 0xff;

delay_ms(1);

EN = 0x00;

delay_ms(1);

DATA = 0x06; //coloca o display em modo incremento

EN = 0xff;

delay_ms(1);

EN = 0x00;

delay_ms(1);

}

/*******************************************************************************

Escrevendo no Display

********************************************************************************

@brief = Função para enviar um char para o display, e retorna para função Main

Entrada: nenhum

Retorna: nenhum

*******************************************************************************/

void escreve_display(void)

{

DATA = 0x80;

EN = 0xff;

delay_ms(1);

EN =0x00;

delay_ms(1);

RS = 0xff;

DATA = 'E'; //envia um char para o display

EN = 0xff;

delay_ms(1);

EN =0x00;

delay_ms(1);

RS= 0x00;

}

]

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para 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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!