Présentation succincte du langage C



Documents pareils
ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

Introduction au langage C

Algorithmique et Programmation, IMA

La programmation des PIC en C. Les fonctions, les interruptions.

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

ANALYSE TRAMEs LIAISON SERIE

AMICUS 18 (2ème partie) 4) Présentation du logiciel Amicus IDE


Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Programmation en langage C d un µcontrôleur PIC à l aide du compilateur C-CCS Sommaire

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

PIC EVAL Dev Board PIC18F97J60

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

STS SE. FreeRTOS. Programmation réseau WIFI. Programmation réseau. Socket Tcp. FlyPort smart Wi-Fi module

TER Licence 3 Electronique des Télécoms Transmission GSM

1. PRESENTATION DU PROJET

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

REPUBLIQUE ALGERIENNE DEMOCRATIQUE ET POPULAIRE UNIVERSITE M HAMED BOGARA DE BOUMERDES

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Programmation C++ (débutant)/instructions for, while et do...while

Programmer en JAVA. par Tama

Java Licence Professionnelle CISII,

Interface PC Vivago Ultra. Pro. Guide d'utilisation

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Flowcode - Mode d'emploi

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

IV- Comment fonctionne un ordinateur?

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

ENREGISTREUR DE TEMPERATURE

TP, première séquence d exercices.

Atelier C TIA Portal CTIA04 : Programmation des automates S7-300 Opérations numériques

Notions fondamentales du langage C# Version 1.0

Algorithmique avec Algobox

Le langage C. Séance n 4

Initiation à la programmation en Python

Sélection du contrôleur

SUPPORT DE COURS. Langage C

I. Introduction aux fonctions : les fonctions standards

1. Introduction Création d'une macro autonome Exécuter la macro pas à pas Modifier une macro... 5

Logiciels DSPiy. DSPiyStudio logiciels et format des fichiers. incomplet

Créer une base de données

V- Manipulations de nombres en binaire

Dongle WiFi de QUMI Manuel de l utilisateur

Une version javascript sera disponible directement dans le cours prochainement.

Plan du cours. Historique du langage Nouveautés de Java 7

Les chaînes de caractères

LSM RELEASE NOTES LOGICIEL LOCKING SYSTEM MANAGEMENT

Programmation en langage C

Network Camera. Camera. Network. Guide d installation v1.1. Installation Guide v R1.1. Anglais. Français. Espagnol. Allemand R1.

TP 1. Prise en main du langage Python

Chapitre 4 Pierre, papier, ciseaux

Système M-Bus NIEVEAU TERRAIN NIVEAU AUTOMATION NIVEAU GESTION. Domaines d'application

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

as Architecture des Systèmes d Information

Anis ASSÈS Mejdi BLAGHGI Mohamed Hédi ElHajjej Mohamed Salah Karouia

Date : Note /20 : EVALUATION Nom : Prénom : Classe : Traitement sur mots

Langage Java. Classe de première SI

ET 24 : Modèle de comportement d un système Introduction à Labview et initiation à la réalisation d un Instrument Virtuel (VI).

Apprendre à manipuler le clavier Médiathèque de Bussy Saint-Georges APPRENDRE A MANIPULER LE CLAVIER

Bien commencer avec un LaunchPad MSP430G et un Breadboard

Enregistreur sans papier avec écran TFT et carte Compact Flash. B Description des interfaces 07.07/

Réalisation d un réseau de capteurs de température sans fil basé sur le protocole ZigBee

Bases de programmation. Cours 5. Structurer les données

MICROCONTROLEURS PIC PROGRAMMATION EN C. V. Chollet - cours-pic-13b - 09/12/2012 Page 1 sur 44

Durée estimée :1 journée Date de la réalisation : Description Fournisseur Référence Nombre PU HT LM35CZ, LM35AZ LM35DZ

L informatique en BCPST

Programmation Classique en langage C

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

Mentions légales (non traduites) Introduction Légendes Schémas de raccordement Configuration de la S16...

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Transmissions série et parallèle

Carte Relais GSM (Manuel Utilisateur)

Solutions du chapitre 4

Guide Utilisateur - Guide général d'utilisation du service via Zdesktop ou Webmail v.8. Powered by. - media-2001.communication &.

Généralités sur le Langage Java et éléments syntaxiques.

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Utilisation d objets : String et ArrayList

Guide Utilisateur - Guide général d'utilisation du service via Zdesktop ou Webmail v.8. Powered by. Version EXOCA 1

Programmation en Java IUT GEII (MC-II1) 1

Bien travailler sur plusieurs écrans

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Fiche technique CPU 314SC/DPM (314-6CG13)

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Une carte pour vos projets

Cours Programmation Système

Claude Delannoy. 3 e édition C++

Conventions d écriture et outils de mise au point

SOMMAIRE. Travailler avec les requêtes... 3

1 Introduction C+ + Algorithm e. languag. Algorigramm. machine binaire. 1-1 Chaîne de développement. Séance n 4

LOGICIEL SDS ver Manuel de l utilisateur SDS VER 1-28/05/03

Manuel de configuration du Wi-Fi

WINDOWS SERVER 2003-R2

Messages d'erreurs. Redémarrez votre PC en cliquant sur Démarrer, en sélectionnant ensuite Arrêter puis en cochant Redémarrer

ET 24 : Modèle de comportement d un système Boucles de programmation avec Labview.

Transcription:

Présentation succincte du langage C Les commentaires se font en mettant «//» en début de ligne ou en entourant un bloc pour le mettre en commentaire par «/*» et «*/». // Ceci est un commentaire sur une ligne /* Ceci est un bloc mis en commentaire */ Chaque instruction se termine par un point virgule, chaque début et fin de blocs d'instructions sont entourés par { et. La fonction principale d'un programme s'appelle toujours main : void main() { \\ Votre code ici Les variables que vous utiliserez pour le PIC seront de deux types : entier noté int, la variable sera comprise entre 0 et 255, déclaration : int nom_variable caractère noté char, la variable contiendra un caractère ascii, déclaration : char nom_variable flottant (nombre à virgule) noté float, déclaration : float nom_variable dans les trois cas vous pouvez initialiser les variables lors de leur création. int i=0, j=100, k; char carac='a', car='@', car2; float pi=3.1415, coeff=-0.97; Vous pouvez aussi utiliser des tableaux à une dimension, la déclaration se fait : type_stocké nom_du_tableau[nombre_elements_tableau]. Attention le premier élément est numéroté à partir de 0 et donc le dernier élément sera nombre_elements_tableau-1. int valeurs[3]; déclare un tableau de 3 éléments de type entiers. Le premier élément sera accessible par valeurs[0] et le dernier élément sera valeurs[2]. float mesures[2] = {14.65,-45.23; déclare un tableau de 2 éléments de type flottant. Le premier élément (mesures[0]) est initialisé à 14,65 et le deuxième (mesures[1]) à -45,23. Tableau des opérateurs standards en langage C : reportez à la photocopie jointe à ce document. Le test «Si» Nous avons vu lors de l'examen des opérateurs l'expression conditionnelle. Il existe également bien sûr une structure de contrôle qui réalise l'exécution conditionnelle. Sa syntaxe est la suivante : if (<condition>) { <instructions...> La condition est testée comme un booléen, c'est-à-dire qu'elle est considérée comme vraie si son évaluation n'est pas nulle. «0» est considéré comme la valeur booléenne FAUX, «différent de 0» est considéré comme la valeur booléenne VRAI. Vous pouvez aussi utiliser les valeurs «TRUE» et «FALSE» dans vos tests. Dans le cas où une seule instruction est à exécuter quand la condition est vraie, on trouvera souvent cette instruction toute seule à la place du bloc entre accolades. Olivier DARTOIS Jacques DUPRAT Page 1

Le test «Si» avec alternative : if (<condition>) { <instructions...> else { <instructions...> Là encore il est possible de remplacer l'un ou l'autre (ou les deux) blocs entre accolades par une unique instruction. Attention dans ce cas, il faut terminer cette instruction par un point-virgule. Le test «Si» avec de multiples alternatives : if (<cond1>) { <instructions...> /* Si cond1 est vraie */ else if (<cond2>) { <instructions...> /* si cond1 fausse et cond2 vraie */ else { <instructions...> /* si cond1 et cond2 fausses */ if (val_can<128) { // si la valeur lu par le CAN est inférieur à 128 ouput_b(0x0f); // on met à 1 les 4 bits de poids faibles du port B else { ouput_b(0xf0); // sinon on met à 1 les 4 bits de poids forts du port B Le switch() switch (<expression>) { case <val 1>: <instructions...> case <val 2>: <instructions...>... case <val n>: <instructions...> default: <instructions...> L'instruction switch permet de diriger le programme vers une séquence d'instructions choisie parmi plusieurs, suivant la valeur d'une expression qui doit être de type entier. Le branchement se fait à l'étiquette case dont la valeur est égale à l'expression de tête (il ne doit y avoir au plus qu'une étiquette qui correspond). Si aucune étiquette ne correspond, le saut se fait à l'étiquette default si elle existe. Attention, une fois le branchement effectué, le programme continue de s'exécuter dans l'ordre, y compris les case qui peuvent suivre. Pour empêcher ce comportement, on utilise souvent break à la fin des instructions qui suivent le case : son effet est de sauter directement après le bloc du switch. int val,c; c=1; val = mafonctiondecalcul(); /* une fonction définie ailleurs */ switch (val) { case 0: case 1: printf("résultat 0 ou 1\n"); c=2; break; case 2: printf("résultat 2\n"); break; case 4: printf("résultat 4\n"); c=0; break; default: printf("cas non prévu\n"); Olivier DARTOIS Jacques DUPRAT Page 2

Les boucles La boucle «for» ou «pour»: C'est une boucle beaucoup plus générale que dans d'autres langages. Son rôle ne se limite pas à la simple répétition en incrémentant un entier. Son utilisation est la suivante : for ( <inst. initiale> ; <cond. de poursuite> ; <inst. d'avancement> ) { <instructions...> L'instruction initiale est exécutée avant le début de la boucle, la condition de poursuite est testée à chaque début de boucle et l'instruction d'avancement est exécutée en dernière instruction à chaque tour de boucle. int tab[100]; for (i=0; i<100; i++) { output_b(tab[i]); /* exécutées pour i=0, i=1... i=99 */ La boucle «while» ou «tant que»: while (<condition de poursuite>) { <instruction...> while (input_c()!=4) { // tant que la valeur lu sur le port C est différente de 4 output_toggle(pin_b0); // on fait clignoter la DEL qui est reliée au bit de poids faible du port B La boucle «do...while» ou «faire...tant que»: Ici le test est effectué en fin de boucle. Cette boucle est donc, contrairement aux deux boucles précédentes, exécutée au moins une fois, même si la condition est fausse dès le début de la boucle. do { <instructions...> while (<condition de poursuite>); Important : Consultez l'aide en ligne du compilateur Présentation du langage C pour PIC Pour réaliser les exemples qui suivent vous devez avoir en votre possession la documentation de présentation des PICs et du cheminement de programmation de ceux-ci. Cette documentation sert uniquement à présenter des exemples. 1. Ex. n 1 : Positionner des sorties - Faire clignoter une DEL Nous allons donc réaliser notre premier programme en langage C. Nous allons faire clignoter la DEL verte PC0 de la maquette inter+dels. Dans l'edi, créez un nouveau fichier avec le nom «del.c» puis saisissez les lignes suivantes : Olivier DARTOIS Jacques DUPRAT Page 3

Les lignes 1 à 3 sont des commentaires car les lignes commencent par «//». La ligne 5 précise quel type de µc nous allons utiliser et inclut un fichier utile à la compilation. La ligne 10 devra être décommentée si vous programmez votre PIC avec TinyBootLoader (décommenté = enlever les «//» devant). La ligne 12 précise les «fusibles» à programmer dans le PIC. La ligne 13 permet de préciser à quel fréquence le quartz de votre carte oscille. Dans la plupart des cas cette valeur sera 4000000 pour un quartz à 4MHz ou 20000000 pour un quartz à 20MHz. La ligne 15 indique le début de notre programme principal (fonction «main»), vous ouvrez donc une accolade. La ligne 17 permet de faire boucler indéfiniment notre programme («while (true)» signifie «tant que vrai»). Les instructions entre les accolades seront donc exécutées sans arrêt. La ligne 18 permet d'envoyer (output) vers le port C (_c) la valeur entre parenthèse (ici 0 en hex= 0x00). Toutes les diodes du port C seront donc éteintes. Au passage vous remarquez que la fin d'une instruction se termine par «;». La ligne 19 permet d'attendre le nombre de ms indiqué entre parenthèse (ici 500ms donc 0,5s). La ligne 20 envoie la valeur 1 sur le port C, vous allumez donc la diode relié au bit de poids faible du port C (ici la DEL verte PC0). La ligne 21 permet d'attendre à nouveau 500ms. La ligne 22 indique la fin de la boucle «while(true)». La ligne 23 indique la fin de notre programme car c'est l'accolade fermante de la fonction «main()». Sauvegardez votre programme puis compilez-le. Programmez votre PIC et testez votre programme avec la carte inters+dels. Cela fonctionne...félicitations sinon reprenez le tout étape par étape. N'oubliez pas que l'on peut aussi simuler les programmes dans Isis comme dans le schéma cidessous : Olivier DARTOIS Jacques DUPRAT Page 4

Simulation Clignotement DEL sur PC0 Olivier DARTOIS - Jacques DUPRAT TELN 2005 9 10 1 2 3 4 5 6 7 U1 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RA0/AN0 RA1/AN1 RA2/AN2/VREF- RA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18 R1 220 D1 LED-GREEN PIC16F876 PROGRAM=..\..\..\Documents and Settings\Olivier\Mes documents\testccs\del.hex CLOCK=4MHz Exercice1 : 1. Faites clignoter plus rapidement votre DEL puis faites clignoter la del verte PC1. 2. Allumez alternativement les diodes vertes PC0,PC2,PC4 puis PC1,PC3,PC5. 3. Faites un chenillard qui parcours les 6 diodes jaunes puis les 6 diodes vertes. 2.Ex. n 2 : Lire des entrées Lire l'état des inters Pour notre deuxième exemple, nous allons lire l'état des interrupteurs de la maquette inters+dels connectés au port B (inters PB0 à PB3) et afficher l'état de ceux-ci sur les quatres DELs du port C (DELs verte PC0 à PC3). Dans l'edi, créez un nouveau fichier avec le nom «inters.c» puis saisissez les lignes suivantes : Olivier DARTOIS Jacques DUPRAT Page 5

Nous commentons seulement les lignes nouvelles. La ligne 14 permet de déclarer une variable de type entier (int). Cette variable sert à stocker le résultat d'un calcul ou la valeur d'un des ports du PIC. Une variable de type «int» permet de stocker des valeurs de 0 à 255 (8 bits). Pour stocker des nombres à virgules vous utiliserez le type flottant (float) coder sur 32 bits. La ligne 17 lit l'état des lignes connectées au port B (input_b) et vous stockez cette valeur dans la variable «val_inter». La ligne 18 permet de mettre sur le port C la valeur «val_inter» et donc d'allumer les DELs correspondantes aux inters en position «1». Sauvegardez votre programme puis compilez-le. Programmez votre PIC et testez votre programme avec la carte inters+dels. Si à chaque fois que vous actionnez un inter PB0 (à PB3) la diode PC0 (à PC3) s'allume votre programme fonctionne correctement sinon vérifiez le tout et recommencez. La schéma de simulation peut être le suivant : Simulation Lecture Inters et Affichage sur DELs +5V Olivier DARTOIS Jacques DUPRAT TELN 2005 R5 10k R8 10k PB0 9 10 1 2 3 4 5 6 7 U1 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RA0/AN0 RA1/AN1 RA2/AN2/VREF- RA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18 R1 220 R2 R3 R4 PB1 PB2 PB3 PC0 PC1 PC2 PC3 PIC16F876 PROGRAM=inters.HEX CLOCK=4MHz Remarque : Les résistances R5 à R8 sont des résistances de tirage vers le haut (fixe un potentiel +5V donc un «1» logique lorsqu'un inter est ouvert). Le port B du PIC possède en interne des résistances de tirages vers le haut. Celles-ci sont activées par l'instruction port_b_pullups(true) et désactivées par l'instruction port_b_pullups(false). Si vous activez dans votre programme les résistances de tirage vers le haut alors les résistances R5 à R8 ne sont plus nécessaires. Exercice2 : Faites un programme qui lit l'état des inters PB0 à PB3 et qui allume les dels du port C avec les conditions suivantes: si PB0 et PB1 sont à 1 alors vous allumez la diode verte PC0 et uniquement celle-ci. si PB2 et PB3 sont à 1 alors vous allumez la diode verte PC1 et uniquement celle-ci. si PB0 et PB3 sont à 1 alors vous faites clignoter les diodes PC0 et PC1. dans tous les autres cas la diode verte PC2 devra être allumé. Indication : utilisez une structure «switch». Olivier DARTOIS Jacques DUPRAT Page 6

3.Ex. n 3 : La conversion analogique-numérique La plupart des capteurs délivrent une tension proportionnelle au phénomène qu'ils mesurent. Pour être exploitable cette tension doit être numérisée à l'aide d'un convertisseur analogique numérique (CAN ou DAC en anglais : Digital to Analog Converter). Le µc PIC possède des entrées analogiques sur le port A (entrées AN0 à AN4). Deux de ces entrées peuvent être configurées pour fixer la limite basse (VREF-) et haute (VREF+) de la numérisation. La résolution du convertisseur interne du PIC est de 10 bits (soit 1024 valeurs possibles). Nous utiliserons une résolution plus faible sur 8 bits qui est la valeur par défaut du convertisseur (soit 256 valeurs possibles). Dans notre exemple nous allons numériser la tension présente sur l'entrée AN2 et afficher le résultat sur les 6 DELs du port C. Quand nous aurons une tension de 0V sur l'entrée AN2, toutes les DELs du port C seront éteintes. Quel sera la valeur de la tension présente lorsque les six premières dels du port C seront allumées? Dans l'edi, créez un nouveau fichier avec le nom «can.c» puis saisissez les lignes suivantes : Nous commentons seulement les lignes nouvelles. La ligne 14 permet de déclarer une variable de type entier qui va permettre de stocker le résultat de la conversion analogique-numérique. La ligne 16 permet d'initialiser le port A en analogique et de préciser quelle entrée va être utilisé pour la conversion. Les valeurs possibles pour cette fonction sont : Olivier DARTOIS Jacques DUPRAT Page 7

Valeurs NO_ANALOGS ALL_ANALOG AN0_AN1_AN2_AN4_VSS_VREF AN0_AN1_AN3 AN0_AN1_VSS_VREF AN0_AN1_AN4_VREF_VREF AN0_AN1_VREF_VREF AN0 AN0_VREF_VREF Description Toutes les entrées du port A en mode numérique Toutes les entrées du port A en mode analogique Entrées AN0, AN1, AN2 et AN4 en analogique, AN3 Tension Reférence haute (VREF+) Entrées AN0, AN1 et AN3 en analogique, AN2 et AN4 en numérique Entrées AN0 et AN1 en analogique, AN3 Tension Reférence haute (VREF+), AN2 et AN4 en numérique Entrées AN0, AN1 et AN4 en analogique, AN2 Tension de Référence basse (VREF-), AN3 Tension de Référence haute (VREF+) Entrées AN0 et AN1 en analogique, AN2 Tension de Réf. basse (VREF-), AN3 Tension de Réf. haute (VREF+), AN4 en numérique Entrées AN0 analogique, toutes les autres entrées en numérique Entrées AN0 analogique,an2 Tension de Réf. basse (VREF-), AN3 Tension de Réf. haute (VREF+), AN1 et AN4 en numérique La ligne 17 détermine l'horloge utilisé pour la conversion. La ligne 18 permet de sélectionner l'entrée à numériser. Dans notre cas seul le canal 0 est utilisé donc on sélectionne celui-ci sinon il suffit de préciser le numéro de canal. La ligne 19 permet au convertisseur de s'initialiser en attendant 100ms. La ligne 22 permet de lire le résultat de la conversion et stocke celui-ci dans la variable val_can. La ligne 23 envoie sur cette valeur vers le port C et allume les DELs en conséquence. Sauvegardez votre programme puis compilez-le. Programmez votre PIC et testez votre programme avec la carte inters+dels. Tournez lentement le potentiomètre relié à la voie AN2. Lorsque vous faites varier cette tension les DELs du port C doivent s'éteindre ou s'allumer en fonction de la valeur convertie. Vérifiez l'état des DELs pour une tension de 0V, 1V (mesurez la tension au potentiomètre avec un multimètre) puis comparez-là avec la théorie. Vérifiez votre réponse à la question de la page précédente en allumant les 6 premières diodes vertes et en relevant au multimètre la tension sur le potentiomètre. Le schéma de simulation pour cet exemple sera : +5V Simulation CAN et Affichage sur DELs Olivier DARTOIS Jacques DUPRAT TELN 2005 RV1 1k 9 10 1 2 3 4 5 6 7 U1 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RA0/AN0 RA1/AN1 RA2/AN2/VREF- RA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS PIC16F876 PROGRAM=can.HEX CLOCK=4MHz RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18 R1 220 R2 R3 R4 R5 R6 R7 R8 PC0 PC1 PC2 PC3 PC4 PC5 PC6 PC7 220 Olivier DARTOIS Jacques DUPRAT Page 8

Exercice 3: Configurez le convertisseur analogique numérique du PIC pour qu'il prenne comme valeur basse de conversion la tension Vref- et comme valeur haute de conversion la tension Vref+. Réglez Vref+ à 3V et Vref- à 1V. Affichez sur les dels vertes du port C le résultat de la conversion. Comparez le quantum dans cette configuration et le quantum précédent. Quel est l'intérêt de cette configuration? 4.Ex. n 4 : Utilisation de la voie série La communication avec le «monde» extérieure (au µc PIC) est très importante aujourd'hui. En particulier la communication par voie série vers un ordinateur permet d'accéder à la puissance de stockage et de calculs qu'un µc ne possède pas forcement. Nous allons réaliser une conversion puis transmettre le résultat de cette conversion par la voie série vers le PC. Nous utiliserons le logiciel TinyBootLoader pour visualiser les résultats. Dans l'edi, créez un nouveau fichier avec le nom «serie.c» puis saisissez les lignes suivantes : La ligne 12 permet de définir les caractéristiques de la communication sur la voie série ainsi que les broches utilisées pour celle-ci. Dans notre exemple, vous transmettrez à une vitesse de 19200 baud, la broche d'émission sera RC6 (portc, 6ème broche), la broche de réception sera RC7 (portc, 7ème broche) enfin il n'y aura pas de bit de parité (parity=none). Du coté de votre logiciel de dialogue sur la voie série (HyperTerminal ou TinyBootLoader), il faudra régler les mêmes paramètres. La ligne 17 définit une variable de type flottant (float) donc elle pourra stocker un nombre à virgule. La ligne 18 définit une constante (const) de type flottant. Son nom sera «Quantum» est vaudra 5V/ Olivier DARTOIS Jacques DUPRAT Page 9

255 soit 0,0196V. Cette constante permet de transformer une valeur compris entre 0 et 255 fourni par le CAN en une tension compris entre 0V et 5V. La ligne 27 permet d'obtenir le résultat de la conversion du CAN, de le multiplier par le Quantum afin d'obtenir dans la variable tension la valeur de la tension présente sur l'entrée AN0. La ligne 28 permet d'envoyer des informations sur la voie série. La fonction utilisée est la fonction «printf». Cette fonction est relativement complexe et est expliquée dans la documentation officielle du compilateur C. Dans notre cas, nous envoyons vers la voie série le texte qui est compris entre guillemets ou «%4.2f» est remplacé par la valeur de la tension : le «\r» permet de ramener le curseur au début de la ligne. le «\n» permet de sauter une ligne. le «%4.2f» permet de formater le flottant tension (lettre 'f' dans '%4.2f') pour qu'il s'affiche avec quatres chiffres en tout dont deux chiffres après la virgule. Sauvegardez votre programme puis compilez-le. Programmez votre PIC et testez votre programme en injectant une tension analogique variable (alimentation par exemple) sur la ligne AN0. Connectez l'interface de communication sur le connecteur HE10-10 correspondant de votre carte gestion et sur le PC lancez le programme TinyBootLoader. Les valeurs de la tension numérisée par le PIC sur la voie AN0 devraient apparaitre alors dans l'onglet «Terminal» si vous vous êtes bien connecté. Faites varier votre tension analogique et constatez les changements. Le schéma de simulation pour Isis utilise des composants virtuels et en particulier le composant «Virtual Terminal». Saisissez le schéma suivant et testez-le : +5V Numérisation voie AN0 et envoie valeur sur voie série Olivier DARTOIS Jacques DUPRAT TELN 2005 RV1 1k 9 10 1 2 3 4 5 6 7 U1 OSC1/CLKIN OSC2/CLKOUT MCLR/Vpp/THV RA0/AN0 RA1/AN1 RA2/AN2/VREF- RA3/AN3/VREF+ RA4/T0CKI RA5/AN4/SS RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL RC4/SDI/SDA RC5/SDO RC6/TX/CK RC7/RX/DT 21 22 23 24 25 26 27 28 11 12 13 14 15 16 17 18 VIRTUAL TERMINAL RXD TXD RTS CTS PIC16F876 PROGRAM=serie.HEX CLOCK=4MHz BAUDRATE=19200 DATABITS=8 PARITY=NONE STOPBITS=1 5.Ex. n 5 : Utilisation d'un afficheur LCD Pour que les affichages de données soient plus attrayant vous pouvez utiliser un afficheur LCD. Le modèle le plus courant est un afficheur alphanumérique de 2 lignes de 16 caractères. Un exemple d'un tel afficheur est présenté page suivante. Cependant un tel afficheur est limité dans ces possibilités, en particulier vous ne pouvez pas afficher des «images» (bitmap en anglais). Nous allons donc plutôt travailler avec un afficheur graphique. Olivier DARTOIS Jacques DUPRAT Page 10

Nous allons travailler avec un afficheur graphique de récupération disponible facilement et en grande quantité pour un prix modique (entre 5 et 8 euros) : l'écran du téléphone portable Nokia 3310. En fait cet écran porte la référence LPH7779 et est piloté par un contrôleur LCD de chez Illustration 1: Afficheur LCD alphanumérique 2x20 caractères Phillips le PCD8544. Cet écran se pilote par la voie SPI (Serial Peripheral Interface = Interface Série Synchrone) disponible sur les PICs. Il se présente comme dans la capture ci-dessous. Illustration 2: Afficheur LCD graphique Nokia 3310 Cet écran a une résolution de 84 pixels suivant l'axe des X et 48 pixels suivant l'axe des Y. La carte pour exploiter cet écran est présenté dans le document «présentation des microcontrôleurs PICs et de l'environnement de développement». Afin de vous faire gagner du temps, deux librairies de pilotages en langage C de cet écran vous sont proposés suivant que vous utilisiez un PIC16F ou un PIC18F. La première librairie pour PIC16F est inspiré de ce site : http://www.techdesign.be/projects/012/012.htm. On se limitera a l'exploitation alphanumérique de l'afficheur. La deuxième librairie pour PIC18F est inspiré de http://www.micropic.es/index.php? option=com_content&task=view&id=41&itemid=1. Comme le PIC18F a plus de RAM que le PIC16F, vous pourrez faire de l'affichage graphique voire de l'animation. 1. Utilisation avec un PIC16F Il faut tout d'abord copier dans votre répertoire le fichier «lph7779_v3_spi.c» disponible sur le serveur dans «P:\Documents Eleves\TELN\TP_PIC». Vous disposez des fonctions suivantes pour piloter votre afficheur : nokia_init() : fonction d'initialisation du LCD, à appeler avant toutes les autres, nokia_gotoxy(int8 xnokia, int8 ynokia) : positionnement du curseur aux coordonnées X,Y avec X évoluant de 0 à 83 et Y de 0 à 5. Exemple: nokia_gotoxy(10,3); nokia_clear_screen() : effacement de l'écran, nokia_printchar(int8 carac) : imprime un caractère en taille 5x8, s'utilise avec la fonction printf() pour afficher des messages. Exemple: printf(nokia_printchar,"bonjour"); nokia_printchar35(int8 carac) : imprime un caractère en taille 3x6, s'utilise avec la fonction printf() pour afficher des messages, vous ne disposez que des lettres majuscules et des chiffres. Exemple: printf(nokia_printchar35,"minuscule35"); Dans le prochain exemple, vous allez numériser les tensions données par les potentiomètres et les afficher sur deux lignes de l'afficheur LCD. Dans l'edi, créez un nouveau fichier avec le nom «nokia.c» puis saisissez les lignes de la page suivante. Olivier DARTOIS Jacques DUPRAT Page 11

Les ligne 6 à 11 permettent de définir les liaisons électriques entre le PIC et l'afficheur LCD et l'inclusion de la bibliothèque de fonctions nécessaire au pilotage du LCD. La ligne 14 permet de positionner manuellement en entrée (1=Input) ou en sortie (0=Output) les lignes du portc. Ici par exemple les lignes PC0 à PC3 sont positionnées en sortie. La ligne 16 permet de configurer et d'activer la communication SPI entre le PIC et l'afficheur LCD. Le reste des lignes a été décrit auparavant. Exercice 5.1: Réalisez un programme qui teste l'état des boutons K1 et K2 de la platine de l'afficheur LCD et qui affiche sur l'écran de celui-ci : «BTN K1 enfonce» quand K1 est appuyé et «BTN K1 relache» dans le cas contraire sur la ligne 2 de l'afficheur «BTN K2 enfonce» quand K2 est appuyé et «BTN K2 relache» dans le cas contraire sur la ligne 4 de l'afficheur Exercice 5.2: Réalisez un programme qui permet d'incrémenter une variable de 1 à chaque appui sur K1 et de décrémenter de 1 cette même variable à chaque appui sur K2. Vous afficherez cette variable sur l'afficheur. Olivier DARTOIS Jacques DUPRAT Page 12

2. Utilisation avec un PIC18F Un programme de démonstration est disponible sur le réseau dans le dossier TP_PIC précédent sous le nom «nokia18f.c». Copiez ce fichier dans votre répertoire personnel ainsi que la bibliothèque de fonction «LCD_Nokia_18F.c». Exercice 5.3: Compilez ce fichier puis changez le PIC 16F876 présent sur votre carte de TP par un PIC18F252 ou un PIC18F2520. Programmez ce PIC puis regardez le résultat sur l'écran de l'afficheur LCD. Pour connaître toutes les fonctions disponibles pour commander l'afficheur Nokia, ouvrez et lisez le fichier «LCD_Nokia_18F.c». Exercice 5.4: Un exemple d'animation simple est présenté ci-dessous, le fichier se nomme «animation.c»: // Animation MARIO - Olivier DARTOIS - TELN 2008 #include <18f252.h> // Selection du PIC #device PASS_STRINGS=IN_RAM #fuses H4,NOWDT,NOPROTECT,NOLVP,PUT,NOBROWNOUT #use delay(clock=16m) // Définition pour l'utilisation de l'ecran LCD sur le port C du PIC18F252 #use fast_io(c) // Entrées/Sorties du port C en mode manuel #byte PORTNOKIA = 0xF82 // Adresse du port C du 18F2520 #bit nok_dc = PORTNOKIA.1 // PIN_C1: Ligne Données/Commande #bit nok_cs = PORTNOKIA.0 // PIN_C0: Ligne Chip Select #bit nok_res = PORTNOKIA.2 // PIN_C2: Ligne Reset #include <LCD_Nokia_18F.h> // L'image d'un plombier moustachu int8 mario [] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x48, 0x58, 0x74, 0x7C, 0xF8, 0xF0, 0x7C, 0xFA, 0xFE, 0xE6, 0xFE, 0xFE, 0xFC, 0xF8, 0xF0, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0D, 0x33, 0x62, 0xE2, 0xE3, 0xE4, 0xE0, 0xF6, 0x31, 0x01, 0x09, 0x19, 0x9F, 0xEF, 0x97, 0x8F, 0x7E, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xFC, 0xC4, 0x02, 0x04, 0x3C, 0xE5, 0xFF, 0xFF, 0xCA, 0xCF, 0xFE, 0xFE, 0xE2, 0xE5, 0x69, 0xBB, 0x96, 0x06, 0x64, 0x2C, 0x08, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x02, 0x03, 0x01, 0x01, 0x03, 0x03, 0x07, 0x07, 0x07, 0x0F, 0x36, 0x41, 0x41, 0x43, 0x3E, 0x3E, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 ; signed int8 compteur=26; int8 etat_encod=0, ancien_etat_encod=0; // sens horaire sur la maquette if ((etat_encod==0x20 && ancien_etat_encod==0x30) (etat_encod==0x10 && ancien_etat_encod==0x00)) { compteur+=2; if (compteur>=68) compteur=68; nokia_clear_video_memory(); nokia_bitmap (compteur,8,mario,32,32); nokia_print_video_memory(); ancien_etat_encod=etat_encod; delay_ms(4); void main() { port_b_pullups(true); set_tris_c(0b11010000); // 1: broche en entrée // O: broche en sortie // Mise en oeuvre de la comm SPI vers LPH7779 setup_spi(spi_master SPI_H_TO_L SPI_CLK_DIV_4); enable_interrupts(int_rb); // Activation de l'interruption // pour l'encodeur enable_interrupts(global); // Activation globale des // interruptions nokia_init(); // Initialisation de l'afficheur LCD delay_ms(10); nokia_clear_video_memory(); nokia_bitmap (26,8,mario,32,32); // On positionne Mario au // milieu de l'ecran nokia_print_video_memory(); while (true) {; // tout se passe sous interruption donc la // boucle principale est vide #INT_RB void isb_rb() { delay_ms(3); etat_encod = input_b()&0x30; // sens anti-horaire sur la maquette if ((etat_encod==0x30 && ancien_etat_encod==0x20) (etat_encod==0x00 && ancien_etat_encod==0x10)) { compteur-=2; if (compteur<=-16) compteur=-16; nokia_clear_video_memory(); nokia_bitmap (compteur,8,mario,32,32); nokia_print_video_memory(); Compilez et testez ce fichier. Exercice 5.5: Compilez et testez le fichier «animation2.c» disponible sur le réseau 6.Les fonctions disponibles en langage C pour PIC Reportez-vous à l'aide intégré dans le compilateur C et aux documentations mises à votre disposition sur le réseau. Olivier DARTOIS Jacques DUPRAT Page 13