Guide de Programmation Des DSPIC V1
Guide de Programmation Des DSPIC V1
Guide de Programmation Des DSPIC V1
Guide DSPIC30F
Leurs "0 broc%es se rpartissent en ) Des broc%es d&alimentation *'ss+ 'dd+ ,'ss+ et ,'ddDes broc%es sur les #uelles vont transiter des si(naux analo(i#ue ou numri#ues La plupart des broc%es peuvent avoir plusieurs utilisations a priori. .ais / un instant t+ une broc%e ne peut avoir #u&un r0le bien dfini. C&est pour cela #u&il va falloir initialiser le DSPIC au dbut du pro(ramme main. Confi(urer+ ou initialiser le DSPIC consiste / mettre / certaines valeurs les !1 bits de re(istres spcifi#ues *nomms SF2 c%e3 .icroc%ip-. Exemple ) ADCON1 = 0xFF ; Positionne tous les bits du registre de Contrle ADC !1 " 1 4ous allons voir en dtail dans la partie suivante comment confi(urer un re(istre de fa5on (nrale et plus en dtails les re(istres confi(urant un port.
Guide DSPIC30F
2.1.
#uels sont les $orts et les its dis$oni les $our les entres%sorties "
&TT'(TIO( ) Ce DSPIC tant aliment entre 0' et :'+ au)une tension d!entre ne devra dpasser cet intervalle 0' :'. Il est / rappeler #u&une tension sinus d&litude :' passe la moiti de son temps en n(atif *;us#u&/ :'- et donc passe :0< de son temps / dtruire le DSPIC=
6n port peut >tre vu comme un acc$s direct / certaine cases mmoire du DSC via des broc%es du composants *#u&on peut venir vrifier / l&oscilloscope ou sur les#uelles on peut mettre directement une tension-. 9n va donc pouvoir via les ports+ soit crire le contenu d&une mmoire vers le monde p%8si#ue+ soit inversement stoc?er dans une mmoire des donnes venant du monde p%8si#ue. Ce DSC dispose de plusieurs ports *nomms ,+@+C +D+A+F- permettant l&c%an(e de donnes avec le milieu extrieur *sous forme de boolen ou de mots binaires-. Les c%an(es peuvent se faire dans les 2 sens *entre ou sortie- et c%a#ue bit peut >tre confi(ur en entre ou en sortie indpendamment des autres bits du port. 9n dispose tr$s prcisment *B!C p. ::+ et B2C- des ports et bits suivants ) Port & Port * Port C Port D Port D @it !! @its 0 / !2 D parta(s notamment avec l&,DC @its !3+ !"+ !: @its 0 / 3 et bits E et F @its 0 / 1
Tableau 1
&ttention ) il 8 a beaucoup plus de fonctions disponibles et donc de bits possibles #ue de broc%es pour le composant. Donc on doit confi(urer les diverses broc%es pour #u&elles soient associes / une fonction *et donc implicitement exclure l&usa(e d&autres fonctions-. Par exemple les broc%es du port @ servent aussi comme entre du convertisseur analo(i#ue numri#ue ) attention donc / ne pas avoir de conflit et c&est au dveloppeur le de (rer.
Guide DSPIC30F
&sso)ier les ro)+es , des -on)tions .a /tre -ait dans les 10res li1nes du )ode main 2 )!est la $+ase d!initialisation.
2.2.
& noter ) ce #ui suit est autant valable pour l&critureGlecture d&un port #ue pour celle d&un re(istre spcifi#ue SF2 ) c&est normal car un port est vu comme un re(istre parmi d&autres pour le s8st$me de dveloppement.
Pour crire sur un port+ on peut directement coder une valeur sur un re(istre par ) PORTA = 0xFD ; // PORTA dfini grce au p30F3014.h // codage en hexadcimal 9u encore PORTA = 0b11111101 // codage en binaire .ais 5a pose (ros probl$me ) Si vous sou%aite3 faire *par exemple- passer / 0 uni#uement le bit ! du re(istre P92H,+ crire les li(nes prcdentes va forcer aussi / ! d&autres bits *#ui devaient peut >tre rester / 0-. D&o7 plusieurs tec%ni#ue dcrites ci dessous
2.2.1. Utilisation d!un mas5ue Supposons #ue la valeur initiale du P92H, soit 0. 9n va coder sous cette forme ) PORTA = PORTA | 0x02 ; I reprsente le 96 Lo(i#ue bit / bit #ui permet de ne mettre / ! #ue le *ou les- bits sou%aits. L&effet sera la mise / ! du bit ! *2 J !0 en binaire- sans touc%er aux autres. 'ariante ) PORTA = PORTA | 0b00000010; ,utre variante )
IOGS 2011-12 p.4
Guide DSPIC30F
PORTA |= 0x02 ; //codage compact du C Pour la mise / 0 de certains bits+ on va coder sous cette forme *FJ!!!! et DJ!!0!- ) PORTA = PORTA & 0xFD ; K reprsente le AH Lo(i#ue bit / bit #ui permet de ne mettre / 0 #ue le *ou les- bits sou%aits. L&effet sera la mise / 0 du bit ! forme *FJ!!!! et DJ!!0! en binaire- sans touc%er aux autres. 'ariante ) PORTA = PORTA & 0b11111101; ,utre variante ) PORTA &= 0xFD ; //codage compact du C
2.2.2. Utilisation des o$rateurs de d)ala1e L&oprateur du lan(a(e LL ou MM permettent de dcaler les bits d&un mot binaire. char a=0 ; // a occupe 1 octet initialis 0 a = 1<<3 ; // a va valoir en binaire 0001000 ,utrement dit+ !MM4 va positionner / ! le bit nN 4. Les codes prcdents peuvent donc s&crire ) PORTA = PORTA | (1<<2) ; At en utilisant un alias dans un .% *le s8stem.% dans les pro;ets concerns- ) #define Bit2 (1<<2)d#ns le $h Puis dans le code C PORTA = PORTA | Bit2 ;
2.2.3. Utilisation des alias d-inis dans $30F3014.+ Le fic%ier p30F30!".% B2C comprend des dfinitions permettant de code ainsi ) PORTBbits.RB0= 1 ; // mise 1 du bit 0 du Port B
Guide DSPIC30F
Ces dfinitions utilisent des structures+ des c%amps de bits et asse3 souvent des unions+ mais l&utilisateur peut se contenter des les utiliser telles #ue *s&il a bien inclus le fic%ier p30F30!".% dans son pro;et .PL,@-. Le fic%ier p30F30!".% B2C comprend aussi des alias du t8pe ) #define _RB0 PORTBbits.RB0 9n peut donc aussi coder sous la forme ) _RB0= 1 ; // mise 1 du bit 0 du Port B &u -inal )!est la -a6on la $lus sim$le de )oder si on ne sou+aite $ositionner les its 1 $ar 1.
6n (rand nombre des ces alias sont dfinis *li(nes !10: / 2"00 du fic%ier p30F30!".% B2C+ le plus efficace tant de lancer une rec%erc%e sur P92H@+ H2IS@+ ,DC94+ etc.-
2.3. Comment distin1uer entres analo1i5ues 3$our l!&DC4 et entres/sorties numri5ues , partir de l&implmentation du DSPIC sur une carte lectroni#ue *la DSPICdem 2 pour nous-+ certaines broc%es sont ncessairement analo(i#ues et on doit les confi(urer telles #ue. Cela se fait par l&intermdiaire du re(istre &DPCF7 *c&est aussi un des re(istres de contr0le de l&,DC-. Les entres p%8si#ues du potentiom$tre et de la t%ermistance sont ,42 et ,43. La mise / 0 d&un bit x du re(istre ,DPCFO confi(ure la broc%e ,4x *aussi nomme 2@xcomme tant analo(i#ue *et donc comme tant une entre analo(i#ue-. La mise / ! d&un bit x du re(istre ,DPCFO confi(ure la broc%e ,4x *ou 2@x- comme tant numri#ue *et donc il faudra utiliser le re(istre H2IS@ dcrit dans le para(rap%e suivant afin de paramtrer cette comme entre ou bien comme sortie-. 9n doit donc coder dans l&initialisation ) Con%igur#tion des entr&es #n#logi'ues )
ADPCFGbits.AN2= 0 ; ADPCFGbits.AN3= 0 ;
Guide DSPIC30F
Initi#lise A!2 et A!3 comme entr&e #n#logi'ues Indispens#ble pour utiliser l# thermist#nce et le potentiom(tre de l# c#rte D)PICdem 2$
2.4.
6ne fois confi(ur comme IG9 numri#ue+ cela se fait en crivant sur le bit nN 4 du re(istre spcifi#ue H2IS@ *il existe aussi des re(istres H2IS,+ H2ISC+ H2ISD+ H2ISA+ H2ISF- on va confi(urer c%a#ue bit en entre ou bien en sortie de la fa5on suivante ) .ettre le bit / ! impli#ue un bit en entre .ettre le bit / 0 impli#ue une sortie Comme tou;ours+ on ne modifie pas les bits non concerns en utilisant un des tec%ni#ues du para(rap%e 0 Exemple * TRISB = TRISB & 0xFD ; /* Le bit 2 du Port B devient une sortie (mise 0) et les autres sont inchangs. */ TRISB = TRISB | 0x08 ; /* Le bit 3 du Port B devient une entre (mise 1) et les autres sont inchangs. */ Ces li(nes sont t8pi#uement crites dans la p%ase d&initialisation+ soit en dbut de main. Alles sont modifiables n&importe o7 dans le code. .ais attention+ une entre est souvent p%8si#uement connect / un dispositif ne peut >tre transforme en sortie sans probl$me lectri#ue *court circuit+ etc.-. Autre exemple * _TRISB2= 0 ; // Le bit 2 du Port B est une sortie (mise 0) et les autres sont inchangs. _TRISB3 = 1 ; // Le bit 3 du Port B devient une entre (mise 1) et les autres sont inchangs. 9n a utilis ici les alias dfini dans le .%. L&ensemble des bits et des re(istres concernant les ports du DSPIC est donn dans le tableau
IOGS 2011-12 p.7
Guide DSPIC30F
2.8.
Rsum sur l!utilisation des $orts 2 Pour utiliser un port (ou un registre) : @ien dfinir les bits utiliss+ et bien dfinir les entres et les sorties ADPCFGbits.AN2= 0 ; ADPCFGbits.AN3= 0 ; //Initialise les entrees thermistance potentiometre de la DSPICdem 2 Confi(urer les entres par+ par exemple ) _TRISB8 = 0 ; Confi(urer les sorties par+ par exemple ) _TRIS9 = 1 ; 6tiliser les ports par ) _RB2 = 1 ; // passage du bit B2 1 x = _RB3 ; // lecture du bit B3 dans la variable x et