<< The Fribotte Homepage >>
Un club de passionnés en robotique participant à la coupe de France E=M6.
[Accueil] [Qui sommes-nous ?] [Robots] [Coupe e=m6] [BD Technique] [Forum] [Reportages] [Liens] [WiKiFri]

Fribotte



Introduction :
Le but de la présente page est la programmation des microcontrôleurs de la famille Microchip en langage C. Nous nous attarderons plus particulièrement sur la famille des 14 bits à mémoire flash, modèle 16F877.
Pour mémoire, lorsque l'on programme dans un langage de haut niveau, le portage du code source vers un autre microcontroleur de la même famille est aisé. Il suffit généralement de changer le fichier include et quelques "define" en début de programme.
L intérêt de ce microcontrôleur est sa taille mémoire flah qui est de 8Ko, car en effet il faut avoir en mémoire que lorsqu'on programme en C, généralement la taille du code exécutable est plus gros que pour un programme en assembleur. Cependant ces dernières années, les compilateurs ont beaucoup évolués, et l'optimisation permet d'avoir des codes exécutables de taille raisonnable.
Nous utilisons un compilateur de la famille PCW de la société CCS. Ce compilateur peut s'acheter via Internet sur le site de: www.hvwtech.com
www.ccsinfo.com
Nous présenterons dans un deuxième temps d'autres compilateurs disponible sur le marché.
 


Description du compilateur
Le compilateur est fourni avec une disquette et un manuel de 100 pages.
Sur la disquette, on retrouve évidement l'environnement de compilation et un fichier d'aide en ligne. L'avantage de ce compilateur est qu' il s'intègre parfaitement à l'environnement de développement de chez Microchip MPLAB, bien connu de tout les programmeurs de PIC.

Configuration dans MPLAB

La configuration du logiciel dans MPLAB est assez aisée. Le compilateur fourni une explication qui permet à partir d'une fenêtre DOS de configurer MPLAB.

Ouvrir une fenêtre dos et taper : CCSC +SETUP. Cette commande configure le compilateur comme une option de MPLAB pour les langages utilisables. Ensuite après avoir ouvert un nouveau projet dans MPLAB, sélectionner le menu comme dans l'écran 1 ci-dessous.

 
MPLAB IDE

 


Ensuite une boite de dialogue s'ouvre et permet de spécifier le langage et le compilateur utilisé, voir l'écran 2 ci-dessous.

MPLAB IDE


Il faut aussi dans la fenêtre Edit Project, configurer le projet en rajoutant les " nodes " qui sont nécessaire au projet.


Description du programme

L'utilisation du langage C qui est considérée de haut niveau permet de simplifier la programmation par l'utilisation de fonction de haut niveau. Il est aussi plus aisé de relire un code plusieurs mois après si celui-ci est bien commenté. Il est clair que l'écriture de programme de plusieurs centaines de ligne impose quasiment l'emploi de langage de haut niveau comme le C, JAVA, C++, BASIC, etc... L'utilisation de langage objet n'est pas encore trop employée dans le domaine des petits microcontroleurs, mais certain compilateur C++ commence à faire leur apparition sur le marché.
L'autre avantage du langage C est qui reste assez proche de la machine qui est utilisée. L'utilisation des pointeurs par exemple simplifie grandement la gestion des zone mémoire, tableau, chaîne de caractères. De plus un nombre important de fonctions permettant de gérer les interfaces sont déjà disponibles.

Nous allons pas reprendre les bases du langage C, il y a de très bon sujet sur le web pour cela.
Nous allons juste montrer son utilisation dans la programmation de microcontrôleur PIC de chez Microchip.

Le langage C au standard ANSI défini un certain nombre de fonctions standards, qui sont regroupées dans les librairies de fonctions, chacunes définies par un fichier d'entête ( header). Par conséquent on retrouve des fichiers spécifiques au PIC, ceci pour simplifier la gestion des diverses interfaces du microcontrôleurs.

Code source

Le code exemple utilisé lors de notre discussion.

Le première partie de code comporte des commentaires qui donnent un résumé et des explications succinctes des fonctions décrites par la suite. Ensuite, on retrouve l'inclusion du header correspondant au microcontrôleur utilisé. #include <16F877.H> Puis on retrouve des définitions correspondant aux paramétrages du microcontrôleur :

Paramétrage des fusibles du microcontrôleur, comme la protection du code source en lecture etc...
#fuses HS,NOWDT,NOPROTECT
Définition de l'horloge de fonctionnement, ici 20MHz. Ceci sera utilisé pour le calcul des delais.
#use delay(clock=20000000)

Définition des paramètres de l'interface série.
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

Nous retrouvons ensuite la définition de constantes, variables globales et toutes les fonctions utilisées par le code de la fonction main(). En effet les fonctions doivent être déclaré avant la fonction main. Parmi celle-ci, on a une série de fonctions qui permettent de gérer un écran LCD en mode 4 bits. Nous avons gardé les connections du programme assembleur décrit par julien. lcd en assembleur

  • Fonction d'initialisation de l'écran.
    void InitLcd(); // initialisation de l'écran, Attention au brochage.
  • Fonction de positionnement de curseur sur une ligne déterminée.
    void Lcd_Line1(); // position en début de ligne 1
    void Lcd_Line2();// position en début de ligne 2
    void Lcd_Line3();// position en début de ligne 3
    void Lcd_Line4();// position en début de ligne 4
  • Fonction d'envoi des commandes à l'écran.
    void Lcd_Send_noWait(char VarSend);// envoi de commande sans delais
    void Lcd_Send(char VarSend);// envoi de commande avec delais de 50us, minimum pour les écrans
  • Fonction affichage de variable suivant un certain format : binaire, hexa, decimal.
    void Lcd_Hexa(char VarSend); // affichage d une valeur hexa 0x..
    void Lcd_Binaire(char VarSend); // Affichage d une valeur Binaire 10101010b
    void Lcd_Decimal(char ValSend); // Affichage d une valeur en decimal (donnée d entrée sur 1 octet)
  • Fonction administrative pour la gestion de l'écran
    void Lcd_Clear(); // Effacement de l'écran et position du curseur en 00
    void Lcd_Char(char CharSend); // Affichage d'un caractère, passe la valeur Ascii du carac
    void ReturnHome(); // revient en position 00
    void Lcd_Cur_S_Right();// décalage du curseur vers la droite
    void Lcd_Cur_S_Left();// décalage du curseur vers la gauche
  • Fonction d'affichage de chaîne de caractère à l'écran
    void Lcd_Printf(char *Chaine); // Affichage d'une chaine de caractère
    void AffichageAlphabet(); // Affichage de tous les caracteres supportés par le LCD
    void DisplayHexaBinDeci(char Val); // Affichage d'une valeur en Hexa, binaire, décimal pour écran 4 ligne.

  • Fonction pour la gestion d'un mini clavier de 4 touches qui n'utilise pas les interruptions mais la méthode de scrutation ( polling). On a que deux fonctions une qui scrute la touche appuyée , et une autre qui gère l'entrée d'une chaîne de caractère.

    char GetKey(); // recuperation d'un caractère.

  • Fonction annexe pour la temporisation. Pour cela on utilise les fonctions fournies par le compilateur.

    char GetString(); // récuperation d'une chaine de caractère.

    La fonction main () utilise les différentes fonction à tour de rôle sans autre but que de donner des exemples et montrer le résultat à l'utilisateur.



  • Limitation du langage C
    Il faut prendre en compte que toutes les fonctions du langage C ANSI ne sont pas implémentées.
    De même pour les variables qui ne sont pas non plus toutes implémentées. On a les char, short, boolean, int, array with one dimension.

    Autre compilateur
    Vous trouverez ci-dessous d'autres compilateurs C, certain en freeware mais avec des limitations en nombre de lignes de codes ou pour un type de microcontroleur par exemple.
  • HI-TECH PICC Lite de HI-TECH n est utilisable qu'avec les PIC 16F84 en mode freeware
    Htsoft
    Une version avec licence est cependant valable pour les autres types de microcontrôleur.

  • Compilateur C C2C-plus Optiminfo
    Pour ce compilateur vous trouverez une version free pour le langage C et une nouvelle version pour le C++ qui semble très intéressante même si l utilisation du C++ pour un microcontrôleur semble un peu luxueuse .

  • Compilateur Javamok
  • Compilateur CC5X
    bknd

  • MediumC qui est un freeware.


  • IAR Embedded Workbench de IAR systems
    iar

  • MPC Code Development System V1.40 de Byte Craft's
    bytecraft
  • GRCC de Grich RC Inc
    piccompile Il ne semble pas y avoir de version de test. Le prix est de 159$
  • pico-C free de jokinen
    pico-C
    Le version du logiciel est non payante. Non testé

  • Parsic v3.39 de Swen Gosh
    Parsic

    Si vous avez d'autres compilateurs, ou que vous avez fait des tests avec nous sommes preneur pour améliorer le comparatif. De plus avec l'arrivé des dsPIC, l'utilisation du langage C va devenir obligatoire.

  • Complétez cette page, posez vos questions et remarques ici : WiKiFri

    Page http://fribotte.free.fr/bdtech/PICenC/PICenc.html modifiée le 14/10/2002.
    Copyright fribotte@free.fr, libre de droit pour toute utilisation non commerciale.
    Reproduction autorisée par simple mail