Hallo,

ich habe mal wieder ein LCD Problem.

ich habe das AV2040 Display von Conrad (4Zeilen*20Zeichen)

Hier mal mein Testcode, nur funktioniert der leider nicht.
Warum?
Code:
#include <util/delay.h>

#define RS PA5
#define RW PA6
#define E PA7

void RS_Low(void) {
	PORTA &= ~(1<<RS);
}
void RS_High(void) {
	PORTA |= (1<<RS);
}
void RW_Low(void) {
	PORTA &= ~(1<<RW);
}
void RW_High(void) {
	PORTA |= (1<<RW);
}

void busy(void) {
	char richtungC = DDRC;
	char richtungA = DDRA;
	DDRC = 0x00;
	RW_High();
	RS_Low();
	while(PINC & (1<<PINC7))	// warten solange busy
	DDRC = richtungC;
	DDRA = richtungA;
}
void enable(void) {
	PORTA |= (1<<E);
	_delay_us(1);
	PORTA &= ~(1<<E);
}
void lcd_init(void) {
	_delay_ms(30);
	RS_Low();
	RW_Low();
	DDRC = 0xFF;
	PORTC = 0b00111100;			// Function set: 2 Line Mode / Display on
	enable();
	_delay_us(500);
	PORTC = 0b00001111;			// Display on / Cursor on / Blink on
	enable();
	_delay_us(500);
	PORTC = 0b00000001;			// Display Clear
	enable();
	_delay_ms(3);
	PORTC = 0b00000110;			// Entry Mode Set: auto inkrement
	busy();	
}
void Return_Home(void) {
	RS_Low();
	RW_Low();
	DDRC = 0xFF;
	PORTC = 0b00000010;			// Return Home
	enable();
	busy();
}
void set_adr(char adr) {
	RS_Low();
	RW_Low();
	DDRC = 0xFF;
	PORTC = adr;
	PORTC |= (1<<PC7);
	enable();
	busy();
}
void put_c_adr(char adr, char c) {
	set_adr(adr);
	RS_High();
	RW_Low();
	DDRC = 0xFF;
	PORTC = c;
	enable();
	busy();
}
Kann mir das bitte jemand helfen?

Gruß