Hallo Zusammen

Ich versuche verzweifelt ein 4*20 Zeichen LCD Display (das von Robotikhardware) auf einem Mega32, welcher mit 6MHz getacktet ist und auf dem RN-Control sitzt anzustuern.
Damit es für den Anfang einmal möglichst simpel wird verwende ich den 8-Bit breiten Bus.

Verkabel habe ich das ganze so:
Den ganzen Daten-Bus auf PORTB
RS auf PORTD Pin 0
R/W auf PORTD Pin 1
E auf PORTD Pin 2

Mein C Programm sieht bis jetzt so aus:
Code:
#include <avr/io.h>
#include "bit.h"

// config
#define F_CPU		16000000

#define CONT_DDR	DDRD
#define	CONT_PORT	PORTD
#define CONT_E		2		// Enable (fallende Flanke)
#define CONT_RS		0		// L:Befehl / H:Daten
#define	CONT_RW		1		// H:Read / L:Write
#define DATA_DDR	DDRB
#define DATA_PORT	PORTB

void sleep(void){
	int i;
	for (i=0; i<200; i++){}	
}

void sleep_long(void){
	int i,j;
	for (i=0; i<100; i++)
		for (j=0; j<100; j++){}
}

void init(void){
	CONT_DDR = 0x07;	// Ausgänge
	DATA_DDR = 0xff;	// Ausgänge
	b_setL(CONT_PORT,CONT_E);	// E nicht setzen
	b_setL(CONT_PORT,CONT_RS);	// RS nicht setzen
	b_setL(CONT_PORT,CONT_RW);	// RW nicht setzen	
	DATA_PORT = 0xff;
}

void lcd_send(uint8_t data){
	DATA_PORT = data;	
	b_setH(CONT_PORT,CONT_E);
	sleep();
	b_setL(CONT_PORT,CONT_E);
	
	DATA_PORT = 0xff;
}

void lcd_init(void){
	lcd_send(0x34);	// 8-Bit Datenlänge
	sleep_long();
	lcd_send(0x09);	// 4 Zeilen Modus
	sleep_long();	
 	lcd_send(0x0F);	// Display on, Curser on, Blink on
}

int main(void){
	init();
	lcd_init();
	
	for(;;){}
	
	return 0;	
}
Leider sehe ich auf dem Display gar nix. Ich müsste doch mindestens den blinkenden Curser sehen, oder?

Jemand eine Idee, was ich falsch mache?

cumi

<edit>
ah, ja, was ich noch vergessen habe. b_setH(b,n) setzt einfach das n-te Bit vom Byte b auf 1. b_setL auf 0.
</edit>