Microcontrôleurs PIC. 1ère séance Présentation du PIC16F876 Outils de programmation du PIC Le langage C Exemples d’applications simples 2ème séance Présentation.

Slides:



Advertisements
Présentations similaires
Électronique de base du processeur
Advertisements

Premier programme en C :
La boucle for : init7.c et init71.c
L’électronique numérique
Les fonctions A quoi ça sert ?
Introduction au Langage C,C++
Rappels C.
Développement logiciel sur micro-contrôleurs PIC en C
Introduction au langage C
C++ 6ème cours Patrick Reuter maître de conférences
Jacques Lonchamp IUT Nancy Charlemagne – DUT Informatique 1A
A abstraction b assembleur c nombre binaire d bit e cache f UC g puce h compilateur i famille dordinateurs j contrôle k chemin de données l défaut m dé
la programmation en langage C
C.
Le jeu d ’instructions Introduction Un jeu d ’instruction classique
Auto Apprentissage Le DSP
M. BENJELLOUN : Info II Mohammed BENJELLOUN Service dInformatique Faculté Polytechnique de Mons
FLSI602 Génie Informatique et Réseaux
Dossier TICE Excel.
Le codage des nombres en informatique
CYCLE 1 : Saisir – Afficher – Données Afficher du texte sur lécran 1- Rôle du printf() 2- Syntaxe du printf() 3- Exécution du printf() par le CPU.
Les bases de l’Algorithmique
Langage C Révision.
Conception d’une carte à microcontrôleur ARM pour le robot Amphibot II
Chapitre n°2 : Architecture d'un ordinateur
ROLE DES DIFFERENTS ELEMENTS
Le codage des nombres en informatique
Architecture des Ordinateurs
Architecture et fonctionnement du microcontrôleur PIC 16F84
Base de programmation Script unity en c#.
Architecture introduction.
Développement logiciel pour microcontrôleurs PIC
Les pointeurs Modes d’adressage de variables. Définition d’un pointeur. Opérateurs de base. Opérations élémentaires. Pointeurs et tableaux. Pointeurs et.
Gei 431 Architecture des ordinateurs II – Frédéric Mailhot Systèmes Pipeline – opérations multicycles Nous avons vu jusquà maintenant comment faire un.
GPA770: Microélectronique appliquée
8PRO100 Éléments de programmation Les types composés.
LANGAGE C LP A2I IUT St DIE
Types de données fondamentaux
L’essentiel du langage C
2.1 - Historique Chapitre 2 : Introduction au langage C++
Microcontrôleurs et Langage C Les Interruptions diapo 1
SIF-1053 Architecture des ordinateurs
Exemple d’utilisation de « CFC »
Un survol du language C.
Etude de cas: carte 80C552++ ‘APPALACHES’
Les Microcontrôleurs 68HCXX
Les microcontrôleurs PIC
- Chap 7 - Fractions.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. tél Fax Cours Architecture des.
République Algérienne Démocratique et Populaire Ministère de l'enseignement supérieur et de herche scientifique Université de Ferhat Abbas -Sétif.
Conception de Programmes - IUT de Paris - 1ère année – Cours 8 – Les entrées/sorties Comment fonctionnent les opérateurs > pour les types élémentaires.
Conception de Programmes - IUT de Paris - 1ère année Conception de Programmes Objectifs et organisation du cours Introduction à la P.O.O.
INTRODUCTION à LA PROGRAMMATION
1 CHOIX DU MICROCONTROLEUR ET DE L’ARCHITECTURE ELECTRONIQUE L’utilisation d’un microcontrôleur nous a paru comme le meilleur compromis à cheval entre.
UE MAREP Cours 1 : Algèbre de Boole et entiers naturels
Module algorithmique et programmation
Codage de l’information
8PRO107 Éléments de programmation Les adresses et les pointeurs.
IFT209 – Programmation Système
Chapitre 4 La représentation des nombres.
Tour rapide d’un premier programme SPARC v9
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Objets et Actions Élémentaires.
( Caen_septembre 95) Calculer les nombres A et B, en donnant les résultats sous forme de fractions irréductibles A = B = + : 2.
Encadrer par Mr Chelly Nizar
Introduction au langage C
Le codage des nombres en informatique
C++ BY AURÉLIEN MODULO MARION. PLAN DES TROIS PRÉSENTATIONS C++ avancé C++ orienté objet Bases de C++
ARCHITECTURE MATERIELLE D’UN SYSTEME A MICROPROCESSEUR
Transcription de la présentation:

Microcontrôleurs PIC

1ère séance Présentation du PIC16F876 Outils de programmation du PIC Le langage C Exemples d’applications simples 2ème séance Présentation des motorisations Interfaçage avec le PIC Capteurs IR Interfaçage avec le PIC

1ère séance

PIC 16F876 (I)‏ L’architecture interne : Mémoire programme (FLASH) 8K mots de 14 bits Mémoire RAM 368 octets Mémoire utilisateur (EEPROM) 256 octets Unité de calcul (ALU)‏ Circuit d’horloge (ex 16 Mhz => 4 MIPS)‏ Périphériques internes Ports d’entrées/sorties

Les périphériques internes : 3 compteurs indépendants 5 convertisseurs analogiques/numériques 10 bits 1 port série connectable à un ordinateur 1 port I²C 1 port SPI (pour connecter des PICs entre eux)‏ PIC 16F876 (II)‏

PIC 16F876 (III)‏ Les ports d’entrées/sorties 5 ports distincts (A:6 B:8 C:8) : 22 e/s Courant max en sortie : 20mA/pin ; 200mA/port Registre de sortie (effet mémoire)‏ Entrées analogiques : 0 ~ 5V Entrées numériques 0 ou 5 V

PIC 16F876 (IV)‏ Pour que le PIC démarre : Circuit de RESET Circuit d’horloge Circuit d’alim

La programmation Langage C / BASIC Compilation Langage Assembleur Assemblage Hexadécimal Haut niveauBas niveau PIC PC ProgrammateurPIC

La programmation in-situ Elle évite de déconnecter le PIC du circuit à chaque programmation Connecteur de programmation Attention : Toujours couper l’alimentation de votre circuit durant la prog.

Le langage C Structure du programme en C #include //Définit le type de PIC utilisé #fuses HS,NOPROTECT,NOWDT //Fusibles de configuration #use delay(clock= ) //Vitesse du PIC : 16Mhz //emplacements pour les fonctions Void main(){ //Programme principal }

Le langage C Les Variables Son nom peut comporter plusieurs lettes/chiffres Les types de variables : Int : entier de 0 à 255 Bit : 0 ou 1 Char : Caractère dans la norme ASCII Float : réels 32 bits à virgule flottante Il faut définir toutes les variables au début du programme et de préférence leur attribuer une valeur par défaut #include #fuses HS,NOPROTECT,NOWDT #use delay(clock= ) Void main(){ Int a=0,b=1,test=0; }

Le langage C Les opérateurs Opérations de calcul + : addition - : soustraction * : multiplication / : division ^ : puissance % : modulo Opérations de test == : égalité entre 2 éléments != : inégalité > : supérieur >= : supérieur ou égal < : inférieur <= : inférieur ou égal Opérations logiques && : ET logique || : OU logique ! : NON logique Raccourcis i++  i = i + 1 : incrémentation i--  i = i – 1 : décrémentation x^=y  x = x^y …

Le langage C Les boucles Boucle if : Void main(){ … If ((i==0)||(i!=12)){ //actionA }else{ //actionB } Boucle while : Void main(){ … While (i!=0){ //Action A } //ActionB } Boucle for : Void main(){ … For(j=0;j<=3;j++){ //Action A }

Le langage C Les Ports d’entrées/Sorties Ex : on a une led connectée sur la patte RA0, un bouton poussoir sur la patte RB0 Dans notre programme on va vouloir allumer la led et lire l’état du bouton poussoir Void main(){ If (input(PIN_RB0)){ // Si du 5V est présent sur la patte 0 du port B alors on rentre dans la boucle … } Output_bit(PIN_RA0,1) //On applique du 5V sur la patte 0 du port A }

Le langage C Les fonctions Elles peuvent être appelées à partir de main. Exemple : on fait une fonction lire_capteur() qui attends un signal d’un capteur branché sur la patte RA0 ou d’un autre sur la patte RA1 et renvoie 1 si le capteur RA0 est excité, 2 si le capteur RA1 l’est. Int lire_capteur (){ While((!input(PIN_A0))&&(!input(PIN_A1))){} //Tant que tout est à 0 on fait rien If(input(PIN_A0))‏ Return 1; Else Return 2; } Main(){ Int x; x = lire_capteur(); // x vaut 1 ou 2 selon l’état du capteur lors de l’appel de la fonction }

Le langage C Les commandes spéciales Rand() : x = rand(); //x prend une valeur aléatoire entre 0 et 255 Delay_ms() : pause dans un programme en ms Main(){ Output_bit(PIN_RA0,0); //Mets du 0V sur la patte RA0 Delay_ms(5000); //Attends 5 secondes Output_bit(PIN_RA0,1); //Mets du 5V sur la patte RA0 Reset_cpu() : fait un reset du PIC

Exemples 1er exemple : Faire clignoter une LED (500 ms allumée, 1s éteinte)‏ #include #fuses HS,NOPROTECT,NOWDT #use delay(clock= ) #define LEDPIN_RB7 Void main(){ While( 1 ){ Output_bit(LED,1); Delay_ms(500); Output_bit(LED,0); Delay_ms(1000); }

Exemples 2ème exemple : Faire clignoter une LED (500 ms allumée, 1s éteinte), s’arrêtant lors de l’appui sur un bouton poussoir. #include #fuses HS,NOPROTECT,NOWDT #use delay(clock= ) #define LEDPIN_RB7 #define boutonPIN_RC4 Void main(){ While(input(bouton)){ Output_bit(LED,1); Delay_ms(500); Output_bit(LED,0); Delay_ms(1000); }

Exemples 3ème exemple : Faire une PWM (pulse width modulation) de fréquence 1kHz et de rapport cyclique variable sur la patte RA0 #include #fuses HS,NOPROTECT,NOWDT #use delay(clock= ) Void PWM( int i){ Int j; While (1){ Output_bit(PIN_RA0,1); For(j=0;j<i;j++){ Delay_us(10); } Output_bit(PIN_RA0,0); For(j=0;j<100-i;j++){ Delay_us(10); } Void main(){ PWM(33); //Applique une PWM de fréquence 1 kHz et de rapport cyclique 33% sur la patte RA0 }

Quelques applications du PIC

2ème séance

Les interruptions Il est possible d’interrompre le déroulement du programme lorsqu’un changement d’état intervient sur une ou plusieurs patte du port B ou C #include #fuses HS,NOPROTECT,NOWDT #use delay(clock= ) #INT_RB //changement d’état sur les pattes B4-B7 Void fonction_interruption(){...//Fonction d’interruption... } Void main(){ Enable_interrupts(INT_RB); //Activation des interruptions sur le port B... }

3 types de motorisation différents Le Servomoteur modifié mobile.htm Le moteur pas à pas Le moteur à courant continu

Servomoteur Présentation du Servomoteur Le servomoteur est constitué d’un moteur à courant continu relié à un réducteur, et asservit par un potentiomètre et un circuit de contrôle

Servomoteur Pour le commander, on lui applique des impulsions selon la norme suivante

Servomoteur Typiquement, un Servo est destiné à avoir une course de 180° et est asservi par un potentiomètre relié à l’axe du moteur. Modifier un servo consiste à lui permettre mécaniquement de faire un tour complet (on coupe la butée)‏ Ensuite on déconnecte le potentiomètre et on le remplace par deux resistances de valeurs égales, ainsi, le circuit d’asservissement « à l’impression » d’être au point milieu.

Servomoteur modifié -Une impulsion de 1,5 ms va l’envoyer à la position 0° (où il est toujours) donc il ne bouge pas -Une impulsion de 1 ms va l’envoyer à -90° mais il n’y arrivera jamais donc il va tourner indéfiniment dans le sens anti-horaire -Une impulsion de 2 ms va l’envoyer à +90° mais il n’y arrivera jamais donc il va tourner indéfiniment dans le sens horaire Plus la durée de l’impulsion est proche du neutre (1,5 ms) plus il tournera doucement, inversement, plus cette durée est proche des extrêmes (1 ou 2 ms), plus il va tourner vite

Servomoteur modifié Vcc = 7,5V

Servomoteur modifié La fonction avance() permet de faire tourner le servo dans un sens à sa vitesse maxi #include #fuses HS,NOPROTECT,NOWDT #use delay(clock= )‏ #define SERVO PIN_RC4 Void avance(){ While(1){ Output_bit(SERVO,1);//On met à 1 pendant 2ms Delay_ms(2); Output_bit(SERVO,0); Delay_ms(18);//On met à 0 pendant 20 – 2 = 18ms } Void main(){ Avance(); }

Servomoteur Avantages : -Boîtier pratique -1 seul fil de commande par Servo -Directement pilotable par le PIC -Couple élevé Inconvénients : -Les impulsions doivent êtres précises et régulières -Vitesse assez faible -Prix : 7-8 € -Il faut le modifier

Moteur CC Transistor MOS : BUZ11 La consommation d’un tel moteur est d’environ 100mA, il est donc impossible de le connecter directement sur une patte du PIC

Pont en H Attention, toujours alimenter un pont en H en diagonale, sinon + sur –, pas bien

Moteur CC Avantages : -Rapide -Facile à commander -Répandu Inconvénients : -Assez compliqué pour un fonctionnement dans les 2 sens -Rond, donc plus difficile à fixer

Moteur Pas à Pas Moteur pas à pas bipolaire : plus facile à piloter que l’unipolaire En alimentant successivement les bobines A, B, C, D 2 à 2 on réalise 4 pas

Moteur pas à pas

#include #fuses HS,NOPROTECT,NOWDT #use delay(clock= )‏ Void avance(int i){ Int j; For(j=0;j<=i;j++){ Output_b(6); //1ère position Delay_ms(5); //pause entre 2 pas Output_b(5); //2ème position Delay_ms(5); //pause entre 2 pas Output_b(9); //3ème position Delay_ms(5); //pause entre 2 pas Output_b(10); //4ème position Delay_ms(5); //pause entre 2 pas } Return; } Void main(){ Avance(4); //Fait tourner le moteur de 16 pas } La fonction avance() permet de faire tourner le moteur pas à pas de n*4 pas Etat Etat Etat Etat1 portB RB0 DRB1 CRB2 BRB3 A 2^02^12^22^3

Moteur Pas à pas Avantages : -Rapide -Très précis -Peu coûteux Inconvénients : -Compliqué à mettre en œuvre -Pics de courants lors d’un pas

Le CNY70