P.Launay 2006
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.
This program is distributed in the hope that it will be
useful, but WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
the GNU General Public License for more details.
You should have received a copy of the GNU General Public
License along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
02110-1301 USA
Présentation du PIC
Logiciel d'affichage sur PC
Gestion graphique avec Liberlab
Gestion avec GTKTerm et un moniteur Jack's
monitor
GTKTerm et Gnuplot
La programmation en C des PICS avec SDCC
Gestion de la vitesse d'un ventilateur.
Programme C : ventilo2.c
Explication du programme ventilo2.c
Comment graver des PICS ?
Logiciels utilisés
Présentation des sources en OpenOffice : Les_Logiciels_Libres.odp ou en pdf Les_Logiciels_Libres.pdf
Ce travail a pu être
réalisé car les sources sont fournies et les modifications autorisées, ces
logiciels sont libres GPL !
Avec des logiciels
propriétaires ce travail n'existerait pas !
Le pic est un microcontrôleur, c'est un composant électronique qui gère
des entrées sorties avec un programme graver à l'intérieur.
Exemple simple: j'ai une thermistance sur une entrée qui mesure la
température, si la température est inférieure à 18°C (seuil que je
peux fixer) une sortie commande un chauffage.
Les entrées sorties peuvent être des sorties tout ou rien, en standard les
ports d'E/S sont digitales.
Le PIC que nous utiliserons possèdent d'autres modules qui sont :
Modules avec 3 Timers avec 2 entrées de capture, 2 sorties de comparaison et
aussi une sortie PWM ou MLI (rapport cyclique variable) mais aussi des
compteurs que l'on peut gérer en interne.
Modules CAN, qui peut convertir 8 entrées analogiques
Module Liaison série synchrone, SPI ou I2C
Module liaison série asynchrone, USART pour la RS232
Module Port Parallèle esclave
La programmation du PIC peut se faire en assembleur mais assez difficile et
spécifique au PIC ou en langage C , c'est celui que nous utiliserons , c'est
un langage plus facile à écrire et on peut utiliser des bibliothèques avec
des fonctions réutilisables.
Pour travailler avec un PIC et afficher des résultats sur un PC, la
liaison standard utilisé sur les PIC 16F87X est la liaison série qui
possède un module USART
16f87xA_39582b.pdf page 6 et en détails, le module USART 16f87xA_39582b.pdf
page 111
Il existe diverses solutions pour gérer la liaison série.
Liberlab est laboratoire personnel de poche, le microcontrôleur effectue
des mesures qui sont affichés sur le PC , ici je vous présente une
démonstration simple :
PIC avec des potentiomètres et le logiciel Liberlab sur PC
Attention ceci n'est possible que si le PIC à le moniteur implanté
Ouvrir une console :
Dans une console, lancer à partir du répertoire liberlab_pic : $ ./liberlab_pic.py
Une fenêtre graphique Tk apparaît avec comme titre Liberlab Software pour le lancer cliquer sur mesurer .
Téléchargement d'un fichier exécutable par la liaison série
Avec le moniteur impanté dans le PIC, il est facile de changer de programme utilisateur en gravant un fichier exécutable par la liaison série
PIC avec un ventilateur PC qui possède un ILS et affichage de la vitesse
et le logiciel Liberlab modifié
Dans une console, lancer à partir du répertoire liberlab_pic : $ ./liberlab_pic_ventilo2.py
Une fenêtre graphique Tk apparaît avec comme titre Liberlab Software pour le lancer cliquer sur mesurer .
Fermer la fenêtre Liberlab liberlab_pic_ventilo.py
Ouvrir gtkterm et ouvrir le menu Fichier => Effacer l'écran, attendre quelques secondes puis dans ce même menu Fichier => Sauvegarde en fichier brut
Vous le sauvegardez ou vous souhaitez, vous trouverez un exemple dans le répertoire mesure : acquisition_ventilateur.txt
Dans une console lancer alors freq_ventilo.py (dans le répertoire mesure) on vous demande le nom du fichier de sortie. Dans ce même répertoire vous trouverez un exemple mesure _ventilateur.txt
freq_ventilo.py lancera alors Gnuplot, où vous pourrez visualiser une partie des mesures et faire des zooms.Lisez la documentation de Gnuplot pour de plus amples informations.
Pour écrire des programmes pour les PICs, nous avons l'assembleur avec
GPASM mais celui-ci est assez difficile à utiliser et spécifique au PIC
Nous utiliserons donc un logiciel de programmation évolué le Langage C
très utilisé pour tous les microcontrôleurs.
Il existe de nombreux cours sur le Web pour s'initier au langage C.
Il nous faut aussi un compilateur C pour PIC, nous utiliserons le
compilateur libre GPL SDCC.
Plutôt que de voir tous les commandes possibles nous allons prendre un
exemple simple
Le ventilateur comporte 3 fils : 2 fils pour l'alimentation et un fil de
retour pour l'ILS. (interrupteur à lames souples quand l'ILS passe devant un
aimant il se ferme sinon il est ouvert.
Principe :
A chaque tour du ventilateur, nous passons 2 fois devant un aimant,
l'interrupteur ILS se ferme et nous avons un niveau '0' (OV) en sortie ILS
sinon quand l'interrupteur n'est pas devant un aimant il est ouvert et le +5V
arrive à la sortie ILS à travers la résistance R (résistance de tirage
vers le haut ou pull-up)
Bilan :nous avons 2 impulsions en sortie d'ILS à chaque tour du
ventilateur.
Utilisation de l'entrée Capture du Timer 1 du PIC CCP1
Le timer 1 est un timer avec un compteur 16 bits qui s'incrémente tous les
4/Fquartz soit avec un quartz de 4MHz tous les 1 µs.
L'entrée Capture recopie la valeur du Timer1 dans CCPR1 à chaque front
montant et un drapeau CCP1IF passe à 1.
Si on prend Tm = temps entre 3 fronts montants on aura le temps en µs d'un
tour du ventilateur.
Nous aurons la vitesse en tours/minute en faisant 60*106 / Tm
Ce fichier est GPL vous pouvezle lire, le modifier, l'exécuter et le
distribuer.
Les includes permettent d'utiliser :
1)Les noms des registres spéciaux et des différents bits (pic16f877.h)
2)Les sous-programmes définis dans les bibliothèques personnelles
e2o_t est un type défini par l'utilisateur, celui-ci permet de passer de 2
octets (8 bits) en entier (int 16 bits), ceci est utilisé pour le CCPR1 qui
travaille en 16 bits mais qui se lit avec 2 registres CCPR1L et CCPR1H
int capture(void) : sous programme capture, lecture du CCPR1 après un front
montant sur CCP1 void:pas de paramètre d'entrée, int : paramètre de sortie
un entier (16 bits)
« {» début sous programme, « }» fin sous programme
On lit les poids fort et poids faible de CCPR1 et ne pas oublier de remettre
CCP1IF à 0,
CCP1IF passe à 1 lors d'un front montant de CCP1 mais le logiciel doit le
remettre à 0.
void init() : sous programme init :init Timer1 en mode Capture avec
configuration des registres spéciaux du Timer 1 voir chapitre 6 Timer1
Module et chapitre 8 Capture/compare/PWM modules
void main (void) : programme principal (pas de paramètre d'entrée et de
sortie )
int valm2,valanc,valnv,Tm; //variables de type entier 16 bits
init(); // appel sous programme init Timer
Capture
// tant que (while) CCP1IF=0 ne rien faire
« ; »
on sortira de la boucle while quand CCP1IF=1 (front montant sur CCP1)
la ligne while (!CCP1IF) ; correspond à attente front montant
sortie ILS ventilo
valm2=capture(); //front 1,
on met dans lavariable valm2 la valeur de CCPR1
while (!CCP1IF) ; // attente front montant
sortie ILS ventilo
valanc=capture(); //front
2
while (1) { //tant que 1 toujours vrai, boucle
sans fin «{ » début du while
if (CCP1IF) { // Si(If)
CCP1IF=1, front montant sortie ILS ventilo
valnv=capture();
//front 3
Tm
=valnv-valm2; //Tm = temps front3-front1(temps d'un tour)
putint(Tm);
// envoie en ascii sur liaison série du temps Tm, le sous programme putint
est dans la bibliothèque projet.lib
putchar(0x0a);//
fin de ligne, putchar sous programme dans projet.lib
valm2=valanc;
//front 2 devient front 1
valanc=valnv;
//front 3 devient front 2
Explication : comme on le voit sur le dessin, on attend 3 fronts puis on
envoie Tm ensuite front2 devient front1 et front3 devient front2 et on attend
indéfiniment (while 1) le front suivant avec le IF(si) pour de nouveau
envoyer le temps Tm
} Fin Si (IF)
} Fin Tant que (While)
} Fin Programme Main
Carte Liberlab pic
Voir http://www.liberlab.net/ rubrique Carte Liberlab.
Vous pouvez comme sur Liberlab réaliser une carte Liberlab pic sur une
plaquette d'essai, ou bien réaliser un circuit imprimé sous Kicad (logiciel
de CAO libre GPL).
Schéma minimal :
Installer sur la distribution Debian Etch, en octobre 2006.
Avec synaptic
Gestion de la liaison série : GTKTerm
Langage de programmation : Python et différents modules Tkinter..., serial
python pour Liberlab
Tracé de courbes : Gnuplot
Assembleur et gestion de liens pour PIC : Gputils (contient Gpasm et
Gplink)
Simulation des PIC : Gpsim
Compilateur C (dont le PIC) : SDCC 2.6.0
Anjunta, Scite, Gedit *
* Ces logiciels ne sont pas strictement nécessaires, ce sont des éditeurs
de texte pour écrire des programmes en C, en Python et en Assembleur.
En option pour graver le premier PIC, utilisez Pikdev (environnement KDE) ou uniquement pkp pour Gnome sur le site de Pikdev menu Installation vous trouverez à la fin Installation of pkp ou en français : lire le fichier aide_pkp
A mettre manuellement dans /usr/local/
Logiciel compilés : Kicad est une suite open source (GPL) pour la réalisation de schémas électroniques et de circuits imprimés.KICAD
Pour l'installation sous linux, télécharger Kicad-(date).tgz lire l'install.txt
Nouveau : Kicad pour Debian Etch en paquets Debian, installation avec synaptic, préférer toujours les paquets de votre distributions quand ils existent.
Particuliers et modifiés
Skypic-down-02.tgz et librairies pour debian libstargate_1.0.1-1_i386.deb et
libstargate-dev_1.0.1-1_i386.deb
Lire lisezmoi.txt dans le répertoire skypic
(A faire une version française avec .po, source en C)
jmonitor1.0.tar.gz le moniteur (bootloader) à installer sur le Pic
Pas de compilation pour le PC, il s'agit de fichier pour le pic on obtient
l'exécutable (.hex) à partir du fichier assembleur (.asm) avec Gpasm
Lire le fichier readme.txt ou leeme.txt ou lisezmoi.txt
Liberlab_pic.py programme graphique pour faire un laboratoire de poche.
Pour ces 3 derniers, voici l'adresse des sources :
Le moniteur de Jack Dallhausen PIC16F877 Monitor and Bootloader
Skypic-down lib-stargate picp ... de Juan González IEARobotics
Liberlab Laboratoire de poche de François Schnell de L'ULP de Strasbourg Liberlab