«

oct 13 2015

Contrôler un PIC 16F877 avec Labwindows/CVI

Dans ce billet, je vais vous présenter les bases pour établir une communication série entre NI Labwindows/CVI et un microcontrôleur de Microchip, c’est le PIC 16F877 dans notre exemple.
Il ne s’agit en aucun cas la meilleure solution, ni le meilleur exemple, c’est simplement une approche basique pour réaliser une carte DIO (digital input output) low cost.
On commence par le schéma suivant pour avoir une idée globale sur le principe de fonctionnement :

DioPicJ’aborde dans cet exemple :

  • Schéma électronique (Simulation avec Isis)
  • Firmware du PIC
  • Application de contrôle (GUI) développée avec Labwindows/CVI.

Passons maintenant au vif du sujet :)

Schéma électronique (Simulation avec Isis) :

Le montage électronique présenté sert à expliquer le principe de fonctionnement ni plus ni moins, il est composé d’un PIC 16F877 avec huit LED connectés sur le port B (des sorties numériques) et huit switch connectés sur le port D (entrées numériques), et un port COM virtuel pour pouvoir communiquer avec l’application Windows (développée en C avec Labwindows/CVI), dans le monde réel les choses peuvent être différentes, une isolation galvanique peut être nécessaire, une alimentation, un circuit d’adaptation de lien série (Max 232) …
Bref, si vous souhaitez réalisez ce montage, vous devez le modifiez, ajoutez les éléments manquants … et faire votre propre PCB, celui de l’article ne suffit pas :) on est d’accord n’est-ce pas.

Schematic_PIC_16F877Firmware du PIC :

Le programme du PIC est écrit en C avec l’IDE Mplab v8.98, compilé avec HI-TECH C Compiler for PIC10/12/16 MCUs V9.83, le principe de fonctionnement est très simple, le programme commence par initialiser les entrées / sorties nécessaires.
Après avoir configuré le lien série, le pic entre dans une boucle infinie de lecture du port COM (fonction read_command), dès réception d’une trame une fonction d’analyse (process_command) est appelé, si une commande valide est reçue, elle sera exécutée directement.
Le programme du PIC  propose également des fonctions d’aide :) il suffit de taper la commande « LS » ou « ? »,  le help sera affiché sur votre terminal série.

Voici le Main du programme :


// ======================================================
//  Function     : main
//  Version      : v1.01
//  Date         : 10/2015
//  Author       : Tawfik NOURI
//  Brief        : Main Program
// ======================================================
void main(void)
{
init_main();
display_terminal_info();
while( 1 )
{
process_command(read_command());
}
}

La liste des commandes disponibles :


16F877>LS
**********************************

*  List of Supported Commands    *

**********************************

*   RB01    -> RB0=1  *

*   RB00    -> RB0=0  *

*   RB11    -> RB1=1  *

*   RB10    -> RB1=0  *

*   RB21    -> RB2=1  *

*   RB20    -> RB2=0  *

*   RB31    -> RB3=1  *

*   RB30    -> RB3=0  *

*   RB41    -> RB4=1  *

*   RB40    -> RB4=0  *

*   RB51    -> RB5=1  *

*   RB50    -> RB5=0  *

*   RB61    -> RB6=1  *

*   RB60    -> RB6=0  *

*   RB71    -> RB7=1  *

*   RB70    -> RB7=0  *

*   PD?    -> PORTD = xx *

*   INFO   -> Information       *

*   LS ou ?-> List of commands  *

**********************************

OK
16F877>

Les sources de l’exemple sont disponible pour téléchargement :

Sources PIC : Dio_Firmware_Hitech

Simulation Isis (Version  8.1 SP 1) : Dio_Proteus_Isis

Application de contrôle (GUI) développée avec Labwindows/CVI :

Passons maintenant au dernier point, c’est le GUI CVI.
L’application de supervision GuiDio est développée en C avec  NI Labwindows/CVI s’interface avec la carte à PIC via le port COM du PC (Adaptateur USB/Série pour les PC portable).
L’IHM proposé très simple mais contient tous les éléments nécessaires pour dialoguer avec le module à PIC :

  • Liste déroulante pour choisir un port COM (COM1, COM2, ….)
  • Liste déroulante pour choisir une Vitesse particulière (9600, 19200, ….)
  • Led pour indiquer le statut du port COM
  • Switch pour démarrer / arrêter la communication série avec le module.
  • Zone texte pour afficher les messages d’erreurs de communication
  • Huit led pour indiquer le statut du port D (Led / entrée)
  • Huit interrupteur pour changer l’état des sorties (Interrupteur / Sortie)
GUI_1 GUI_2

 

Voici le résultat d’une simulation sur mon PC :

DemoDioPic

Les sources GUI Labwindows/CVI sont également disponible pour téléchargement : CVI_GuiDio

J’ai fermé le fil des commentaires car j’ai toujours des soucis a manager les spam.

En cas de besoin d’information complémentaires n’hésitez pas à m’envoyer un petit email : nouri.tawfik@gmail.com

A propos de l'auteur

Tawfik

Je suis un test lead automation, consultant et formateur possédant plus de 10 ans d’expérience dans le domaine des
technologies de l’information, développement, tests logiciels, formations professionnelles et plus particulièrement dans l’automatisation de tests en environnement Agile/ ATDD/BDD.