dimanche 29 juin 2014

LPC810, partie 8, pong

Pour mettre en pratique ce que j'ai appris sur le LPC810 j'ai réalisé un jeux PONG sur le LPC810. Le montage est si simple qu'il tiens sur une carde perma-proto 1/4.

Montage

schématique

Liste du matériel

  • 1 MCU LPC810M021FN28, U1
  • 1 carte perma-proto 1/4.Un produit de bonne qualité. Peut-être soudé sur les 2 faces, pratique pour les SMD 0805 (voir photo du prototype ci-haut).
  • 2 jack RCA phono, J1 jaune (vidéo), J2 blanc (audio)
  • 1 LED rouge 3mm, D2
  • 2 résistances 120 ohm 1/8 watt, R3,R8.
  • 1 résistance 620 ohm 1/8 watt, R1.
  • 1 résistance 680 ohm 1/8 watt, R2.
  • 2 résistances 1Kohm 1/8 watt, R6, R7.
  • 2 résistance 10Kohm 1/8 watt, R4, R5.
  • 2 potentiomètre 10Kohm linéaire, P1, P2.
  • 1 condensateur céramique 2,2nF, C1
  • 4 condensateurs céramique 100nF, C2,C3,C4,C5. J'ai utilisé un format SMD 0805 car c'est juste de la bonne dimension pour être souder entre deux rangés adjacentes.
  • 1 diode schottkey 1N6263, D1
  • 2 boutons momentanés SW1, SW3.
  • 1 porte pile avec commutateur pour 2 piles AA ou AAA
  • 1 barrette de pin header 100mil.

Démo

Description du programme

L'ensemble du projet LPCXpresso est sur https://github.com/Picatout/lpc810-pong sous licence GPLv3. Vous pouvez télécharger le fichier zip et l'importer dans l'IDE LPCXpresso. Le projet doit être compilé avec l'option -O2 sinon il n'y a pas suffisamment d'espace flash.

Le jeux est contrôlé par des potentiomètres de 10Kohm. Chaque joueur en a un. Le pointage apparait en haut de l'écran. Le gagnant est celui qui atteint 21 points le premier. La balle est collée sur la raquette du joueur qui a le service. Le joueur doit déplacer sa raquette pour lancer la balle. La direction que prend la balle est tirée au hasard. ATTENTION! au démarrage le potentiomètre que est branché sur la broche 5 doit-être en position Vdd. S'il est en position Vss le bootloader va entrer en mode programmation au lieu de démarrer le jeux.

Le fichier hardware.c Initialise les périphériques utilisés. Le PLL permet de monter la fréquence à 30Mhz. Le SCT génère le signal vidéo et le signal audio. Le MRT est utilisé pour les délais. Le comparateur analogique est utilisé pour lire les potentiomètres. Il y a deux gestionnaires d'interruption d'utilisé, l'un pour la génération audio MRT_IRQHandler() situé dans hardware.c, l'autre pour la génération des signaux vidéo SCT_IRQHandler() situé dans tvout.c.

Le fichier tvout.c génère un signal NTSC composite monochrome. La résolution est de 64x56 pixels et le video_buffer occupe 448 octets RAM des 1024 disponible. Comme toujours j'utilise un PWM pour la synchronisation et un périphérique SPI pour sérialiser les pixels vidéo.

Les potentiomètres qui contrôle les raquettes des joueurs sont branchés sur les 2 entrées du comparateur analogique ACMP_I1 et ACMP_I2. Ce comparateur contient une référence de voltage programmable sur 32 niveaux. J'ai donc décidé d'utiliser cette référence en conjonction avec le comparateur pour créer un convertisseur A/N à 5 bits. Le convertisseur est de type SAR (Successive Approximation Register). Pour son fonctionnement voir la routine read_pot() dans le fichier hardware.c. La routine fait une division binaire de L'intervalle pour obtenir un résultat en 5 comparaisons.

Tout le code est écris en 'C' et peut-être adapter facilement à un autre MCU LPC. Le fichier tvout.c est particulièrement utile pour l'utilisation dans d'autres projets avec sortie vidéo NTSC. Il peut être adapté facilement au standard PAL en modifiant les constantes dans le fichier tvout.h


Liens vers les articles précédents:

  1. github du jeux pong
  2. Introduction au LPC810 (ARM M0+)
  3. LPC810, partie 2, anatomie
  4. LPC810, création d'un projet
  5. LPC810, partie 4, programmation
  6. LPC810, partie 5, module SCT et PWM

Aucun commentaire:

Enregistrer un commentaire