PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : LCD an Atmega8 funktioniert nicht



salle
01.11.2005, 17:30
Hallo!

Ich werd verrückt.
Mein Display will einfach nicht.
Bitte kann mir wer helfen. Ich will das Display mit 4bit-Daten ansprechen.

Danke im Vorraus
mfg Christian



/*
Displayansteuerung
2x20 Display an ATmega8
Pinbelegung: PORTD = (x,E,RS,RW,D7,D6,D5,D4)
*/

#include <avr/io.h>
#include <stdlib.h>

#define LCD_RS 5
#define LCD_E 7

void warten(int t) // Warteschleife
{
int h;
for (;t>0;t--)
{
for (h=1600;h>0;h--) {}
}
return;
}

void lcd_enable( int d )
{
PORTD = d;
PORTD |= 1<<LCD_E;
PORTD &= ~(1<<LCD_E);

}

void lcd_init( void )
{
PORTD = 0x00;

lcd_enable(0x03); // 8 bit mode
warten( 500 );

lcd_enable(0x03);
warten( 200 );

lcd_enable(0x03);
warten( 200 );

lcd_enable(0x02); // 4 bit mode
warten( 200 );

lcd_enable(0x08); // 2zeilig, 5*8
warten( 200 );

lcd_enable(0x01); // clear Display
warten( 200 );

lcd_enable(0x0F); // Disp., Cursor, blink. ein
warten( 200 );
}



void main(void) // Hauptprogramm
{
DDRD = 0xFF;
lcd_init();

}

SprinterSB
01.11.2005, 19:29
Nach dem Umstellen auf 4 Bit musst du in Nibbles senden, und zwar zuerst das HIGH, danach das LOW.

linux_80
01.11.2005, 20:50
Hallo,
ich glaub das mit den Bits passt nicht ganz zusammen, zumindest nicht mit der Bemerkung zur Pinbelegung !
ich mein RS und Enable Pin.

linux_80
01.11.2005, 20:55
Dann fällt mir noch ein, wie schnell Taktet der µC ?
die Daten des LCD werden mit fallender Flanke von Enable übernommen, dazu muss das Enable eine gewisse Zeit auch oben sein, damit es erkannt wird, bei Dir geht das, meiner Meinung, etwas zu schnell mit dem setzen und löschen.

SprinterSB
01.11.2005, 21:24
Jau, das Enable sollte etwas gehalten werden.
Die Warteschleife ist nicht so optimal, möglicherweise kloppt gcc die in die Tonne, weil da nix passiert.
Bau mal ein
asm volatile (";");
anstatt dem {} ein.

salle
02.11.2005, 08:04
Danke für die schnellen Antworten. Jetzt habe ich es geschafft.
Es war von allem etwas falsch. :-)