Hi,
ich hab mir auch noch mal das Datenblatt angeschaut und komme auf das gleiche Ergebnis wie damaltor und raid_ox.
Hier noch mal mein Beispielcode für das EA T123. Initialisierung und Textausgabe in Subroutinen. Delay auf 1ms reduziert. Status LED sollte eine halbe Sekunde gelb leuchten, wenn Init erfolgreich war, dann grün. Rot bei Fehler.
Code:
#include <avr/io.h>
#include "i2cmaster.h"
#include "asuro.h"
#define Display 0x74 // device address of Display, see datasheet
int lcd_init(void)
{
int ret=0;
Msleep(500);
ret = i2c_start(Display+I2C_WRITE); //hier wird der i2c bus gestartet und die adresse
if ( ret ) //geschrieben
{
i2c_stop(); //sollte das nicht gehn, abbrechen
return -1;
}
i2c_write(0x00); //controll byte (muss gesendet werden laut datenblatt)
Msleep(1);
i2c_write(0x2C); //die nächsten bitfolgen bzw werte sind aus dem daten-
Msleep(1); //blatt kopiert. sollte eigentlich das display
i2c_write(0x0E); //einschalten und den corsur nach oben
Msleep(1); //links setzen.
i2c_write(0x06); //einzige änderung: da nicht dual power sondern
nicht
//+5V und -5V) habe ich das G-bit auf 1 geändert.
//single supply genutzt wird (also nur +5V und gnd und
i2c_stop();
Msleep(10);
return 0;
}
int lcd_write(char *text)
{
int ret=0;
unsigned char i = 0;
ret = i2c_start(Display+I2C_WRITE); //hier wird der i2c bus gestartet und die adresse
if ( ret ) //geschrieben
{
i2c_stop(); //sollte das nicht gehn, abbrechen
return -1;
}
i2c_write(0x40); //controll byte (muss gesendet werden laut datenblatt)
while(text[i] != 0)
{
i2c_write(text[i++]);
Msleep(1);
}
i2c_stop();
return 0;
}
int main(void)
{
int ret;
Init();
i2c_init();
ret = lcd_init(); // LCD Initialisieren
if (ret == 0)
{
StatusLED(YELLOW);
ret = lcd_write("Test"); // LCD Textausgabe
if (ret == 0)
{
Msleep(500);
StatusLED(GREEN);
}
else
StatusLED(RED); // Fehler beim LCD schreiben
}
else
StatusLED(RED); // Fehler beim LCD init
while(1);
return 0;
}
Ansonsten zur Hardware noch den Tip, am Kontrastregler drehen. Die Kontrastspannung VEE sollte ca 1V oder darunter betragen.