Microcontrleurs PIC 1re sance Prsentation du PIC 16
- Slides: 41
Microcontrôleurs PIC
1ère séance • Présentation du PIC 16 F 876 • 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 16 F 876 (I) L’architecture interne : • Mémoire programme (FLASH) 8 K 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
PIC 16 F 876 (II) 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 16 F 876 (III) Les ports d’entrées/sorties • 5 ports distincts (A: 6 B: 8 C: 8) : 22 e/s • Courant max en sortie : 20 m. A/pin ; 200 m. A/port • Registre de sortie (effet mémoire) • Entrées analogiques : 0 ~ 5 V • Entrées numériques 0 ou 5 V
PIC 16 F 876 (IV) Circuit de RESET Pour que le PIC démarre : Circuit d’alim Circuit d’horloge
La programmation PC Programmateur C Langage C / BASIC n tio la pi om ge a l b PIC Hexadécimal em s As Langage Assembleur Haut niveau Bas niveau PIC
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 <16 F 876 a. h> //Définit le type de PIC utilisé #fuses HS, NOPROTECT, NOWDT //Fusibles de configuration #use delay(clock=16000000) //Vitesse du PIC : 16 Mhz //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 <16 F 876 a. h> #fuses HS, NOPROTECT, NOWDT #use delay(clock=16000000) Void main(){ Int a=0, b=1, test=0; . . . . }
Le langage C Les opérateurs Opérations de calcul Opérations de test Opérations logiques + : addition == : égalité entre 2 éléments && : ET logique - : soustraction != : inégalité || : OU logique * : multiplication > : supérieur ! : NON logique / : division >= : supérieur ou égal ^ : puissance < : inférieur % : modulo <= : inférieur ou égal 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 : Boucle while : Boucle for : Void main(){ … … … For(j=0; j<=3; j++){ If ((i==0)||(i!=12)){ While (i!=0){ //Action A //action. A //Action A } }else{ } } //action. B //Action. B } } }
Le langage C Les Ports d’entrées/Sorties Ex : on a une led connectée sur la patte RA 0, un bouton poussoir sur la patte RB 0 Dans notre programme on va vouloir allumer la led et lire l’état du bouton poussoir Void main(){ If (input(PIN_RB 0)){ // Si du 5 V est présent sur la patte 0 du port B alors on rentre dans la boucle … } Output_bit(PIN_RA 0, 1) //On applique du 5 V 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 RA 0 ou d’un autre sur la patte RA 1 et renvoie 1 si le capteur RA 0 est excité, 2 si le capteur RA 1 l’est. Int lire_capteur (){ While((!input(PIN_A 0))&&(!input(PIN_A 1))){} //Tant que tout est à 0 on fait rien If(input(PIN_A 0)) 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_RA 0, 0); //Mets du 0 V sur la patte RA 0 Delay_ms(5000); //Attends 5 secondes Output_bit(PIN_RA 0, 1); //Mets du 5 V sur la patte RA 0 Reset_cpu() : fait un reset du PIC
Exemples 1 er exemple : Faire clignoter une LED (500 ms allumée, 1 s éteinte) #include <16 F 876 a. h> #fuses HS, NOPROTECT, NOWDT #use delay(clock=16000000) #define LED PIN_RB 7 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, 1 s éteinte), s’arrêtant lors de l’appui sur un bouton poussoir. #include <16 F 876 a. h> #fuses HS, NOPROTECT, NOWDT #use delay(clock=16000000) #define LED PIN_RB 7 #define bouton PIN_RC 4 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 1 k. Hz et de rapport cyclique variable sur la patte RA 0 #include <16 F 876 a. h> #fuses HS, NOPROTECT, NOWDT #use delay(clock=16000000) Void PWM( int i){ Int j; While (1){ Output_bit(PIN_RA 0, 1); For(j=0; j<i; j++){ Delay_us(10); } Output_bit(PIN_RA 0, 0); For(j=0; j<100 -i; j++){ Delay_us(10); } } } Void main(){ PWM(33); //Applique une PWM de fréquence 1 k. Hz et de rapport cyclique 33% sur la patte RA 0 }
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 <16 F 876 a. h> #fuses HS, NOPROTECT, NOWDT #use delay(clock=16000000) #INT_RB //changement d’état sur les pattes B 4 -B 7 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é http: //www. robot-mobile-irbot. com/4 -modif-servomoteur-du-robotmobile. 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, 5 V
Servomoteur modifié La fonction avance() permet de faire tourner le servo dans un sens à sa vitesse maxi #include <16 F 876 a. h> #fuses HS, NOPROTECT, NOWDT #use delay(clock=16000000) #define SERVO PIN_RC 4 Void avance(){ While(1){ Output_bit(SERVO, 1); //On met à 1 pendant 2 ms Delay_ms(2); Output_bit(SERVO, 0); Delay_ms(18); //On met à 0 pendant 20 – 2 = 18 ms } } 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 La consommation d’un tel moteur est d’environ 100 m. A, il est donc impossible de le connecter directement sur une patte du PIC Transistor MOS : BUZ 11
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
Moteur pas à pas
Moteur pas à pas La fonction avance() permet de faire tourner le moteur pas à pas de n*4 pas #include <16 F 876 a. h> #fuses HS, NOPROTECT, NOWDT #use delay(clock=16000000) 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 }
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 CNY 70
Le CNY 70
- Ppt on apple company
- Prsentation
- Baumnetz sternnetz
- Prsentation
- Sance 8
- Construction de maison sancé
- Sance definition
- Sance 8
- Sance 8
- Flash sance
- Sance 8
- Sance definition
- Itamar gati
- Pic mclr reset circuit
- Pic port
- Timer0 pic
- Pics
- T0con register in pic
- Translate this image
- Pic architecture
- What is mechanical energy
- Programmable interface controller
- Similar pic
- Pics of microprocessor
- Designing embedded systems with pic microcontrollers
- Insulator and conductor
- Part 121 pic requirements
- 1 pic 1 word
- What is pic/nic analysis
- Dick pic
- Hello everyone picture
- Rcreg register pic
- Ernia uncale sintomi
- داى اوف ث تينتاكل
- Avr vs pic
- Cisco ise pic
- Adcon pic
- Endoplasmic reticulum
- Pic du midi d'ossau mariano
- Mózgowie ryby
- 123
- Stan pic