Hi!
ich schreibe gerade an einer C-Ansteuerung für das Pollin-Display ALPS LSU7S1011A. Auf völlig unerklärliche Weise scheinen jedoch zwei Variablen, die eigentlich völlig unabhängig voneinander sind, auf das selbe Register zuzugreifen. Dadurch wird natürlich eine der Variablen überschrieben...
Hier der Quellcode:
die betreffenden Variablen sind "zaehler" und "belegung", sie greifen scheinbar beide auf Register 24 zu.Code:#include <avr/io.h> // PINBELEGUNG #define cRES 3 #define cNCS 2 #define cCS 1 #define cA0 4 #define cSCL 5 #define cSI 0 int main(void) { DDRA = 0xff; initialisierung(); SendLCDByte(0xB0,0); // page setzen (1) SendLCDByte(0x11,0); // column setzen (18) SendLCDByte(0x02,0); SendLCDByte(0xAA,1); // 10101010 in spalte schreiben SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); SendLCDByte(0xAA,1); while (1) { } } void SendLCDByte(unsigned char data, unsigned char control) { unsigned char zaehler; unsigned char belegung; belegung |= (1 << cRES); if (control>0) { belegung |= (1 << cA0); } for (zaehler=0x00; zaehler<0x08; zaehler++) { if ((data & (1 << 7))!=0) //bit 7 ist gesetzt { belegung |= (1 << cSI); } else { belegung &= (1 << cSI); } PORTA = belegung; PORTA |= (1 << cSCL); PORTA &= (1 << cSCL); data<<=1; } belegung &= (1 << cCS); belegung |= (1 << cNCS); PORTA = belegung; } void initialisierung() { PORTA = 0x00; // Reset PORTA |= (1 << cRES); SendLCDByte(0x40,0); // Start Display Line = 0 SendLCDByte(0xA1,0); // ADC = invers (gespiegelte Anzeigerichtung) SendLCDByte(0xA3,0); // LCD-Bias = 1/6 SendLCDByte(0xC0,0); // OutputStatus =0 SendLCDByte(0x2F,0); // LCD-Spannungserzeugung/Regelung ein SendLCDByte(0x8F,0); // Kontrast = mittel SendLCDByte(0xA4,0); // Displaytest aus SendLCDByte(0xAF,0); // Display ein SendLCDByte(0xA6,0); // Display normal (nicht invertiert) }
Da ich dieses Verhalten wirklich gar nicht nachvollziehen kann, bin ich für jeden Hinweis sehr dankbar!
Gruß,
Hepta







Zitieren

Lesezeichen