A cikk írásakor a MikroElektronika EasyPIC Fusion v7 fejlesztőpaneljét használtuk, amely tartalmaz egy I2C kommunikációt megvalósító áramkört is (1. ábra). Az SW14 kapcsolósor segítségével tudjuk kiválasztani azt, hogy a PIC32MX795F512L mikrovezérlő melyik belső I2C perifériáját használjuk fel.
1. ábra I2C kommunikációt megvalósító áramkör az EasyPIC Fusion v7 fejlesztőpanelen
A panelen az I2C kommunikációt használó 24AA01 EEPROM található, amelynek a panelen kialakított címe: 001. Ha mikrovezérlőből írni szeretnénk a memóriába, akkor a "Control Code"-nak 1010-et kell lennie, illetve az R/W bit értékét logikai 0-ba kell állítani (2. ábra).
2. ábra Írás/olvasás beállítási lehetőségei a 24AA01 EEPROM-nál
Szeretnénk írni a mikrovezérlőből a 0x1 (001) címen található memóriába. De hogyan képezzük a címet? A következő ábrán látható az, hogy először kiadásra kerül a Start bit, azután 7 biten kell beállítani a slave eszköz címét. A felső 4 biten találjuk a Control Code-ot (1010), azután kell beírnunk a slave eszköz címét (001), majd a logikai 0 következik, mert írni szeretnénk adatot a memóriába.
3. ábra Az I2C címmezőjének felépítése a 24AA01 EEPROM-nál
Tehát az eszközünk "teljes" címe, amelyet majd ki kell adnunk ahhoz, hogy a slave eszközbe adatot tudjunk írni, az a következő lesz: 10100010 (1010 001 0).
Indítsuk el az MpLABX-et és hozzunk létre egy projektet, majd adjunk ehhez a projekthez egy "C" file-t, amelybe a következő programot másoljuk be.
#include <xc.h>
#define SCL1 LATAbits.LATA14
#define SDA1Out LATAbits.LATA15
void i2cMasterIdle()
{
while(I2C1CON & 0x1F);
while(I2C1STATbits.TRSTAT);
}
void i2cMasterStart()
{
i2cMasterIdle();
I2C1CONbits.SEN = 1;
while(I2C1CONbits.SEN);
}
void i2cMasterStop()
{
i2cMasterIdle();
I2C1CONbits.PEN = 1;
while(I2C1CONbits.PEN);
}
void i2cMasterSend(unsigned char byte)
{
I2C1TRN = byte;
while(I2C1STATbits.TRSTAT);
}
void i2cMasterConfig()
{
I2C1BRG = 0x01E7;
I2C1CONbits.A10M = 0;
I2C1CONbits.ON = 1;
}
main()
{
TRISAbits.TRISA14 = 0;
TRISAbits.TRISA15 = 0;
i2cMasterConfig();
while(1)
{
i2cMasterStart();
i2cMasterSend(0xA2);
i2cMasterStop();
}
}
Úgy írtuk meg az alkalmazást, hogy a "Start" és a "Stop" biteket is egy-egy függvénnyel valósítottuk meg. Tehát, ha mi szeretnénk kiadni egy Start bitet, mert adatokat küldenénk az I2C buszon, akkor az "i2cMasterStart()" függvényt kell meghívnunk. A Start és a Stop bitek között tetszőleges számú karaktert tudunk kiküldeni az i2cMAsterSend() függvéény segítségével. Ezzel a függvénnyel egy karaktert tudunk egyszerre kiküldeni.
Fordítsuk le az alkalmazásunkat, és a kapott hexa file-t töltsük le a mikrovezérlőbe. A futási eredmény a következő ábrán látható.
4. ábra Futási eredmény, amikor az "0xA2"-t írjuk ki az I2C buszra
Módosítsuk most a "while(1)" végtelen ciklust a következő részlet szerint, mert az 0xA2 cím kiküldése után egy adatot (0x0A) is kiküldünk..
while(1)
{
i2cMasterStart();
i2cMasterSend(0xA2);
i2cMasterSend(0xA);
i2cMasterStop();
}
Futtassuk újra az alkalmazásunkat, és a következő eredményt kapjuk (5. ábra).
5. ábra 0xA2 és 0x0A értékek az I2C buszon
Végül módosítsuk újra a programunkat, további adatokat küldjünk ki az I2C buszon. Látható, hogy korlátlan adatokat tudunk kiküldeni a cím megadása után, a Start és a Stop biteket mi adjuk ki, amikor a hozzájuk tartozó függvényeket meghívjuk.
Adjunk hozzá a "while(1)" végtelen ciklusban további függvényhívásokat.
while(1)
{
i2cMasterStart();
i2cMasterSend(0xA2);
i2cMasterSend(0x01);
i2cMasterSend(0x09);
i2cMasterSend(0xA);
i2cMasterSend(0xF);
i2cMasterStop();
}
Futtassuk újra a lefordított alkalmazásunkat a tesztpanelen (6. ábra).
6. ábra Forgalom az I2C buszon
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.. . . .