Virtuaalikone on päivitetty. Varmistathan, että käytät uusinta versiota.
Session 2¶
Vaihe 1: Virtuaalikoneen käynnistäminen tai ympäristön valmistelu¶
Tähän laboratorioharjoitukseen voit käyttää omaa tietokonettasi tai yliopiston työasemia. Me suosittelemme vahvasti käyttämään yliopiston työasemia. Valitsemastanne vaihtoehdosta huolimatta vain yhden ryhmän jäsenen pitää tehdä tämä valmistelu.
Jos haluat käyttää omaa tietokonettasi¶
Tässä tapauksessa sinulla on kaksi vaihtoehtoa:
- Vaihtoehto 1 Asenna Virtual Box and Virtual Box Extension Pack . Extension Packin saa asennettua seuraamalla näitä ohjeita. Sen jälkeen seuraa samoja ohjeita kuin opiskelijat, jotka käyttävät yliopiston työasemia (katso alempaa)
- Vaihtoehto 2 Valmistele CCSStudio IDE:
Tämä on pidempi vaihtoehto. Sinun täytyy seurata ohjeita Lovelacessa CCStudio IDE (jota sinun olisi pitänyt seurata jo kotona)
Jos käytät yliopiston työasemaa¶
- Lataa virtuaalinen levykuva (.ova-tiedosto). Löytyy Lovelace-osiossa Virtuaalikone: Lataus ja historia
- VirtualBoxissa valitse
File -> Import appliance
ja valitse edellinen .ova-tiedosto. Seuraavassa ruudussa valitse kansio, johon haluat tiedoston sijoittaa ja paina "Import". - Jonkin ajan kuluttua näet allaolevan kaltaisen ruudun. Valitse oikea virtuaalikone ja paina Start yläoikealla.

.
Näin käynnistät virtuaalikoneen ja olet valmis seuraavaan vaiheeseen.
Näin käynnistät virtuaalikoneen ja olet valmis seuraavaan vaiheeseen.
Kurssin SensorTag-projekti¶
Asennus¶
Seuraavaksi sitten tuodaan kehitysympäristöön kurssin projektiaihio. Lataa .zip joka sisältää tyhjän projektin ja ja tuo tyhjä projekti työtilaasi ( katso sessio 1 ohjeet)
Lopuksi lisäämme joitakin uusia tiedostoja ja kirjastoja. Tiedostot voi ladata tästä Github-projektista. Lataa ja pura zip-tiedosto tietokoneellesi. Sen jälkeen tuo seuraavat tiedostot projektiisi:
- project_main.c
- sensors-hakemisto (kaikki tiedostojen pitää olla sensor-kansiossa. Voit raahata ja pudottaa kanssiot projektiin)

Huomio! tiedosto
project_main.c
tulee olemaan päätiedostomme, joten poista rakennuksesta (Remove from build) kaikki muut tiedostot, joissa on main
funktio.Tehtävä 1 - Painonapit ja ledit¶
Lähdetään liikkeelle ihan peruasioista ja katsotaan luentomateriaalin avulla miten saadaan painonapit ja ledit käyttöön laitteessamme. Materiaalit löytyvät luentokappaleesta 15. "Input / Output".
Tässä tehtävässä käytetään toista SensorTagin painonappia asettamaan punainen ledi päälle / pois. Tarvitsee siis:
- Esitellä RTOS:n globaalit muuttujat painonappi- ja ledipinneille.
- Määritellä pinneille oikeat konfiguraatiot.
- Laatia keskeytyksenkäsittelijä painonapille.
- Ottaa pinnit mukaan ohjelmaan
main-funktiossa
.
Hox! Huomatkaa että Sensortag-laitteessa on useampia ledejä kuin mitä ohjelmassa voimme käyttää. Kurssilla meitä siis kiinnostavat laitteen pohjassa (punaisen kumisuojuksen raossa) näkyvät kaksi ohjelmoitavaa lediä, punainen ja vihreä. Lisäksi laitteessa on näytön ja debuggerin välissä debuggerin kaksi lediä, joita emme voi ohjelmallisesti käyttää.
Tehtävä 2 - Anturidatan lukeminen¶
Tässä tehtävässä otamme i2c-väylän käyttöön ohjelmassa ja luemme sitä kautta valoisuusanturilta OPT3001 mittausarvoja. Testauksen vuoksi tulostetaan vielä mitatut anturiarvot debuggerin kautta kehitysympäristön konsoli-ikkunaan. Materiaalit löytyvät luentokappaleista 17. "Sarjaliikenne", 20. "SensorTagin oheislaitteet" ja 8. "C-kielen syöte ja tulostus"
Tehtävässä:
- Otetaan
main
-funktiossa i2c-väylä mukaan ohjelmaan. - Toteutetaan taskiin
sensorTask
seuraavat: - Alustetaan ja avataan i2c-yhteys.
- Alustetaan itse anturi toimintaan funktiolla
opt3001_setup
(kirjaston otsikkotiedostoopt3001.h
hakemistossasensors
). - Luetaan anturilta dataa
opt3001_get_data
funktiolla ikuisessa loopissa. sensors
-kirjaston tiedostoonopt3001.c
funktioonopt3001_get_data
tarvitsee toteuttaa:- Määritellään i2c-viestirakenne, jolla OPT3001-anturin kanssa kommunikoidaan. Tarvittavat tiedot löytyvät luentokappaleesta 20. "SensorTagin Oheislaitteet".
- Tarvitaan oikea koko viestirakenteen puskureille
txBuffer
jarxBuffer
. (Tehtävän koodissa kommentoitu ulos). - Anturin i2c-osoite viestirakenteen jäseneen
.slaveAddress
. - Oikea rekisterin osoite lähetyspuskuriin
txBuffer
. - Toteutetaan bittioperaatiot, joilla i2c-viestissä vastaanotetuista tavuista muodostetaan 16-bittinen rekisterinarvo
rxBufferiin
vastaanotetuista tavuista. (Kts. bittioperaatiot luentokappale 5 sekä anturin käyttö kappale 20.) - Lasketaan saadusta 16-bittisestä rekisterinarvosta mittausarvo lukseina (ehkäpä käyttäen omaa harjoitustehtävävastausta?)
- Funktio palauttaa mittausarvon lukseina.
- Tulostetaan mittausarvo lukseina debuggerin kautta konsoli-ikkunaan.
Tehtävä 3 - Tilakone¶
Tässä tehtävässä tulee toteuttaa kuvan tilakone. Eli, aina kun on saatu uusi mittausarvo anturilta
sensorTask
issa, muutetaan ohjelmassa tila DATA_READY
ja välitetään arvo globaalissa muuttujassa uartTask
lle. Kummassakin taskissa tulostetaan mittausarvo debuggerin kautta konsoli-ikkunaan. Tarvittavat tilat sekä globaali tilamuuttuja että muuttuja mittausarvon välittämiseen ovat annettu valmiiksi koodissa.
Tehtävässä voisi kannattaa muuttaa ainakin uartTaskin sleep-periodi pienemmäksi, vaikkapa 100ms. Miksi?
Tehtävä 4 - Viestitys UARTilla¶
Tässä tehtävässä ideana on lähettää
uartTask
:ssa debuggerin kautta konsoli-ikkunaan tulostettu merkkijono sarjaliikenne(UART)-yhteydellä kehitysympäristöön. Materiaalit löytyvät luentokappaleesta 17. "Sarjaliikenne".Tehtävä edellyttää sarjaportin kytkemistä kehitysympäristöön. Ohjeet löytyvät tästä linkistä: Sessio 1 UART osa. SensorTagin sarjaportin tunnistaa nimestä 'XDS110 Class Application/User UART', jos porttia joutuu etsimään käyttöjärjestelmän työkaluilla.
- Windowsissa
COMn
- Ubuntussa
/dev/tty/ACM0
- Muissa linuxeissa ehkä..
/dev/ttySn
Tehtävässä siis:
- Otetaan
main
-funktiossa UART-toiminnallisuus mukaan ohjelmaan. - Taskissa
uartTask
alustetaan UART-yhteys parametreilla 9600,8n1. - Lähetetään
UART_write
-funktiolla tehtävän 3. merkkijono sarjaliikenteen avulla kehitysympäristölle.
Hox! Kuten huomaatte, merkkijonossa rivinvaihtoon UART-sarjaliikenneyhteydellä ei enää riitäkään pelkkä \n (rivinvaihto, engl. line feed) vaan vaaditaan myös telanpalautus (engl. carriage return) mukaan, eli lisätään rivin loppuun rimpsu \n\r. Noh, tämä näitä historiallisia sarjaliikenneprotokolliin liittyviä asioita joiden kanssa joudumme elämään.
Tehtävä 5 - UARTin käyttö ulkoisen terminaalisovelluksen kanssa¶
Joskus on hyödyllistä liittää ulkoinen sarjaterminaali, jotta laitteen kanssa voisi olla vuorovaikutuksessa. Itse asiassa lopputyösi UARTGateway käyttää tätä yhteyttä. Tässä tehtävässä tarkistamme, kuinka voimme käyttää ulkoista terminaalia (tässä tapauksessa
screen
) nähdäksemme tiedot, jotka SensorTag UART kirjoittaa. Saat tietoa screenistä tästä opetusohjelmastaTehtävässä siis:
- Katkaise terminaali CCS Studiosta.
- Debuggaa projektiisi.
- Ennen Resume pääohjelmaa avaa Linux-terminaali ja kirjoita
screen /dev/ttyACM0
. - Sinun pitäisi nähdä UART-tulosteesi siellä.
- Poistuaksesi paina
Ctrl-A
ja sen jälkeenk
-näppäintä.
Lopuksi¶
Näin. Nyt on saatu Sensortagilla jo vilkutettua lediä, luettua sensoridataa ja kommunikoitua laitteesta ulkomaailman kanssa!