S Ä H K Ö T E K N I I K A N O S A S T O Sulautettujen järjestelmien työ (521423S) RemoteC Jukka Happonen / SO 02
2 KÄYTETYT TERMIT JA LYHENTEET HTPC DVD CD MP3 ISM WLAN RLAN FSK PSK BPSK QPSK 16QAM 64QAM PWM API Home Theater PC Digital Versatile Disc Compact Disk Audion pakkaamiseen käytetty formaatti Industrial, Scientific and Medical Wireless Local Area Network Radio Local Area Network Frequency Shift Keying Phase Shift Keying Binary Phase Shift Keying Quadrature Phase Shift Keying 16-Level Quadrature-Amplitude Modulation 64-Level Quadrature-Amplitude Modulation Pulse Width Modulation Application Program Interface
3 SISÄLLYS 1. JOHDANTO... 4 2. TEORIA... 5 2.1. Taajuusalueet... 5 2.2. Digitaaliset modulaatiomenetelmät... 6 2.3. Tärinäanturi... 8 3. TOTEUTUS... 11 3.1. Järjestelmän toiminta ja lohkokaavio... 11 3.2. Remote-Unit... 14 3.2.1. Hardware... 14 3.2.2. Mekaniikka... 17 3.2.3. Software... 20 3.3. PC-Unit... 26 3.3.1. Hardware... 26 3.3.2. Mekaniikka... 27 3.3.3. Software... 28 3.4. PC-Software... 30 3.5. Viestiprotokolla... 31 4. TESTAUS... 32 4.1. Kantomatka... 32 4.2. Virrankulutus... 32 5. TULOSTEN TARKASTELU... 33 6. KEHITYSKOHTEET... 34 7. AIKATAULU JA BUDJETTI... 35 8. YHTEENVETO... 37 9. LÄHTEET... 38 10. LIITTEET... 39
4 1. JOHDANTO Nykyajan trendinä on ollut uusien niin sanottujen HTPC-tietokoneiden rakentaminen. Näissä laitteissa yhdistyy DVD-, CD-, MP3-soitin, pelikonsoli ja normaali tietokone yksissä ja samoissa kuorissa. Juuri tämä tekee HTPC:stä erittäin mielenkiintoisen laitteen kilpailemaan olohuoneen herruudesta audio- ja videolähteenä. Kuitenkin HTPC halutaan tehdä mahdollisimman huomaamattomaksi olohuoneeseen, koska tavallinen harmaa tietokoneen kotelo ei ole sopusoinnussa normaalien HiFi-laitteiden kanssa. Näin ollen on syöttölaitteiden (näppäimistö, hiiri) piilottaminen yksi suuri ongelma. Tästä voi päästä eroon ostamalla langattoman näppäimistön ja hiiren, mutta niiden kantama on erittäin rajoittunutta, vain noin 2-3 metriä. Kuitenkin kun oletetaan että tavallisessa olohuoneessa käyttäjä sijaitsee noin 4-6 metrin päässä laitteista tulee laitteiden pienestä kantomatkasta ongelmia. Näppäimistöt ovat edelleen aika suuria, joten niitäkään ei voi helposti piilottaa olohuoneeseen. Ratkaisuksi käyvät erilliset kaukosäätimet joilla voidaan ohjata tietokoneen toimintaa. Näitä kaukosäätimiä on ollut markkinoilla jo jonkin aikaa ja myös rakennussarjoja on ollut saatavilla. Näistä suurin osa toimii tavallisen kaukosäätimen tavoin infrapunalla, eli välitettävä ohjauskomento siirretään infrapunan avulla kaukosäätimestä vastaanottimeen. Tämä kuitenkin rajoittaa kaukosäätimen toimintaa, koska vastaanottimeen täytyy olla visuaalinen yhteys. Tässä vaiheessa esiin tulee kaukosäätimen toiminta radiotaajuuksilla, kuten langattomissa näppäimistöissä ja hiirissä. Nämä kaukosäätimet kuitenkin rajoittuvat vain tiettyihin toimintoihin eivätkä ne vastaa sitä toimintaa mitä minä itse haluan kaukosäätimeltä. Juuri näiden puutteiden innoittamana valitsin sulautettujen järjestelmien töiden aiheeksi rakentaa radiotaajuuksilla toimivan kaukosäätimen joka sisältäisi haluamani toiminnat.
5 2. TEORIA 2.1. Taajuusalue Koska kaukosäätimen ja tietokoneen välinen kommunikaatio tulee toimimaan radioteitse, on valittava taajuusalue jolla toimitaan. Niin sanottuja lupavapaita alueita ovat seuraavat : - 26825-27255 khz - 433,050-434,790 MHz - 434,040-434,790 MHz - 2400,000-2483,500 MHz Kyseisille taajuuksille on määrätty tietyt lähetystehot jotka löytyvät liitteestä 1. 26825-27255 khz taajuusaluetta käytetään pienoismallien ohjaukseen ja myös suurin osa langattomista näppäimistöistä ja hiiristä toimivat tällä taajuusalueella. Tällä alueella on mahdollista lähettää myös audiosignaalia, mutta se vaatii radioamatöörilupien suorittamista. 433,050-434,790 MHz ja 434,040-434,790 MHz taajuusaluetta käytetään pienen kantaman laitteiden väliseen kommunikointiin. Esimerkkinä langattomat auton avaimet tai pienet sääasemat jotka kommunikoivat etäyksikön kanssa. 2400,000-2483,500 MHz on varattu yleisille lyhyen kantaman lähettimille (BlueTooth) ja laajakaistaisille lähettimille (WLAN/RLAN). Tällä taajuusalueella laitteet käyttävät niin sanottua taajuushyppytekniikkaa (Frequency Hopping) jolloin yksi laite on lähetystilassa tietyllä taajuudella vain vähän aikaa. Muuten yhden laitteen pitkä lähetys peittäisi muiden lähettimien lähetteen. 433 MHz:n ja 2,4 GHz:n alueilla ei saa lähettää analogista signaalia, vaan signaalin pitää olla digitaalista.
6 2.2. Digitaaliset modulaatiomenetelmät Digitaalisessa tiedonsiirrossa käytetään erilaisia modulointimenetelmiä tiedon siirtämiseksi. Yleisimpiä digitaalisia modulointimenetelmiä ovat FSK, PSK, BPSK, QPSK, 16QAM ja 64QAM. FSK: Digitaalinen taajuusmodulaatio (Frequency Shift Keying). Tässä modulaatiossa signaalin taajuus hyppii kahden eri taajuuden välillä moduloitavan signaalin mukaan. PSK: Digitaalinen vaihemodulaatio (Phase Shift Keying). Tässä modulaatiomenetelmässä signaalin taajuus pysyy samana, mutta sen vaihe muuttuu moduloitavan signaalin mukaan. BPSK: (Binary Phase Shift Keying). Modulaatiossa voidaan sopia että loogista nollaa ( 0 ) vastaa se ettei signaalin vaihe muutu, ja taas loogista ykköstä ( 1 ) vastaa se että vaihe kääntyy 180º. QPSK: (Quadrature Phase Shift Keying). Vastaava kuin BPSK mutta nyt vaiheita voidaan erottaa neljä erilaista. Bittikuvio erotetaan nyt vaiheen avulla kuten kuvassa on esitetty. 10 Q 00 11 01 Kuva 1. QPSK modulaation periaatekuva QPSK:n tiedonsiirtonopeus on kaksi kertaa nopeampi kuin BPSK-modulaatiossa.
7 16QAM: (16-Level Quadrature-Amplitude Modulation). Tämä modulaatiomenetelmä käyttää signaalin vaiheen lisäksi signaalin amplitudia. Näin saadaan 16 erilaista symbolia vektoriavaruuteen: Q I Kuva 2. 16QAM modulaation periaatekuva 64QAM: (64-Level Quadrature-Amplitude Modulation). Modulaatiomenetelmä täysin samanlainen kuin 16QAM, paitsi että vaihe-amplitudi yhdistelmiä on 64 kappaletta. [1]
8 2.4. Tärinäanturi Tärinäanturi voidaan toteuttaa monenlaisilla tekniikoilla seuraavassa muutama: Kiihtyvyysanturi : Anturia voidaan käyttää mittaamaan hetkellistä kiihtyvyyttä kun anturia liikutetaan. Kiihtyvyysantureita on saatavilla erilaisia jotka mittaavat esimerkiksi pelkästään yhtä akselia (X) tai kahta akselia (X / Y), myöskin kolmen akselin antureita on markkinoilla. Esimerkiksi Analog Devices:n kiihtyvyysanturin ADXL202 toiminta perustuu pieniin kapasitanssin muutoksiin jotka tapahtuvat kun pienet ns. kammat liikkuvat toisiinsa nähden. [2] Pietsokide: Kun pietsokidettä taivutetaan tai altistetaan mekaaniselle rasitukselle, muuttaa se mekaanisen rasituksen jännitteeksi. Tätä jännitettä voidaan vahvistaa ja viedä se esimerkiksi keskeytysnastaan jolloin se ilmoittaa tärähdyksestä. Paino liimattuna pietsokiteeseen Pietsokide Piirilevy - + Jännite Kuva 3. Pietsoanturin periaatekuva
9 Mekaaninen: Mekaanisia tärinäantureita voi olla lukemattomia erilaisia. Käsittelen tässä muutaman esimerkin: Kuula Kun metallikuula liikkuu tärähdyksen voimasta se maadoittaa keskeytys-linjan joka menee keskeytykseen, näin esimerkiksi mikrokontrolleri huomaa keskeytyksen. - nastat voivat olla ohjattuja linjoja, jolloin toinen nasta voidaan ohjata positiiviseen jännitteeseen virran säästämiseksi. Kun kuula taas vaihtaa asentoa, toinen linja ajetaan negatiiviseen jännitteeseen ja toinen positiiviseen. IO-pinneihin - - Keskeytysnastaan Kuva 4. Kuulatärinäanturin periaatekuva Heiluri Tässä voidaan kytkeä negatiivinen jännite lieriön kuoreen ja keskeytysnasta viedään heilurille. Kun heiluri heilahtaa ja koskettaa lieriön reunaa se maadoittaa keskeytysnastan ja keskeytys tapahtuu. Keskeytysnastaan Kuva 5. Heiluritärinäanturin periaatekuva
10 Elohopeakytkin Toimii samalla periaatteella kuin kuulakytkin, mutta kuulan tilalla on elohopeaa. Elohopea on täysin nestemäistä metallia ja liikkuu heilahduksesta. Kun heilahdus tapahtuu se sulkee kaksi johdinta jotka voivat esimerkiksi maadoittaa keskeytysnastan.
11 3.0. TOTEUTUS 3.1. Järjestelmän toiminta ja lohkokaavio Toiminta Järjestelmän toimintaperiaatteena on toimia käyttöliittymänä käyttäjän ja tietokoneen välillä ja käyttäjä voi kontrolloida Remote-Unit:n kautta PC:llä olevia ohjelmia. PC voi lähettää Remote-Unit:lle takaisin informaatiota jolloin Remote-Unit:sta saadaan interaktiivinen. Esimerkiksi WinAmp-ohjelmasta saadaan tietoon MP3 kappaleen nimi joka sitten lähetetään Remote-Unit:lle ja tulostetaan sen näyttöön. Näin ollen käyttäjä saa tietää kappaleen nimen ja soittoajan ilman että PC:n näyttö olisi päällä. PC-Unit:n tehtävänä on toimia puskurina PC:n lähettämälle datalle ja olla kuormittamatta PC:n sarjaporttia turhalta datalta. Remote-Unit on aina kommunikaation aloittava osapuoli, jolloin Remote-Unit:n ei tarvitse odottaa satunnaista lähetystä PC:ltä, vaan se tietää aina kun pitää kuunnella. Tällä tavalla saadaan Remote-Unit:n virransäästö maksimaaliseksi. Laitteidenväliseksi tiedonsiirtonopeudeksi valitsin 9600 bit/s, koska viestit eivät ole pitkiä ja kyseistä bittinopeutta on helppo näytteistää mikrokontrollereilla.
12 Radiopiiri Radiopiirien valintaan vaikutti niiden saatavuus, toimintataajuus ja radiopiirin käytettävyys. Radiopiiriksi valitsin Nordic VLSI:n tekemän nrf401-radiopiirin, koska sen ominaisuudet ja saatavuus olivat hyvät. nrf401 toimii 433 MHz:n taajuusalueella ja siinä valittavana vielä kaksi erillistä taajuuskaistaa. Piirin tiedonsiirtonopeus on maksimissaan 20 kbit/s ja se käyttää FSK-modulaatiota. Sen suurin lähetysteho on 10 dbm ja se on säädettävissä erillisellä vastuksella esimerkiksi 10dBm. Radiopiirin antennina on mahdollista käyttää tavallista piiska-antennia tai sen voi tehdä suoraan piirilevyn foliolle (Loop Antenna). Kuva 6. Piirilevyantenni Kommunikointi radiopiirien välillä on niin sanottua Half-Duplex tyyppistä, eli toinen radiopiiri vastaanottaa ja toinen lähettää, ja päinvastoin eli vastaanotto ja lähetys eivät voi olla yhtä aikaa päällä (Full-Duplex). Radiopiirin vaihtaminen vastaanotosta lähetykseen vaatii noin 5 millisekunnin odotusajan. Koska PC:ssä ei ole helposti ohjattavia IO-pinnejä, hoitaa PC-Unit:n mikrokontrolleri tämän asian. Se puskuroi PC:ltä tulevaa dataa 5 millisekunnin ajan, vaihtaa radiopiirin lähetysasentoon ja lähettää datan eteenpäin. Remote-Unit:ssa vastaavaa ongelmaa ei ole, koska siellä tiedetään milloin lähetetään ja milloin täytyy olla vastaanottotilassa.
13 Lohkokaavio : näppäinmatriisi (14 näpp.) ATmega16 Nokia 8210 84x48 Pistematriisi HW/SW- UART NRF401 433MHz radiopiiri Remote-Unit NRF401 433MHz radiopiiri SW-UART HW-UART MAX232 PC AT90s2313 PC-Unit
14 3.2. Remote-Unit 3.2.1. Hardware Remote-Unit:n käyttöjännitteeksi muodostui 3V koska kaukosäätimen mekaniikassa oli valmis paikka kahdelle AA-kokoiselle 1,5V paristolle. Harkitsin myös vanhan matkapuhelimen 3,6V Li-Ion akkua, koska se olisi ollut ladattavissa. Mutta latauselektroniikan toteuttaminen olisi syönyt liikaa piirilevytilaa ja näytön suurin mahdollinen käyttöjännite oli 3,3V. Mikrokontrolleri Valitsin mikrokontrolleriksi Atmel:n valmistaman ATmega16L mikrokontrollerin, koska olen työskennellyt Atmel:n mikrokontrollereiden parissa jo yli neljä vuotta ja tunnen niiden rakenteen ja toiminnan hyvin. ATmega16L sisältää seuraavat ominaisuudet : - 16 kt Flash muistia - 1 kt SRAM muistia - 512 t Eeprom muistia - 32 ohjelmoitavaa I/O linjaa - 2 ulkoista keskeytystä - Kaksi 8-bittistä ajastinta - Yksi 16-bittinen ajastin - RTC (Real Time Counter, reaaliaikalaskuri) - Neljä PWM-ulostuloa - 8 kanavainen, 10 bittinen Analogia-Digitaalimuunnin - UART, SPI, Two-wire sarjaliikenneliitännät - Analogisen komparaattorin ATmega16L sisältää myös sisäisen kalibroidun RC-oskillaattorin, joten se ei tarvitse ulkoista kellokidettä toimiakseen. Kuitenkin reaaliaikalaskuri tarvitsee 32,768 khz kiteen jotta saadaan tarkkaa yhden sekunnin pulssia. Mikrokontrollerin virrankulutukset ovat seuraavassa taulukossa : Aktiivinen tila Idle tila Power down ja power save tila 1,1 ma 0,35 ma n. 1-10 ua
15 Mikrokontrollerin ulkoinen keskeytys (ExtInt0) on varattu näppäimille ja toinen ulkoinen keskeytys (ExtInt1) on varattu tärinäanturille. nrf401 radiopiiri on kytketty mikrokontrollerin UART-pinneihin. Näyttö Näytöksi valitsin Nokian puhelinmallissa 8210 käytetyn pistematriisinäytön. Näyttöön on suoraan integroitu näytönohjainpiiri PCD8544 joka kykenee ohjaamaan 48 x 84 kokoista pistematriisia. Näytönohjaimen kytkennän ja pinnijärjestyksen löysin Internetistä, missä kyseisiä näyttöjä oli käytetty onnistuneesti eri projekteissa. PCD8544 käyttää yksisuuntaista sarjaväylää joka on yhteensopiva SPI-väylän kanssa, joka löytyy ATmega16L:stä. Näppäimet Koska suunniteltu näppäimien määrä oli 13, täytyi näppäimet rakentaa multipleksatuiksi, jolloin kahdeksalla I/O-linjalla saadaan luettua 16 näppäimen matriisia. Näppäimien rivit on kytketty diodien kautta ulkoiseen keskeytykseen (ExtInt0) jolloin näppäimen painallus johtaa keskeytyslinjan maadoittumiseen ja keskeytys tapahtuu. Näppäimien käsittelystä enemmän software osiossa. Näppäimiksi valitsin normaaleja pintaliitosnäppäimiä, koska niitä löytyi lähimmästä elektroniikkaliikkeestä ja ne olivat suhteellisen edullisia.
16 Tärinäanturi Tärinäanturin valinnassa kiinnitin huomiota sen hintaan ja helppokäyttöisyyteen. Kiihtyvyysanturin käyttöä tarkoitukseen harkitsin, mutta niiden ongelmaksi muodostui keskeytyksen generointi virransäästötilassa. Mekaanisen anturin toteuttaminen olisi ollut toinen vaihtoehto, mutta en saanut tarpeeksi toimivaa mekaniikkaa toimimaan, joten pietsoelementin käyttäminen oli kaikkein helpoin tapa toteuttaa tärinäanturi. Pietsokide tarvitsee hieman oheiselektroniikkaa toimiakseen, koska pietson synnyttämä pulssi on erittäin heikkotehoinen mutta suurijännitteinen. Pietsokiteen kanssa käytetään kahta operaatiovahvistinta (MAX4042) joista toinen toimii pelkkänä puskurivahvistimena ja toista käytetään komparaattorina ilmaisemaan keskeytys. Komparaattorin vertailujännitteen tekemiseen käytin digitaalista potentiometriä (MAX5160) jotta tärinäanturin herkkyyttä voidaan säätää ohjelmallisesti. Piirilevyt valmistin Oulun Yliopiston Sähkötekniikan osaston syövytyslaboratoriossa valoitusmenetelmällä. Valoitusta varten piirsin valoitusmaskit jotka löytyvät liitteestä 3. Piirilevyjen suunnittelussa suurin ongelma jo alussa oli piirilevyjen pinta-alojen riittämättömyys ja läpivientien suuri määrä. Komponentit kiinnitin työpaikallani olevien pintaliitostyökalujen ja mikroskoopin avulla juottamalla. Myös reflow-juottaminen kävi mielessä mutta sen takia olisin joutunut lähettämään piirilevyt Kajaaniin. Piirien juottaminen onnistui helposti hyvien työvälineiden avulla.
17 3.2.2. Mekaniikka Mekaniikka tuotti jo suunnitteluvaiheessa ongelmia, koska halusin tehdä laitteesta mahdollisimman paljon kaukosäädintä muistuttavan. Eräällä kaverillani oli tarkoitukseen sopiva vanhan kaukosäätimen runko jonka sain käyttööni. Runko määräsi näin ollen piirilevyille fyysiset mitat noin 35,6 mm x 104,0 mm. Päätin rakentaa kaksi erillistä piirilevyä koska yhdelle piirilevylle komponenttien sijoittaminen olisi vaatinut viivanleveyksien huomattavaa pienennystä ja läpivientien suurta määrää. Näppäimet 104,0 mm Näyttö 3,0 mm Piikkirima Komponentteja Kuva 7. Piirilevyjen sijoitus
18 Nappien sijoittelussa pyrin mahdollisimman helppoon käytettävyyteen. Sijoitin näppäimet ryhmiin jotka liittyvät toisiinsa, esimerkiksi soitto-ohjelman kontrollointinäppäimet ovat oma viiden näppäimen ryhmänsä. Valikkonäppäimet Soittimen kontrollointinäppäimet Äänenvoimakkuuden säätönäppäimet Kuva 8. Näppäimien sijoittelu
19 Kuva 9a. Remote-Unit edestä Kuva 9b. Remote-Unit takaa
20 3.2.3. Software Ohjelmiston suunnittelun aloitin jo varhaisessa vaiheessa, koska tiesin siitä tulevan monimutkaisen virransäästöominaisuuksien ja tilakoneen takia. Remote-Unit:n ohjelmisto on tehty mahdollisimman pitkälle keskeytysten perusteella toimivaksi. Näin saadaan suurin mahdollinen virransäästö, koska suurin osa ajasta voidaan olla joko Idle tai Power-Save tilassa josta sitten herätään palvelemaan keskeytystä. Jokainen keskeytys on tehty mahdollisimman lyhyeksi ja keskeytysten periaatteena on nostaa tietty lippu muuttujasta joka tarkastetaan main-silmukassa. Jokaisessa keskeytyksessä, paitsi UART-keskeytyksessä, kasvatetaan kyseisen keskeytyksen laskuria, jolloin voi tulla paljon keskeytyksiä peräkkäin, mutta yhtään keskeytystä ei menetetä. Laskureita vähennetään kyseisen keskeytyksen käsittelyssä. Onko jokin lippu noussut ylös? Kyllä Ei Oliko näppäinkeskeytys? Kyllä Suorita näppäimien käsittely Ei Oliko ajastinkeskeytys? Kyllä Suorita ajastinten käsittely Ei Oliko tärinäanturikeskeytys? Kyllä Suorita tärinäanturin käsittely Ei Sleep (herätään keskeytyksellä) Onko tilanvaihto? Kyllä Suorita tilanvaihto Ei Periaatekuva main-silmukasta
21 Näppäimet Koska näppäimet on laitettu matriisiin, niiden lukeminen on hieman monimutkaisempaa. Näppäinmatriisin sarakkeissa on 3V jännite ja näppäinmatriisin rivit on kytketty maihin. Kun näppäintä painetaan, maadoittuu 3V vastuksen kautta, samalla maadoittuu myös ulkoinen keskeytyslinja (ExtInt0) ja keskeytysrutiini suoritetaan. Keskeytysrutiinissa luetaan heti mikä sarake aiheutti keskeytyksen ja sen jälkeen vaihdetaan rivien ja sarakkeiden tilat päinvastaisiksi että saadaan se rivi missä painettu nappi on. Jokaisella sarakkeella on oma numeroarvonsa ja kun siihen lisätään rivin numeroarvo, saadaan painetun näppäimen numero. Tämän jälkeen palautettavan näppäimen numero haetaan taulukosta, jotta näppäimien paikkojen muuttaminen olisi helpompaa tarvittaessa. Tilakone Käyttöliittymän ohjaamiseen on rakennettu tilakone joka toimii tilataulujen perusteella. Tilataulut ovat taulukkoja jotka sisältävät osoittimia funktioihin ja toisiin tilatauluihin. Tilatauluja voi olla kolmea eri tyyppiä: normaali-taulu, menu-taulu ja asetustaulu. Tilataulun tyyppi määritellään tilalipuissa mitkä ovat jokaisessa taulussa samat, tilalippujen tarkempi määrittely löytyy lähdekoodien RAM.H tiedostosta. Normaalin tilataulun määritelmä: structnormalstatetable[] { ptr* statefunction uint16 stateflags ptr* actionfunction ptr* nextstate OK-button ptr* actionfunction ptr* nextstate BACK-button ptr* actionfunction ptr* nextstate UP-button ptr* actionfunction ptr* nextstate DOWN-button } Jokainen tilataulukon rivi edustaa tiettyä nappia, paitsi ensimmäinen rivi joka sisältää kyseisen tilataulun tilafunktion. Tilafunktio suoritetaan kun tilatauluun tullaan tai jos tilalipuissa on tietty lippu ylhäällä, esimerkiksi tilalippuihin voidaan määrittää että tilataulun tilafunktio suoritetaan sekunnin välein.
22 Tilataulun vasemmassa sarakkeessa on aina funktion osoite ja oikeassa sarakkeessa on seuraavan tilataulun osoite. ActionFunction osoitteessa oleva funktio suoritetaan aina kun kyseiselle riville määritettyä nappia painetaan. Jos samalle riville on määritetty tilataulun osoite, siirrytään siihen tauluun funktion suorittamisen jälkeen. ActionFunction- tai nextstate-kohdat voidaan jättää tyhjäksi jolloin sille napille ei ole määritetty mitään tehtävää tai seuraavaa tilataulua. Menu-taulun määritelmä: structmenustatetable[] { ptr* stateexitfunction ptr* actionfunction ptr* actionfunction ptr* actionfunction ptr* actionfunction } uint16 stateflags ptr* nextstate ptr* nextstate ptr* nextstate ptr* nextstate Menu-taulussa ennalta määritellyillä ylös ja alas napeilla siirrytään tilataulun rivejä ylös tai alas. Eli kun käyttäjä painaa jompaa kumpaa nappia haetaan tilataulusta actionfunction:n osoite ja suoritetaan se. Jos käyttäjä painaa tämän jälkeen OK näppäintä siirrytään siihen tilatauluun mikä oli samalla rivillä kuin actionfunction. Taulukon ensimmäinen rivi sisältää stateexitfunction joka suoritetaan kun poistutaan taulusta, tässä voi esimerkiksi olla näytön tyhjentäminen. structsettingstatetable[] { ptr* statefunction ptr* actionfunction ptr* actionfunction ptr* actionfunction ptr* actionfunction } uint16 stateflags ptr* nextstate ptr* nextstate ptr* variable (8 or 16 bit) uint16 minmax (*minmax_table) Asetustilataulua käytetään kun halutaan muuttaa esimerkiksi asetuksia. Tämä taulukko eroaa rakenteeltaan normaalitaulusta vain kahden viimeisen rivin osalta. Toiseksi viimeisellä rivillä ei anneta seuraavan tilataulun osoitetta vaan muuttujan osoite mitä halutaan muuttaa. Viimeisellä rivillä annetaan pienin ja suurin arvo mitä
23 muuttuja voi saada. Kahden viimeisen rivin actionfunction pitää olla funktio joka ottaa parametrinä muuttujan osoitteen, minimi- ja maksimiarvon. Asetustilatauluun liittyy lippu joka määrittää muuttujan koon. Muuttuja voi olla joka 8- tai 16-bittinen. Jos muttuja on 16-bittinen, annetaan minmax kohdassa osoite taulukkoon missä on pienin ja suurin arvo minkä muuttuja voi saada. Ajastimet ATmega16L sisältää kolme ajastinta ja niiden käyttö on esitetty seuraavassa: Timer0: Käytetään PWM-pulssin muodostamiseen jolla tehdään niin sanottu häivytysefekti taustavaloon. On toiminnassa aina kun näppäintä painetaan tai tärinäanturilta tulee keskeytys. Timer1: Käytettään yleisenä, nopeana ajastimena tuottamaan N*1ms ja N*10ms viipeitä, sekä laskemaan tiettyjä time-outteja joita ei voida tehdä Timer2:lla. Timer2: Käytetään tuottamaan yhden sekunnin mittaisia pulsseja joita käytetään näytön taustavalon ja päällä olon hallintaan. Ajastinta käytetään myös laskemaan jäljellä olevaa soittoaikaa UART UART:ia käytetään viestien vastaanottamiseen nrf401 radiopiiriltä. Koska viestien pituus vaihtelee, täytyy keskeytyksen tietää aina missä kohti viestiä ollaan menossa, tässä käytetään apuna muuttujaa ucreceivestatus. ucreceivestatus kertoo joko synkronitavut, otsikko, data tai tarkistussumma on otettu vastaan. Jokainen viestin tavu vastaanotetaan puskuriin joka on 128 tavua pitkä. Remote- Unit:ssa ei käytetä rengaspuskuria, kuten PC-Unit:ssa.
24 Viestin vastaanoton pseudokoodi : SWITCH ucreceivestatus Case WAITING_START_MARK: IF (vastaanotettu data == aloitusmerkki) THEN ucstartmark = START_MARK_RECEIVED ENDIF Case START_MARK_RECEIVED: Lue kolme seuraavaa vastaanotettua tavua IF (vastaanotettu kolme tavua) ucstartmark = HEADER_RECEIVED ENDIF Case HEADER_RECEIVED: Lue niinmonta tavua kuin oli datakentänpituus IF (datakenttä luettu) ucstartmark = DATA_RECEIVED ENDIF Case DATA_RECEIVED: Lue kaksi seuraavaa tavua (tarkistussumma) IF (tarkistussumma sama kuin laskettu) Viesti OK ELSE Viesti ei OK ENDIF ucreceivestatus = WAITING_START_MARK ENDSWITCH Kun viesti on kokonaisuudessaan otettu vastaan se välitetään viestinkäsittelijälle, joka erottelee siitä datakentän ja tekee viestin määräämät toimenpiteet.
25 Näyttö Näytöstä on kokoajan kopio mikrokontrollerin muistissa, johon tehdään tulostukset. Kun näyttöä on muutettu, päivitetään näytön sisältö fyysiselle näytölle Näyttöä varten tein erilaisia funktioita joilla tapahtuu näytölle kirjoittaminen. Fontiksi valitsin niin sanotun variable-width fontin, koska silloin saadaan näytölle mahtumaan enemmän tekstiä. Fontit tein Paint Shop Pro ohjelmalla josta sitten käänsin fontit näytön tarvitsemaan muotoon toisella ohjelmalla. Fonttien pohjaksi otin Windowsin Arial fontin jota hieman muokkasin.
26 3.3. PC-Unit 3.3.1. Hardware Mikrokontrolleri PC-Unitin mikrokontrolleriksi valitsin AT90s2313 mikrokontrollerin, koska se sopi ominaisuuksiltaan juuri siihen tehtävään erinomaisesti. AT90s2313 sisältää seuravia ominaisuuksia : - 2 kt flash muistia - 128 t SRAM muistia - 128 t EEPROM muistia - Yhden 8-bittisen ja yhden 16-bittisen ajastimen - Analoginen komparaattori - UART, SPI Mikrokontrollerin taajuudeksi valitsin 4 MHz joka olisi täysin riittävä näytteistämään radiopiiriltä tulevaa sarjaliikennedataa 9600 bit/s nopeudella. nrf401 radiopiirin data-out nasta on kytketty mikrokontrollerin ulkoiseen keskeytykseen ja data-in nasta on kytketty mikrokontrollerin PD3 nastaan. Tasonsiirrin on kytketty suoraan mikrokontrollerin UART-pinneihin. Mikrokontrollerin virrankulutuksiin en kiinnittänyt huomiota, koska PC-Unit on aina kytkettynä ulkoiseen teholähteeseen. Tasonsiirrin PC-Unit käyttää MAX232 tasonsiirrintä muuntamaan sarjaliikenteen datan oikeaksi PC-Unit:n ja PC:n välillä. PC-Unitissa sarjaliikenteessä looginen ykkönen vastaa 5V jännitetasoa ja looginen nolla vastaa 0V jännitetasoa, kun taas PC:ssä noudatetaan RS-232 spesifikaatiota. RS-232 spesifikaatiossa looginen ykkönen määritellään -5V ja 15V välille. Looginen nolla on määritelty +5V ja +15V välille. Osa uusimmista
27 PC:n sarjaporteista osaa tulkita myös 0V-5V jännitetasoja sarjaliikenteessä, mutta en halunnut ottaa riskiä ettei laite toimisikaan. Tasonmuuntimen olisi voinut toteuttaa myös transistoreilla ja diodipumpulla. mutta en saanut sitä kunnolla toimimaan testeissä. Regulaattori Regulaattoriksi valitsin MAX603 Low-Drop tyyppisen regulaattorin, koska olin käyttänyt niitä menestyksekkäästi edellisissä projekteissani. 3.3.2. Mekaniikka PC-Unit:n rakensin valmiiseen mustaan muoviseen koteloon, koska niiden saatavuus oli hyvä ja hinta edullinen. PC-Unit:n mekaniikkaan ei tarvinnut kiinnittää läheskään niin paljoa huomiota kuin Remote-Unit:iin koska PC-Unit tulisi olemaan piilossa ja siihen ei kohdistuisi suuria mekaanisia rasituksia. Myös piirilevyjen suunnittelu oli helpompaa koska levyn pinta-ala voitiin jättää suureksi. Kuva 10. PC-Unit
28 3.3.3. Software PC-Unit:n tarkoituksena on puskuroida PC:ltä tuleva data noin 5 ms mikrokontrollerin SRAM:iin ja lähettää se sitten sarjamuotoisena radiopiirille. Koska viestin pituus on maksimissaan 128 tavua ja mikrokontrollerin SRAM:n koko on 128 tavua joudutaan käyttämään rengaspuskuria datalle. Rengaspuskuriin osoitetaan kahdella indeksillä, luku- ja kirjoitusindeksillä. Kun jompikumpi indeksi saavuttaa puskurin viimeisen solun, alustetaan kyseinen indeksi osoittamaan ensimmäistä solua. Tällä tavalla saadaan loppumaton puskuri datalle. Vaarana on kuitenkin että dataa tulee niin nopeasti että kirjoitusindeksi saavuttaa lukuindeksin mutta tästä päästään eroon laittamalla rengaspuskurin koko tarpeeksi suureksi. Koska tiedonsiirtonopeus on 9600 bit/s, niin yhden tavun lähetykseen menee aikaa 1 ttavu = 10bit 1, 041ms 9600bit / s eli 5 millisekunnin datapuskuri tarvitsisi periaatteessa vain 6 tavua tilaa. Koska SRAM:ia on käytössä 128 tavua valitsin rengaspuskurin kooksi 32 tavua. Alkutilanteessa molemman indeksit osoittavat rengaspuskurin ensimmäiseen soluun, kun PC:ltä otetaan tavu vastaan se sijoitetaan ensimmäiseen soluun ja kirjoitusindeksiä kasvatetaan. Samalla laitetaan radiopiirin lähetysvalinta päälle ja aletaan odottamaan 5 millisekuntia. Tässä ajassa vastaanotetaan PC:ltä lisää tavuja ja ne tallennetaan kirjoitusindeksin osoittamaan soluun. Kun 5 millisekuntia on kulunut aloitetaan tavujen lähetys radiopiirille software-uart:n kautta. Seuraavaksi luetaan lukuindeksin osoittaman solun sisältö ja lähetetään se radiopiirille. Tätä tehdään niin kauan kunnes lukuindeksi saavuttaa kirjoitusindeksin kanssa saman arvon ja sen jälkeen ohjelma palaa takaisin odottelemaan dataa. Koska radiopiiri on oletuksena vastaanottotilassa voidaan vastaanotetut tavut ohjata suoraan UART:n kautta PC:lle eli puskurointia ei tarvita liikennöitäessä Remote- Unit:lta päin PC:lle.
29 AT90s2313 sisältää vain yhden hardware-uart:n täytyy radiopiirille päin oleva UART toteuttaa ohjelmallisesti. Datan vastaanotto tapahtuu ulkoisella keskeytyksellä (ExtInt0) johon on kytketty radiopiirin data-out linja. Koska radiopiiri vastaanottaa ilmasta suuren määrän kohinaa (noise) täytyy oikea lähete etsiä tarkasti kohinan seasta. Käytössä oleva tiedonsiirtonopeus on 9600 bit/s saadaan bittinopeudeksi noin 1,041 ms. Kuva 11. Sarjaliikenneprotokolla Koska tiedonsiirtoprotokollassa lähetetään aina aloitusbitti joka on nolla, on mikrokontrollerin keskeytys asetettu aktivoitumaan signaalin laskevalla reunalla. Kun laskevan reunan keskeytys tapahtuu, mikrokontrolleri aloittaa mittaamaan aloitusbitin pituutta. Jos signaali ei pysy alhaalla vaadittua aikaa, mikrokontrolleri huomaa ettei bitti ollut aloitusbitti ja palaa takaisin main-silmukkaan. Jos signaali pysyi alhaalla vaaditun ajan alkaa mikrokontrolleri näytteistämään tulevia bittejä. Bittien vastaanotossa otetaan signaalista näyte heti bitin alussa ja tallennetaan arvo väliaikaismuuttujaan. Signaalia verrataan nyt väliaikaismuuttujaan hieman bitin keston verran vähemmän, ja jos signaali pysyy samana koko ajan voidaan arvo tallentaa. Jos signaali vaihtaa tasoa näytteistyksen aikana, koko vastaanotto hylätään ja mikrokontrolleri siirtyy odottamaan uutta aloitusbittiä.
30 3.4. PC-Software PC-Softwaren tehtävänä on kontrolloida PC:llä olevia ohjelmia tai hiirtä käyttäjän haluamalla tavalla. PC-Software käyttää muiden ohjelmien ohjaukseen Windowsin viestejä ja API-rajapinnan funktioita PC-Software varaa itselleen yhden sarjaportin, mitä se jää kuuntelemaan. Kun viesti tulee PC-Unit:lta, se dekoodataan, lasketaan tarkistussumma ja jos se täsmää, viesti laitetaan viestinkäsittelijälle. Viestinkäsittelijä tulkkaa viestissä olevat komennot ja lähettää kontrolloitavalle ohjelmalle oikean viestin. Jos komennossa on ollut käyttäjälle lähetettävää informaatiota (esimerkiksi kappaleen nimi) PC-Software hakee sen soitto-ohjelmalta, rakentaa viestin ja lähettää sen sarjaportin kautta PC-Unit:lle joka lähettää sen edelleen Remote-Unit:lle. Kuva 12. PC-Softwaren käyttöliittymä (beta versio)
31 3.5. Viestiprotokolla Viestien pituus on rajoitettu 128 tavuun ja valitsin Remote-Unit:n puskurin koon saman suuruiseksi. Näin ollen Remote-Unit:n puskuriin mahtuu yksi täyspitkä viesti kerrallaan. Header Payload data CRC Sync DeviceID res MsgID DBytes Data CRC16 xxx xx 0 xx xx 121 bytes xx xx Koko viestin pituus max. 128 tavua Kenttä Sync DeviceID res MsgID DBytes Data CRC16 Kuvaus Synkronointi : 0xCC, 0xCC, 0xCC, 0xCC, 0xF0, 0xAA Pitää olla samat Remote-Unit:ssa ja PC:ssä. Näin voidaan käyttää montaa säädintä yhtä aikaa Varattu tulevaisuuteen Viestin ID, esimerkiksi. ACK, WinAmp komento, kysely, jne.. Datatavujen määrä hyötydata max. 121 tavua CRC-16 algoritmilla laskettu tarkistussumma Tarkistussumman laskentaan valitsin CRC-16 algoritmin koska se on nopea ja antaa tiedon viestin oikeellisuudesta. Mietin myös Reed-Solomon virheenkorjauksen käyttöä, mutta se vaatisi jokaisen lähetettävän viestin pituudeksi 255 tavua ja sen laskenta olisi raskaampaa. Hyvänä puolena Reed-Solomon:ssa olisi virheenkorjaus, eli se voisi korjata 32 bittivirhettä yhdessä 255 tavun paketissa. Viestien sisältö ja merkitykset löytyvät liitteestä 4. ja tarkistussumman laskentaalgoritmi löytyy lähdekoodeista.
32 4. TESTAUS 4.1. Kantomatka Ennen Remote-Unit:n rakentamista mittasin nrf401-piirien kantomatkaa nrf401- Loop kitillä jossa oli kaksi valmiiksi rakennettua nrf401-lähetin-vastaanotin kytkentää. Loop-Kit:ssä lähetysteho oli säädetty +10dBm:ään ja kantomatka vaihteli noin 80-100 metriä riippuen maastosta. Valmiin Remote-Unitin ja PC-Unitin kantomatka avoimessa maastossa yltää noin 50-60 metriin, kantomatka voisi ehkä olla pidempi koska mittaustilanteessa PC-Unit oli noin 5 metriä korkeammalla kuin Remote-Unit ja maasto oli vaihtelevaa. Sisätiloissa Remote-Unit kantaa mainiosti betoni-elementeistä rakennetun omakotitalon alakerrasta yläkertaan noin 20 metrin matkan. 4.2. Virrankulutus Oheisessa taulukossa on sekä arvioitu virrankulutus ja mitattu virrankulutus Remote- Unit:lle. PC-Unit:lle en ole mitannut tai laskenut virrankulutusta koska se on kokoajan kiinni ulkoisessa tehonlähteessä. Tila Power down Näyttö päällä Lähetys (piikkivirta n. 15ms ajan) Vastaanotto (1s ajan) Kuvaus - ATmega16 power-down - PCD8544 power-down - NRF401 Standby - Atmega16 power-save - PCD8544 normal mode - nrf401 Standby - ATmega16 idle - PCD8544 normal mode - NRF401 Transmit - ATmega16 power-save - PCD8544 power-down - NRF401 Receive Arvioitu virrankulutus (lähetysteho +10dBm) Mitattu virrankulutus (lähetysteho +10dBm) 100 ua 285 ua 371 ua 684 ua 22 ma 25.741 ma 12.67 ma 15.593 ma
33 5. TULOSTEN TARKASTELU Omasta mielestäni sain laitteen toimimaan halutulla tavalla, vaikkakin puutteita jäi. Esimerkiksi viestiliikenne PC-Unit:lta Remote-Unit:iin jäi puutteelliseksi johtuen radiopiirien vastaanottamasta kohinasta. Radiopiirien kohina osoittautui suurimmaksi haasteeksi projektissa, oletin että radiopiirit saavat vastaanottotilassa vain lähetteen eli niissä olisi kohinasalpa sisäänrakennettuna. Näin ei kuitenkaan ollut vaan radiopiirit vastaanottavat ilmasta kohinaa vaikka toinen lähetin olisi päällä. Tästä johtuen oikean datan varmentaminen kävi hieman hankalaksi eikä Remote-Unit:n hardware-uart pystynyt vastaanottamaan dataa tarpeeksi hyvin. Tämä ilmeni Remote-Unit:ssa toimintojen hidastumisena tai pysähtymisenä, koska UART keskeytystä palveltiin liian paljon. Toinen ongelmakohta oli pistematriisinäyttöjen saaminen toimintaan. Olin tehnyt pienen kytkentävirheen piirilevylle, jolloin näytön liittimiin ei tullut oikeat signaalit. Syyksi osoittautui se, että olin piirtänyt pinnijärjestyksen Nokian 3310 näytölle, vaikka käytettävä näyttö oli Nokian 8210 näyttö. Tämä ongelma kuitenkin selvisi helposti ja sen sai korjattua parilla hyppylangalla. Myös muutamien läpivientien kanssa oli ongelmia koska niiden juotos oli hieman murtunut ja satunnaista kytkentähäiriöitä esiintyi. Piirilevyjen syövytyksessä oli jäänyt pienen pieniä kuparisiltoja jotka maadoittivat tai yhdistivät vääriä pinnejä. Esimerkiksi Remote-Unit:n radiopiirin alun toimimattomuus johtui PLLsuodattimessa olevasta kuparisillasta maihin. Kuparisiltojen korjaaminen onnistui helposti työpaikallani olevan mikroskoopin ja terävän askarteluveitsen avulla. Piirin virrankulutus näyttö päällä ja power-down tilassa on aivan liian suuret verrattuna oletettuun virrankulutukseen. Tässä vikana voi olla jonkin mikrokontrollerin linjan jääminen input-tilaan.
34 6. KEHITYSKOHTEET Remote-Unit:n seuraava suurempi muutos on ottaa hardware-uart pois käytöstä ja tehdä vastaavanlainen software-uart kuin PC-Unit:ssa. Tämä johtuu radiopiirien vastaanottamasta kohinasta ja hardware-uart:n huonosta toiminnasta kyseisessä tilanteessa. Jos uusi UART muutos alkaa toimimaan hyvin on seuraavaksi tehtävä pienimuotoinen tiedostoselain Remote-Unit:iin jolloin sen avulla voidaan valita soitettava tiedosto tai elokuva. Tärinäaturin toiminta täytyy saada pelaamaan, koska sitä en ehtinyt kyseiseen versioon tekemään radiopiirien ja näytön ongelmien viedessä suurimman osan ajastani, mutta luulen kuitenkin ettei sen toimintaan saaminen ole kovin suuri työ. Myös Remote-Unit:n softaan tulee bugi-korjauksia ja käyttöliittymän grafiikan hiontaa, esimerkiksi pitkien tekstien vieritys. Power-down:n tilan suuren virrankulutuksen syy täytyy myös paikantaa ja korjata jos suinkin vain mahdollista. Myös muiden tilojen virrankulutukset täytyy yrittää pienentää mahdollisimman pieniksi. PC-Unit tarvitsee vain kotelon viimeistelyn. PC-Softwaren kanssa joutuu tekemään vielä paljon töitä että käyttöliittymän saa toimimaan halutulla tavalla. Myös tiedostolistauksen tekemiseen menee aikaa, koska aivan suoraa tiedostolistausta ei voi Remote-Unit:lle lähettää sen näytön pienuuden takia.
35 7. AIKATAULU JA BUDJETTI Aikataulu Tehtävä Suunniteltu (h) Toteutunut (h) Suunnittelu n/a 15 Kytkentäkaavio 10 8 Piirilevyt (layout) 14 18 Rakentaminen 8 6 Software - Remote-Unit 60 100 - PC-Unit 40 50 - PC-Software 20 30 Dokumentointi 20 25 Yhteensä : 172 252 Remote-Unit:n aikatauluarvio heitti huomattavasti, koska rakennusvaiheessa tuli huomattavia ongelmia radiopiirien ja pistematriisinäytön kanssa. Alkuperäinen näyttö oli mennyt rikki jossain vaiheessa projektia ja sen takia jouduin ostamaan Nokia 6150:n näytön jotta saisin jotain informaatiota näytölle.
36 Budjetti PC-Unit : Komponentti Määrä á hinta Alv. 22% yht. Atmel AT90s2313 1 4.80 0.22 5.86 MAX323 1 3.00 0.22 3.66 MAX603 1 6.66 0.22 8.13 NRF401 1 13.50 0.22 16.47 Kide SMD 4.000MHz 1 1.35 0.22 1.65 Kide PHT 4.000MHz 1 1.18 0.00 1.18 9-pin D-liitin 1 1.20 0.00 1.20 Muut passiiviset komponentit 1 3.00 0.00 3.00 Piirilevy 1 0.00 0.00 0.00 Yht. 41.14 Remote-Unit : Atmel ATmega16 1 15.30 0.22 18.67 NRF401 1 13.50 0.22 16.47 Nokia 8210 Näyttö 1 15.00 0 15.00 Nokia 6150 Näyttö 1 10.00 0 10.00 MAX4042 1 1.00 0.22 1.22 MAX5160 1 1.20 0.22 1.46 Kide SMD 4.000MHz 1 1.35 0.22 1.65 Kide PHT 32768Hz 1 1.76 0 1.76 Näppäimet 14 0.25 0 3.50 Muut passiiviset komponentit 1 4.00 0 4.00 Piirilevy 1 0.00 0 0.00 Yht. 73.73 Yhteensä 114.87 Hinta passiivisille komponenteille on vain arvio, koska suurimman osan niistä olen ostanut jo aikaisempiin projekteihin tai sain töistä. Nokia 6150 puhelimen näytön laskin budjettiin mukaan koska aluperäinen Nokia 8210 puhelimen näyttö oli rikki ja uuden sain vasta myöhemmin. Jos Nokia 6150:n näyttöä en olisi ostanut olisi projekti viivästynyt huomattavasti.
37 8. YHTEENVETO Projekti oli kokonaisuudessaan erittäin mielenkiintoinen jo suunnitteluvaiheessa ja innostus projektin saattamiseksi loppuun vain kasvoi sen edetessä. Projektin kanssa työskentely on ollut erittäin antoisaa. Tässä työssä opin paljon uusia asioita niin mikrokontrollereiden toiminnasta kuin radiopiireistä. Radiopiirien käyttö on nykyään hyvin yleistä ja uskon että tämän projektin ansiosta osaan varautua ongelmiin joita voin kohdata tulevaisuudessa. RemoteC-järjestelmän uskon palvelevan minua vielä paljon tulevaisuudessa, kunhan saan sen toimimaan haluamallani tavalla. Erittäin mielenkiintoista on nähdä sen toiminta käytännössä, kuten paristojen kesto käytettävyys ja miten käyttöliitymä toimii muiden ihmisten käyttäessä laitetta.
38 9. LÄHTEET [1] Suurtaajuusmittaustekniikan perusteet II kurssimateriaali, Orbis OY [2] http://www.analog.com/ (1.6.2004)
39 10. LIITTEET Liite 1. Liite 2. Liite 3. Liite 4. Liite 5. Liite 6. Liite 7. Liite 8. Liite 9. Liite 10. Liite 11. Taajuustaulukot Kytkentäkaaviot Komponenttiluettelo Piirilevyjen valoitusmaskit Piirilevyjen osasijoittelu Viestien määritykset nrf401 Radiopiirin datalehti MAX4042 datalehti MAX5160 datalehti PCD8544 datalehti Lähdekoodi: http://koti.mbnet.fi/jhappone/sourcecode/remotec- Sources.zip