Rotinas LCD

Software e Hardware para linha x51

Moderadores: 51, guest2003, Renie, gpenga

Rotinas LCD

Mensagempor Iran » 01 Jul 2008 12:13

Srs,

Encontrei umas rotinas para LCD em:

http://mcu-programming.blogspot.com/200 ... acing.html

encontrei tb a mesma rotina com modificação apenas em alguns pinos em outro site.

Tentei fazer funcionar e nada.

Observei que na função LCD_init na última linha é chamada a função LDC_delay com o valor 256, a função LCD_delay recebe um unsigned char, portanto está errado.

Será que ninguém nunca usou essas rotinas para ver esse erro?

Alguem pode dar uma olhada pra mim ? As temporizações estão corretas?

Grato,
Zé Iran.
Avatar do usuário
Iran
Word
 
Mensagens: 558
Registrado em: 16 Out 2006 18:10
Localização: Imperatriz - MA

Mensagempor ze » 01 Jul 2008 13:17

"fazer funcionar e nada" significa não compila ou não escreve no display?
vi as rotinas. creio que 256 não está correto. tente 255. Mas no grosso está correta. otra coisa:
"void LCD_puts(unsigned char *lcd_string)" não sei se seu compilador admite mas eu uso const char *lcd_string (ponteiro pra ROM e não RAM. Verifique no seu compilador qual é o equivalente pra colocar constantes na ROM.
Também verif. se seu uC está rápido d+.

abrç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Iran » 01 Jul 2008 15:52

Obrigado Lindo Lelis por responder,

Compila normalmente com o SDCC, só que não aparece nada no LCD.

O que não entendi é que o uC usado é o P89V51RD2 e ele diz lá

* XTAL -> 18.432 MHz
* Mode -> 6 Clock/MC

entendi que o ciclo de máquina desse processador é 6 ciclos de clock, portanto teria de dobrar a freq. para obter os mesmos tempos num uC
de ciclo de máquina = 12 ciclos de clock, mas mesmo assim os tempos não batem com o q tem comentado no programa vou continuar fuçando aqui pra ver se faço funcionar.

Quais são os tempos entre as palavras de inicialização do LCD ?

Grato,
Zé Iran
Avatar do usuário
Iran
Word
 
Mensagens: 558
Registrado em: 16 Out 2006 18:10
Localização: Imperatriz - MA

Mensagempor ze » 01 Jul 2008 17:14

zé obrigado pelo lindo. veja as rotinas que usava pra inicializar e escrever.
esta forma foi usada pois os bits foram ligados deste jeito meio lôco. direto no port é mais mió.
no entanto note o + importante +- 13mS entre cada escrita de byte. Na inicialização deixe +- isso.
Obs: display a 4 bits

Código: Selecionar todos
#define LCD_DB7 P26
#define LCD_DB6 P27
#define LCD_DB5 P24
#define LCD_DB4 P25
#define LCD_E P16
#define LCD_RS P15
#define LCD_STROBE LCD_E=1;LCD_E=0
//1000 =~ 13mS xtal 4MHz
void delay(unsigned int t)
{
    while(--t);
}

void lcd_write(unsigned char c)
{
ACC=c;
        LCD_DB7=ACC7;
        LCD_DB6=ACC6;
        LCD_DB5=ACC5;
        LCD_DB4=ACC4;
   LCD_STROBE;
        LCD_DB7=ACC3;
        LCD_DB6=ACC2;
        LCD_DB5=ACC1;
        LCD_DB4=ACC0;
   LCD_STROBE;
   
        delay(1000); // alguns mS
}

tenho rotinas de init, escrever textos e números caso necessite.
abrç
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Maurício » 01 Jul 2008 23:03

Salve, pessoal!

Aí, lellis! Quando eu te elogio vc acha que eu tou te zuando. Né, não! Tá vendo! Até o Iran té achou lindão ( blearghhhhhh!!! ).
Eu acho que vc tá no mesmo patamar, ou até num patamar superior do que aquele cara que apareceu por aqui dizendo ser de uma tal de associação pela beleza mundial, um negócio assim, não lembro mais!
É verdade, cara! Tú tem que por na cabeça que tú é lindão mesmo! E ponto!

É o seguinte. Quando vc passa para uma função um ponteiro, usando o modificador CONST, não significa que vc está passando pra função, um dado que está armazenado em ROM, não!

O modificador CONST, nesse caso, impede a função, de alterar os dados que o ponteiro aponta, quer dizer, como somente por ponteiro vc pode alterar um dado externo, usando CONST vc simplesmente impede que esse dado seja alterado fora da função. Se tentar, o compilador vai gritar.

Pra armazenar um dado na ROM do 8051, no Keil, é usado o especificador de área CODE, p. ex:

Código: Selecionar todos
char code string_ROM[] = "MENU";
char string_RAM[] = "TESTE";
const char string_constante[] = "IMUTAVEL"; // imutável foi bom, vai dizer que não? eheheheheh


string_ROM é armazenada na flash (ROM).
string_RAM é armazenada na RAM.
E string_constante, pode OU NÃO ser armazenada na ROM, depende se o compilador alocar espaço na RAM. Se ele conseguir, vai na RAM, senão, vai na flash, belê?

Lembrando que ponteiro pra flash ocupa 16bits e ponteiro pra RAM ocupa 8 bits. Ponteiro de RAM é mais rápido.

Iran!

Baixa os exemplos de códigos do meu livro no site da Érica:

http://www.editoraerica.com.br/download ... troladores

Os exemplos são pra comunicação em quatro bits. Só que eu uso RW pra ver se o LCD já está desocupado, e o do site, o LCD só é usado para escrever.
Experimenta lá.

[]'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 ze » 02 Jul 2008 08:02

mauricinho, adorei você confirmar minha beleza! mesmo vindo de um eminho feio! rs

você pode estar certo. Acho que confundi com o que diz o manual do hitech picc18:

"String constants or string literals are enclosed by double quote characters “ ” “, for example ”hello world”. The type of string constants is const char * and the strings are stored in ROM. Assigning a string constant to a non-const char pointer will generate a warning from the compiler. For example:
char * cp = ”one”; // ”one” in ROM, produces warning
const char * ccp = ”two”; // ”two” in ROM
char ca [] = ”two”; // ”two” different to the above
A non-const array initialised with a string, for example the last statement in the above example, produces an array in RAM which is initialised at startup time with the string ”two” (copied from ROM), whereas a constant string used in other contexts represents an unnamed const-qualified array, accessed
directly in ROM."

const é bão pra fazer tabela.

veja 1 função sugerida pelo hitech c (e melhorada por mim) pra escrever no display
Código: Selecionar todos
void msgdsp(unsigned char l,unsigned char c,const char * s)
{
LCD_RS=0;   //comandos
lcd_write(l+c);
LCD_RS = 1;   // caracteres
while(*s) lcd_write(*s++);
}


pra usar:
msgdsp(0x80,0,"na primeira linha");

qual seria o objetivo do qualificador const nela mesmo? uso isso há décadas sem entender direito...(na verdade não importa muito)
abrçs......
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Maurício » 02 Jul 2008 21:35

Kracas, lellis!! Tou ficando cansado, cara! Sério, mesmo, ehehehehehehehehe

Vou tentar te explicar pela última vez!!

EMO, nunca foi o masculino de EMA. Tá bom isso? Vc entendeu?
Se vc observa uma EMA, macho, vc nunca vai falar: -Olha! Que EMO bonito! Entendeu? EMA é EMA, pô! ufa!

EMO é uma subespécie da raça HUMANA!!! Criada por meia dúzia de manés ingleses, que estando no fio da navalha (aquela posição onde o cara "tem dúvidas" e não sabe se pula pra cá, ou se pula pra lá), criaram essa M, aí!!! E se nessa idade o cara tem "dúvidas", eu acho que ele devia mesmo é pular pro lado de lá! eheheheheheeh

O emo é aquele que quando vê o sol nascer, chora!
Quando vê uma formiga carregando uma folha, chora!
Quando leva um tropicão (e levar tropicão é bem coisa de emo, mesmo), chora!
Quando vê o time do coração perder, chora! Eu não choro quando a Seleção (o SPFC, ÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊÊ), perde! Isso é coisa de EMO!!

Aqui, alguns exemplos de EMOs, pra ver se a coisa ficou clara, agora:

http://br.youtube.com/watch?v=GDS0KWAG_hQ

http://br.youtube.com/watch?v=fD7o74Hwq1g

http://br.youtube.com/watch?v=OATq8YrIz-c

Esses, são alguns exemplos de E-M-O-S, EMOS!
Tendeu, agora?

[]'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 Maurício » 02 Jul 2008 21:37

lellis escreveu:qual seria o objetivo do qualificador const nela mesmo? uso isso há décadas sem entender direito...(na verdade não importa muito)
abrçs......


É como eu disse aí em cima, mas, como "na verdade não importa muito", então, não são necessárias mais explicações.

[]'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 Iran » 03 Jul 2008 01:26

Maurício, Lelis, consegui fazer funcionar, Muito Grato a vcs.

Zé Iran.
Avatar do usuário
Iran
Word
 
Mensagens: 558
Registrado em: 16 Out 2006 18:10
Localização: Imperatriz - MA

Mensagempor ze » 03 Jul 2008 08:23

maurício, pela explicação do C (+1) agradeço de verdade afinal sou um eterno iniciante. até hoje num entendo direito struct e union tanto é que nunca usei. só ctrl-c/ctrl-v sem entender.(na verdade num importa muito).

------apagável---------
então tu és um dissidente da espécie? é que achei seu avatar (você?) tão bunitinho, uma fofura, lindinho, e posso ter confundido por não ler o manual direito. tudo bem que emo não é o marido da ema (descobri graças a você!!wowww!), mas que seu avatar é filhote de ema, ah isso é!! (google imagens "ema". grande família!!). será que la no fundo você..... calma, calma, calma, num precisa mudar. mantenha-se firme nas suas convicções. rs. nem precisava dizer que timeéteu né bambino.
relaxa, fio!!!afinal amanhã é sexta!!! que sua vida seja cheia de momentos de sexta às 17:30!!! (sonho de peão pobre = eu)
não comente plz , vou apagar ainda hoje, afinal aqui não é o boteco. não sujEMOs o tópico.
obs: bela tentativa de provar que é macho tchê!!!! rsrsrs
(+1) aula de zoologia/auto biografia
zé, estou tão emocionado por ter conseguido. snif!!
abrç!!!!
------apagável---------

zé, sucessos!!!!
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Mensagempor Maurício » 04 Jul 2008 04:10

Falou, hein!! kkkkkkkkkkkkkkkkkkkkkkkk

Mas que chorar na grade é coisa de EMO! Ah! isso, é!

Experimenta esse código aqui. Eu rodei no DEVC, mas, adaptando, dá pra rodar em compilador de MCU.

Se vc tirar o comentário da linha onde a string deveria ser alterada, na função nao_altera-string, o compilador nem vai permitir compilar o programa.

As duas rotinas são iguais!

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

//========   PROTÓTIPOS ============
void altera_string ( char *string );
void nao_altera_string ( char const *string );

//===============================
void altera_string ( char *string )
{
   char texto[ ] = "MENSAGEM2";

   strcpy ( string, texto );
}

//===============================
void nao_altera_string ( char const *string )
{
   char texto [ ] = "MENSAGEM3";

//   strcpy ( string, texto );
}

//===============================
int main ( void )
{
   #define MENSAGEM   "MENSAGEM1"
   char string_inicial [ ] = MENSAGEM;

   printf ("STRING ANTES DA CHAMADA DE ALTERA_STRING: %s\n", string_inicial );
    altera_string ( string_inicial );
   printf ("STRING APOS CHAMADA DE ALTERA_STRING: %s\n", string_inicial );
   strcpy ( string_inicial, MENSAGEM );
   printf ( "STRING REINICIALIZADA: %s\n", string_inicial );

   printf ("STRING ANTES DA CHAMADA DE NAO_ALTERA_STRING: %s\n", string_inicial );
   nao_altera_string ( string_inicial );
   printf ("STRING APOS CHAMADA DE NAO_ALTERA_STRING: %s\n", string_inicial );

    system ( "pause" );
   return 1;
}



Qualquer coisa, tamos aí!

[]'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 ze » 04 Jul 2008 08:04

você dá prum bom professor!!!! rs.

ah, só pra concluir com relação aos nossos amigos: prefiro ser amigo desta subespécie que se emociona com um raio de sol à ser de uma superespécie que destrói uma vida com uma barra de ferro por causa de um raio de farol. que raios! não os discrimine plz. são nossos irmãos de caminhada. por isso eu digo: sou seu amigo.
parEMOs por aqui né. vai que contagia...rs

hoje é um dia especial! sexta super! e daqui a pôco: 17:30!!!!!!!!!!!!! tenho um compromisso com um balcão. (vim de ônibus)
} //por mim fim
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32


Voltar para 8051

Quem está online

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

x