TP

Programmation d'un PIC avec Flowcode

Mise en situation et objectifs du TP

Ce TP a pour but de découvrir la programmation des microcontrôleurs PIC avec le logiciel Flowcode.

Matériel disponible avant de commencer le TP :

la carte électronique PICmicro DEVELOPMENT pour programmer les microcontrôleur PIC

son bloc alimentation 12V

son câble USB

Sortez votre fiche mémo de Flowcode dans le but de la compléter tout au long de ce TP.

Introduction : qu'est-ce qu'un microcontrôleur ?

Un microcontrôleur est un circuit intégré qui rassemble les éléments essentiels d'un ordinateur : processeur, mémoires (mémoire morte pour le programme, mémoire vive pour les données), unités périphériques et interfaces d'entrées-sorties. Les microcontrôleurs se caractérisent par un plus haut degré d'intégration, une plus faible consommation électrique (quelques milliwatts en fonctionnement, quelques nanowatts en veille), une vitesse de fonctionnement plus faible (quelques mégahertz) et un coût réduit par rapport aux microprocesseurs polyvalents utilisés dans les ordinateurs personnels.

Par rapport à des systèmes électroniques à base de microprocesseurs et autres composants séparés (comme par exemple les ordinateurs ou les automates par exemple), les microcontrôleurs permettent de diminuer la taille, la consommation électrique et le coût des produits. Ils ont ainsi permis de démocratiser l'utilisation de l'informatique dans un grand nombre de produits et de procédés.

Les microcontrôleurs sont fréquemment utilisés dans les systèmes embarqués, comme les contrôleurs des moteurs automobiles, les télécommandes, les appareils de bureau, l'électroménager, les jouets, la téléphonie mobile, etc.

Les microcontrôleurs PIC

Un microcontrôleur est un composant électronique d'usage général. Les microcontrôleurs sont devenus des composants incontournables dans l'électroménager, le contrôle de processus industriel, les télécommunications, ou la robotique. Ce module vise à la compréhension de l'architecture et à la mise en oeuvre de ces composants tant sur le plan matériel que logiciel. Il s'agit aussi de savoir utiliser les outils de développement associés à ces microcontrôleurs. Cet enseignement concerne les étudiants intéressés par la conception matérielle et logicielle de systèmes modernes intégrant de "l'informatique enfouie".

Un microcontrôleur intègre sur une seule puce un microprocesseur programmable, de la mémoire, et les principaux contrôleurs de périphériques.

Les microcontrôleurs PIC sont des microcontroleurs crées par la société Microchip. Ces microcontroleurs n'appartiennent pas à la famille des 8051, ils intégrent des processeurs RISC et sont pourvus de nombreux périphériques. Ils n'intègrent que 35 instructions assembleur, et sont donc assez facile à programmer. Les programmes sont pour la plupart compatible entre PICs (à part s'il utilisent des registres périphériques spécifiques).

Mais que veut dire "PIC" ? Le nom PIC n'est pas officiellement un acronyme, bien que la traduction en « Programmable Integrated Circuit » (circuit intégré programmable) soit généralement admise.

Intérêt des PIC

Un microcontrôleur est une unité de traitement de l'information de type microprocesseur à laquelle on a ajouté des périphériques internes permettant de réaliser des montages sans nécessiter l’ajout de composants d'annexes. Un microcontrôleur peut donc fonctionner de façon autonome après programmation. En ce sens, les PIC sont particulièrement bien dotés, car ils intègrent mémoire de programme, mémoire de données, ports d'entrée-sortie, et même horloge ou convertisseur analogique-numérique (C.A.N.).

De plus des PIC sont disponibles gratuitement en sample (échantillon) chez Microchip à l'adresse http://sample.microchip.com, adresse bien connues des électroniciens amateurs.

Programmation des PIC

Les PICs sont programmables avec différents languages (assembleur, basic, langage C), et notamment en langage purement graphique utilisant un algorigramme avec le logiciel Flowcode. L'algorigramme permet de programmer un PIC dans Flowcode sans avoir besoin d'apprendre le moindre langage de programmation.

A retenir : un algorigramme permet de programmer rapidement et facilement un PIC sous forme graphique. La création ou la lecture d'un algorigramme ne necessite aucun apprentissage pour un scientifique, contrairement à un langage de programmation comme le langage C.

Les différentes familles de PIC ?

Il existe plusieurs familles de PIC : les PIC12, les PIC14, les PIC16F8x, les PIC16Fxxx, les PIC18,etc. La carte de développement que vous utilisez dans ce TP utilise un PIC de la famille des PIC 16F8x.

Les PIC16FXX sont le bas de gamme de Microchip. Le plus connus d'entre eux est certainement le PIC16F84. Ce dernier a certainement contribué au succès de Microchip dans le secteur de la robotique. Cependant ce dernier commence à être dépassé et est remplacé par des composants comme le 16F88, qui intègre beaucoup plus de périphériques (dont un oscillateur intégré). De plus les PIC16FXX peuvent être programmé en C (même s'ils ne sont pas étudiés pour celà) avec des compilateurs comme CC5X.

4 microcontrôleurs PIC de familles différentes

Ce TP est structuré en 2 parties :

PARTIE 1 : DECOUVERTE DE LA CARTE DE DEVELOPPEMENT

PARTIE 2 : APPLICATION

Travail demandé

Activité 1-1 : préparation de la carte

Reliez la carte au port USB du PC puis alimentez-la en utilisant son propre bloc d'alimenttion (réglé sur 12V).

Lancez le logiciel Flowcode sur le poste connecté à la carte. Pour cela, utilisez l'icône présente sur le bureau de Windows ou bien allez dans le menu Démarrer + Programmes + Matrix Multimedia + Flowcode V3 + icône Flowcode V3, puis choisissez comme cible la référence du microcontrôleur PIC présent sur la carte.

Configurer ensuite Flowcode comme suit (à vérifier systèmatiquement pour chaque nouveau fichier créé dans Flowcode) :

1 - Dans le menu Puce + Cible, vérifier si la cible est correcte (16f88)

2 - Dans le menu Puce + Vitesse d'horloge, régler la vitesse de l'horloge de la carte sur 19660800 Hz et la vitesse de simulation sur Aussi vite que possible

3 - Dans le menu Puce + Configurer réglez l'oscillateur sur XTAL et le Watchdog timer sur off

Configuration indispensable pour que Flowcode puisse dialoguer avec la carte
Vérifiez sur la carte que les deux interrrupteurs LCD et 7-SEG (placés sous l'afficheur LCD) sont sur off, que l'interrupteur XTAL/RC est sur XTAL, et que l'interrupteur FAST/SLOW est sur FAST.

Remarque : toute cette procédure préparatoire de Flowcode et de la carte est indiquée sur la page 4 de la fiche mémo et ne vous sera plus rappelée dans les futurs TP : consultez de vous même la fiche mémo pour la retrouver.

Pour afficher le brochage du PIC dans Flowcode vous pouvez cliquer sur "Puce" dans le menu Affichage. Vous constatez que le PIC 16F88 est un circuit intégré de 18 pattes (vous pouvez aussi le vérifier sur la carte).

Activité 1-2 : création d'un premier programme de test

Afin de tester le bon fonctionnement de la carte et de sa connexion avec Flowcode vous allez créer un premier programme qui va faire clignoter la LED A0 de la carte avec une fréquence de 1 Hz. Pour celà :

ETAPE 1 : Ajoutez une barre de LED dans votre projet, et connectez-la au port A :

Remarque : pour obtenir les propriétés d'un composant, cliquez sur le petit bouton situé dans la barre de titre du composant :

ETAPE 2 : Créez dans votre projet l'algorigramme suivant :

Algorigramme qui fait clignoter la LED A0

Remarque : comme le port A constitue un octet (mot binaire de 8 bits) et que chaque LED est connecté à un bit du port A, chaque LED a pour numéro une puissance de 2 . Et en application du principe du binaire naturel il suffit d'additionner plusieurs puissances de 2 pour allumer plusieurs LED.

Par exemple pour allumer la LED A5 il faut mettre 32 dans le port A (32 = 2 puissance 5)

Et pour allumer les LED A4 et A1 en même temps il faut mettre 18 dans le port A (18 = 16 + 2), etc.

Poid de chaque LED en fonction de son rang sur le port A

Les blocs Boucle, Sortie et Pause constituant cet algorigramme sont disponibles en cliquant sur les icônes ci-dessous. Pour connaître le nom des autres blocs, placez le curseur de la souris sur un symbole sans cliquer et consultez les info-bulles :

Rappel : pour atteindre les propriétés d'un bloc (par exemple pour régler la durée d'une temporisation) il suffit de double cliquer sur le bloc dans l'algorigramme.

ETAPE 3 : Lancez la simulation en cliquant sur le bouton Exécuter (ou en appuyant sur F5) et vérifier si la LED A0 clignote bien avec une fréquence de 1 Hz à l'écran. Arrêter la simulation du programme en cliquant sur le bouton Arrêter.

Important : pour utiliser les LED en sortie sur la carte de développement il faut mettre les 2 interrupteurs LCD et 7-SEG sur off

ETAPE 4 : vous allez maintenant transférer votre programme sur la carte PICmicro DEVELOPMENT afin de faire clignoter la LED A0 réelles présente sur la carte. Pour cela, commencez par enregistrer votre projet sur le disque dur dans le répertoire "Mes Documents" en créant un sous-répertoire 1S1 s'il n'existe pas encore. Cliquez ensuite sur Compiler vers puce dans le menu Puce (ou utilisez le bouton raccourcis correspondant). Observez sur la carte PICmicro le comportement de la LED A0.

Remarque : une fois que votre programme est transféré sur la carte, il tourne dans le PIC 16f88 présent sur la carte et le logiciel Flowcode n'a plus aucun lien sur ce programme. Il est notamment impossible d'arrêter le programme à partir de Flowcode.

Pour arrêter le programme tournant dans le PIC 16f88 sur la carte, créez un algorigramme "qui ne fait rien", puis transférez-le sur la carte après l'avoir enregistré :

Algorigramme vide permettant d'arrêter le programme sur la carte

Très important : comme beaucoup de logiciels, Flowcode n'accepte ni les accents, ni les espaces, ni les caractères spéciaux dans les noms des fichiers. Pour vous en convaincre essayez par exemple de transférer vers la carte un algorigramme simple (l'algorigramme vide par exemple) après l'avoir enregistrer sous le nom modèle.

Remarque à ajouter sur la page 3 de la fiche mémo de Flowcode et à appliquer dans les futurs TP :

Message d'erreur brut : Flowcode a été incapable de traduire l'algorigramme en code C ...

Traduction : Flowcode ne peut pas transférer votre programme, mais l'erreur ne vient pas forcément d'une erreur dans l'algorigramme ...

Solution : vérifiez que votre algorigramme est enregistré dans un nom de fichier SIMPLE, en minuscule, sans espaces, sans accents, et sans caractères spéciaux

Activité 1-3 : utilisation des interrupteurs

Fermez tous les fichiers ouverts dans Flowcode (menu Fichier + Fermer). Créez un nouveau fichier (menu Fichier + Nouveau) dans Flowcode (toujours basé sur le microcontrôleur 16F88). Ajoutez-y une barre de LED connectée au port A et des boutons poussoirs connectés au port B. Créez l'algorigramme suivant dans lequel n est une variable de type octet à créer, dans laquelle on va sauvegarder l'état des interrupteurs afin de donner au port A la même valeur que le port B :

QUESTION : comment créer une nouvelle variable ?

La réponse se trouve sur la page 2 de la fiche mémo : à consulter

Transférez votre programme sur la carte, appuyez sur les boutons B0, B1, B2 et B3 en observant les LED A0, A1, A2 et A3. Retenez le fonctionnement de cet algorigramme.

Modifiez maintenant votre algorigramme comme suit. A première vue ce nouvel algorigramme fait la même chose que le précédent : il donne au port A la valeur du port B :

Transférez votre programme sur la carte, appuyez sur les boutons B0, B1, B2 et B3 en observant les LED A0, A1, A2 et A3. Comparez le fonctionnement de cet algorigramme par rapport au programme précédent puis retenez la différence de fonctionnement de ces deux algorigrammes.

Conclusion de la partie 1

Vous avez appri dans cette première partie comment configurer Flowcode, comment créer un algorigramme utilisant des LED et des interrupteurs et comment le transférer sur la carte. Vous pouvez maintenant passer à la partie 2 Application dans laquelle on vous demande de solutionner un certain nombre de problématiques.

PARTIE 2 : APPLICATION

Application 2-1 : création d'un compteur

Fermez tous les fichiers ouverts dans Flowcode (menu Fichier + Fermer). Créez un nouveau fichier (menu Fichier + Nouveau) dans Flowcode (basé sur le microcontrôleur 16F88). Ajoutez-y une barre de LED connectée au port B puis créez l'algorigramme suivant dans lequel n est une variable de type octet à créer :

Algorigramme 1

Transférez le programme sur la carte. Quelle est la fréquence de chacune des LED du port B ? Retenez le principe et le fonctionnement de cet algorigramme, et la manière d'incrémenter une variable (n=n+1 dans un bloc calcul).

Application 2-2 : commande des LED par les interrupteurs

Fermez tous les fichiers ouverts dans Flowcode (menu Fichier + Fermer). Créez un nouveau fichier (menu Fichier + Nouveau) dans Flowcode (basé sur le microcontrôleur 16F88). Ajoutez-y une barre de LED connectée au port A et une barre d'interrupteur connectée au port B, puis créez l'algorigramme suivant dans lequel n est une variable de type octet à créer :

Algorigramme 2

Rappel : pour utiliser les LED en sortie sur la carte de développement il faut mettre les 2 interrupteurs LCD et 7-SEG sur off

Transférez le programme sur la carte. Que se passe-t-il si on appuie sur le bouton B0 ou sur le bouton B1 ? Quelle(s) LED reste(nt) allumée(s) lorsque tous les boutons sont relâchés ?

Modifiez l'algorigramme ci-dessus afin que toutes les LED soient éteintes lorsque les boutons sont relâchés. Les équations des LED A2 et A3 en fonction des boutons B0 et B1 doivent donc être :

A2 = B0

A3 = B1

Modifiez à nouveau votre algorigramme afin que les équations des LED A2 et A3 en fonction des boutons B0 et B1 soient les suivantes :

A2 = /B0

A3 = /B1

Application 2-3 : commande des afficheurs 7 segments avec les interrupteurs

Fermez tous les fichiers ouverts dans Flowcode. Créez un nouveau fichier dans Flowcode (basé sur le microcontrôleur 16F88). Ajoutez-y un quadruple afficheur 7 segments (composant LED7Seg4).

QUESTION : comment afficher un chiffre sur l'afficheur 7 segment ?

La réponse se trouve sur la page 1 de la fiche mémo : à consulter

La syntaxe de la macro MontreChiffre associée à l'afficheur 7 segments LED7Seg4 est la suivante : chiffre,valeur, point décimal

chiffre : il vaut 0, 1, 2 ou 3 selon que l'on veut allumer le chiffre de poids faible, le chiffre de rang 2, de rang 3, ou le chiffre de poids fort.

valeur : il s'agit de la valeur à afficher (de 0 à 9)

point décimal : il vaut 0 ou 1 et permet d'afficher ou non la "virgule" à droite du chiffre sélectionné sur l'afficheur.

RAPPEL : les macros propres à un composant (comme la macro MontreChiffre de l'afficheur 7 segment) sont accessibles à partir d'un bloc Routine Composant dans l'algorigramme (et non un bloc Macro)

Illustrations :

Utilisation d'un bloc Routine Composant dans un algorigramme

Configuration de la macro MontreChiffre de l'afficheur 7 segments

Exemples de configuration de la macro MontreChiffre :

Pour afficher le chiffre 4 sur le poids faible (chiffre de droite sur l'afficheur) sans point décimal on entrera 0,4,0 dans la macro MontreChiffre

Pour afficher le chiffre 6 sur le poids fort (chiffre de gauche sur l'afficheur) avec un point décimal on entrera 3,6,1 dans la macro MontreChiffre

Important : pour utiliser l'afficheur 7 segments en sortie sur la carte il faut mettre l'interrupteur 7-SEG sur on et l'interrupteur LCD sur off.

Proposez un nouvel algorigramme répondant au cahier des charges suivant dans lequel chaque étape dure 1 seconde :

Etape 1 - afficher le chiffre 1 sur l'afficheur de gauche

Etape 2 - afficher le chiffre 2 sur le second afficheur

Etape 3 - afficher le chiffre 3 sur le troisième afficheur

Etape 4 - afficher le chiffre 4 sur l'afficheur de droite

Etape 5 - afficher aucun chiffre (éteindre les 4 afficheurs)

Etape 6 - Retour à l'étape 1

Remarque : comme les Anodes des LED des afficheurs sont reliées au port A du PIC, il suffit de mettre le part A à 0 pour éteindre les 4 afficheurs à la fois.

Vérifiez sur la carte que l'interrrupteur LCD (placé sous l'afficheur LCD) est sur off et que l'interrupteur 7-SEG sont sur on.

Transférez votre programme sur la carte puis testez-le. En cas de disfonctionnement corrigez votre algorigramme puis transférez-le à nouveau sur la carte jusqu'à obtenir la programmation demandée. Une fois parfaitement fonctionnel, appeller le professeur pour faire valider votre programme.

Etat de l'afficheur 7 segments durant l'étape 1

Etat de l'afficheur 7 segments durant l'étape 2

Etat de l'afficheur 7 segments durant l'étape 3

Etat de l'afficheur 7 segments durant l'étape 4

Etat de l'afficheur 7 segments durant l'étape 5 (0 --> Port A)

Remarque à ajouter sur la page 4 de la fiche mémo de Flowcode et à appliquer dans les futurs TP :

QUESTION : comment utiliser l'afficheur 7-SEG sur la carte ?

REPONSE : placer l'interrupteur 7-SEG sur on et l'interrupteur LCD sur off

Remarque à ajouter sur la page 4 de la fiche mémo de Flowcode et à appliquer dans les futurs TP :

QUESTION : comment éteindre entièrement l'afficheur 7-SEG dans un programme ?

REPONSE : il faut mettre 0 dans le port A (car il est relié aux anodes de l'afficheur)

Application 2-4 : réalisation d'un compteur sur l'afficheur 7 segments

Fermez tous les fichiers ouverts dans Flowcode. Créez un nouveau fichier dans Flowcode (basé sur le microcontrôleur 16F88). Ajoutez-y un quadruple afficheur 7 segments (composant LED7Seg4).

En utilisant la macro MontreChiffre de l'afficheur 7 segments, réalisez un algorigramme réalisant l'algorithme suivant. Testez-le sur la carte et modifiez-le jusqu'à obtenir le fonctionnement demandé :

REPETER

L'afficheur compte de 0 à 23 avec une temporisation de 500 ms puis recommence

TOUJOURS

Problème : la macro MontreChiffre ne peut afficher qu'un seul chiffre à la fois sur l'afficheur. Comment afficher un nombre (composé de plusieurs chiffres) dans ces conditions ? Par exemple comment afficher le nombre 435 composé de trois chiffres ?

Solution : la solution consiste à afficher "très vite" chacun des chiffres pour donner l'illusion que tous les chiffres sont affichés en même temps. Cette technique s'appelle le multiplexage.

Exemple : l'algorigramme suivant affiche un nombre sur 2 chiffres par multiplexage. Dans cet algorigramme :

du point de vue du compteur les unités sont parfaitement distinctes des dizaines

la variable u représente les unités

la variable d représente les dizaines

le premier bloc Routine de composant affiche les unités sur le chiffre de rang 0 de l'afficheur

le second bloc Routine de composant affiche les dizaines sur le chiffre de rang 1 de l'afficheur

il n'y a aucune temporisation dans cet algorigramme : seule la Boucle 30 fois permet de ralentir le compteur

la Boucle 30 fois actualise en permanence l'afficheur pour donner l'illusion qu'il reste fixe, et ce que les variables u et d aient changé de valeur ou pas

Affichage multiplexé

Application 2-5 : inversion du sens de comptage du compteur

Fermez tous les fichiers ouverts dans Flowcode. Créez un nouveau fichier dans Flowcode (basé sur le microcontrôleur 16F88). Ajoutez-y un afficheur 7 segments (composant LED7Seg1) et des boutons poussoirs connectés au port A.

En utilisant les macros de l'afficheur 7 segments validez un algorigramme réalisant l'algorithme suivant. Testez-le en le trasférant sur la carte et modifiez-le jusqu'à obtenir le fonctionnement demandé :

REPETER
SI   bouton A7 appuyé ALORS
L'afficheur compte de 0 à 9 avec une temporisation de 500 ms
SINON
L'afficheur décompte de 9 à 0 avec une temporisation de 500 ms
FIN-SI
TOUJOURS

Application 2-6 : affichage d'un message défilant sur l'afficheur LCD

Dans cette activité vous allez découvrir l'utilisation des afficheurs et des macros dans Flowcode. Les macros sont des sous-programmes permettant de réaliser des actions complexes comme par exemple l'affichage d'une chaîne de caractère sur l'afficheur LCD.

Fermez tous les fichiers ouverts dans Flowcode. Créez un nouveau fichier dans Flowcode (basé sur le microcontrôleur 16F88). Ajoutez-y un afficheur LCD puis réaliser l'algorigramme suivant utilisant seulement 2 bloc "Routine de composant" :

Le premier bloc appelle la macro Init liée à l'afficheur LCD

Le second bloc appelle la macro Ecrit Chaîne liée à l'afficheur LCD

Voici le rôle des principale macros permettant d'utiliser l'afficheur LCD :

Nom de la macro
dans Flowcode

Rôle de la macro

Init

initialise l'afficheur LCD avant de l'utiliser

Efface

Efface l'afficheur LCD

Curseur

Positionne le curseur sur une case précise (ligne et colonne) avant l'affichage du message

Ecrit_Chaîne

Affiche une chaîne de caractère sur l'afficheiur LCD

Ecrit_Num

Affiche la valeur numérique d'une variable sur l'afficheur LCD

Rappel : comme indiqué sur la page 2 de la fiche mémo, dans Flowcode les chaînes de caractères sont délimitée entre deux caractères double quote.

exemple : "Ceci est une chaîne de caractères"

Important : pour utiliser l'afficheur LCD en sortie sur la carte il faut mettre l'interrupteur LCD sur on et l'interrupteur 7-SEG sur off.

Validez une solution pour la problématique suivante en utilisant un afficheur LCD et ses différentes macros et en trasférant votre programme sur la carte de développement pour le tester :

Proposez une solution permettant de faire défiler le message "Vive le Génie Electrique !" de gauche à droite sur la première ligne de l'afficheur LCD, en utilisant la macro Curseur pour positionner le curseur au bon emplacement avant d'écrire un message.

Une fois fonctionnel, complétez votre algorigramme afin d'afficher (en plus du message défilant qui reste toujours sur la première ligne) votre nom en fixe sur la seconde ligne de l'afficheur.

Remarque à ajouter sur la page 4 de la fiche mémo de Flowcode et à appliquer dans les futurs TP :

QUESTION : comment utiliser l'afficheur LCD sur la carte ?

REPONSE : placer l'interrupteur LCD sur on et l'interrupteur 7-SEG sur off

Application 2-7 : conditions logiques dans un algorigramme

Fermez tous les fichiers ouverts dans Flowcode. Créez un nouveau fichier dans Flowcode (basé sur le microcontrôleur 16F88). Ajoutez-y une barre de LED connectée au port A et une barre d'interrupteur connectée au port B, puis créez l'algorigramme suivant :

Algorigramme 3

Transférez le programme sur la carte puis appuyez sur les boutons B0 et/ou B1. Quelle est l'équation logique de la LED A2 en fonction des boutons B0 et B1 ? Quelle est l'équation de A3 en fonction de B0 et B1 ?

Modifiez votre algorigramme afin que les équations des LED soient les suivantes :

A0 = B0+B1+B2

A1 = B0.B1.B2

A2 = B0B1

A3 = B0B1B2

Transférez le programme sur la carte puis testez-le. En cas de disfonctionnement corrigez votre algorigramme puis transférez-le à nouveau sur la carte jusqu'à obtenir la programmation demandée.

Retour à la page d'accueil du serveur NESSI

Serveur NESSI
Lycée Joliot Curie
Dammarie-lès-Lys
Académie de Créteil