• Aucun résultat trouvé

de la thé éorie orie à à la pratique la pratique

• CHAPITRE IX CHAPITRE IX • •

La

La pr programmation ogrammation des PIC16F876 des PIC16F876

de la th

de la thé éorie orie à à la pratique la pratique

Nous voici au dernier chapitre de notre cours de programmation C pour PIC16F876. Nous allons vous présenter aujourd’hui un programme un peu plus complexe, qui peut être un bon point de départ pour une application

“réelle”, pas seulement une simple démonstration du fonctionnement du micro. Nous allons vous décrire un millivoltmètre digital précis, en mesure de lire avec 10 bits de précision n’importe quelle tension positive entre 0 et 5 V. Tout ce dont vous aurez besoin au niveau hardware est la carte test du PIC16F876, protagoniste indiscutée de notre cours.

Vous avez sûrement déjà constaté qu’il est souvent inévitable d’avoir recours à l’assembleur. Et bien, dans ce cas encore, nous avons été contraints à ce choix “hybride”

pour la par tie correspondant au conver tisseur A/D. Le compila-teur C2C Rock (et pratiquement tous les autres…) nous vient en aide en nous offrant des procé-dures plutôt commodes pour met-tre en “communication” les deux milieux.

Continuons avec la description détaillée de notre code : vous remarquerez cer tainement que certaines parties vous sont assez familières si vous êtes des lec-teurs assidus de notre cours.

Le cycle “for” qui fait clignoter 5 fois le chiffre 8 sur l’affi-cheur à 7 segments est, en effet, également présent dans

’afficheur LCD, que vous avez déjà appris à pro-grammer dans le numéro précédent, permet la visualisation de la ten-sion appliquée à l’entrée spéciale prévue sur la carte test. Cette ten-sion est lue par le conver tisseur analogique/digital à 10 bits pré-sent dans le microcontrôleur de Microchip, après avoir transité par l’amplificateur opérationnel 4558.

D’un point de vue didactique, le programme est par ticulièrement intéressant pour deux raisons : - il montre comment programmer

le conver tisseur A/D présent dans le PIC16F876,

- il constitue un exemple de

pas-sage “d’informations” entre les par ties du programme écrites en C et les par ties réalisées en assembleur.

ELECTRONIQUE

66

magazine - n° 26

‘WWW.electronique-magazine.COM

‘VOLTMETRE.C

‘Programme qui permet de visualiser une

‘tension comprise entre 0 et 5V.

#pragma CLOCK_FREQ 4000000

char thousand,hundred,ten,unit;

LCD_send_command(128+(64*numligne)+6);

char valeur_low;

char valeur_high;

int valeur;

long mvolt;

long mvolt_prec;

tableau[0]=’V’;

LCD_writenum(mvolt,1);

mvolt_prec=mvolt;

delay_ms(500);

ELECTRONIQUE

67

magazine - n° 26 ce programme. Nous vous avons déjà

parlé de ce cycle dans le numéro pré-cédent. Son but est purement diagnos-tic, car il ser t justement à nous faire comprendre que hardware et software sont en train de travailler correcte-ment. Si vous voyez donc clignoter l’afficheur mais que le voltmètre ne fonctionne pas, vous savez déjà qu’il faudra aller chercher la cause dans l’af-ficheur LCD.

Une fois les clignotements terminés, les inscriptions “Electronique” et “Digi-tal voltmètre”, sur la ligne du dessous, sont affichées sur l’afficheur LCD. Dans ce cas encore, nous avons “récu-péré” le code utilisé dans le dernier numéro, c’est-à-dire que nous utili-sons la fonction “LCD_send_command”

(envoie les commandes à l’afficheur LCD pour le configurer correctement),

“LCD_writeline” (écrit sur la première ou la deuxième ligne, passée comme para-mètre, le contenu du tableau de carac-tères “tableau”), “LCD_send_data”

(écrit le caractère passé comme para-mètre. Il s’agit évidemment d’une fonc-tion demandée par “LCD_writeline”).

Nous ne souhaitons pas nous attarder sur la description de ces fonctions, et vous renvoyons pour cela au chapitre précédent (ELM 25) où nous en avons parlé largement.

Revenons à notre code : l’inscription en question reste affichée pendant 2 secondes, grâce à l’instruction

“delay_s(2)”, dont le sens est évi-dent.

Une fois l’attente terminée, la fonc-tion “lire_tension( )”, qui représente la par tie fondamentale du programme, est appelée. Cette routine exécute une série d’opérations en séquence, opéra-tions que nous allons étudier en détail afin d’en comprendre la logique de fonctionnement :

- Elle visualise, en rappelant les fonc-tions que nous venons de voir, l’ins-cription “Voltmètre allumé” sur la pre-mière ligne de l’afficheur et “Valeur”

sur la deuxième. Le mot “valeur”

sera évidemment suivi de la valeur de tension lue, comme nous le ver-rons bientôt.

- Elle habilite le conver tisseur A/D interne au PIC. Dès cet instant le con-ver tisseur “commence” à lire la ten-sion en entrée.

- Elle attend une milliseconde, de façon à être cer tain que la lecture a eu lieu.

- Elle “copie” le contenu des deux registres du PIC qui contiennent la

valeur de la tension acquise (un nom-bre de 0 à 210 qui représente une tension de 0 à 5 volts), dans une variable de type long.

- Elle “conver tit” la valeur numérique acquise (valeur, qui, nous vous rappe-lons, peut prendre des valeurs de 0 à 210) en une valeur égale à la tension mesurée. Par exemple, si la valeur lue est 0, la tension à visualiser doit être 0 V, si la valeur est 1024, la ten-sion doit être 5 V, et ainsi de suite pour toutes les valeurs intermédiai-res. Il s’agit, en fait, d’une simple propor tion.

- Elle rappelle la fonction

“LCD_writenum” en passant comme paramètre la valeur à visualiser, calculée au point précédent, et le numéro de la ligne sur laquelle doit se passer la visualisation.

- Après avoir attendu 500 millisecon-des, elle retourne au point 2, et répète indéfiniment cette séquence d’opérations. Ce qui veut dire qu’en-viron chaque demi-seconde, une nou-velle valeur de tension est acquise et visualisée. Il est possible de diminuer ce temps en agissant sur l’instruction

“delay_ms(500)” mais la chose nous semble d’une utilité douteuse : notre œil ne réussirait pas à visualiser sur bcf STATUS,RP1

Listing complet du programme de visualisation et d’acquisition d’une valeur analogique de tension comprise entre 0 et 5 volts.

ELECTRONIQUE

68

magazine - n° 26 un afficheur un chiffre qui,

théorique-ment au moins, change plus de 2 fois par seconde. Les voltmètres digi-taux, quelle que soit leur marque ou leur type, travaillent sûrement avec des temps d’acquisition analogues.

Nous avons été volontairement concis dans la description de ces opérations : ce qui nous impor tait avant de passer à une analyse un peu plus détaillée était surtout d’illustrer ce que fait notre fonction.

Il y a trois concepts fondamentaux pré-sents dans “lire_tension( )” que nous résumerons ainsi :

- Fonctionnement du conver tisseur A/D.

- Passage “d’informations” assem-bleur en C.

- Visualisation d’une variable C sur l’af-ficheur.

Fonctionnement

Documents relatifs