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:
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)
}
die betreffenden Variablen sind "zaehler" und "belegung", sie greifen scheinbar beide auf Register 24 zu.

Da ich dieses Verhalten wirklich gar nicht nachvollziehen kann, bin ich für jeden Hinweis sehr dankbar!
Gruß,
Hepta