Hi, ich habe hier ein LCD-Grafik-Display mit 2 SED1520 Controllern von Electronic Assembly. Typ: EA DIP122-5 Das ganze wird mit einem ATMEGA32 angesteuert. Ich bin so weit, dass beide Displayhälften Müll anzeigen. Ich bekomme einfach keine gültigen Daten reingeschrieben. Wenn ich ganz viele sendDatas hintereinander aufrufe, dann erscheinen tatsächlich ein paar der gesendeten Daten auf dem Display, aber nie die ersten, die ich sende, sondern die, die ich später gesendet habe.
Als RESET generiere ich eine steigende Flanke, damit die Controller im
68er Mode laufen. dann führe ich die Reset-Routine aus:sendCfg(b11100010,cntr); //Software Reset sendCfg(b10101110,cntr); //Display aus sendCfg(b10101001,cntr); //1/32 Duty cycle sendCfg(b11000000,cntr); //ramline 0 sendCfg(b10111000,cntr); //Page = 0 sendCfg(b10100100,cntr); //static off sendCfg(b10100001,cntr); //ADC normal sendCfg(b10101111,cntr); //Display Ein
Diese scheint zu funktionieren, weil ich Displayhälften an und ausschalten kann.
Hier die Codeschnipsel zur Datenübertragung selbst: sendCfg sendet Konfigurationdaten sendData sendet Pixeldaten
-------------------------------------------------------------------------- void sendCfg(UCHAR cfg, UCHAR cntr) { if (cntr==1) { waitForNotBusy(); //einfache Warteschleife cbi(PORTC,A0); cbi(PORTC,RW); PORTB=cfg; //Configdaten auf Ausgang DDRB=0xFF; //Ausgang aktivieren swait(); //kurz warten sbi(PORTC,E1); //Enable Controller1 ein swait(); //kurz warten cbi(PORTC,E1); //Enable Controller1 aus DDRB=0x00; //Ausgang deaktivieren } else ... }
void sendData(UCHAR Data, UCHAR cntr) { if (cntr==1) { waitForNotBusy(); //einfache Warteschleife sbi(PORTC,A0); cbi(PORTC,RW); PORTB=Data; //Daten auf Ausgang DDRB=0xFF; //als Ausgänge beschalten swait(); //kurz warten sbi(PORTC,E1); //Enable einschalten swait(); //kurz warten cbi(PORTC,E1); //Enable ausschalten cbi(PORTC,A0); DDRB=0x00; //als Eingang beschalten } else ... }
--------------------------------------------------------------------------
Ob Ihr mir helfen könnt ?
Michael