Ecran 3.95" avec driver ST7796S fonctionne sur Uno mais pas sur Mega

Bonjour,

Je rencontre aussi un problème avec un écran 3.95 équipée du driver ST7796S utiliser sur un méga 2560

J'ai acheter cet écran ici:

https://fr.aliexpress.com/item/33057452144.html?spm=a2g0s.9042311.0.0.27426c37FblNPT

Tout les exemples de de cette lib fonctionne sur Uno mais seul le premier exemple fonctionne sur méga:

http://www.lcdwiki.com/index.php?title=3.95inch_Arduino_Display-UNO&oldid=3318

Avez vous une idée de la raison? Le Pinout du méga sont identique au uno. Sauf le port SPI, mais la lib est indiquée compatible UNO/MEGA dans les commentaires

* File                : clear_Screen.ino
* Hardware Environment: Arduino UNO&Mega2560
* Build Environment   : Arduino

*Set the pins to the correct ones for your development shield or breakout board.
*This demo use the BREAKOUT BOARD only and use these 8bit data lines to the LCD,
*pin usage as follow:
*                  LCD_CS  LCD_CD  LCD_WR  LCD_RD  LCD_RST  SD_SS  SD_DI  SD_DO  SD_SCK 
*     Arduino Uno    A3      A2      A1      A0      A4      10     11     12      13                            
*Arduino Mega2560    A3      A2      A1      A0      A4      10     11     12      13                           

*                  LCD_D0  LCD_D1  LCD_D2  LCD_D3  LCD_D4  LCD_D5  LCD_D6  LCD_D7  
*     Arduino Uno    8       9       2       3       4       5       6       7
*Arduino Mega2560    8       9       2       3       4       5       6       7

Pouvez vous m'aider à comprendre pourquoi ça ne fonctionne pas sur Méga?

c'est louche

*                  LCD_CS  LCD_CD  LCD_WR  LCD_RD  LCD_RST  SD_SS  SD_DI  SD_DO  SD_SCK 
*     Arduino Uno    A3      A2      A1      A0      A4      10     11     12      13                            
*Arduino Mega2560    A3      A2      A1      A0      A4      [color=red]10     11     12      13[/color]

les lignes SD_SS, SD_DI, SD_DO, SD_SCK en 10,11,12,13 sur UNO correspondent bien au SPI (SS, MOSI, MISO, SCK) mais le SPI n'est pas sur ces pins là sur MEGA (53, 51, 50, 52)

Donc soit ils ont un SPI logiciel, soit ce n'est pas branché sur les bonnes pins.

essayez en pliant un tout petit peu les pins pour qu'elle n'aille pas s'enficher dans 10...13 quand vous emboîtez le module et mettez un petit fil Dupont femelle male qui va vers 53, 51, 50, 52

Cela ne change rien, le spi ne semble utilisé que pour la carte SD

J'ai un écran similaire (même brochage, mêmes fonctions sur les pins) mais avec une autre bibliothèque.

Cela ne change rien, le spi ne semble utilisé que pour la carte SD

Effectivement tant que l'on utilise pas la SD cela devrait fonctionner. C'est le cas des premiers programmes d'exemples.

Il faudrait fouiller dans la bibliothèque, car le premier exemple utilise le nom des pins en dur dans l'exemple, on y lit:

void Lcd_Writ_Bus(unsigned char d)
{
  PORTH &= ~(0x78);
  PORTH |= ((d&0xC0) >> 3) | ((d&0x3) << 5);
  PORTE &= ~(0x38);
  PORTE |= ((d & 0xC) << 2) | ((d & 0x20) >> 2);
  PORTG &= ~(0x20);
  PORTG |= (d & 0x10) << 1;   
 *(portOutputRegister(digitalPinToPort(LCD_WR))) &=  ~digitalPinToBitMask(LCD_WR);
 *(portOutputRegister(digitalPinToPort(LCD_WR)))|=  digitalPinToBitMask(LCD_WR);
}

et ce premier exemple n'a pas d'include

Pour les autres exemples la définition des pins se fait par la bibliothèque et on appelle la bibliothèque par

#include <LCDWIKI_GUI.h> //Core graphics library
#include <LCDWIKI_KBV.h> //Hardware-specific library

Dans leur bibliothèque, qui semble fortement inspirée de celle d'Adafruit, ils y a bien la distinction UNO ou MEGA.

Donc soit ils ont un SPI logiciel, soit ce n'est pas branché sur les bonnes pins.

C'est une erreur de la documentation. Le SPI est matériel.

Voir dans leur bibliothèque, c'est possible, si j'ai le temps d'y jouer, mais je suis sûr d'y perdre plusieurs heures! Je suis quasi certain que cela vient de là, sinon le premier exemple ne fonctionnerait pas. J'ai déjà eu exactement le même problème avec Adafruit.

Je viens de tester la bibliothèque avec un écran différent mais avec le même brochage, elle fonctionne.

Si c'est bien celle qui provient du premier lien. Bien qu'ils disent de configurer la bibliothèque, il me semble qu'elle est configurée correctement pour ton écran. Tu n'a rien changé dans les fichiers?

Non je n'ai rien changer sur cet lib, je n'ai fais que poser le shild sur un Mega, seul le premier exemple à fonctionné. Je suis en train de tester une autre lib la MCUFRIEND_kbv. Il faut y apporter de petite modif pour qu'elle fonctionne avec ce driver.
Il faut aussi utiliser un emulateur de SPI pour faire fonctionner la carte SD, mais ça marche.

C'est dommage que cette lib ne fonctionne pas, elle à plein d'exemples intéressant. je trouve ça vraiment étrange que ça ne fonctionne que sur UNO...

C'est effectivement étrange car cela ne devrait pas venir de l'écran, sinon cela ne fonctionnerait pas pour la Uno, ni de la Mega, sinon cela ne fonctionnerait pas chez moi...

Il faut aussi utiliser un emulateur de SPI pour faire fonctionner la carte SD, mais ça marche.

Pour utiliser la Mega, il vaut mieux utiliser le SPI matériel, cela va plus vite, et occupe moins de code. Comme indique J-M-L:

les lignes SD_SS, SD_DI, SD_DO, SD_SCK en 10,11,12,13 sur UNO correspondent bien au SPI (SS, MOSI, MISO, SCK) mais le SPI n'est pas sur ces pins là sur MEGA (53, 51, 50, 52)

C'est ce que j'ai fait quand j'ai testé les librairies graphiques.

quand je regarde la doc de LCDWIKI_KBV.h je vois cela pour le mode 16 bits parallèle sur MEGA

quand je regarde la doc de LCDWIKI_KBV.h je vois cela pour le mode 16 bits parallèle sur MEGA

La bibliothèque permet d'utiliser une dizaine de drivers, plusieurs configurations. Mais dans le cas de l'afficheur de MerlinPINET , le seul mode possible est le mode 8 bits. LCDWIKI_KBV.h permet le mode 8 bits sur un Mega, j'ai fait l'essai.

Ok