Connexion LCD Graphique à base de T6963C sur Mega 2560

Bonjour à tous,

je suis en train de chercher comment cabler un écran LCD Graphique 240*128
L’écran est un Trully dont voici les specs et la datasheet : MSP-G240128DBCW-2N
Le controlleur est un T6963C

Voici le montage dans l’état actuel :

Pour les connexion j’ai repris celle de ce site en modifiant pour le mega : http://domoduino.tumblr.com/post/217919645/sources-t6963c

Data : 0->7 : digital pins 22->29
Ctrl : WR : analog pin 0
Ctrl : RD : analog pin 1
Ctrl : CE : analog pin 2
Ctrl : CD : analog pin 3
Ctrl : RESET : analog pin 4
Ctrl : FS : analog pin 5

J’ai aussi récupéré les lib du site domoduino, elle se compose de : GDt6963c.cpp et GDt6963c.h
Ainsi que mon .ino : Lcd_Graph.ino

Maintenant je me demande comment configurer mon .h et si j’ai bien choisit mes ports…

J’ai donc branché les ports DATA 0->7 sur les ports DIGITAL 22 à 29 et les ports de controle sur les pins PWM de 0 à 5

// data port
#define GLCD_DATA_PORT1 				PORTC
#define GLCD_DATA_PIN1					PINC
#define GLCD_DATA_DDR1					DDRC
#define GLCD_DATA_SHIFT1				<<2
#define GLCD_DATA_RSHIFT1				>>2
#define GLCD_DATA_MASK1					0xFC

#define GLCD_DATA_PORT2 				PORTB
#define GLCD_DATA_PIN2					PINB
#define GLCD_DATA_DDR2					DDRB
#define GLCD_DATA_SHIFT2				>>6
#define GLCD_DATA_RSHIFT2				<<6
#define GLCD_DATA_MASK2					0x03

// control port
#define GLCD_CTRL_PORT					PORTA
#define GLCD_CTRL_PIN					PINA
#define GLCD_CTRL_DDR					DDRA

// control signals
#define GLCD_WR						0
#define GLCD_RD						1
#define GLCD_CE						2
#define GLCD_CD						3
#define GLCD_RESET					4
#define GLCD_FS						5

Et donc rien ne s’affiche… aussi j’ai encore un doute sur la resistance utiliée pour le contraste, j’ai un 4,7KOhm il me semble que c’est beaucoup mais vu que c’est de l’ajustable je passe forcement par une valeur correcte…
J’ai aussi tenté d’autres port avec ce que je trouvais au fil des recherche, autant pour un Arduino UNO j’arrive à bien localiser les PORTA, B, C, D etc… autant sur le mega je suis perdu…

Les sites d’info que j’ai pu trouver :

http://forum.arduino.cc/index.php/topic,25799.0.html
http://domoduino.tumblr.com/post/217919645/sources-t6963c

Donc est ce que vous me conseillez de changer de ports ?
Comment configurer le .h avec les bons ports ?
Est ce qu’il y a moyen de vérifier que la resistance ajustable est correcte ?

Merci par avance :wink:

SAlut,

Si ça n’a pas changé entre la 1280 et la 2560 alors tes ports data sont mauvais.
22-29 = PORTA

Du coup à mon avis :

#define GLCD_DATA_SHIFT1				<<0
#define GLCD_DATA_RSHIFT1				>>0
#define GLCD_DATA_MASK1				0xFF

Pareil pour les pin de commandes, mais j’ai pas le temps d’étudier la lib la pour voir son fonctionnement, mais je pense que c’est pareil du coup il faut tout mettre sur un même port, le C par exemple.

Et desactiver le data_port2 car on a déjà les 8 bits de données sur le portA

Voir :

effectivement, il semble que tu ustilises le port A. cette lib fait appel à l’écriture directe sur les ports, il faut donc que tu saches exactement sur quels ports tu branches ton LCD, mais aussi à quels bits du port ça correspond. De ce côté, la team arduino ne t’aidera pas, il faut que tu regardes de plus près à quel port correspond quelle pin etc etc.

J’ai fait un récapitulatif du câblage de la méga2560 qui te donne la correspondance des nums de pin sur la carte et les ports du µP (par exemple, F4 correspond au bit 4 du port F, sachant que les bits sont numérotés de 0 à 7…), voir fichier joint à ce post.

Arduino_Mega2560.pdf (27.9 KB)

Ok merci pour vos infos :wink:

Une chose que je ne comprends pas trop c'est la relation entre port et pin... ok il faut lui dire sur quelles pins sont connecté les data du lcd, mais du coup pourquoi le port intervient ? Je me dit que le port est pas un ensemble de pin non ?

Il faut voir comment ça marche "à la base" : Arduino est une surcouche, le fonctionnement "normal" d'un microcontroleur c'est avec des port de 8 pins ou moins, numérotés du coup de 0 à 7. Donc en fait un pin est défini par son port + 1 numéro de 0 à 7 : A0, A1, A2 ... A7, B0, B1, B2 ... B7 .... C'est la surchouche Arduino qui crée une numérotation plus "friendly" mais beaucoup plus lente aussi, enfin tout est relatif, mais entre un digitalWrite() et une manipulation des ports directe y'a un monde (sur le sujet : Arduino Reference - Arduino Reference)

Juste pour éviter la confusion :

B@tto:
Il faut voir comment ça marche “à la base” : Arduino est une surcouche, le fonctionnement “normal” d’un microcontroleur c’est avec des port de 8 pins ou moins, numérotés du coup de 0 à 7. Donc en fait un pin est défini par son port + 1 numéro de 0 à 7 : A0, A1, A2 … A7, B0, B1, B2 … B7 … C’est la surchouche Arduino qui crée une numérotation plus “friendly” mais beaucoup plus lente aussi, enfin tout est relatif, mais entre un digitalWrite() et une manipulation des ports directe y’a un monde (sur le sujet : http://www.arduino.cc/en/Reference/PortManipulation)

Mieux vaut parler de bits, et laissons l’appellation “pin” au monde arduino… (ce n’est pas contre toi b@tto, hein :wink: )

Pour illustrer la chose sur un UNO, faire un

PORTD = 255;

ou un

for(int i=0; i<8; i++) digitalWrite(i, HIGH);

revient exactement au même, sauf que le premier va à peu près 200 fois plus vite dans le meilleur des cas, et s’il faut écrire une valeur autre que 255 ou 0, alors le premier ira environ 250 à 300 fois plus vite… et sur un mega comme dans ton cas, on ne sera pas loin des 400 fois plus vite…

pour mes calculs, j’avais mesuré les temps d’éxécution de “PORTD |= 1;” et “digitalWrite(0, HIGH);”, et le rapport était de 20 en faveur du premier.

d’où l’utilité de bien connaître le côté hard des µC quand on a besoin d’aller un peu vite (ou pas trop lentement). C’est mon cheval de bataille en ce moment…