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:
Leider sehe ich auf dem Display gar nix. Ich müsste doch mindestens den blinkenden Curser sehen, oder?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; }
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>







Zitieren

Lesezeichen