LCD, não quer funcionar

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

LCD, não quer funcionar

Mensagempor blackhawk123 » 11 Jul 2007 23:58

estou tentando usar um display LCD, mas ele "não me obedece"

O P2 envia os dados, e eu espero 15ms entre cada comando.

Código: Selecionar todos
#include<AT89x52.h>

#define RW P1_0
#define RS P1_1

void Tempo(void);

void Tempo_15m(void)
{
   TH0=0xC5;
   TL0=0x67;
   TR0=1;
   while(TF0);
   TF0=0;
   TR0=0;
}


main(void)
{
    TMOD=0x11;
    RS=RW=0;
    P1_2=1;
    Tempo_15m();
    P1_2=0;
    /*Inicializa LCD*/
    P2=0x38;
    Tempo_15m();
    P2=0x38;
    Tempo_15m();
    P2=0x06;
    Tempo_15m();
    P2=0x0E;
    Tempo_15m();
    P2=0x01;
    Tempo_15m();
    /* Fim da inicialização*/
    P2=0x0D;
    Tempo_15m();
    RW=0;
    RS=1;
    Tempo_15m();
    P2=0x32;
    return(0);
}
blackhawk123
Bit
 
Mensagens: 27
Registrado em: 15 Out 2006 17:05

Mensagempor Maurício » 12 Jul 2007 01:25

Cadê o pulso de clock em E do LCD?

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor brasilma » 12 Jul 2007 10:03

Sugestão: tente partir de um exemplo padrão - que funciona - e deste pto em diante, caso deseje vá fazendo suas alterações.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor blackhawk123 » 12 Jul 2007 18:54

Maurício escreveu:Cadê o pulso de clock em E do LCD?

[]'s


que pulso de clock?? eu li algo sobre isso na apostila que estou usando, mas não entendi direito.

brasilma, nas pesquisas que fiz no google não achei exemplos em C para o SDCC, mas vou procurar denovo
blackhawk123
Bit
 
Mensagens: 27
Registrado em: 15 Out 2006 17:05

Mensagempor brasilma » 12 Jul 2007 20:34

Apostilas não são uma boa fonte de informação, sugiro que use o data-sheet do próprio fabricante.
" A Teoria orienta e a Prática decide" ;-)
Avatar do usuário
brasilma
Dword
 
Mensagens: 3621
Registrado em: 11 Out 2006 15:39
Localização: Planeta Terra

Mensagempor Maurício » 13 Jul 2007 05:24

blackhawk123 escreveu:
Maurício escreveu:Cadê o pulso de clock em E do LCD?

[]'s


que pulso de clock?? eu li algo sobre isso na apostila que estou usando, mas não entendi direito.

brasilma, nas pesquisas que fiz no google não achei exemplos em C para o SDCC, mas vou procurar denovo


O LCD tem 3 linhas de controle (RW, RS e E). Toda a vez que vc tiver que enviar/receber um dado pro LCD vc precisa pulsar a linha de clock.
No seu exemplo ficaria algo parecido com isto:


Código: Selecionar todos
#define RW P1_0
#define RS P1_1
#define ENABLE P1_2 // POR EXEMPLO. PODE SER QUALQUER OUTRO PINO
#define PULSE_CLOCK    ENABLE = 0; ENABLE = 1; ENABLE = 0

    /*Inicializa LCD*/
    RS=RW=0;
    P2=0x38;
    PULSE_CLOCK;
    Tempo_15m();
    P2=0x38;
    PULSE_CLOCK;
    Tempo_15m();
    P2=0x06;
    PULSE_CLOCK;
    Tempo_15m();
    P2=0x0E;
    PULSE_CLOCK;
    Tempo_15m();
    P2=0x01;
    PULSE_CLOCK;
    Tempo_15m();
    /* Fim da inicialização*/
    P2=0x0D;
    PULSE_CLOCK;
    Tempo_15m();
    RW=0;
    RS=1;
    P2=0x32;
    PULSE_CLOCK;
    return(0);


Outra coisa, também: 15ms é tempo demais pra esperar pelo LCD. Este valor de tempo só é usado na inicialização do LCD. Pra todos os outros comandos, vc pode usar um tempo de 2ms, por exemplo, já que o comando que mais consome tempo no LCD, consome em torno de 1,6ms (clear screen).

Se vc vai somente escrever no LCD, vc pode aterrar o pino RW e usar este tempo de 2ms entre cada envio de dados para o LCD.

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP

Mensagempor blackhawk123 » 14 Jul 2007 11:48

Maurício escreveu:
blackhawk123 escreveu:
Maurício escreveu:Cadê o pulso de clock em E do LCD?

[]'s


que pulso de clock?? eu li algo sobre isso na apostila que estou usando, mas não entendi direito.

brasilma, nas pesquisas que fiz no google não achei exemplos em C para o SDCC, mas vou procurar denovo


O LCD tem 3 linhas de controle (RW, RS e E). Toda a vez que vc tiver que enviar/receber um dado pro LCD vc precisa pulsar a linha de clock.
No seu exemplo ficaria algo parecido com isto:


Código: Selecionar todos
#define RW P1_0
#define RS P1_1
#define ENABLE P1_2 // POR EXEMPLO. PODE SER QUALQUER OUTRO PINO
#define PULSE_CLOCK    ENABLE = 0; ENABLE = 1; ENABLE = 0

    /*Inicializa LCD*/
    RS=RW=0;
    P2=0x38;
    PULSE_CLOCK;
    Tempo_15m();
    P2=0x38;
    PULSE_CLOCK;
    Tempo_15m();
    P2=0x06;
    PULSE_CLOCK;
    Tempo_15m();
    P2=0x0E;
    PULSE_CLOCK;
    Tempo_15m();
    P2=0x01;
    PULSE_CLOCK;
    Tempo_15m();
    /* Fim da inicialização*/
    P2=0x0D;
    PULSE_CLOCK;
    Tempo_15m();
    RW=0;
    RS=1;
    P2=0x32;
    PULSE_CLOCK;
    return(0);


Outra coisa, também: 15ms é tempo demais pra esperar pelo LCD. Este valor de tempo só é usado na inicialização do LCD. Pra todos os outros comandos, vc pode usar um tempo de 2ms, por exemplo, já que o comando que mais consome tempo no LCD, consome em torno de 1,6ms (clear screen).

Se vc vai somente escrever no LCD, vc pode aterrar o pino RW e usar este tempo de 2ms entre cada envio de dados para o LCD.

[]'s


Vou testar e ver o que acontece.
blackhawk123
Bit
 
Mensagens: 27
Registrado em: 15 Out 2006 17:05

Mensagempor blackhawk123 » 15 Jul 2007 00:16

Maurício, Obrigado pela ajuda. O LCD agora está me obedecendo direitinho.
blackhawk123
Bit
 
Mensagens: 27
Registrado em: 15 Out 2006 17:05

Mensagempor Maurício » 15 Jul 2007 06:02

Blz!

[]'s
"Não leve a vida tão à sério, afinal, nenhum de nós sairá vivo, dela!"
Avatar do usuário
Maurício
Word
 
Mensagens: 678
Registrado em: 14 Out 2006 17:23
Localização: São Paulo - SP


Voltar para 8051

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x