Gestire TFT SSD1963 con ATMEGA

di il
2 risposte

Gestire TFT SSD1963 con ATMEGA

Ho un TFT da 4.3 pollici con chip SSD1963, risoluzione 272x480, ma non riesco in nessun modo a inizializzarlo da ATMEGA2561. Il display e' collegato con bus dati a 16 bit ma i comandi che ho trovato sono a 8 bit e non li prende (resta la videata bianca). Vorrei inizializzarlo in modalita' colore 5-6-5 (16 bit per pixel). Ho testato l'HW mettendoci un TFT ILI9325 e ovviamente i codici di inizializzazione adeguati e funziona benissimo, quindi credo che l'HW funzioni. Qualcuno sa inizializzare un SSD1963 con bus dati a 16 bit?

2 Risposte

  • Re: Gestire TFT SSD1963 con ATMEGA

  • Re: Gestire TFT SSD1963 con ATMEGA

    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
    
Devi accedere o registrarti per scrivere nel forum
2 risposte