2 verschiedene Variablen greifen auf das selbe Register zu
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