A PIC32MX7-es sorozatú mikrovezérlőiben található AD átalakító 10 bites és másodpercenként akár 1 millió konvertálásra is képes. Ennek a belső perifériának a felépítése látható a következő ábrán.
1. ábra Az A/D átalakító felépítése a PIC32MX7-es családnál
Először beolvassuk az "xc.h" header file-t, mert a programunkban használunk speciális file regisztereket (SFR), illetve bitmezőt. Az "AD_On()" makró segítségével kapcsoljuk be a mikrovezérlő AD átalakítóját.
Az "ADConfig()" függvény segítségével állítjuk be a mikrovezérlő belső AD átalakítójának a működését.
Az AD1CON1 értékadásánál a következő beállítások történtek (részletek):
- az átalakított analóg értéket, amely mindig 10 bites, 16 bites egészként ábrázoljuk (FORM = 000)
- automatikus konverzió, amikor a számláló működése véget ér (SSRC = 111)
- normál működés, az átalakított érték a következő konverziónál felülíródik (CLRASAM = 0)
Az AD1CON2 regiszter értékadásakor a következő tulajdonságok kerülnek beállításra (részletek):
- VrefH = AVdd, VrefL = AVss (VCFG = 000)
- nem kerülnek szkennelésre az analóg bemenetek (CSCNA = 0)
Az AD1CON3 regiszter értékadásakor az AD átalakítónak a következő főbb tulajdonságai lesznek:
- Auto-Sample Time 31 Tad lesz (SAMC = 11111)
- A Tad értéke: 64 * Tpb ("3F" : 63 (decimálisan), 63 + 1)
Az AD1CSSL regiszternél beállíthatjuk azt, hogy mely analóg bemenetek kerüljenek a szkennelés során felhasználásra. Tekintettel arra, hogy nem alkalmazzuk most a szkennelést, ezért az alsó 16 bitre logikai 0-kat írunk.
Az AD1CHS regiszter beállításál lehet megadni azt, hogy melyik analóg bemenet kerüljön felhasználásra, illetve azt, hogy történjen-e szkennelés. Az AD1CHSbits.CH0SA = 0 értékadással a RB0/AN0 bemenet került kiválasztásra.
Az AD1PCFG regiszter szolgál arra, hogy beállításra kerüljön az, hogy melyik (digitális) portlábat szeretnénk analóg bemenetté állítani. A logikai 0 jelenti az analóg bemenetet, a logikai 1 pedig az adott portláb digitális felhasználását. Az RB0/AN0 bementről olvassuk be az átalakítani kívánt analóg értéket, ezért ebbe a regiszterbe a 0xFFFE (1111 1111 1111 1110) kerül. A TRISB regiszter értékadása tehát elhagyható, hiszen, ezzel a regiszterrel a digitális portlábak iránya állítható be.
Az "ADEredmeny()" függvény "int" típusú. Feladata ennek a függvénynek az, hogy az ADC1BUF0 regiszter értékét kiolvassuk. Ehhez az kell, hogy az AD átalakító elindítsa a konverziót (AD1CON1bits.SAMP = 1), illetve meg kell várni a konverzió végét. A konverzió végét a "DONE" bit jelzi, amikor logikai 0-ból logikai 1-be vált, akkor ért véget az analóg jel átalakítása.
#include <xc.h>
#define AD_On() { AD1CON1bits.ON = 1; }
void ADConfig()
{
AD1CON1 = 0x00E0;
AD1CON2 = 0x0000;
AD1CON3 = 0x1F3F;
AD1CSSL = 0x0000;
AD1PCFG = 0xFFFE;
AD1CHSbits.CH0SA = 0;
}
int ADEredmeny()
{
AD1CON1bits.SAMP = 1;
while(!AD1CON1bits.DONE);
return ADC1BUF0;
}
main()
{
TRISD = 0x0000;
LATD = 0x0000;
ADConfig();
AD_On();
while(1)
{
LATD = ADEredmeny();
}
}
A "main()" függvény a projekt belépési pontja, itt indul el az alkalmazás. Először beállításra kerül a "D" port iránya, kimenet lesz az összes alsó 16 portbit. Ezután töröljük a LATD regisztert (ez akár el is hagyható), majd meghívásra kerül az "ADConfig()" függvény.
A függvény meghívása után kapcsoljuk be az AD belső perifériát a makró meghívásával.
A "while(1)" végtelen ciklusban mindig elindítjuk a konverziót, várakozunk, majd LATD regiszterbe beírjuk az átalakított analóg jel 10 bites megfelelőjét. Ezáltal a "D" porton láthatóvá válik bináris formában az átalakított analóg érték.
Október közepén elindítjuk az Atmel 8 bites mikrovezérlőkről szóló sorozatunkat. Ehhez használnunk kell természetesen egy fejlesztőkörnyezetet is. Több ilyen is létezik, például a WinAVR, vagy az Atmel Studio. Mi az Atmel Studio-t fogjuk használni, e. . . .
A PIC18F mikrovezérlők ma is népszerű a fejlesztők körében. Noha 8 bites architektúráról beszélünk, számos érdekes és hasznos alkalmazás megvalósítható vele. Elég csak az USB-re, vagy akár az Ethernetre gondolnunk. Ezért a Szerkesztőség egy sorozat k. . . .
A Microchip által javasolt fejlesztőkörnyezet az MPLABX, amely felváltja az MPlab-ot. Használata nehézkesnek tűnhet, ezért megnézzük ennek az IDE környezetnek a használatát, készítünk egy egyszerű projektet, amely egy PIC32 mikrovezérlőre épül.. . . .