[b]Tämän artikkelin tarkoituksena on esitellä I2c-protokollaa käyttävien laitteiden käyttöä
Picaxe-mikrokontrollerilla. Artikkeli sisältää seuraavat osat:
- I2c-protokollan esittely
- I2c ja Picaxe
- Wii Nunchuk -ohjaimen lukeminen Picaxe 8m2 -mikrokontrollerilla[/b]
[size=150]
1. I2C-väylä ja protokolla[/size]
Tästä väylätyypistä käytetään muitakin nimityksiä kuten TWI (two-wire interface) ja IIC. Kyseessä on Philipsin kehittämä sarjamuotoinen tiedonsiirtotapa, joka käyttää kahta kaksisuuntaista linjaa, datalinjaa (SDA) ja kellolinjaa (SCL). Nämä linjat toimivat open-drain -periaatteella, mikä tarkoittaa, että ne pitää kytkeä käyttöjännitteeseen sopivan vastuksen kautta.
I2c-väylän yksi hyvä puoli on, että samaan väylään (joka vie mikrokontrolleristasi vain kaksi pinniä) voidaan kytkeä useita laitteita, koska laitteet viestivät vetämällä linjan alas ja orjalaitteet tunnistavat oman osoitteensa isäntälaitteen kutsuessa niitä. Nämä osoitteet ovat 7- tai 10-bittisiä. Käytännössä väylään ei voi kuitenkaan liittää koko osoiteavaruuden laajuudelta laitteita kokokonaiskapasitanssin takia, kuitenkin useita laitteita yhtä aikaa.
[size=150]
2. I2C ja Picaxe[/size]
Picaxen kaikki mikrokontrollerit voivat käyttää i2c-väylää, jolle on jokaisessa mikropiirissä tietyt pinnit. Nämä pinnit on kytkettävä vaikkapa 4.7k vastuksilla käyttöjännitteeseen. (28x1 ja kaikki -x2 -sarjan Picaxet voivat toimia myös i2c-orjana) Picaxen SDA kytketään kaikkien orjalaitteiden SDA-pinniin ja vastaavasti SCL-pinnit yhteen. Picaxe-koodiin pitää alustaa ensin orjalaitteen tiedot ja komento kuuluu esim. näin:
hi2csetup i2cmaster, %10100000, i2cslow, i2cbyte
Laiteen osoite annetaan 8-bittisessä muodossa. Usein datalehdet antavat osoitteen 7-bittisessä muodossa ja niihin on silloin lisättävä yksi nolla perään. Tätä bittiä Picaxe muuttaa sitten sen mukaan, luetaanko orjaa vai lähetetään kö dataa. Osoitteen voi antaa hexana tai desimaalilukuna. i2cslow tarkoittaa 100 Khz:n väylänopeutta ja i2cfast 400 Khz:n nopeutta. On käytettävä hitaimman väylässä olevan laitteen nopeutta. Jos käytetään joatakin muuta kuin oletuskellotaajuutta, pitää se merkitä esim. i2cslow_32. i2cbyte tarkoittaa osoitteen pituutta, 10-bittisillä osoitteilla tähän laitetaan i2cword.
Sitten kokeilemaan väylää!
[size=150]
3. Wii Nunchuk -ohjaimen lukeminen 8m2-Picaxella[/size]
Lauri Jämsä on kirjoittanut esittelyn halvoista Nunchuk -ohjaimista ja artikkeli löytyy Ruuvipenkistä osiosta oppaat. Nämä laitteet maksavat pari euroa Ebayssa ja niissä on siis 3-akselinen kiihtyvyysanturi, 2-akselinen joystick ja kaksi nappia, joita kaikkia voidaan lukea i2c-väylän avulla.
SDA-pinni on 8m2-Picaxen viides pinni C.2, ja SCL löytyy kuudennesta pinnistä nimeltä C.1. Kytke molempien linjojen ja powerin välille 4.7k:n vastukset. En jaksanut tarkistaa, onko Nucnhukissa omat ylösvetovastukset, muttei ainakaan toiminut ilman näitä vastuksia. Nunchukin plugin kytkentäkaavio löytyy Googlesta hakemalla “nunchuk connector” (joudun itse tarkistamaan joka kerta). Itse tilasin pienen adapteripalikan ettei tarvitse johtoja riipiä. Laite käyttää 3.3v:n jännitettä, joskin olen kokeillut myös 5v:a, joka on toiminut yhtä hyvin (kestävyydestä ei takuita).
Kun kytkennät ovat valmiit, laite alustetaan seuraavasti ja data luetaan hi2cin komennolla:
[code]Symbol joy_x = b10’ määritellään vakiot: joystickin arvot
Symbol joy_y = b11
Symbol accX = b12’ kiihtyvyyssensorin arvot
Symbol accZ = b13
Symbol accY = b14
Symbol napit = b15 ’ kaksi viimeistä bittiä ovat nappien tilat
' 00=Z pohjassa; 01=molemmat ; 10=C ; 11=ei kumpikaan
Symbol nunchukosoite = 0xA4
Init:
hi2csetup i2cmaster, nunchukosoite, i2cslow, i2cbyte
hi2cout 0xF0,(0x55) ’ kirjoitetaan 0x55 rekisteriin 0xF0 jne.
hi2cout 0xFB,(0x00)
hi2cout (0x00)
main:
hi2cout (0x00)
hi2cin (joy_x,joy_y,accX,accY,accZ,napit) ’ luetaan data sijainnista 0 alkaen
let napit = napit & 00000011
'desimaaleissa napit muuttujan arvo siis 0 jos Z pohjassa, 1 jos molemmat
'2 jos C, ja 3 jos ei kumpikaan
debug 'debugataan tietokoneelle
pause 50
goto main[/code]
Nunchukin alustus on pakko tehdä näin, jos käytetään feikki-Nunchukia. Netissä on paljon ohjeita aidoille laitteille, joiden alustus on erilainen. Tämä alustus toimii myös aidoille ohjaimille ja esimerkiksi langatomille Nunchuk-ohjaimille. Jos sinulla on joku tehdastekoisista Picaxe-alustoista, joissa on 10k alasvetovastukset I2C pinneissä, kytke vain esim 4.7k tai pienemmät ylösvetovastukset, niin homman pitäisi toimia tällä jännitteen jaolla.
I2c mahdollistaa monien kätevien liitännäisten helpon käyttämisen. Tällä väylällä varustettuna löytyy reaaliaikakelloja, muistipiirejä, moottorinohjauspiirejä jne. Nämä ovat usein käteviä, jos I/O pinnit ovat vähissä. Alla on esimerkkikuva, miten 8m2 on saatu pyörittämään lcd-näyttöä I2c I/O-expanderin avulla ja debuggaamaan GPS NMEA -dataa. Kolme pinniä käytetty ja vielä on kaksi outputia ja kaksi inputia käyttämättä