Gast
#4967791
Hallo,
ich habe ein Problem mit dem im Betreff genannten Atmel bei dem ich
selber nicht zur Lösung komme.
Ich möchte ein grafisches LCD, basierend auf dem T6963C-Controller,
möglichst schnell ansteuern. Aktuell mache ich dies mit "digitalWrite",
was mir aber zu langsam geht.
Beispiel für mein "SendData":
void SendData(unsigned char aData, bool aAutoWrite = false) {
digitalWrite(PIN_CD, LOW); // CD down (data)
digitalWrite(PIN_WR, LOW); // CD & WR down
digitalWrite(PIN_CE, LOW);
ParportWriteData(aData);
digitalWrite(PIN_CE, HIGH); // CE & WR up again
digitalWrite(PIN_WR, HIGH);
digitalWrite(PIN_CD, HIGH); // CD up again
}
Hier noch mit "DigitalWrite".
Mein "ParportWriteData" sieht so aus:
void ParportWriteData(unsigned char aData) {
unsigned char maskD = B11111100;
unsigned char bitsD = aData << 2;
PORTD &= B11011111; // <<<================
PORTD = (PORTD & ~maskD) | bitsD;
unsigned char maskB = B00000011;
unsigned char bitsB = aData >> 6;
PORTB = (PORTB & ~maskB) | bitsB;
}
Das komische dabei ist, dass ich die Zeile, die ich mit "Pfeil" markiert
habe, unbedingt brauche. Das ist, nach vielen Versuchen, die minimale
Änderung, die nötig ist, dass ich alle Bits sauber rausbekomme. Ich muss
"Bit 5" auf "PORTD" immer im Voraus "LOW" ziehen. Erst danach kann ich
meine Werte tatsächlich auf den Port schreiben. Ohne diese Zeile habe
ich Zufallspixel auf dem LCD.
Mir erschließt sich aber nicht, warum das nötig ist. Hat hier vielleicht
jemand schon ähnliche Effekte gehabt und kann mir sagen was ich falsch
mache?