EasyPIC V7 Outil de développement de projet Page n 1/14
1 PRESENTATION La carte de développement EasyPIC v7 de la société Mikroelektronica permet de développer des projets utilisant les microcontrôleurs Microchip de la famille PIC 12/16/18. A l achat elle est équipée du PIC 18F45K22 dont nous verrons les caractéristiques par la suite. EasyPIC v7 intègre un grand nombre de fonctionnalités : Leds et boutons poussoirs connectables aux différents ports. Switches et cavaliers de configurations afin de s adapter aux microcontrôleurs et à leurs caractéristiques. Des connecteurs E/S au format HE10 reliés aux différents ports des microcontrôleurs. Programmateur sur la carte permettant la programmation in situ (sans avoir à enlever le microcontrôleur). Module ICD permettant le débogage du programme en simulation et en temps réel sur la carte. Des connecteurs afin de relier des capteurs ( DS18S20 ) directement sur la carte. Un afficheur LCD et un afficheur GLCD tactile. 4 afficheurs 7 segments. Module de communication RS232, USB. Connecteur d extension mikrobus sockets permettant l ajout de «click Boards» Bluetooth, MP3, CAN SPI etc Potentiomètres reliés aux entrées des convertisseurs analogique/numérique. Une mémoire E²PROM I²C. Un buzzer. L édition du programme en langage C ainsi que la compilation est effectué par l intermédiaire du logiciel mikroc PRO. La programmation est effectuée par le logiciel mikroprog Suite for PIC à travers une liaison USB. Page n 2/14
2 LA CARTE EASYPIC V7 Liaison avec l ordinateur Page n 3/14
3 LEDS Un ensemble d interrupteurs ( switches, SW3) permettent de relier indépendamment chaque sortie de chaque port à une LED. Ainsi l état logique de chaque ligne de port est visible. 4 BOUTONS POUSSOIRS RELIE AUX PORTS L état logique de toutes les entrées numériques du microcontrôleur peuvent être modifiées par 3 l intermédiaire de boutons poussoirs. le cavalier J17 sert à définir l état logique qui doit être appliqué à la broche du microcontrôleur lorsque le bouton associé est pressé. Les interrupteurs associés aux ports permettent de rajouter un résistor de pull-up ou pull-down.ces resistors permettent de fixer le niveau logique de chaque entrée lorsque le BP est relâché. Page n 4/14
Sur la figure ci-dessous est représenté la barrette d interrupteurs SW7 du portc. En position milieu, le resistor est déconnecté de la ligne de port. En position haute (UP), un resitor de pull-up est relié à la ligne du port C correspondante. En position basse (DOWN), un resitor de pull-down est relié à la ligne du port C correspondante. ( cf p22 de la documention fournie par mikroelectronika) 5 MICROCONTROLEUR 18F45K22 Le microcontrôleur livré avec la carte est le 18F45K22. Il s agit d un microcontrôleur 8 bits dont les principales caractéristiques sont les suivantes : 32Ko de mémoire flash de programme. Oscillateur quartz/interne/externe jusqu à 64MHz. 16MIPS. Alimentation : 2,3v à 5,5v. Debugger ICD. Module ADC, comparateur analogique, DAC, support écran et touches tactiles. Communication I²C, SPI, RS232, RS485, LIN. Timers. 5 ports I/O parallèles numériques. Page n 5/14
6 PORTS D ENTREES / SORTIES Chaque port parallèle est contrôlé par 3 registres : Un registre appelé PORTx, ou registre de données, fonctionnant en entrée et en sortie. Un registre appelé LATx ou registre tampon ( latch en anglais), ne fonctionnant qu en sortie. Un registre appelé TRISx, ou registre de sens de fonctionnement du port, servant à définir individuellement le sens de fonctionnement ( entrée ou sortie) de chaque ligne de port. Un registre appelé ANSELx, ou registre de mode de fonctionnement du port ( lorsque le port est en entrée), servant à définir individuellement le mode de fonctionnement (analogique ou numérique) de chaque ligne de port quand cela est possible. En effet, toutes les lignes ne peuvent être utilisées comme entrées analogiques. Dans le cas du 18F45K22, x peut être remplacé par les lettres de A à E. Les registres PORTx peuvent être lus et écrits selon que le port correspondant est utilisé en entrée ou en sortie. Les registres LATx peuvent aussi être lus ou écrits mais ils n agissent sur les lignes qu en sortie. C'est-àdire que l état des lignes de port est sans effet sur le contenu de LATx. Par ailleurs, chaque ligne de chaque port peut être programmée individuellement en entrée ou en sortie grâce aux registres TRISx. Lors d un RESET, et pour d évidentes raisons de sécurité, tous les ports sont placés en entrée suite à l initialisation de tous les registres TRISx correspondants. Particularité des ports Les ports A,B,C et D sont des ports 8 bits. Le Port E est un port 4 bits. Chaque ligne de chaque port peut avoir plusieurs fonctions ce qui peut réduire la taille du port parallèle. Par exemple dans le cas de l utilisation d un oscillateur externe à quartz, les lignes RA6 et RA7 ne sont plus libres et sont reliées au quartz. Le sens des lignes de port (entrée ou sortie) est déterminé par l état des bits correspondants du registre TRISx. Exemple : Si le bit 0 de TRISA est à 1, alors RA0 est en entrée. Si le bit 0 de TRISA est à 0, alors RA0 est en sortie. Moyen mnémotechnique : 1 = I = Input = entrée 0 =O = Output = Sortie. En entrée, le mode de fonctionnement de chaque ligne de port (analogique ou numérique) est déterminé par l état des bits correspondants du registre ANSELx. Exemple : Si le bit 0 de ANSELA est à 1, alors RA0 est une entrée analogique. Si le bit 0 de ANSELA est à 0, alors RA0 est une entrée numérique. Page n 6/14
7 AFFICHEUR LCD 2 X 16 L afficheur LCD est en mode 4 bits : les octets de données et de commandes sont envoyés en 2 temps quartet par quartet sur les bits RB0 à RB3 du port B. Les lignes de contrôle RS, E sont reliés sur les bits RB4 et RB5. Pour utiliser cet afficheur avec la bibliothèque LCD fournie, il faut placer les lignes suivante en début de programme : // Attribution de noms aux broches sur lesquelles l'afficheur est connecté sbit LCD_RS at RB4_bit; sbit LCD_EN at RB5_bit; sbit LCD_D7 at RB3_bit; sbit LCD_D6 at RB2_bit; sbit LCD_D5 at RB1_bit; sbit LCD_D4 at RB0_bit; // configuration des broches d'entrée/sortie sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D7_Direction at TRISB3_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D4_Direction at TRISB0_bit; 8 UTILISATION DU CONVERTISSEUR ANALOGIQUE / NUMERIQUE Le PIC 18F45K22 dispose d un CAN 10 bits relié aux entrées analogiques par l intermédiaire d un multiplexeur ( il permet de sélectionner une entrée analogique à la fois). PORT A : RA0 à RA5 Sur la carte Easypic, il est possible de relier un potentiomètre P1 ou P2 afin de faire varier une tension entre 0 et 5v et relier cette ddp sur l une des entrée analogiques AN0 à AN4, AN8 à AN12. Pour ce faire il suffit de placer les cavalier J15 et J16 comme indiqué sur la sérigraphie. Page n 7/14
La bibliothèque ADC permet d utiliser simplement le convertisseur analogique / numérique. ( cf l aide disponible dans MikroC ). 9 EXEMPLE DE PROGRAMME Cahier des charges Ce programme permet de tester la lecture de l'état d'un bouton poussoir du port B et de commander les sorties du port C. Si l'un des BP du port B est appuyé, la moitié droite du PORTC est à 1 ( led correspondantes allumées). Sinon, la moitié gauche est à 1 ( led correspondantes allumées). void main() { } anselb=0; // PORTB en mode numérique anselc=0; // PORTC en mode numérique trisb=0xff; // PORTB en entrée : 0xFF = %1111 1111, soit toutes les lignes de ce port en entrée. ( 1 = i = input) trisc=0x00; // PORTC en sortie : 0x00 = %0000 0000, soit toutes les lignes de ce port en sortie.( 0 = o = output) while(1){ while(portb==0){ //lecture et test des BP reliés au port B portc=0xf0; // Leds RC7 à RC4 allumées. } portc=0x0f; //Leds RC3 à RC0 allumées. } Page n 8/14
10 ORIENTATION ET AFFECTATION D UNE SEULE LIGNE DE PORT A travers les exemples qui suivent nous allons passer en revue la syntaxe utilisée pour manipuler une seule ligne de port. Exemples : TRISC0_bit = 0 ; // bit 0 du port C en sortie. RA3_bit = 1 ; //mise à 1 du bit 3 du port A TRISC1_bit = 1 ; // bit 1 du port C en entrée. RA4_bit = 0; //mise à 0 du bit 4 du port A Page n 9/14
11 LE LOGICIEL MIKROC PRO Lycée Eugène IONESCO Le logiciel MikroC pro permet l édition des programmes. Son fonctionnement est comparable à celui de MpLAB, le logiciel fourni par Microchip. Compilation et Réglages du programmation projet : choix de l oscillateur, etc Gestionnaire de projet Fenêtre D édition du programme Gestionnaire de bibliothèques de fonctions Page n 10/14
Un certain nombre d onglets sont présents sur les bords de L IDE (integrated development environment : environnement de développement). Ils permettent d accéder à différentes fonctions de l IDE. Project manager : le gestionnaire de projet. Avec un certain nombre d IDE, un projet est un ensemble de fichiers sources( extension.c ), de fichier d entête ( extension.h), de fichier de programmation ( extension.hex) etc Il est important de toujours vérifier que votre fichier source en langage C est bien dans le projet que vous avez créé. Si ça n est pas le cas, le programme ne sera pas compilé. Library manager : gestionnaire de bibliothèques de fonctions. Une bibliothèque est un ensemble de fonctions utilitaires permettant une utilisation aisée des modules intégrés aux microcontroleurs pic ou de circuits électroniques ( capteurs, interfaces etc ). Grace à ces fonctions, l utilisation d un afficheur LCD se résume à l utilisation de quelques fonctions prédéfinie et dont une aide complète est fournie en cliquant sur la fonction dans le gestionnaire de bibliothèque. Ensemble des fonctions permettant la commande d un afficheur LCD. Lcd_Init permet par exemple d initialiser l afficheur. Page n 11/14
Project settings : paramètres du projet C est ici que le choix du microcontrôleur se fait. On peut y choisir aussi sa fréquence de fonctionnement ainsi que le mode de fonctionnement du programme : Le mode release permettant une exécution normale et automatique du programme. Le mode ICD debug permettant l exécution du programme en mode pas à pas, au gré de l avancement souhaité par le développeur. Il est possible de configurer plus en détail le fonctionnement du microcontrôleur dans un autre menu de l IDE. 12 FONCTIONS DE TEMPORISATION Dans un programme on est souvent amené à utiliser des temporisations (cas d un clignotement de LED par exemple). Voici les 2 principales fonctions disponibles dans MikroC. Temporisation en microseconde Déclaration de la fonction Description void Delay_us(const unsigned long time_in_us); Cette fonction crée une temporisation multiple d 1µs. Exemple Delay_us(100); /* 100µs de pause */ Temporisation en milliseconde Déclaration de la fonction Description void Delay_ms(const unsigned long time_in_ms); Cette fonction crée une temporisation multiple d 1ms. Exemple Delay_ms(10); /* 10ms de pause */ Page n 12/14
13 FONCTIONS UTILES Déclaration de la fonction Description void IntToStr(int input, char *output); Converts input signed integer number to a string. The output string has fixed width of 7 characters including null character at the end (string termination). The output string is right justified and the remaining positions on the left (if any) are filled with blanks. Paramètres input: nombre signé à convertir en chaine de caractères output: chaine de caractères correspondant à l entier Exemple int tension = 224; char texte[6]; IntToStr(tension, texte); // texte est la chaine"224" (il y a 3 caractères non alphanumériques devant 224) Code hexa de l espace texte[] = 0x20 ; 0x20 ; 0x20 ; 0x32 ; 0x32 ; 0x34 Codes hexa de 2 ; 2 ; 4 Page n 13/14
14 D AUTRES EXEMPLES DE PROGRAMMES Clignotement des led du portc à la fréquence de 0,5Hz. void main() { ANSELC = 0; PORTC = 0; // Init PORTC TRISC = 0; // PORTC as output while(1) { PORTC = ~PORTC; // toggle PORTC Delay_ms (1000); // 1s delay } } Affichage d une donnée sur l afficheur LCD ( relié au port B) // configuration des broches d'entrée/sortie sbit LCD_RS_Direction at TRISB4_bit; sbit LCD_EN_Direction at TRISB5_bit; sbit LCD_D7_Direction at TRISB3_bit; sbit LCD_D6_Direction at TRISB2_bit; sbit LCD_D5_Direction at TRISB1_bit; sbit LCD_D4_Direction at TRISB0_bit; void main() { ANSELB=0x00; Lcd_Init(); while(1) { } Lcd_Out(1, 3, "terminale"); Lcd_Out(2, 4, "STI2D SIN"); Delay_ms(1000); } Page n 14/14