Erinnert mich an ein Problem welches ich vor Jahren mit einem solchen graphischen Display hatte. Da kamen die Daten auch nicht da an wo sie laut Datenblatt ankommen sollten. Also habe ich einfach ausprobiert welchen Offset ich brauche damit es passt und den genommen. Ab da lief alles.
Ist das Resultat davon nicht ein Boolean? Habe ich aber nun probiert. Dann kommt garnichts mehr am LCD an.
Ich habe weiter getestet. Man kann auch folgendes als "Fix" verwenden:
PORTD &= B11011111;
"LOW" gezogen.
digitalWrite(5, LOW);
Geht auch damit noch.
muss dieses eine Bit im Voraus low ziehen?
Eigentlich sollte es dem LCD (T6963C) ja egal sein wie ich die Bits setze. Ich ziehe CE, WR und CD ja erst "High" wenn die Bits anliegen. Ich hatte auch schon ein Delay zwischen "Bits setzen" und "Statusleitungen hochziehen" eingebaut. Auch das hilft nicht. Dann wird
Du kannst auch ein mit Debugginginformationen ("gcc -g") compiliertes Objekt-File (.o) mit "objdump -S" wieder ausgeben lassen:
Allerdings liest sich das nach Deinem Posting von 11:01 Uhr doch eher nach einem Problem mit der Ansteuerung des LCD-Controllers als mit dem generierten Code.
void SendData(unsigned char aData) { digitalWrite(PIN_CD, LOW); // CD down (data) __asm__ __volatile__ ("nop\n\t"); 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); __asm__ __volatile__ ("nop\n\t"); digitalWrite(PIN_CD, HIGH); // CD up again }
Du solltest Dir mal die Signale mit einem OSZI anschauen, eventuell sind die Signalflanken zu flach. Das hatte ich gerade bei der Senderichtungsumschaltung an einer RS485.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.