Bonjour à tous,
Voila depuis quelque temps que je programme mn petit projet je mettais chargé de tout dabord faire ma routine de gestion de LCD,
Proteus m'avait permis de simuler ce LCD
Hors aujourd'hui je vien de programmé mon Atmega165 et la surprise mon LCD n'affiche rien
Cette routine fonctionne en mode 8bit et avait été réalisé ultérieuremnt grace a m'enfin qui m'avait aider
Mais je vous reposte cette routine pour l'enlevé d'un doute,
Peut-il y avoir une erreur dans ce programme ????
J'espère que vous allez pouvoir m'aider,
Cordialement Paulochon
Aidez moi SVP je suis dans l'impasse et j'aimerai savoir si vous ne voyer quelque erreur notable que je n'ai pas vue#define PORT_AFFICHEUR PORTC
#define DIRECTION_PORT_AFFICHEUR DDRC
#define PORT_COMMANDE PORTA
#define DIRECTION_PORT_COMMANDE DDRA
#define val_bit(bit) (1<<bit)
#define set_bit(port,bit) port|=(1<<bit)
#define clear_bit(port,bit) port&=(~(val_bit(bit)))
#define BIT_ENABLE 1
#define BIT_RS 0
// Routine de gestion de l'afficheur LCD
unsigned char lcd_x=0, lcd_y=0;
void lcd_delay (unsigned int t)
{
while ( t -- )
_delay_loop_2(8000 /4.0); // valeur pour un quartz de 8MHz
}
void lcd_ready (void)
{
clear_bit (PORT_COMMANDE, BIT_RS);
lcd_delay(1);
}
void lcd_write_nibble (unsigned char data)
{
PORT_AFFICHEUR=data;
set_bit (PORT_COMMANDE, BIT_ENABLE);
lcd_delay(1);
clear_bit ( PORT_COMMANDE, BIT_ENABLE);
lcd_delay(1);
}
void lcd_write_data (unsigned char data)
{
unsigned char d;
lcd_write_nibble(data);
}
void lcd_gotoXY (unsigned char x, unsigned char y)
{
unsigned char base_y[2] = { 0x80, 0xc0 };
lcd_ready ();
lcd_write_data (x + base_y[y]);
lcd_x = x;
lcd_y = y;
}
void lcd_clear (void)
{
lcd_ready ();
lcd_write_data (0x0C);
lcd_ready ();
lcd_write_data (1);
lcd_ready ();
lcd_x =0;
lcd_y = 0;
}
void lcd_putchar (unsigned char c)
{
if (c == 10)
goto newline;
++lcd_x;
if (lcd_x > 16)
{
newline:
++lcd_y;
lcd_gotoXY (0, lcd_y);
if (c == 10)
return;
}
lcd_ready ();
set_bit (PORT_COMMANDE, BIT_RS);
lcd_write_data(c);
}
void lcd_puts (unsigned char * str)
{
while(* str)
{
lcd_putchar (* str);
str++;
}
}
void lcd_init (void)
{
lcd_ready();
lcd_write_data (0x38);
lcd_ready();
lcd_write_data (0x38);
lcd_write_data (6);
lcd_clear();
lcd_ready();
}
void aff_ligne0 (char * m)
{
lcd_gotoXY (0, 0);
lcd_puts (m);
}
void aff_ligne1 (char * m)
{
lcd_gotoXY (0, 1);
lcd_puts (m);
}
Merci
-----