Afficheur LCD pour émulation DOT Matrix
Afficheur LCD
Pour écrans DMD
128 x 32
et
128 x 64
Présentation
Ce projet est directement dérivé du projet DMD3264 dont il reprend les principales fonctionnalités.
La différence principale est que l'écran n'est plus piloté par une interface "physique" DMD (connecteur 2x7), mais par une interface série (ou un port USB). Ainsi, l'écran peut être utilisé avec un émulateur comme VPinMame, ou commandé par un Arduino.
L'idée est ici, de simplement disposer d'un petit écran LCD de test ou de visualisation secondaire. Il ne s'agit en aucun cas de remplacer un écran original et encore moins de l'utiliser dans un Pincab! De même, aucune colorisation n'a été implémentée, hormis le choix d'une palette, ceci n'étant pas du tout l'objectif recherché.
En revanche, concernant la compacité et le faible coût de revient, ce projet rempli parfaitement sa mission.
Version encore plus "économique"
Comme pour le projet DMD3264, nous avons recours à l'utilisation d'un module SiPEED TANG NANO 1K, intégrant un FPGA GOWIN GW1NZ-LV1.
(矽速科技 - Silicon Speed Technology)
Mais cette fois-ci, il n'y a besoin de rien d'autre (à l'exception d'un fil à souder sur le module !).
Interface USB et série
Pour que l'utilisation du montage reste simple, nous avons opté pour un classique "VCP" (Virtual COM Port), autrement dit, une interface série. La contrepartie de cette simplicité, oblige cependant à connecter un fil entre deux broches du module.
Le module SiPEED TANG NANO 1K dispose d'un circuit BL702 relié au port USB. Celui-ci est programmé pour fournir à la fois, une interface JTAG et une interface série. L'interface JTAG est connectée en interne sur le FPGA, tandis que l'interface série sort sur les broches séparées (23, 26 et 27 du module). Pour ce qui nous concerne, la broche délivrant le signal TX est celle marquée 26 (BL_IO26).
Sur le FPGA, la broche qui a été programmée pour l'entrée série est la 39. Il convient donc de souder un fil pour relier les broches 26 et 39.
Veillez à ne pas utiliser un fil trop gros, qui pourrait bloquer l'entrée du connecteur FPC et empêcher la connexion de la nappe du LCD.
Si on désire utiliser une interface série externe (par exemple un Arduino), il suffit d'injecter le signal sur la broche 39.
ATTENTION: la tension admissible par le FPGA est de 3,3 Volts. Souvent, les modules de type "Arduino" utilisent du 5 Volts et il convient alors d'intercaler un adaptateur de niveau. Celui-ci pourra par exemple, être un simple CD4050, comme utilisé dans le projet DMD3264.
Nous avons étudié la possibilité d'utiliser la connexion JTAG interne entre le BL702 et le FPGA, mais cette option n'a finalement pas été retenue. En effet, si cette solution présente l'avantage de ne pas avoir de fil à souder, elle exclue de fait, la possibilité d'injecter un signal externe. D'autre part, elle oblige à utiliser l'API D2XX (FTDI) et le protocole MPSSE. Cela implique également l'utilisation d'une DLL supplémentaire et une programmation plus complexe. Tout bien pesé, la solution VCP est bien plus pratique et ouverte, même s'il faut ajouter un fil entre les broches 26 et 39.
Vidéos de démonstration
Elles ont été réalisées sur un écran 5" (les défauts et reflets proviennent du capteur tactile et de la feuille de protection laissée en place) et les images sont produites par l'émulateur VPinMame.
En mode 128 x 32 :
VPinMame ne produisant pas (pas encore!) d'image au format 128 x 64, nous avons utilisé une version légérement modifiée de notre DLL, afin d'envoyer au module un double buffer. L'image 128 x 32 apparait donc ici dédoublée, mais le module traite bien une image 128 x 64.
En mode 128 x 64 :
Documentation
Pour plus de détails sur l'installation, le fonctionnement du module et le protocole utilisé, se reporter à la documentation (multilingue) :
Français |
Chinois (简体中文) |
Anglais |
Allemand |
Implantation et réalisation
La position du connecteur FPC et de la nappe Kapton du LCD sont assez contraignantes pour l'implantation de l'interface. Il faut en effet connecter l'écran au module, tout en gardant l'accès aux boutons et la visibilité de la LED. La solution retenue est de fixer le tout au dos du LCD, ce qui a l'avantage d'être très compact. La nappe Kapton est immobilisée au dos du LCD par du ruban adhésif, ce qui la protège et l'isole.
Le module TANG NANO 1K peut ainsi venir se brancher dans le bon sens.
La méthode la plus simple pour fixer le module au dos de l'écran est tout simplement de le coller. Une autre solution tout aussi éfficace est d'utiliser du scotch "mousse" double-face.
Fichiers à programmer
Le logiciel de programmation du FPGA GOWIN requiert deux fichiers :
- Un fichier ".fs" contenant l'architecture synthétisée du composant.
- Un fichier ".fi" pour l'initialisation de la mémoire flash du FPGA.
(高云半导体 - GOWIN Semiconductor Corp.)
Programmation du FGPA avec GOWIN Programmer :
Pour les curieux, sachez que les deux fichiers ".fs" et ".fi" sont du type "texte" et sont parfaitement lisibles avec un éditeur. Le fichier ".fi" contient la définition des palettes ainsi que quelques paramètres.
Les deux fichiers ".fs" et ".fi" sont livrés dans une archive (.zip) à décompacter.
DMD 128 x 32 LCD 800 x 480 |
DMD 128 x 64 LCD 800 x 480 |
DLL pour VPinMame
Lors du lancement d'un jeu dans VPinMame, on peut spécifier l'utilisation d'un écran externe en cochant la case "Use external DMD (dll)". L'émulateur va alors utiliser une DLL "DmdDevice.dll" (ou "DmdDevice64.dll" ) pour communiquer avec l'écran PinLCD.
Télechargez et décompactez l'archive zip ci-dessous. Elle contient deux fichiers ".dll" qui devront être placés dans le répertoire de VPinMame.
VPinMame DLL |
Quelques remarques :
- La DLL fonctionne quelle que soit la version (128x32 ou 128x64) du module raccordé.
- Celui-ci est reconnu automatiquement, il n'y a rien à configurer.
- La résolution utilisée par le jeu doit être en adéquation avec celle de PinLCD (128x32 ou 128x64). Les jeux dotés d'un affichage numérique, alpha, dot 128x16, 192x64 ou 256x64 ne sont pas compatibles.
- Les niveaux de luminosité sont au nombre de quatre en 128x32 (0%, 33%, 66%, 100%) et de trois en 128x64 (0%, 50%, 100%). Une transposition est réalisée lorsque le jeu utilise plus de niveaux.
- La version 128x64 est expérimentale (VPinMame ne gére pas encore cette résolution).
Affichage simultané sur VPinMame et PinLCD:
Exemple de pilotage externe par un Arduino
L'injection d'un signal provenant d'une source externe n'est pas très compliquée à mettre en oeuvre. Voici un exemple utilisant un petit Arduino Nano (ATMega 328P) et qui affiche des images stockées dans sa mémoire interne.
L'Arduino Nano utilisant des signaux en 5V, il est impératif d'intercaler un convertisseur de tension. Un simple CD4050 suffira dont on utilisera qu'une seule sortie.
Le module SiPEED TANG NANO 1K devra être alimenté en 5 Volts. Pour des raisons pratiques, ici, il sera directement alimenté par sa prise USB-C. On prélevera le 3.3 Volts pour alimenter le CD4050, et on injectera le signal série en broche 39. Bien sûr, il ne faut pas oublier de connecter les masses.
The connections to the CD4050 are really minimal and on the Arduino Nano one will only need to connect ground and the TX serial output signal.
Démonstration sur Arduino
en 128x32 et 128x64:
Le programme de démonstration tient facilement dans la mémoire de l'ATMega 328P. On tire parti de la grande capacité en mémoire flash du circuit pour y placer toutes les images.
ARDUINO demo |
Distribution
Cette réalisation est disponible gratuitement.