Il codice di Arduino e' la prima cosa che ho provato e non funziona. Io ho fatto cosi': ho preso il set di codici di inizializzazione di Arduino per quel display e ho mantenuto le routine di SendCmd e SendData che gia' funzionavano per i TFT con ILI9325 e ILI9328. Il pinout del connettore e' identico, sono connettori a 40 pin dove c' e' anche il touch screen e la SD Card (e quelli funzionano). RD e WR li lascio a 1 di default e poi per inviare i comandi faccio la sequenza RS=0, CS=0, data[0..15]=comando, WR=0, WR=1, CS=1. Per i dati invece la stessa cosa ma con RS=1. Penso che la differenza sia che l'inizializzazione degli ILI... usa comandi e dati a 16 bit, il SSD1963 invece a 8 bit. Ho provato a fare una mia conversione raggruppando i dati da trasmettere per farli diventare a 16 bit ma non va. Esiste una sequenza di inizializzazione per bus a 16?
void _TFTWriteCmd(command)
unsigned short command;
{
TFT_RS0; TFT_CS0;
TFT_SETDATA16(command);
TFT_WR0; TFT_WR1; TFT_CS1;
}
void _TFTWriteData(data)
unsigned short data;
{
TFT_RS1; TFT_CS0;
TFT_SETDATA16(data);
TFT_WR0; TFT_WR1; TFT_CS1;
}
void _TFTCommand(command,data) // Per comodita' raggruppa command e data
unsigned short command,data;
{
_TFTWriteCmd(command);
_TFTWriteData(data);
}
// L'inizializzazione del SSD1963 inizia cosi':
_TFTWriteCmd(0x00E2); //PLL multiplier, set PLL clock to 120M
_TFTWriteData(0x002d); //N=0x36 for 6.5M, 0x23 for 10M crystal
_TFTWriteData(0x0002);
_TFTWriteData(0x0004);
...
// Sono tutti valori minori di 0xFF, mi fa pensare ad un bus a 8 bit
...
...
...
ecc...
// E questo e' l'inizio di quella che funziona sugli ILI9325/ILI9328
_TFTCommand(TFT_COMMANDS_DRIVEROUTPUTCONTROL1,0x0100); // Driver Output Control Register (R01h)
_TFTCommand(TFT_COMMANDS_TFTDRIVINGCONTROL,0x0700); // TFT Driving Waveform Control (R02h)
_TFTCommand(TFT_COMMANDS_ENTRYMODE,0x1030); // Entry Mode (R03h)
_TFTCommand(TFT_COMMANDS_DISPLAYCONTROL2,0x0302);
// Sono tutti valori maggiori di 0xFF, infatti funzionano correttamente sul mio bus a 16 bit