mercredi 12 février 2014

Projet à microcontrôleur PIC 16F84A
Dé électronique sonore

  • 1- Présentation
  • 2- Schéma électrique
  • 3- Principe de fonctionnement
  • 4- Liste du matériel
  • 5- Code source du microcontrôleur PIC 16F84A
  • 6- Lien utile

  • 1- Présentation
Ce circuit génère un chiffre de 1 à 6 de manière aléatoire (comme un dé à 6 faces).

Pour cela, on lance à la main, la rotation d'une roue.
Sous l'effet des frottements, la vitesse de rotation diminue et la roue s'arrête : on obtient le résultat final (ici 5).

  • Aspect visuel
La valeur faciale du dé défile de la manière suivante : 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 1 etc ...


La vitesse de défilement du dé est synchronisée avec la vitesse de rotation de la roue.
On utilise pour cela une roue dentée associée à une fourche optique :

Le défilement est rapide au départ, puis de plus en plus lent, et enfin la roue s'arrête et le dé se fige.

  • Aspect sonore (facultatif)
Un "bop" sonore est généré quand la valeur faciale du dé change (c'est-à-dire quand la roue tourne).
Une fois la roue immobilisée, le circuit génère une série de "bip" (fréquence 100 Hz, fréquence de répétition 2 Hz) :
5 bips indiquent que la valeur du dé est 5, etc ...

  • 2- Schéma électrique

  • 3- Principe de fonctionnement
La base de temps du microcontrôleur PIC est fixée par R0 et C3 :
f OSC2 # 1/(4.R0.C3) # 65 kHz (en pratique : 50 kHz mesurée sur la broche OSC2).
L'interrupteur optique H21B1 est constitué d'une LED infrarouge (pour l'émission) et d'un phototransistor de type Darlington (pour la réception).
Quand le faisceau infrarouge est coupé par une dent de la roue, le phototransistor se bloque et on a un niveau haut sur l'entrée RB0/INT du microcontrôleur PIC.
Autrement (pas d'obstacle entre l'émetteur et le récepteur), le phototransistor est saturé et on a un niveau bas sur l'entrée RB0/INT.
Le microcontrôleur PIC utilise l'interruption RB0/INT (active sur front montant 0 -> 1) pour connaître l'état de la roue.
Notez que l'entrée RB0/INT est de type trigger : cela permet de mettre en forme proprement le signal de sortie de la fourche optique (qui a un temps de réponse d'environ 1 ms ...).
Le transistor 2N2905 sert d'interface entre le microcontrôleur PIC et le haut-parleur.

  • Schéma de la disposition des LED


  • A la mise sous tension du dé électronique, l'animation visuelle suivante est répétée 3 fois :

Merci à Maxime Weiten pour ses idées et schémas.

  • 4- Liste du matériel
     
    • 1 programmateur pour flasher le programme du microcontrôleur PIC

    • 1 microcontrôleur PIC 16F84A
      • Remarque : vous pouvez demander des échantillons gratuits chez Microchip :)
    • 1 condensateur de 470 pF
    • 1 condensateur de 100 nF (filtrage de l'alimentation)
    • 1 condensateur électrochimique de 10 µF (filtrage de l'alimentation)
    • 1 résistance de 8,2 k
    • 7 résistances de 220 ohms
    • 7 LED
    • 1 fourche optique H21B1
    • 1 résistance de 470 ohms
    • 2 résistances de 1 k
    • 1 résistance de 47 ohms 1/2 W (ou deux résistances de 100 ohms 1/4 W en parallèle)
    • 1 potentiomètre de 470 ohms (réglage du volume sonore)
    • 1 transistor PNP 2N2905
    • 1 diode de roue libre 1N4148
    • 1 source d'alimentation continue 5 V (ou 4,5 V)
    • 1 haut-parleur 8 ohms
    • 1 roue dentée (12 dents par exemple)

  • 5- Code source du microcontrôleur PIC
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.

  • 6- Lien utile
Voici un lien vers un dé électronique qui n'utilise pas de logique programmée (pas de microcontrôleur).
Dé électronique (circuit en logique non programmée)

(C) Fabrice Sincère ; révision 01

Projet à microcontrôleur PIC 16F84A / PIC 16F628A Dé électronique


  • 1- Présentation
  • 2- Schéma électrique
  • 3- Principe de fonctionnement
  • 4- Liste du matériel
  • 5- Codes sources des microcontrôleurs PIC
  • 6- Lien utile
  •  
  • 1- Présentation
Ce circuit génère un chiffre de 1 à 6 de manière aléatoire (comme un dé à 6 faces).


  • 2- Schéma électrique

  • 3- Principe de fonctionnement
Un appui sur le bouton poussoir provoque une interruption sur la broche RB0/INT : le segment central (g) de l'afficheur 7 segments s'allume pendant environ un seconde et demi, puis un chiffre de 1 à 6 s'affiche.
Pour obtenir une valeur aléatoire, une boucle incrémente le contenu d'un registre (1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 1 -> 2 etc...) environ trois cents fois par seconde.
A l'instant où on enfonce le bouton poussoir, le contenu du registre se fige sur un chiffre "quelconque" compris entre 1 et 6.

  • 4- Liste du matériel
     
    • 1 programmateur pour flasher le programme du microcontrôleur PIC

    • 1 microcontrôleur PIC 16F628A ou PIC 16F84A
    • 1 afficheur 7 segments à anodes communes
    • 1 bouton poussoir (ouvert au repos)
    • 1 condensateur de 10 nF
    • 1 condensateur de 100 nF (filtrage de l'alimentation)
    • 1 condensateur électrochimique de 10 µF (filtrage de l'alimentation)
    • 7 résistances de 220 ohms
    • 1 résistance de 10 k
    • 1 source d'alimentation continue 5 V (ou 4,5 V)

  • 5- Codes sources des microcontrôleurs PIC
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.

  • 6- Lien utile
Voici un lien vers un dé électronique qui n'utilise pas de logique programmée (pas de microcontrôleur).
Dé électronique (circuit en logique non programmée)

(C) Fabrice Sincère ; révision 1.2.2

Projet à microcontrôleur PIC 16F84A / 16F628A Diapason pour guitare 6 cordes


Ce diapason permet de générer 7 notes :
  • mi1 (mi grave de la 6ème corde)
  • la1 (5ème corde)
  • ré2 (4ème corde)
  • sol2 (3ème corde)
  • si2 (2ème corde)
  • mi3 (mi aigu de la 1ère corde)
  • la3 (440 hertz)
  •  
  • Principe de fonctionnement
C'est le même principe que dans le projet "diapason électronique" qui permettait de générer un la1, la2 et la3.
A l'aide de l'interruption du module TMR0 en mode timer, le microcontrôleur génère une temporisation d'une durée correspondant à la demi-période de la note.
Ainsi, pour avoir un sol2 (195,998 Hz), la temporisation est égale à 12755 cycles d'horloge (avec un quartz de 20 MHz).
Un bouton poussoir permet de sélectionner la note, en balayant du mi1 au la3.
La note active est visualisée par une LED (sorties RB1 à RB7).
Le bouton poussoir utilise l'interruption RB0/INT sur front descendant.
L'interruption RB0/INT est prioritaire sur l'interruption TMR0.




  • Schéma électrique


N.B. On pourra remplacer le haut-parleur par un buzzer 5 volts (supprimer alors le condensateur C5).


 
  • Résultats expérimentaux
Une mesure avec un fréquencemètre étalon (Agilent 34401A) a donné :
note
hauteur de la note (Hz)
fréquence mesurée (Hz)
mi1
82,407
82,415
la1
110
110,011
ré2
146,832
146,847
sol2
195,998
196,019
si2
246,942
246,960
mi3
329,628
329,671
la3
440
440,025
soit un écart inférieur à 0,02 %.
Cet écart dépend principalement de la tolérance sur la fréquence du quartz.
Il est très inférieur à la limite de résolution de l'oreille humaine.


  • Code source des microcontrôleurs
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.

(C) Fabrice Sincère ; Révision 1.2.6

Projet à microcontrôleur PIC 16F84A / 16F628A Diapason électronique



  • 1- Présentation
  • 2- Schéma électrique
  • 3- Principe de fonctionnement
  • 4- Liste du matériel
  • 5- Code source du microcontrôleur PIC

1- Présentation
Ce diapason permet de générer 3 notes :
  • la3 (la de la troisième octave) : fréquence 440 hertz
  • la2 (la de la deuxième octave) : fréquence 440 / 2 = 220 hertz
  • la1 (la de la première octave) : fréquence 220 / 2 = 110 hertz

2- Schéma électrique



3- Principe de fonctionnement
La demi-période d'un signal de fréquence 440 Hz est 1,13636 ms ou 5681,8 cycles d'horloge d'un oscillateur à quartz de fréquence 20 MHz.
Le programme va donc créer une temporisation de 5682 cycles (439,986 Hz) en utilisant l'interruption TMR0 en mode timer.
Le signal de fréquence 440 Hz est disponible sur la sortie RA0 : il s'agit d'un signal rectangulaire 0 V / 5 V.
R1 limite le courant de sortie et C5 filtre la composante continue.
Le signal de fréquence 220 Hz (sortie RA1) est obtenu en divisant par deux (de manière logicielle) la fréquence du signal de la broche RA0.
Le signal de fréquence 110 Hz (sortie RA2) est obtenu en divisant par deux la fréquence du signal de la broche RA1.

  • Résultats expérimentaux
Une mesure avec un fréquencemètre étalon a donné :
440,0271 Hz (sortie RA0) ; 220,0136 Hz (RA1) ; 110,0068 Hz (RA2)
soit un écart de 0,01 % avec la valeur nominale (439,986 Hz).
Cet écart dépend directement de la tolérance sur la fréquence du quartz.
Il est très inférieur à la limite de résolution de l'oreille humaine.

4- Liste du matériel
    • 1 programmateur pour flasher le programme du microcontrôleur PIC
    • 1 résistance 1 k
    • 1 microcontrôleur PIC 16F628A ou 16F84A (boîtier PDIP)
      • Remarque : Vous pouvez demander des échantillons gratuits chez Microchip :-)
    • 1 quartz 20 MHz
    • 1 condensateur électrochimique de 10 µF (filtrage)
    • 1 condensateur de 2,2 µF
    • 1 condensateur de 100 nF (filtrage)
    • 2 condensateurs de 22 pF
    • 1 source d'alimentation continue + 5 V
    • 1 haut-parleur
 
5- Code source du microcontrôleur PIC
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.
(C) Fabrice Sincère ; Révision 01

Projet à microcontrôleur PIC 16F84A / 16F628A Feux tricolores


  • Vue d'ensemble

  • Principe de fonctionnement

temporisation A = 5 secondes
temporisation B = temporisation D = 3 secondes
temporisation C = 10 secondes

  • Schéma électrique
Pour simplifier, le détecteur de passage de voitures est remplacé par un bouton poussoir.

dimanche 9 février 2014

Question pour un champion


Il s'agit de savoir, qui des 4 joueurs, a appuyé en premier ...

  • Schéma électrique
Chaque joueur possède un bouton poussoir.
Sur le pupitre du maître du jeu, une LED indique qui a appuyé le premier.
L'initialisation se fait en appuyant sur le bouton poussoir "reset" :

N.B. La fréquence de l'oscillateur n'est pas critique : on peut utiliser un quartz de 4 MHz.
La tension d'alimentation (Vcc) doit être comprise entre 2,0 et 5,5 V.
La valeur des résistances est donnée par la loi d'Ohm : R = (Vcc - 1,8) / I
(soit 220 ohms pour Vcc = 5 V et I = 15 mA).

Le code source du 16F628A est quasiment identique à celui du 16F84A.
Cependant, le début de la zone des registres d'usage général du 16F628A se trouve à l'adresse H'020' (H'00C' pour le 16F84A) et il faut penser à désactiver les comparateurs analogiques :
movlw B'00000111'
movwf CMCON

Clignotant à LED ; mise en oeuvre de l'oscillateur interne


  • 1- Présentation
  • 2- Schéma électrique
  • 3- Principe de fonctionnement
  • 4- Liste du matériel
  • 5- Code source du microcontrôleur PIC (écrit en assembleur)
  • 6- Pour plus d'informations


  • 1- Présentation
Ce circuit fait clignoter une LED à une fréquence de 1,91 Hz ou bien 7,63 Hz (suivant la position de l'interrupteur SW1).
Ce projet met en oeuvre l'oscillateur interne du PIC 16F88.

  • 2- Schéma électrique
Schéma électrique avec un PIC 16F88 (18 broches) :

  • 3- Principe de fonctionnement

On utilise l'oscillateur interne du PIC 16F88 : on fait ainsi l'économie d'un quartz ou d'un circuit RC.
La base de temps du microcontrôleur PIC 16F88 est fixée par son registre OSCCON :
IRCF2
(bit 6 du registre OSCCON)
IRCF1
(bit 5 du registre OSCCON)
IRCF0
(bit 4 du registre OSCCON)
Fréquence nominale
f OSC
0
0
0
31,25 kHz
0
0
1
125 kHz
0
1
0
250 kHz
0
1
1
500 kHz
1
0
0
1 MHz
1
0
1
2 MHz
1
1
0
4 MHz
1
1
1
8 MHz

  • Interrupteur SW1 en position OFF
Le registre OSCCON est configuré pour avoir f OSC = 1 MHz.
f OSC2 = f OSC / 4 = 250 kHz ou 250 000 cycles par seconde.
Le microcontrôleur utilise une source d'interruption : celle du module TMR0.
Le module TMR0 (8 bits) est configuré en mode timer.
L' interruption a donc lieu tous les 256*256 = 65 536 cycles (prescaler 1:256), ce qui correspond à 262 144 µs.
La routine d'interruption inverse le niveau logique de la sortie RA1 : la LED clignote donc avec une période de 524 288 µs (soit une fréquence nominale de 1,9073 Hz).

  • Interrupteur SW1 en position ON
Le registre OSCCON est configuré pour avoir f OSC = 4 MHz.
La LED clignote 4 fois plus vite (7,629 Hz).

  • 4- Liste du matériel
    • 1 microcontrôleur PIC 16F88
      • Remarque : vous pouvez demander des échantillons gratuits chez Microchip :)
    • 1 LED
    • 1 résistance de 220 ohms
    • 1 interrupteur
    • 1 source d'alimentation continue 5 V
    • 1 condensateur électrochimique de 10 µF (filtrage de l'alimentation)
    • 1 condensateur de 100 nF (filtrage de l'alimentation)

    • 1 programmateur pour flasher le programme du microcontrôleur PIC
  • 5- Code source du microcontrôleur PIC (en assembleur)
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.


(C) Fabrice Sincère ; Révision 1.0.4

Circuit de test : clignotant à LED


 
  • 1- Présentation
  • 2- Schéma électrique
  • 3- Principe de fonctionnement
  • 4- Liste du matériel
  • 5- Code source du microcontrôleur PIC (en assembleur)
  • 6- Code source du microcontrôleur PIC (en langage C, compilateur mikroC)
  • 7- Simulation avec ISIS-Proteus


  • 1- Présentation
Ce circuit fait clignoter une LED à une fréquence d'environ 1 Hz.
Vous me direz qu'il est superflu d'utiliser un microcontrôleur pour réaliser cette tâche.
Je vous répondrai que je suis d'accord : un multivibrateur à NE555 est bien suffisant.
Mais la simplicité du montage devrait intéresser les débutants.
On pourra aussi se servir de ce montage comme circuit de test, pour mettre en évidence la défaillance du microcontrôleur.

    • Photo du circuit avec un PIC 16F876A : difficile de faire plus simple !


  • 2- Schéma électrique
Schéma électrique avec un PIC 16F84A ou 16F628A ou 16F88 (18 broches) :


Schéma électrique avec un PIC 16F876A (28 broches) :
On veillera à utiliser les deux masses (broches 8 et 19).


  • 3- Principe de fonctionnement
La base de temps du microcontrôleur PIC est fixée par R2 et C3 :
f OSC1 ≈ 1/(R2.C3) ≈ 2130 Hz
f OSC2 = f OSC1 / 4 ≈ 530 Hz ou 530 cycles par seconde (en pratique : 440 Hz mesurée sur la broche OSC2)
Le microcontrôleur utilise une source d'interruption : celle du module TMR0.
Le module TMR0 (8 bits) est configuré en mode timer (avec prescaler 1:1).
L' interruption a donc lieu tous les 256 cycles, ce qui correspond à environ une demi seconde.
La routine d'interruption inverse le niveau logique de la sortie RA1 : la LED clignote donc avec une période de l'ordre de 1 seconde.

  • 4- Liste du matériel
    • 1 microcontrôleur PIC 16F84A ou 16F628A ou 16F88 ou 16F876A
      • Remarque : vous pouvez demander des échantillons gratuits chez Microchip :)
    • 1 LED
    • 1 résistance 10 kΩ 1/4 W
    • 1 résistance de 220 Ω
    • 1 condensateur de 47 nF
    • 1 source d'alimentation continue 5 V
    • 1 condensateur électrochimique de 10 µF (filtrage de l'alimentation)
    • 1 condensateur de 100 nF (filtrage de l'alimentation)

    • 1 programmateur pour flasher le programme du microcontrôleur PIC
  • 5- Code source du microcontrôleur PIC (en assembleur)
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.
Les programmes sont élémentaires : seulement 11 instructions !

  • 6- Code source du microcontrôleur PIC (en langage C, compilateur mikroC)
J'utilise le compilateur mikroC de la société mikroElektronika.
Une version de démonstration est téléchargeable gratuitement (taille du code objet .hex limitée à 2 ko).
/*
Circuit de test : clignotant à LED
(C) Fabrice Sincère
Microcontrôleur PIC 16F876A
Langage C : compilateur mikroC v8.2

Bits de configuration : 0x3F73
    _RC_OSC : oscillateur RC (0.00213 MHz)
    _WDT_OFF : watchdog timer OFF
    _PWRTE_ON : power up timer ON
    _BODEN_ON : brown out detect ON
    _LVP_OFF : low voltage program OFF
*/

# define BIT_LED   F1

void interrupt()
{
     // routine d'interruption
     // 1 seule source d'interruption : TMR0 en mode timer
     // toutes les 256*1 = 256 cycles (prescaler 1:1)

    if ((INTCON.T0IE) && (INTCON.T0IF))
    {
        PORTA.BIT_LED = ~PORTA.BIT_LED;
            // on inverse le niveau logique de la sortie RA1
            // => inversion de l'état de la LED

        INTCON.T0IF = 0; //on efface le drapeau du timer TMR0
    }
}

void main()
{
     // initialisation

    OPTION_REG = 0b11011111;
        // bit 5 (T0CS) = 0 : TMR0 en mode timer
        // prescaler 1:1

    ADCON1 = 0b00000110; // la broche RA1 est configurée commme entrée/sortie numérique

    TRISA = 0b11111101;  // bit 1 du port A (RA1) = 0 : configuration en sortie (commande de la LED)

    PORTA.BIT_LED = 0 ;  // Led allumée

    INTCON = 0b10100000;
        // bit 7 (GIE) = 1 : autorisation globale des interruptions
        // bit 5 (T0IE) = 1 : autorisation de l'interruption TMR0
        // bit 2 (T0IF)= 0 : on efface le drapeau de l'interruption TMR0

    do
    {
        // on attend le débordement de TMR0 (0xFF -> 0x00)
        // ce qui génère une interruption
    } while(1);
}

  • 7- Simulation avec ISIS-Proteus
Proteus est une suite logicielle de CAO électronique éditée par la société Labcenter Electronics.
ISIS est la composante de Proteus qui permet la création de schémas et la simulation électrique.
La grande force de ISIS est de pouvoir simuler le comportement d'un microcontrôleur (PIC, Atmel, 8051, ARM, HC11...) et de son interaction avec les composants qui l'entourent.


          simulation_proteus_isis



(C) Fabrice Sincère ; Révision 1.3.2

Horloge à quartz avec affichage des secondes par 60 leds

Horloge à quartz avec affichage des secondes par 60 leds
(d'après une idée originale de Slimane Nait-Kait)

  • Présentation
  • 2- Schémas électriques
  • 3- Les circuit imprimés
  • 4- Code source du microcontrôleur PIC

  • 1- Présentation
Il s'agit d'une horloge à quartz parfaitement classique, avec un bouton poussoir qui règle les minutes, et un autre les heures.

Photos : Slimane Nait-Kait
 2- Schémas électriques
Le schéma de base est celui du projet horloge à quartz.


Le schéma de base est complété par le module d'affichage des secondes :

Le circuit 74HC164 est un régistre à décalage 8 bits.

Pour permettre l'alimentation par un adaptateur sur secteur, un pont de diodes et des régulateurs de tension ont été ajoutés.





Télécharger les autres typons

  • 4- Code source du microcontrôleur PIC
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.
Le code source est basé sur celui du projet horloge à quartz avec quelques modifications :
Sur la broche RB7, on a :
  • une impulsion au niveau bas à la mise sous tension
  • une impulsion au niveau bas (durée 2 µs) toutes les minutes


(C) Fabrice Sincère ; Révision 1.3.5

Electrocardiographe / Cardiofréquencemètre pic16f84/16f628


Electrocardiographe / Cardiofréquencemètre

  • 1. Electrocardiographe (ECG)
  • 2. Cardiofréquencemètre
  • 3. Liste du matériel
  • 4. Code source du microcontrôleur PIC
  • 5. Bibliographie

1. Electrocardiographe

Le schéma électrique est inspiré du data sheet de l'amplificateur d'instrumentation AD620 de la société Analog Devices.
Le conditionnement des signaux provenant des électrodes est réalisé par l'amplificateur d'instrumentation AD620.

L'activité cardiaque est visualisable sur un oscilloscope (au point A).

(Merci à Mathieu Pohl et Maxime Joly pour l'oscillogramme).
N.B. Ce signal est très instable...
  • Gros plan sur les électrodes de surveillance cardiaque (avec support mousse et gel adhésif) :
Le comparateur LM339 permet d'avoir un signal logique TTL (au point B), qui sera utilisé dans la deuxième partie.

2. Cardiofréquencemètre

A partir du signal B, on veut le pouls (nombre de pulsations cardiaques par minute).
Le travail est réalisé par un microcontrôleur PIC 16F84A (ou 16F628A).
Le microcontrôleur compte le nombre de front montant du signal B (interruption RB0/INT) pendant 15 secondes.
L'intervalle de 15 secondes est obtenu avec l'interruption du module TMR0 en mode timer.
Le résultat est ensuite multiplié par 4 pour avoir le pouls.
L'affichage se fait par 3 afficheurs 7 segments à LED.
Le rafraîssement de l'affichage se fait toutes les 15 secondes.
La gamme de mesure va de 000 à 396 (avec un pas de 4).
Le buzzer émet un bip à chaque pulsation cardiaque.



3. Liste du matériel du cardiofréquencemètre
    • 1 microcontrôleur PIC 16F84A ou 16F628A (fréquence 4 MHz ou plus)
    • 3 x 74LS47 (décodeur BCD -> 7 segments)
    • 1 quartz de 4 MHz
    • 1 transistor 2N2222A (NPN)
    • 1 résistance 4,7 k 1/4 W
    • 3 x 7 = 21 résistances de 220 ohms
    • 3 afficheurs à LED 7 segments (anode commune)
    • 1 buzzer
    • 1 condensateur électrochimique de 10 µF
    • 1 condensateur de 100 nF
    • 2 condensateurs de 22 pF
    • 1 source d'alimentation continue 5 V
4. Code source du microcontrôleur PIC
Le code source a été écrit en langage assembleur avec l'environnement de développement gratuit MPLAB IDE de Microchip.

5. Bibliographie

(C) Fabrice Sincère ; Révision 1.2.10

Carte d'interface USB Labview - PIC18F4550 via la communication HID

Ce montage consiste à réaliser une carte d’interface USB avec une interface graphique réalisée avec LABVIEW à base de microcontrôleur PIC18F4550 pour commander des sorties numériques et acquérir des entrées numériques et analogiques via le convertisseur du PIC.
Cette carte interface proposé par notre cher ami CHEDLI BOU THAALAB, nécessite deux programmes : un coté PIC18F4550 édité avec Mikropascal et l'autre côté PC réalisé avec Labview.
Interface USB Labview
Nous allons commencer par un tutorial sur l’USB dans Labview ;
1.     Introduction
Ce tutorial constitue un point de départ dans l'utilisation de NI-VISA pour communiquer avec un matériel USB. Toutefois, il ne s'agit pas d'une introduction à l'architecture USB ni aux différents protocoles utilisés dans les communications par USB. Après lecture de ce tutorial, vous serez capable d'installer un matériel USB et d'utiliser NI-VISA pour communiquer avec ce matériel, en ayant assimilé le fonctionnement du protocole de communication.
2.     Connaissances de base sur l'USB et sur VISA
VISA est une API (interface de programmation d'applications) haut niveau utilisée pour communiquer avec les bus d'instrumentation. Elle est indépendante de la plate-forme, du bus et de l'environnement. Autrement dit, la même API est utilisée pour créer un programme de communication avec un matériel USB grâce à LabVIEW sur une machine sous Windows.
L'USB est un bus de communication basé messages. Cela signifie qu'un PC et un matériel USB communiquent par envoi de commandes et de données sur le bus sous forme de données textuelles ou binaires.
Chaque matériel USB possède son propre jeu de commandes. Les fonctions NI-VISA d'écriture et de lecture permettent d'envoyer et de lire ces commandes. Vous pouvez obtenir les commandes de votre instrument en contactant son constructeur ou créer vos propres commandes.
NI-VISA supporte les communications par USB à partir de la version 3.0. Deux classes de ressources VISA sont supportées : USB INSTR et USB RAW.
Les matériels USB conformes au protocole USB de classe test et mesure (USBTMC) utilisent les ressources de classe USB INSTR. Les matériels USBTMC sont conformes à un protocole que la classe de ressources VISA USB INSTR peut comprendre. Pour communiquer avec un matériel USBTMC, aucune configuration n'est nécessaire.
Tout instrument USB autre que ceux qui sont spécifiquement conformes à la spécification USBTMC est un instrument USB RAW.
Pour en savoir plus sur l'API NI-VISA, consultez l'Aide NI-VISA. Ce document est inclus avec NI-VISA et peut être obtenu en suivant le lien suivant.
3.     Configuration de NI-VISA pour le contrôle d'un bus USB
 Ce paragraphe parcourt les étapes de configuration d'un matériel USB RAW pour son contrôle par NI-VISA 3.0 à partir d'un ordinateur sous Windows. Pour un matériel compatible USBTMC, connectez le matériel et passez directement au paragraphe 4.
À ce stade, NI-VISA doit être déjà installé sur l'ordinateur et le matériel USB ne doit pas être connecté. De plus, le driver du matériel USB ne doit pas être installé. Trois étapes sont nécessaires pour configurer un matériel USB pour utiliser NI-VISA :
  • Création d'un fichier INF grâce à l'Assistant de développement de drivers (DDW).
  • Installation du fichier INF et du matériel USB grâce au fichier INF.
  • Test du matériel avec NI-VISA Interactive Control.
Tout au long de ce tutorial, on utilise un boîtier NI DAQPad-6020E installé sur un système Windows XP, comme exemple de matériel USB. Comme ce tutorial est destiné à expliquer la configuration d'un matériel USB générique, les spécifications détaillées du DAQPad-6020E ne sont pas traitées ici. Rappelez-vous que NI-DAQ est le seul driver supporté pour contrôler un DAQPad-6020E.
3.1. Création d'un fichier INF grâce à l'Assistant de développement de drivers (DDW)
Avant d'utiliser NI-VISA, il faut indiquer à Windows de l'utiliser en tant que driver par défaut du matériel. Dans l'environnement Windows, ceci est réalisable avec un fichier ".INF". Le driver NI-VISA 3.0 (et supérieur) inclut l'Assistant VISA Driver Development Wizard (DDW), qui permet de créer un fichier INF pour le matériel USB.
Pour ouvrir DDW, sélectionnez Démarrage»Tous les programmes»National Instruments»VISA»VISA Driver Developer Wizard. La Figure n°1 montre l'écran d'ouverture.
 Figure n°1. Écran de sélection du bus matériel de l'Assistant VISA DDW
Figure n°1. Écran de sélection du bus matériel de l'Assistant VISA DDW
Cet assistant peut être utilisé afin de créer un fichier INF destiné à un matériel PXI/PCI, USB ou IEEE 1394. Pour la création d'un driver de matériel USB, cliquez sur USB puis sur Next. La fenêtre des informations de base du matériel de VISA DDW s'ouvre, comme indiqué à la Figure n°2.
Figure n°2. Écran des informations de base sur le matériel de VISA DDW
Figure n°2. Écran des informations de base sur le matériel de VISA DDW
À cette étape, vous devez connaître l'identifiant (ID) du fournisseur USB et l'ID du produit, pour l'instrument USB. Ces nombres identifient le matériel USB pour son installation et son ciblage, afin de pouvoir communiquer avec lui. Selon la spécification USB, ces deux identifiants sont des nombres hexadécimaux 16 bits et doivent être fournis par le fabricant du matériel.
Si vous ne connaissez pas l'ID du fournisseur USB ni celui du produit, il est possible de les obtenir en connectant le matériel à l'ordinateur et en laissant ce dernier reconnaître le nouveau matériel.
Annulez l'assistant de recherche de nouveau matériel s'il démarre. Ouvrez le gestionnaire de périphériques matériels à partir du panneau de configuration et trouvez votre matériel dans la liste, habituellement dans la zone "Contrôleurs de bus USB". Un point d'exclamation jaune peut être affiché pour indiquer qu'il s'agit d'un matériel inconnu. Double-cliquez sur le matériel pour ouvrir sa fenêtre de propriétés. Sélectionnez l'onglet Détails et vérifiez que le "Numéro d'identification de l'instance du périphérique" soit indiqué dans la liste déroulante des attributs. Une chaîne de caractères similaire à celle de la Figure n°3 doit être affichée. Les quatre caractères à droite de "VID_" et de "PID_" sont respectivement l'ID du fournisseur et l'ID du produit. Notez ces caractères pour votre matériel, fermez le Gestionnaire de périphériques et déconnectez le matériel de l'ordinateur. Une autre solution consiste à contacter le fournisseur du matériel pour obtenir ces informations.
 Figure n°3. ID du fournisseur et ID du produit, à partir du gestionnaire de périphériques
Figure n°3. ID du fournisseur et ID du produit, à partir du gestionnaire de périphériques
Pour le DAQPad-6020E, l'ID du fournisseur est 0x3923 et l'ID du produit est 0x12C0. Si votre matériel n'est pas un NI DAQPad-6020E, ces identifiants sont différents.
Remarque : avant d'utiliser l'Assistant DDW, vérifiez que le matériel soit déconnecté de l'ordinateur.
Saisissez l'ID du fournisseur, l'ID du produit, le nom du fabricant et le nom du modèle pour votre matériel dans les champs correspondants.
Cliquez sur Next. La fenêtre de propriétés des fichiers de sortie est affichée comme indiqué à la Figure n°4.
Figure n°4. Écran des propriétés des fichiers de sortie de VISA DDW
Figure n°4. Écran des propriétés des fichiers de sortie de VISA DDW
Le préfixe d'instrument USB est tout simplement un descripteur destiné à identifier les fichiers utilisés pour ce matériel. Saisissez un préfixe d'instrument USB, sélectionnez le répertoire souhaité dans lequel placer ces fichiers, puis cliquez sur Next. La fenêtre suivante présente les options d'installation. Par défaut, le choix propose d'installer les informations d'installation pour le système d'exploitation et constitue souvent la meilleure option. Une fois cette option sélectionnée, cliquez sur Finish pour quitter l'assistant. Le fichier INF est créé dans le répertoire de sortie spécifié à l'écran précédent.
3.2. Installation des fichiers INF et du matériel USB
L'installation des fichiers INF est différente pour chaque version de Windows. Lorsque l'Assistant DDW crée un fichier INF, les instructions d'installation sont incluses dans une en-tête au début du fichier INF. Comme les fichiers INF sont des fichiers texte ASCII, ils peuvent être lus par n'importe quel éditeur de texte tel que Bloc-notes. Pour en savoir plus sur l'installation d'un fichier INF, ouvrez les fichiers INF dans un éditeur de textes et suivez les instructions situées au début du fichier. Ce tutorial suppose que l'on utilise Windows XP.
Copiez le fichier INF dans le répertoire INF. Sous Windows XP, l'adresse de ce répertoire est habituellement C:WINDOWSINF. Ce répertoire peut être caché, ce qui nécessite éventuellement de modifier les options des dossiers pour visualiser les fichiers cachés.
Cliquez avec le bouton droit sur le fichier INF dans C:WINDOWSINF puis cliquez sur Installer. Ce processus crée un fichier PNF pour le matériel. Le matériel USB est maintenant prêt à être installé.
Connectez le matériel USB. Parce qu'un matériel USB est enfichable à chaud (Hot Plug), Windows doit pouvoir le détecter et l'Assistant d'ajout d'un nouveau matériel doit démarrer automatiquement dès qu'il est connecté au port USB. Suivez les instructions sur l'écran de l'assistant. Lorsqu'on demande de sélectionner un driver pour ce matériel, parcourez l'arborescence jusqu'au répertoire INF et sélectionnez le fichier INF créé grâce à l'Assistant DDW.
Remarque : dans certains cas, Windows peut avoir déjà associé un driver par défaut au matériel USB. Alors, Windows cherchera d'abord à installer ce driver. Une fois le matériel USB connecté et Windows ayant installé le driver par défaut, cliquez avec le bouton droit sur Poste de travail et sélectionnez Propriétés. Dans la fenêtre Propriétés système, sélectionnez l'onglet Matériel et cliquez sur le Gestionnaire de périphériques. Une fois celui-ci ouvert, développez l'arborescence "Périphériques d'interface utilisateur (HID)". Puis trouvez quelle instance de "Périphérique d'interface utilisateur" (illustrée à la Figure n°5) correspond à votre matériel USB en cliquant avec le bouton droit, en sélectionnant Propriétés et en vérifiant l'onglet Détails pour les ID du fournisseur et du produit correspondants.
Figure n°5. Propriétés de l'instance du périphérique d'interface utilisateur USB
Figure n°5. Propriétés de l'instance du périphérique d'interface utilisateur USB
Une fois trouvée, cliquez sur elle avec le bouton droit puis sur Mettre à jour le pilote, comme illustré à la Figure n°6.
Figure n°6. Mise à jour du driver pour votre matériel USB
Figure n°6. Mise à jour du driver pour votre matériel USB
Sur le premier écran, sélectionnez "Non, pas maintenant/Installer à partir d'une liste ou d'un emplacement spécifié (utilisateurs expérimentés)", puis cliquez sur Suivant. Sur le deuxième écran, sélectionnez "Installer à partir d'une liste ou d'un emplacement spécifié (utilisateurs expérimentés)", puis cliquez sur Suivant. Sur le troisième écran, sélectionnez "Ne pas rechercher. Je vais choisir
le pilote à installer." Le quatrième écran ressemble à celui de la Figure n°7 où le pilote mis en surbrillance est celui que vous avez créé. Sélectionnez ce driver, puis cliquez sur Suivant. Lorsque le driver a terminé son installation, cliquez sur Terminé.
Figure n°7. Sélection du driver VISA pour votre matériel USB
Figure n°7. Sélection du driver VISA pour votre matériel USB
4.  Test des communications avec VISA Interactive Control
Ouvrir Measurement & Automation Explorer (MAX). Sélectionnez  Outils»Rafraîchir pour réactualiser la vue. Le matériel USB doit figurer sur la liste en tant que matériel USB sous Matériels et interfaces, comme illustré à la Figure n°8. Le matériel USB est désormais installé et configuré pour utiliser NI-VISA.
Si vous sélectionnez le matériel USB, les informations sur le matériel sont affichées dans la fenêtre Paramètres USB. Depuis cette fenêtre, les informations telles que l'ID du fournisseur, le code du modèle et le numéro de série du matériel sont accessibles.
Figure n°8. Matériel USB vu dans MAX
Figure n°8. Matériel USB vu dans MAX
Afin de communiquer avec le matériel grâce à VISA, utilisez le descripteur d'instrument VISA pour votre matériel. Le format du descripteur d'instrument pour un matériel USB INSTR est le suivant : USB[carte]:: ID du fournisseur:: code de modèle:: numéro de série[:: numéro de l'interface USB]::INSTR. Le format du descripteur d'instrument pour un matériel USB RAW est le suivant :
USB[carte]:: ID du fournisseur:: code de modèle:: numéro de série[:: numéro de l'interface USB]::RAW.
Selon la spécification USBTMC, tous les matériels USBTMC doivent posséder un numéro de série. Certains matériels USB RAW peuvent ne pas avoir de numéro de série. Dans ce cas, NI-VISA assigne automatiquement un numéro de série VISA spécifique pour ce matériel. Le format de ce numéro de série est NI-VISA-#, où # est un nombre généré automatiquement.
Certains matériels USB ont plusieurs interfaces, de même qu'un matériel PCI peut avoir plusieurs fonctions. Si votre matériel ne supporte qu'une seule interface, il n'est pas nécessaire d'inclure un numéro d'interface USB.
Le DAQPad-6020E utilise la classe RAW, le code du fournisseur et celui du modèle sont respectivement 0x3923 et 0x12C0. Pour le DAQPad-6020E, le descripteur de l'instrument est USB0::0x3923::0x12C0::00B50DAE::RAW.
Afin de tester les communications avec ce matériel, ouvrez MAX. Sélectionnez Outils»NI-VISA»VISA Interactive Control. Une fenêtre similaire à celle de la Figure n°9 doit s'ouvrir.
Figure n°9. VISA Interactive Control
Figure n°9. VISA Interactive Control
Le programme VISA Interactive Control (VISAIC) est un utilitaire qui sert à communiquer facilement avec n'importe quelle ressource VISA. Après la configuration du matériel USB pour l'utilisation de VISA, il devrait apparaître sur la liste dans la catégorie USB. Double-cliquez sur le matériel pour ouvrir une session VISA sur le matériel. Une fenêtre similaire à celle de la Figure n°10 doit
s'ouvrir.
Figure n°10. Session VISA ouverte par VISA Interactive Control
Figure n°10. Session VISA ouverte par VISA Interactive Control
En ouvrant une session VISA avec VISAIC, les onglets Template et Property Node (Set) sont automatiquement sélectionnés. Pour lire une propriété, sélectionnez l'onglet Property Node (Get) et sélectionnez la propriété souhaitée, puis cliquez sur Execute. La valeur actuelle de la propriété spécifiée dans la zone Attribute Name est affichée dans l'indicateur Current Value. Sur la Figure n°10, la propriété Resource Name a été lue.
Pour en savoir plus sur l'utilisation de VISAIC, consultez le document de Developer Zone : VISA Interactive Control (VISAIC). Pour en savoir plus sur l'API NI-VISA, consultez l'Aide NI-VISA. Leurs liens figurent à la fin de ce tutorial. Afin d'obtenir une liste de commandes valides pour votre instrument USB, contactez le fournisseur de votre instrument.
Utilisation de NI-VISA pour communiquer avec un matériel USB
Ce paragraphe décrit comment communiquer avec un matériel USB en utilisant NI-VISA 3.0 et version supérieure. Rappelez-vous qu'il existe deux classes de matériels USB. La méthode de communication dépend de la classe de votre matériel.
Classe USB INSTR (USBTMC)
Les matériels conformes à la Classe USB Test et mesure (USBTMC) utilisent la classe NI-VISA USB INSTR. Ces matériels utilisent un style de communication 488.2. Pour ces matériels, il est possible d'utiliser simplement les fonctions VISA Open, Close, Read et Write de la même manière que pour communiquer avec des instruments GPIB.
La Figure n°11 illustre un VI LabVIEW qui communique avec un matériel USBTMC. Dans cet exemple, une session VISA est ouverte vers un matériel USB. Une commande est écrite vers le matériel et la réponse est lue en retour. La commande spécifique envoyée ici est la requête d'identification du matériel. Vérifiez auprès du fournisseur de votre matériel quel est le jeu de commandes. À la fin des communications, la session VISA est fermée.
Figure n°11. Exemple de diagramme LabVIEW USBTMC
Figure n°11. Exemple de diagramme LabVIEW USBTMC
Classe USB RAW
Communiquer avec la classe USB RAW est plus compliqué parce que chaque matériel peut utiliser son propre protocole de communication. Contactez le fournisseur de votre matériel pour en savoir plus sur son protocole de communication.
L'USB communique grâce à quatre types de canaux ou de points de terminaison : de commande, en bloc, d'interruption et isochrone. Chaque type de canal transfère un type différent d'informations.
De plus, les points de terminaison peuvent être de n'importe quel type. Pensez au point de terminaison d'un socket de communication. Pour en savoir plus sur l'architecture USB, consultez la spécification USB à partir du lien ci-dessous.
NI-VISA supporte trois types de canaux USB : de commande, en bloc et d'interruption. Lorsque NI-VISA détecte un instrument USB, il balaye automatiquement l'instrument pour trouver le point de terminaison le plus bas pour chaque type.
Lorsque VISA le détecte, il assigne cette valeur à l'attribut VISA approprié. Les points de terminaison d'entrée et de sortie en bloc sont stockés dans les attributs VI_ATTR_USB_BULK_IN_PIPE et VI_ATTR_USB_BULK_OUT_PIPE, respectivement. Le point de terminaison d'entrée d'interruption est stocké dans l'attribut VI_ATTR_USB_INTR_IN_PIPE. Une valeur de -1 indique qu'un matériel USB ne supporte pas ce type de canal. Pour le canal de commande, seul le point de terminaison zéro est supporté. Si vous utilisez l'API C, la fonction viSetAttribute permettra de modifier les points de terminaison. En LabVIEW, utilisez le noeud de propriétés VISA et la fonction VISA Write.
NI-VISA inclut quatre fonctions destinées à transférer des données via des canaux USB. Avant de pouvoir communiquer avec le matériel grâce à ces fonctions, il est nécessaire de paramétrer le protocole de communication en utilisant les attributs USB VISA. La liste suivante décrit les fonctions disponibles.
Utilisez les fonctions VISA USB Control In et VISA USB Control Out pour transférer des données par un canal de commande.
Pour transférer des données par un canal en bloc, utilisez les fonctions VISA Read et VISA Write.
Avec LabVIEW, VISA inclut une fonction supplémentaire à utiliser avec le canal d'interruption : VISA Get USB Interrupt Data. Dans l'API C, la même action peut être réalisée en accédant aux attributs VI_ATTR_USB_RECV_INTR_SIZE et VI_ATTR_USB_RECV_INTR_DATA de l'objet événement VI_EVENT_USB_INTR. Consultez l'Aide NI-VISA pour en savoir plus sur les événements
VISA.
Programme du PIC;
L'USB a le désavantage d'obliger l'utilisation de composants particuliers. Dans notre application, nous aurons recours au microcontrôleur 18F4550 de Microchip, une puce simple à programmer (en mikropaskal) et munie de tous les composants hardware nécessaire à la communication sur port USB. Le schéma de la mise en place du composant reste très simple:
Carte de communication USB Labview
Figure 12: Carte de communication USB Labview
Au centre du schéma, nous retrouvons le PIC18F4550, celui-ci est cadencé par un quartz à 20MHz. Nous avons aussi câblé sur ce schéma 4 entrées analogiques: AN0, AN1, AN2, AN3, AN4 et AN5. Sur les broches Rd0 à RD7 nous plaçons des leds qui nous servirons pour notre application. Le port B reste inutilisé pour notre article mais nous plaçons la possibilité d'étendre les fonctionnalités de la carte en installant des borniers.
Les capacités C1 et C2 sont de 22pf. Attention de ne pas se tromper pour le connecteur USB. Il s'agit d'un connecteur femelle de Type B. Pour la connecter au PC, j'utilise un cordon d'imprimante A vers B, le même que les cordons HP.
 Routage:
Routage de la carte
Programmation du PIC18F4550:
Créer un nouveau projet pour PIC18F4550, en fixant la fréquence de l'horloge du PIC (pas la fréquence de résonance du quartz, mais la fréquence en sortie du PLL fournie par le tableau ci-après).
Horlogue du PIC
Ensuite, il faut configurer le comportement du PIC en remplissant ses fusibles. Les fusibles sont différents registres du PIC qui fixent le type d'oscillateur, la vitesse de l'horloge interne, l'état du watchdog...
Pour ce faire, Mikropaskal fournit une interface graphique qui simplifie la configuration du PIC (Project -> Edit Project). Pour que l'interface HID fonctionne correctement, il faut respecter quelques règles:
    Activer le régulateur de tension USB
    Assurer une fréquence d'hologe de 4MHz en sortie de la PLL
    Utiliser la sortie de la PLL comme horlog USB    
Mikropascal fournis un ensemble de librairies facilitant la mise en place du protocole HID. Voici les étapes clé de la programmation de l'interface:
Générer le Descripteur de l'interface:
  1. Lancer l'utilitaire HID Terminal de Mikropascal (Tools -> HID Terminal)
  2. Onglet Descriptor
  3. Compléter les informations propres à votre interface
  4. Enregistrer le descripteur pour Mikropascal dans le dossier de votre projet
 USB
· Importer le descripteur dans votre projet: « uses USBdsc; »
· Initialiser le module HID: HID-Enable(&ReadBuf, &WriteBuf);
· Pour lire des informations: while (HID_Read() = 0); uu par interruption
· Pour écrire des informations: HID_Write();
Pour envoyer votre programme sur l'interface; il vous faut utiliser un programmateur de PIC. J'utilise un programmateur USB. Ensuite il faut importer le fichier .hex qui à été généré par Mikropascal et programmer le PIC avec. La procédure diffère selon le programmateur.
Poure tester la communication HID, vous pouvez utiliser le HID Terminal fournis par Mikropascal Personnellemet, j'utilise Labview, un environnement de programmation graphique développé par National Instrument, qui offre une grande compatibilité avec la plupart des protocoles de communications.
Voivi un exemple simple de commucication HID pernettant de piloter la luminosité des LEDs de l'interface et lire l’entrée analogique
  
Téléchargement :
Carte électronique + Routage

Programme Mikropascal
Interface LABVIEW + Driver


 Documentation sur l'USB
Liens et sources:
www.ni.com
Aide NI-VISA