Étape 4: Le Firmware
Le firmware que j’ai utilisé pour cette petite démo est jointe. J’ai utilisé le gratuit MPLAB IDE avec le compilateur C18 (gratuit pour les étudiants). Les deux sont disponibles à télécharger sur le site de Microchip. La logique va comme ceci :1. délai pour quelque part entre 10 et 20 ms (dans ce cas, 12)
2. si on appuie le bouton (4 broches), mesurez la tension du potentiomètre (2 broches)
3. Réglez le signal de commande élevé (5 v)
4. délai pour une durée proportionnelle à la tension mesurée à l’étape 2
5. Réglez le faible signal de commande (sol)
6. boucle arrière pour l’étape 1
Peut-être un peu plus d’informations sur la conversion analogique-numérique est en ordre. Donc nous savons déjà que la tension sur la broche 2 va se situer entre 0 et 5 volts à cause du diviseur de tension. Convertisseur A/N le commandant de bord fonctionne (théoriquement) un peu comme un diviseur de tension inverse. Il rend compte de la tension par rapport à sa tension d’alimentation. Toutefois, la proportion est ajustée pour être comprise entre 0 et 255 (qui est de 8 bits d’information, la taille d’un caractère non signé). En d’autres termes, l’égalité suivante est mises en place :
(tension de la broche 2) / 5v = POT_VALUE / 255
ou :
POT_VALUE = 255 * ((pin 2 voltage) / 5v)
Le PIC est en train de faire une 10-bit A/D conversion, mais 8 bits est beaucoup granulaire assez pour nos besoins, donc les deux bits les moins significatifs de la conversion A/D ne sont pas utilisés dans le présent code. En outre, les deux derniers chiffres sont probablement mesurage du bruit au lieu du signal lui-même, donc nous ne sommes pas manque tant que ça en les ignorant.
Les retards sont calculés selon le temps que nécessaire pour terminer une instruction sur le PIC avec une horloge de 4 MHz. Je ne me souviens pas pourquoi, mais de toute façon que cela fonctionne à 1/6 nous par cycle d’enseignement. Voilà donc si nous tardons à 5400 cycles, 5400 cycles * US 1/6 / cycle = 900 US = 0,9 Mme un autre élément important est de trouver la constante de proportionnalité qui fait évoluer les POT_VALUE (sur une plage comprise entre 0-255 = 255) à notre largeur d’impulsion (sur une gamme de 2,1 ms-0,9 ms = 1200 nous) ; ou, pour cadrer la question différemment : cycles combien devrions nous retarder pour chaque chef d’accusation de POT_VALUE ?
(1200 US * 6 cycles / nous) / 255 chiffres = 28 cycles/comte
Ceux d'entre vous suivant ainsi que le code remarqueront que j’ai en fait retarder 20 cycles par chef d’accusation, pas 28. Il s’agit d’une valeur déterminée expérimentalement (j’ai regardé le signal avec un oscilloscope) qui s’adapte à tous les facteurs que l’effet du temps, principalement les frais généraux de la boucle for en ligne 68.