loader
Foto

A/D átalakító használata a PIC32MX5XX/6XX/7XX családnál

A beágyazott rendszereknél nagyon fontos lehet az analóg jelek feldolgozása. Például a hőmérséklet mérésének az eredménye analóg érték, amelyet fel kell dolgozni. Ehhez viszont át kell konvertálni a mikrovezérlőben digitális értékké. Ebben a cikkben megnézünk egy olyan alkalmazást, amely a PIC32MX7XX mikrovezérlő AD átalakítóját használja.

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.

kep
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.

 



Egyéb cikkek

További cikkeink ebben a témakörben

Régebbi cikkeink

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.. . . .