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:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20100922132102-aganyte-schy-ma.JPG)
et le typon:
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20101012094902-aganyte-typon.JPG)
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
/* 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):
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20101008102002-aganyte-schy-ma-cablage-2.JPG)
schéma de cablage sur carte optique DIY (il faut juste les photodiodes et des triggers de schmitt)
![](http://hico-srv004.pixhotel.fr/sites/default/files/styles/gamoovernet890px/public/gamoovernet/20101008102747-aganyte-schy-ma-cablage.JPG)
Une petite vidéo du résultat final :