Auteur Sujet: Tuto : Carte d'adaptation roue optique  (Lu 4571 fois)

Hors ligne aganyte

  • ✌(◕‿◕)✌ Donateur 2018 WIPeur compulsionnel
  • Dieu de l' Arcade
  • *
  • Messages: 5057
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« le: Mercredi 22 Septembre 2010, 13:32:52 pm »
Dans le but de permettre l'utilisation d'une roue optique avec un "hackpad", je vous propose une carte d'interface qui pourra convertir les infos issuent des capteurs optique vers un potentiomètre numérique.

J'espère qu'à terme cette carte facilitera la mise en oeuvre de spinners, volants et autres périphériques qui utilisent cette méthode.

Je suis partit sur un micro-controleur PIC 16F84 et un potentiomètre numérique MCP41010 (soit 10 kohms, il existe aussi le MCP41050 et MCP41100 qui font respectivement 50 Kohms et 100 Kohms)

deux points important à vérifier vis à vis des  MCP41xxx:

-Ils n'acceptent sur leur potentiomètre que des tensions inférieur à 5 volts.
-Ils n'acceptent sur leur potentiomètre qu'un courant maximum de 1 Ma.

Pensez donc à faire les mesures sur le potentiomètre du Pad avant de le retirer définitivement.


La carte pourra donc convenir pour des "hackpads" utilisant soit un potentiomètre de 10,50 ou 100 Kohms. Pour d'autres valeurs, il faudra me contacter.

Par habitude j'utilise un quartz de 12 Mhz (à cette vitesse il semble d'aprés mes simulations sous proteus que mon programme n'a pas besoin d'être ralenti, les tests me permettront de vérifier ce point)

Voici donc le schéma:



et le typon:



le composant 4013 permet de générer deux signaux, l'un image du sens de rotation et l'autre image du nombre de pas parcouru. Ce composant n'est utile que si vous comptez vous brancher directement aprés les photo-diodes (Par exemple Blackmamba n'en n'aura pas besoin)

Voici maintenant le programme en C qui devra être charger dans le PIC

Citer
/* Programme Adaptation Optique vers potars numérique par Aganyte pour la Team GAMOOVER */

/* chargement des adresses et registres du PIC */
#include   <htc.h>

#define VMAX 5000 // nombre d'impulsions maximum (max 65535)
#define N ((VMAX+254)/255) // Rapport de convertion
#define CS RB0 // Chip select sur RA4
#define   SDI RA3   // Serial data in sur RA3
#define   CLK RA2   // Clock sur RA2
#define   Direction RA0   // Info direction sur RA0
#define   Pulse RA1   // Info Pulse sur RA1

/* Fonction envoie SPI vers MCP41XXX */
Send_Spi(unsigned int data)
{
   unsigned char count;
   data = data | 0x1100; // Ajoute la configuration du PN à la donnée (Mode Write et potar 1)
   CS = 0; // Sélection du PN
   for (count=0;count<16;count++)
   {
      if((data & 0x8000) == 0x8000) // Envoie d'un 1 ou 0 en fonction du Msb de "data"
      {SDI=1;}
      else
      {SDI=0;}
      data <<= 1;   // Bit suivant
      CLK = 1;   // Front montant = Envoie de la donnée
      CLK = 0;   // Front descendant
   }
   CS = 1; // désélectionne le PN, ce qui positionne le curseur en fonction de la donnée envoyée
}

/* Programme principale */
main()
{
   unsigned int cursor = (VMAX / 2); // Placer le curseur à 50%
   TRISA = 0x03; // RA0 et RA1 en entrée le reste en sortie
   TRISB = 0x00;
   PORTB = 1; // chip select à 1
   PORTA = 0; // CLK et SDI à zéro
   Send_Spi(cursor / N); // Envoie la valeur sur le PN
   for( ; ; )
   {
      while(Direction==0) // Mode Décomptage
      {
         if(cursor > 0) // décomptage si curseur Supérieur à zéro
         {
            if(Pulse==0)
            {
               while(!Pulse);
               cursor--;
            }
            else
            {
               while(Pulse);
               cursor--;
            }
         }
         Send_Spi(cursor / N); // Envoie la valeur sur le PN
      }
      while(Direction==1) // Mode comptage
      {
         if(cursor < VMAX)  // Comptage si curseur inférieur à la valeur max
         {
            if(Pulse==0)
            {
               while(!Pulse);
               cursor++;
            }
            else
            {
               while(Pulse);
               cursor++;
            }
         }
         Send_Spi(cursor / N); // Envoie la valeur sur le PN
      }
   }
}

Schéma de cablage sur une carte optique déja existante (dans ce cas pas besoin de souder le 4013 sur la carte):



schéma de cablage sur carte optique DIY (il faut juste les photodiodes et des triggers de schmitt)



Une petite vidéo du résultat final :


Hors ligne Iro

  • Alias le Rouston Masqué
  • Staff
  • Dieu de l' Arcade
  • *****
  • Messages: 17420
  • Iro, chevalier Judaï
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #1 le: Mercredi 22 Septembre 2010, 13:45:49 pm »
Superbe !!
Une question , tu dis utiliser un potentiométre numérique. C'est pour tes tests et il ne fait pas partie de la nomenclature ? En fait cette carte simule un potentiométre nuémrique de ce type ?
"Jet set 2, c'est avec Robert Garcia ?" Kaneda, Lapsus de sac Vol.1
Peter Shou Owner' Club

WIPs : Naomi - SEGA Rally - AB Cop - Lethal Enforcers - COMPUMI - Terminator 2 - Space Invaders - Artworks pour Boitiers K7 Naomi CF

LES TUTOS DE GAMO   

Hors ligne aganyte

  • ✌(◕‿◕)✌ Donateur 2018 WIPeur compulsionnel
  • Dieu de l' Arcade
  • *
  • Messages: 5057
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #2 le: Mercredi 22 Septembre 2010, 13:48:14 pm »
Non, le seul composant optionnel c'est le 4013, le potentiomètre numérique est obligatoire. C'est lui qui va simuler le potentiomètre que l'on aura retiré du pad.

Hors ligne f4brice

  • ✌(◕‿◕)✌ Donateur 2018
  • Arcade Kingmaster
  • *
  • Messages: 4052
  • « Matériel inconnu ? Touche à ton cul ! »
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #3 le: Mercredi 22 Septembre 2010, 14:00:26 pm »
si f4brice passe dans le coin il pourra corriger les fautes d'orthographes, je sais qu'il aime ça  :D

C'est ton code que je vais corriger :  ;)

Citer
#define VMAX 5000 // nombre d'impulsions maximum (max 65535)
#define N 20 // Rapport de convertion => N = VMAX / 255 (IMPORTANT : Arrondir au chiffre supérieur)
#define N ((VMAX+254)/255)       /* VMAX/255 arrondi par exces */


Pour le reste, il y a de mauvaises habitudes de programmation, mais chûûûûût...  :D

Hors ligne aganyte

  • ✌(◕‿◕)✌ Donateur 2018 WIPeur compulsionnel
  • Dieu de l' Arcade
  • *
  • Messages: 5057
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #4 le: Mercredi 22 Septembre 2010, 14:03:27 pm »
Pour le reste, il y a de mauvaises habitudes de programmation, mais chûûûûût...  :D

Pour ma défense je soulignerais le fait que j'ai appris le C tout seul  :-\ , mais je suis toujours prêt à apprendre de bon conseils  ;)

Hors ligne aganyte

  • ✌(◕‿◕)✌ Donateur 2018 WIPeur compulsionnel
  • Dieu de l' Arcade
  • *
  • Messages: 5057
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #5 le: Mercredi 22 Septembre 2010, 14:06:31 pm »
C'est modifié, merci pour l'astuce  ^-

Hors ligne aganyte

  • ✌(◕‿◕)✌ Donateur 2018 WIPeur compulsionnel
  • Dieu de l' Arcade
  • *
  • Messages: 5057
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #6 le: Mercredi 29 Septembre 2010, 09:54:24 am »
Bonne nouvelle, j'ai enfin reçu le MCP41100 que j'avais commandé pour les tests  :-)=

Alors, après une première vérification je confirme que l'utilisation des tempos dans le programme n'est pas utile. j'ai donc retiré tout ça ;)

Pour le prochain test je brancherai la carte de "black mamba" (que je n'ai pas avec moi aujourd'hui) afin de vérifier l'incrémentation/décrémentation du potar en fonction de la roue optique.

Hors ligne aganyte

  • ✌(◕‿◕)✌ Donateur 2018 WIPeur compulsionnel
  • Dieu de l' Arcade
  • *
  • Messages: 5057
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #7 le: Mercredi 06 Octobre 2010, 13:48:42 pm »
Alors j'ai fait un petit calcul préliminaire avec le matériel de black mamba.

La grande roue crantée montée sur le volant à 60 Dents.
La petite roue crantée montée sur la roue optique à 14 Dents.
La roue optique à 24 "trou" et 24 "plein" (soit avec mon programme 48 impulsions par tour).

Rapport de réduction 60/19 = 4,28

Nombre d'impulsions pour 360° => 48 * 4.28 = 205.4 Impulsions

Et pour 270° (volant standard) =>  (205.4 * 270) / 360 = 154.04 Impulsions

Petit problème j'ai moins d'impulsions que le nombre de pas du potar numérique... :'(

Si je règle VMAX sur 255 alors l'angle de braquage maximum ne couvrira que 60% de la valeur totale du potars. à voir....

Hors ligne aganyte

  • ✌(◕‿◕)✌ Donateur 2018 WIPeur compulsionnel
  • Dieu de l' Arcade
  • *
  • Messages: 5057
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #8 le: Jeudi 07 Octobre 2010, 16:48:39 pm »
Petit test du jour  :D

j'ai réalisé le schéma suivant sur plaquette test:



Puis j'ai connecté la carte de black mamba sur les entrées CC/CCW et PULSE.

Résultat  :-)= quand je passe un carton entre les capteurs dans un sens ou dans l'autre, j'arrive à incrémenter/décrémenter le compteur, ce qui dans le même temps fait réagir le potentiomètre numérique qui modifie la valeur de la tension que je viens lire avec mon voltmètre.

J'ai aussi essayé avec la roue optique et ça marche nickel  ^-^

Demain je vous faire une vidéo  <:)

Hors ligne aganyte

  • ✌(◕‿◕)✌ Donateur 2018 WIPeur compulsionnel
  • Dieu de l' Arcade
  • *
  • Messages: 5057
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #9 le: Vendredi 08 Octobre 2010, 19:11:01 pm »
La vidéo est ajoutée, le tuto est terminée.

...Vraiment pas facile de filmer un lcd à rétro-éclairage bleu  :o

Hors ligne black mamba

  • Régulier
  • *
  • Messages: 80
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #10 le: Lundi 11 Octobre 2010, 11:22:16 am »
En effet c'est un peu galère pour stabiliser l'image du LCD bleu  :-((

Comment on fait pour programmer les microcontroleurs ? J'y connais pas grand chose en électronique...
Chapeau bas en tout cas  <:)
"La vie est belle, c'est le monde qui est moche !" [K. Pancol]

Hors ligne aganyte

  • ✌(◕‿◕)✌ Donateur 2018 WIPeur compulsionnel
  • Dieu de l' Arcade
  • *
  • Messages: 5057
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #11 le: Lundi 11 Octobre 2010, 14:29:26 pm »

Comment on fait pour programmer les microcontroleurs ?

Je t'ai déja programmé le tiens.

Pour les autres, il faut un programmateur de PIC dans ce genre là:



On les trouve sur la baie pour moins de 20€ Fdpin (avec la recherche "Pic Usb") livré avec câble USB et logiciel de programmation.

Pour obtenir le fichier "Hex" à charger dans le PIC à partir du fichier en language C, il faut utiliser un compilateur.

J'utilise MPLAB disponible sur le site de Microchip, il est gratuit et contient un compilateur C intégré.

Hors ligne gc339

  • Beta Testeur
  • *
  • Messages: 2193
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #12 le: Lundi 11 Octobre 2010, 22:59:54 pm »
Bonsoir.

Pourrais tu poster le code du pic sous la forme Intel HEX.

Exemple : le code du PIC12C508 du circuit de protection de Tim Worthington : http://members.optusnet.com.au/eviltim/vga2arc/vga2arc.htm

:10000000A80C02000C0C0600660061002107060A1D
:100010006C006100AC0261070A0A740C8C000307D3
:0E002000140A020C2600050A210C2600050A0F
:021FFE00EA0FE8
:00000001FF

Avec un simple copier/coller dans un fichier texte que l'on peut renommer en ".hex" après coup, il est ainsi possible de récupérer ce code pour l'utiliser directement avec un programmateur de PIC.
Le repos, c'est fait pour les jeunes. Ils ont toute la vie devant eux. J. Gabin/M. Audiard



Hors ligne aganyte

  • ✌(◕‿◕)✌ Donateur 2018 WIPeur compulsionnel
  • Dieu de l' Arcade
  • *
  • Messages: 5057
    • Voir le profil
Tuto : Carte d'adaptation roue optique
« Réponse #13 le: Mardi 12 Octobre 2010, 07:41:21 am »
Je peut mais cela pose le problème du nombre max d'impulsions qui doit être régler pour chaque utilisateur en fonction de son matériel.