mises à jour
2015-04-25
Ajout d'un potentiomètre pour le contraste aux bornes de la diode D1. En effet le contraste de l'affichage est très sensible à valeur de la tension d'alimentation. En shuntant la diode avec ce potentiomètre on peut ajuster le contraste avec précision.
présentation
J'ai fait plusieurs projets qui généraient un signal vidéo NTSC monochrome. Cette fois ci je voulais expérimenter avec un affichage LCD. PICVisionPortable est une console de jeux rétro monochrome qui utilise un LCD graphique de 128x64. Le MCU est le même que pour le projet PICVision soit un PIC24FJ64GA002. Cependant il n'y a pas que le type d'affichage qui est différent. PVP utilise la même machine virtuelle (avec quelques modifications) que le projet CHIPCON. et supporte aussi la lecture d'une carte SD sur laquelle sont enregistrés les jeux.
caractéristiques
- MCU PIC24FJ64GA002, 64Ko flash, 8Ko RAM.
- Affichage LCD passif à rétro-éclairage Robotshop RB-Dfr-177. 128x64 pixels
- Lecteur de carte SD pour les jeux
- Haut-parleur intégré. Son avec 2 tonalités simultanés ou bruit blanc.
- Espace code disponible 4096 octets. Machine virtuelle Super CHIP étendue.
- Outils disponibles: assembleur, déassembleur et convertisseur vers fichier C pour intégration d'un jeux en mémoire flash
- Alimentation 4 piles AA.
schéma électronique
Il y avait juste le nombre de broches sur le format DIP-28 pour répondre aux besoins du projet. De plus comme ce MCU permet de configurer les sorties binaire en mode drain ouvert il n'a pas été nécessaire d'utiliser des adaptateurs de niveau de tension entre le module LCD qui fonctionne à 5 volts et le MCU qui lui fonctionne à 3,3 volts.
L'interface utilisateur ne comprend que 5 boutons, les 4 directions et le select. au dessus du select il y a un petit bouton pour réinitialiser la console. A gauche de l'affichage il y a le haut-parleur et le commutateur d'alimentation.
Pour le connecteur de la carte SD j'ai du fabriquer un petit circuit imprimé. l'empreinte est dans le dossier documents.
description détaillée
L'affichage est un LCD passif STN a rétro-éclairage par LED acheté chez Robotshop.com/ca. Puisqu'il s'agit d'un LCD passif l'affichage a une persistance longue ce qui produit un effet de trainé dans les animations. Les jeux sont néanmoins jouables. Sur le vidéo suivant ça paraît pire que c'est en réalité à cause des réflexions sur l'écran. Désolé pour la mauvaise qualité de ce vidéo mais je ne suis pas vraiment équiper produire de bons vidéos.
Le PIC24FJ64GA002 possède 8Ko de RAM, 1Ko est réservé pour la mémoire d'affichage et 4Ko pour l'espace jeux. Contrairement à l'émulateur CHIP original les 4Ko sont disponibles pour l'espace code. Les jeux doivent-être écris avec le point d'entré à l'adresse zéro. Les jeux superCHIP existants doivent-être adaptés pour cette console pour les raisons suivantes:
- Le point d'entré doit-être à l'adresse zéro et non 512.
- Le clavier n'a que 5 boutons, 4 de directions à gauche et un sélection à droite.
- Ce processeur étant plus rapide les jeux doivent-être ralentis en insérant des délais supplémentaire dans le code.
Dans le dossier tools on retrouve l'assembleur pvpasm, le déassembleur pvpdasm et le convertisseur cvt-chip. Il reste de la place dans la mémoire flash pour y intégrer quelques jeux.
J'ai adapté 5 jeux superCHIP pour cette console et les ai intégrés dans la mémoire flash. Il encore près de 32Ko de flash libre, donc de l'espace pour plusieurs autres jeux.
adaptation de jeux superCHIP
Lorsqu'il n'y a pas de carte SD dans la fente la console affiche la liste des jeux en mémoire flash. Vous pouvez écrire vos propre jeux et les utiliser à partir de la carte SD ou les intégrer dans la mémoire flash du MCU.
Pour trouver des jeux superCHIP existant consultez le site http://www.chip8.com.L'adaptation se fait en 3 étapes:
- désassembler le fichier binaire avec l'utilitaire pvpdasm.exe qui est dans le dossier tools du dépôt github.
exemple:pvpdasm blinky.ch8 blinky.chp
- Ouvrir dans un éditeur de texte le fichier assembleur .chp. Faire une recherche sur les instructions SKP, SKNP et LD VX, K. remplacer les codes de touches par ceux correspondant aux touches de la console PVP.
- UP = 0
- DOWN = 1
- LEFT = 2
- RIGHT = 3
- SELECT = 4
- Une fois les modifications faites dans l'éditeur, il faut assembler le programme avec pvpasm.exe
exemple:pvpasm.exe blinky.chp blinky.pvp
intégration des jeux dans la mémoire flash
Pour intégrer un jeux dans la mémoire flash du MCU il faut utiliser l'outil cvt-chip.exe qui est dans le dossier tools.
exemple d'utilisation: cvt-chip -pPIC blinky.pvp
le résultat de cette opération est la création de 2 fichiers en langage C. Un fichier blinky.h et un fichier blinky.c. Il faut ajouter ces 2 fichiers au projet MPLABX.
Dans l'exemple donné ici il ajouter dans le fichier main.c
#include "games/BLINKY/blinky.h"
Chaque jeux en mémoire flash a une entrée dans le tableau flash_games[GAMES_COUNT]. Il faut aussi incrémenter la constante GAMES_COUNT.
les champs de la structure sont les suivants:
- Le nom qui apparaît à l'écran.
- la constante définie dans le fichier d'entête qui donne le nombre d'octet occupé par le jeux. Dans l'exemple de blinky cette constante s'appelle BLINKY_SIZE.
- Le nom du tableau (array) contenant le jeux. Celui est aussi défini dans le fichier d'entête créé par cvt-chip.exe
- le nom du tableau xxxx_info. Ceci est une description du jeux qui est affichée avant que le jeux ne démarre. Par défaut le tableau est vide. La constante NULL peut-être utilisée s'il n'y a pas d'info à afficher.
liens
Aucun commentaire:
Publier un commentaire
Remarque : Seuls les membres de ce blogue sont autorisés à publier des commentaires.