Programmation, utilisation de la carte 8X2A

Nous supposons que pour la suite, nous avons réalisé une architecture contenant une carte Fruit 8X2A. Cela implique la présence de cartes Fraisiever.

Identification et nommage d'une carte Fruit 8X2A

Comme pour la carte Fruit Versa1, l'identification et le nommage ne sont pas des opérations anecdotiques. Ils sont réalisés plus rarement que la programmation de la carte. Pour le nommage, il est conseillé de débrancher les autres cartes Fruits qui pourrait être présents sur le bus local, c'est à dire sur le câble en nappe.

La démarche pour nommer une carte Fruit 8X2A est identique à celle utilisée pour une carte Versa1. Cela se fait dans un patch Pure Data en y plaçant un objet fruit/fruit dans lequel on a inscrit le nom, l'identifiant et le programme de configuration.

fruit Fruit 2

Puis on ouvre la fenêtre des utilitaires en cliquant sur utils de cet objet

utils Fruit 2
Pour effectuer le nommage, on cliquera sur RENAME et dans les cinq secondes qui suiveront, il faudra réaliser une réinitialisation de la carte, c'est à dire un reset. Mais la carte Fruit 8X2A ne dispose pas de broches RST. Le reset s'effectue en alimentant la carte.
Donc débranchez l'alimentation de la carte ; cliquez sur RENAME et dans les cinq secondes qui suivent, rebranchez l'alimentation de la carte.

Pour inscrire le premier programme dans la mémoire du micro-processeur, il faut aussi effectuer un reset ; on procédera de la même façon, en rebranchant l'alimentation. Donc avec le bouton MAKE, on construit un programme exécutable. Le bouton PROGRAM transfère ce programme exécutable dans la mémoire du micro-processeur.

Pour le premier programme que vous inscrivez dans le micro-processeur, débranchez l'alimentation de la carte ; cliquez sur PROGRAM et dans les cinq secondes qui suivent, rebranchez l'alimentation de la carte. La barre de défilement indique la progression du transfert et devient verte si le transfert s'est bien déroulé.

Après ce transfert, cliquez sur ASSIGN afin d'attribuer l'identifiant au micro-processeur.

Rappelons que ces opérations ne concernent que le premier programme mémorisé dans le micro-processeur. Pour les programmes suivants, il suffit de cliquer sur PROGRAM et le programme sera transféré, sans avoir à débrancher/rebrancher.

Module DCMotor

La carte Fruit 8X2A peut utiliser les mêmes modules que la carte Fruit Versa1. Mais elle est surtout conçue pour commander des moteurs.

Instructions du micro-processeur

Tout d'abord, il faut indiquer que la carte est une carte Fruit 8X2A car le processeur est du même modèle que sur la carte Versa1 mais les pattes du processeur sont affectées de façon différente. À la place de
#define BOARD Versa1
il faut écrire
#define BOARD 8X2A

Il faut ensuite déclarer le module et ses fonctions.

#include <dcmotor.h>
inclusion dans le programme des fonctions du module.

DCMOTOR_DECLARE(PortMoteur);
déclare un moteur ; le paramètre PortMoteur peut prendre la valeur A,B, C ou D selon le bornier utilisé. Les borniers sont repérés sur le circuit intégré par P1, P2, P3 et P4 et correspondent respectivement à A,B, C et D.
Ces instructions s'écrivent au début du programme, dans les déclarations.

dcmotorInit(PortMoteur);
fonction d'initialisation du module.
Cette instruction devra être placée dans la fonction setup().

DCMOTOR_COMPUTE(PortMoteur,ASYM);
fonction de calcul des valeurs à appliquer au moteur (vitesse, tension,etc...)
Cette instruction devra être placée dans la fonction loop(), exécutée à intervalles réguliers ; donc dans le if qui vérifie qu'un certain délai s'est écoulé.

Comme pour un servo-moteur, le moteur sera commandé par le patch Pure Data. Il faudra donc envoyer des messages de commande pour modifier la vitesse du moteur. Un message de commande se composera

  • d'un code signifiant « ce message concerne un moteur »
  • du PortMoteur du moteur concerné.

Nous préconisons d'utiliser 120,121,122,... comme code pour un message de moteur afin d'éviter des confusions par la suite. La fonction fraiseReceive() se charge de décoder les messages destinés à la carte Fruit. Elle contiendra donc les instructions :

unsigned char c=fraiseGetChar(); 
if(c==120) DCMOTOR_INPUT(PortMoteur); // 

qui se comprennent facilement : si le message commence par 120, on appelle la fonction DCMOTOR_INPUT() qui se chargera d'interpréter la suite du message, pour le moteur concerné. S'il y a plusieurs composants en écoute, il serait plus judicieux d'utiliser une alternative à plusieurs choix. Par exemple, si la carte utilise les borniers P3 et P4,

unsigned char c=fraiseGetChar(); 
switch(c) { 
    case 20 : servoReceive(); break; 
    case 120 : DCMOTOR_INPUT(C) ; break; 
    case 121 : DCMOTOR_INPUT(D) ; break; 
}

Dans le fichier config.h, il faut définir certaines variables. Ces variables peuvent servir pour des moteurs contrôlés par des capteurs, genre interrupteurs optiques. Mais nous utiliserons ici des moteurs simples, sans contrôle. Il faut définir les variables MOTx_END, MOTx_A et MOTx_Bx est identique à PortMoteur. Ces variables sont initialisées à un port fictif KZ1 qui est constant. Le fichier config.h, contiendra les instructions

#define MOTx_END KZ1
#define MOTx_A KZ1
#define MOTx_B KZ1

Par exemple, si la carte utilise les borniers P3 et P4, le fichier config.h ressemblera à

#ifndef _CONFIG_H_
#define _CONFIG_H_

#define MOTC_END KZ1
#define MOTC_A KZ1
#define MOTC_B KZ1

#define MOTD_END KZ1
#define MOTD_A KZ1
#define MOTD_B KZ1

#endif // _CONFIG_H_

Rappelons qu'une fois le programme écrit, vous devez le compiler et le mémoriser dans le circuit (voir la section programmation )

Utilisation dans les patchs Pure data.

On vient de voir que les commandes sont envoyées dans des messages commençant par 120. On indique ensuite le code 4 pour la vitesse et la valeur souhaitée pour cette vitesse. La vitesse est indiquée par une valeur comprise entre 0 et 1023, vitesse maximale.

message send dcMoteur

Dans l'exemple ci dessus, le message de gauche demande au moteur de tourner à la vitesse maximale ; celui de droite, arrête le moteur et celui du centre demande une rotation à mi-vitesse. Si les vitesses sont négatives, le moteur tourne dans l'autre sens.

results matching ""

    No results matching ""