• Ei tuloksia

Kannettavan kaasuilmaisimen suunnittelu ja toteutus

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Kannettavan kaasuilmaisimen suunnittelu ja toteutus"

Copied!
42
0
0

Kokoteksti

(1)

KANNETTAVAN KAASUILMAISIMEN SUUNNITTELU JA TOTEUTUS

(Designing and implementing handheld gas detector)

Sten Tamberg

Kandidaatintyö 30.09.2010

LUT Energia

Sähkötekniikan koulutusohjelma

(2)

TIIVISTELMÄ

Lappeenrannan teknillinen yliopisto LUT Energia

Sähkötekniikan osasto

Sten Tamberg

Kannettavan kaasuilmaisimen suunnittelu ja toteutus

Kandidaatintyo 2010

37 sivua, 9 kuvaa, 1 taulukko, 3 liitettä Tarkastaja: Tuomo Lindh

Hakusanat: ATMega164P

Työn tarkoituksena on suunnitella ja toteuttaa kannettava kaasuilmaisin, joka soveltuu erityisesti tavallisen kuluttajan tarpeisiin. Kaasuilmaisin on herkkä haihtuville palaville kaasuille, sekä orgaanisille kaasuille. Työssä käytetään Atmelin ATMega164P- mikrokontrolleria, piirin ohjelmointiin käytetään AVR-ISP-II, ja kehitystyökaluina AVRStudio 4:ää. Piirilevy on suunniteltu Cadsoftin Eagle- piirieditorilla. Työssä käydään läpi kokonaisvaltainen sulautetun järjestelmän suunnitteluprosessi, tuotteen spesifikaatioiden määrityksistä aina valmiin fyysisen tuotteen valmistuttamiseen asti. Tuote suunnitellaan Environics Oy:lle.

(3)

ABSTRACT

Lappeenranta University of Technology Department of Electrical Engineering

Sten Tamberg

Designing and implementing handheld gas detector

Thesis for the Degree of Bachelor of Science in Technology 37 pages, 9 images, 1 table, 3 appendix

Examiner: Tuomo Lindh Keywords: ATMega164P

The aim of this study is to design and implement a handheld gas detector for everyday consumer. The detector detects solvent vapors and organic air contaminants. The software is designed by using AVR Studio 4 and the hardware is designed by using Cadsoft Eagle Layout Editor. Microcontroller used in this project is AVR ATMega164P and is programmed via AVR-ISP-II. This thesis review the whole embedded system design process from the product specification to all the way trough implementing the physical device. This project is designed to Environics Oy.

(4)

ALKUSANAT

1+1 on enemmän kuin kaksi, joten haluan kiittää projektin aikana apuja ja vinkkejä antaneita henkilöitä. Erityisesti haluan kiittää Henriä vinkeistä piirin parissa.

Environicsin puolelta haluan kiittää Osmoa erittäin mielenkiintoisesta projektin aiheesta ja neuvoista kun tenkkapoo yllätti. Heinille isot kiitokset henkisestä tukemisesta ja tsemppauksesta.

(5)

Sisällysluettelo

KÄYTETYT MERKINNÄT JA LYHENTEET ...6

JOHDANTO...7

2. SULAUTETUN JÄRJESTELMÄN SUUNNITTELU...8

2.1 Sulautetun järjestelmän erityispiirteitä ...8

2.2 Haasteet sulautetuissa järjestelmissä ...9

2.2.1 Luotettavuus...9

2.2.2 Reaaliaikaisuus ...9

2.2.3 Rinnakkaisajo ...10

2.2.4 Taloudelliset vaatimukset ...10

2.2.5 Virranhallinta ...11

2.2.6 Testaus ...12

2.3 Suunnitteluprosessi...13

2.3.1 Järjestelmän vaatimukset ...13

3. KAASUILMAISIMEN SUUNNITTELU...16

3.1 Vaatimusten määrittely...16

3.2 Spesifikaatio...17

3.3 Arkkitehtuuri...21

3.4 Komponentit ...23

3.4.1 Mikrokontrolleri ...23

3.4.2 TGS 2602/2620 ...23

3.4.3 LTC1799 ...24

3.4.4 HCH-1000-002...24

3.5 Järjestelmän integrointi...24

4. KAASUILMAISIMEN TOTEUTUS ...26

4.1 Kehitysympäristö ...26

4.2 Prototyyppi...26

4.3 Kalibrointi...26

5. KUSTANNUKSET...29

5.1 Osaluettelo ...29

6. JOHTOPÄÄTÖKSET...31

6.1 Jatkokehitystä...31

LIITTEET...33

(6)

KÄYTETYT MERKINNÄT JA LYHENTEET

CPU Central Processing Unit

HW Hardware

I/O Input/Output

LED Light Emitting Diode

OMG Object Management Group

RAM Random Access Memory

ROM Read Only Memory

RTOS Real-time Operating System

SW Software

UML Unified Modelling Language

VOC Volatile organic compounds

C Kapasitanssi

f Taajuus

N Esijakajan arvo

R Resistanssi

τ Aikavakio

(7)

JOHDANTO

Työn tarkoituksena on suunnitella ja toteuttaa kannettava kaasuilmaisin, joka soveltuu erityisesti tavallisen kuluttajan tarpeisiin. Työssä käydään läpi kokonaisvaltainen sulautetun järjestelmän suunnitteluprosessi, tuotteen spesifikaatioiden määrityksistä aina valmiin fyysisen tuotteen valmistuttamiseen asti.

Työssä suunniteltava kaasumittari suunnitellaan erityisesti sisäilman laatua silmälläpitäen. Ihminen hengittää vuorokaudessa jopa 40 kuutiometriä ilmaa, joista lähes 90% sisätiloissa. Tämän vuoksi sisäilman laadun tarkkailuun on hyvä kiinnittää huomiota. Sisäilman kemialliset epäpuhtaudet voivat aiheuttaa allergiaoireita, uupumusta, sekä erinäisiä terveysoireita, kuten keuhkosairauksia. Sisäilmassa mahdollisesti havaittavia haitallisia kaasuja ovat mm. hiilidioksidi, hiilimonoksidi, aldehydit, metaani, ammoniakki, tolueeni ja muut VOC-yhdisteet (haihtuvat orgaaniset yhdisteet). Merkittävimmät ilman epäpuhtauksien lähteet ovat rakennus- ja sisustusmateriaalit, maaperä, ulkoilma, sekä ihmisen oma toiminta. (Sisäilmayhdistys ry.)

Altistumme jatkuvasti enemmän tai vähemmän haitallisille yhdisteille pelkästään kotioloissa, joten riskitekijöiden selvittäminen on viihtyvyyden ja terveyden kannalta perusteltua. Näitä tilanteita varten kehitämme tässä työssä kannettavan kaasuilmaisimen, ilmoittamaan ja varoittamaan käyttäjää mahdollisista riskeistä.

(8)

2. SULAUTETUN JÄRJESTELMÄN SUUNNITTELU

Mikrotietokoneet voidaan jakaa yleiskäyttöisiin, tietojenkäsittelyyn tarkoitettuihin mikrotietokoneisiin ja sulautettuihin järjestelmiin, jotka on tarkoitettu erikoistoimintaan tarkoitettuihin mikrotietokoneisiin. Sulautettu järjestelmä on nimensä mukaisesti integroitu osaksi suurempaa järjestelmäkokonaisuutta, eikä se loppukäyttäjälle vaikuta tietokoneelta, vaan tutulta ja turvalliselta kodinkoneelta, kulutuselektroniikkalaitteelta tai esim. auton turvallisuusvarusteelta. (Koskinen 1998)

2.1 Sulautetun järjestelmän erityispiirteitä

Sulautettu järjestelmä koostuu ohjelmistosta ja laitteistosta. Laitteistoon kuuluu mikro-ohjain, sekä vaihteleva määrä oheislaitteita, joiden keskinäistä kommunikointia ohjataan mikrokontrollerin ohjelmakoodilla. Sulautettu järjestelmä kootaan pienistä palasista, josta suurempi järjestelmäkokonaisuus muodostuu. Tehtävät jaetaan tarkasti määriteltyihin osakokonaisuuksiin, jotka voidaan jakaa usealle eri suunnittelijalle.

Ohjelmistopuolella suunnittelijat voivat vapaasti määritellä osakokonaisuuden toteutustavan, kunhan rajapinnan määritykset pitävän paikkansa. Tämä mahdollistaa tehokkaamman suunnittelun, virheiden havainnoinnin, sekä järjestelmän päivitettävyyden. (Almala 1985, Vahid 2002)

Sulautettujen järjestelmien ohjelmointi eroaa merkittävästi tavallisesta PC ohjelmoinnista. Sulautetuille järjestelmille ominaisia erityispiirteitä ovat monimutkaiset prosesseja ohjaavat algoritmit, rajoittuneet käyttöliittymät, reaaliaikaisuus, kyky rinnakkaisprosessointiin, sekä ennen kaikkea luotettavuus.

(Labrosse 2002)

(9)

2.2 Haasteet sulautetuissa järjestelmissä 2.2.1 Luotettavuus

Sulautetuilta järjestelmiltä odotetaan aina moitteetonta toimivuutta ja luotettavuutta kaikissa tilanteissa, käyttöympäristöstä huolimatta. On täysin normaalia, että sulautetun järjestelmän käyttöympäristön lämpötila voi vaihdella toistasataa astetta.

Silti järjestelmän on toimittava luotettavasti. Myös häiriöitä esiintyy sulautettujen järjestelmien käyttöympäristössä huomattavasti enemmän kuin tavallisen PC:n käyttöympäristössä. Häiriöt voivat olla esimerkiksi mekaanista tai sähkömagneettisia häiriöitä. (Berger 2002)

Erityisen kriittisissä sovelluksissa, kuten esimerkiksi puolustusvälineteollisuudessa ja avioniikassa käytettävät laitteet on oltava hyväksyttyjä ja testattuja erityisesti laitteen toimintaympäristön osalta kriittisiin sovelluksiin. Näistä testeistä valmistajalla on oltava tarkka dokumentaatio. Tämän vuoksi puolustusvälineteollisuuteen suunnitellut prosessorit voivatkin maksaa useita satoja kertoja enemmän kuin tavalliselle kuluttajalle tarkoitetut versiot. (Berger 2002)

Yrityksen on varmistettava myös kuluttajatuotteiden luotettavuus ja toimivuus on huolella ennen tuotteen lanseeraamista markkinoille. Yleensä sulautetun järjestelmän piiri ohjelmoidaan ainoastaan yhden kerran ja sijoitetaan laitteeseen. Mikäli tuotteessa havaitaan virhe tuotteen ollessa jo markkinoilla, ei järjestelmää yleensä saada kuntoon pelkällä ohjelmistopäivityksellä, toisin kun PC puolella. Tällöin joudutaan mahdollisesti turvautumaan takaisinkutsuun ja korvaamaan kuluttajalle aiheutuneet vahingot. Korvaussummat voivat nousta jopa niin suuriksi, että pienempien firmojen on mahdotonta jatkaa enää toimintaansa. (Bolton 2000)

2.2.2 Reaaliaikaisuus

Sulautetut järjestelmät toimivat usein reaaliaikaisesti. Tämä aiheuttaa useita haasteita järjestelmän suunnitteluun ja käytettävän reaaliaikakäyttöjärjestelmän (RTOS) valintaan. RTOS:sin valinta on prosessorivalinnan yhteydessä tärkeimpiä päätöksiä

(10)

suunnitteluprosessissa. Käyttöjärjestelmän hankinnassa on otettava huomioon mm.

tuetut ohjelmointikielet, yhteensopivuus kehitystyökalujen kanssa, käyttöjärjestelmän suorituskyky, käyttöjärjestelmän integroinnin helppous, sekä esimerkiksi valmistajan tarjoama tekninen tuki.

Suunnittelijan kannalta sulautetun järjestelmän suunnittelusta tekee haastavan järjestelmän toiminnalle määritellyt aikarajat, koska useat sulautetut järjestelmät ovat usein aikakriittisiä. Sulautettu järjestelmä voi olla ”Hard real-time” tai ”Soft real- time”. Hard-real time järjestelmän on paitsi reagoitava kutsuun välittömästi, myös suoriuduttava tehtävästä annetussa ajassa. Aikarajan ylitys tulkitaan Hard real-time järjestelmissä virheeksi, joka voi pahimmassa tapauksessa aiheuttaa koko järjestelmän hallitun tai hallitsemattoman alasajon. Soft real-time järjestelmille riittää, että järjestelmä vastaa kutsuun annetussa ajassa, mutta tehtävän suorittamiselle ei ole ennalta määrättyä aikaa. Soft real-time järjestelmissä aikarajojen ylittyminen yleensä aiheuttaa lievää epätoimivuutta, muttei kaada koko järjestelmää. Yleisesti aikarajojen ylittäminen paitsi aiheuttaa järjestelmän toimimattomuutta, mutta voi myös aiheuttaa vaaratilanteita käyttäjille. Järjestelmän reaaliaikaisuus kulkeekin käsi kädessä luotettavuuden ja rinnakkaisuuden kanssa. (Wolf 2001, Labrosse 2002)

2.2.3 Rinnakkaisajo

Sulautetuissa järjestelmissä on tyypillistä myös, että reaaliaikaisia aikakriittisiä prosesseja on käynnissä samanaikaisesti useita, eli on kyettävä suoriutumaan rinnakkaisista prosesseista tehokkaasti. Tämä aiheuttaa entistä suuremman vaatimuksen aikarajoista selviytymiseen. Järjestelmän epätoimivuuteen riittää, että yksi ainoa prosessi ei selviydy vaadituista aikarajoista. (Labrosse 2002)

2.2.4 Taloudelliset vaatimukset

Sulautetun järjestelmän suunnittelussa on otettava huomioon HW:n aiheuttama taloudellinen näkökulma, koska sulautetun järjestelmän suunnittelu sisältää myöskin fyysisen laitteen. Tämän takia tuotantokustannukset on otettava huomioon jo

(11)

suunnitteluvaiheessa. Taloudelliset vaatimukset aiheuttavat useita haasteita sulautetun järjestelmän suunnitteluprosessissa. Suunnittelussa on huomioitava HW:n todellinen tarve. Prosessorin nopeus on optimoitava järjestelmän toimivuuden ja hinnan mukaan.

Liian nopeasti toimiva järjestelmä tulee helposti kalliiksi, kun taas edullisempi ja hitaampi prosessori ei täytä aikarajavaatimuksia. Koodiin tehokkuuteen on kiinnitettävä huomiota, sillä nopealla prosessorilla huonon koodin suoritus on huomattavasti hitaampaa, kuin hitaammalla prosessorilla suoritettava hyvin suunniteltu koodi. Oheislaitteista esim. muistin määrä näkyy nopeasti hinnassa.

Muistia ei tule pitää turhaan reservissä, vaan suunnitella tehokasta ja tiivistä koodia, joka täyttää järjestelmän vaatimukset. Mikäli edullisella komponentilla voidaan vaikuttaa tuhansien koodirivien poisjäämiseen, on se kannattavaa, mikäli tuotantomäärät eivät ole kovin korkeat. Kun taas tuotetaan kymmeniä tai satoja tuhansia kappaleita jotain laitetta, on taloudellisempaa korvata edullisiakin komponentteja ylimääräisellä koodilla, mikäli mahdollista. Aina ei riitä, että saavutetaan vaaditut tekniset ominaisuudet ja toimivuus. Monesti on tehtävä kompromisseja, jotta saadaan sekä tekniset, että taloudelliset vaatimukset tyydytettyä.

(Wolf 2001)

2.2.5 Virranhallinta

Aina optimointia ei jouduta tekemään pelkästään taloudellisista syistä. Usein suunnittelussa joudutaan ottamaan huomioon myös tehon asettamat rajoitteet.

Kannettavissa paristo/akkukäyttöisissä sovelluksissa virranhallinta on ensiarvoisen tärkeää. Sovelluksen tehonkulutukseen vaikuttaa prosessorin kellotaajuus, sekä piiriin kytkettyjen aktiivisten liitännäisten määrä. Näihin lukeutuu mm. prosessori, muistit (RAM/ROM), I/O laitteet ym. Moderneilla prosessoreilla virrankulutus on lähes suoraan verrannollinen prosessorin kellotaajuuteen nähden, joten oikea prosessorivalinta on myös tehokkain tapa hallita sovelluksen virrankulutusta.

Toisinaan virranhallinta voi määrätä jopa käytettävän ohjelmointikielen. Mikäli on tuotettava mahdollisimman tehokasta koodia myös virrankäytön suhteen, voidaan joutua turvautumaan entistä laiteläheisimpiin kieliin, kuten assemblyyn. Kasvava virrankulutus lyhentää paitsi akkujen kestoa, mutta aiheuttaa myös kasvaneen

(12)

jäähdytystarpeen, joka heijastuu helposti laitteen fyysisessä koossa. Mikäli järjestelmää hidastetaan, on varmistuttava mahdollisista reaaliaikaisuuden asettamien vaatimuksien täyttymisestä. (Wolf 2001, Berger 2002)

2.2.6 Testaus

Kuluttajat odottavat kaupalliselta tuotteelta moitteetonta toimivuutta, joten testaukseen on panostettava riittävästi resursseja. Testaus on aloitettava jo todella varhaisessa vaiheessa, jotta kaikki ongelmat löydetään ajoissa ja saadaan korjattua.

Sulautetun järjestelmän testaus on myös mutkikkaampaa kuin pelkissä ohjelmistosovelluksissa. Jotta saadaan paikkaansa pitävää testidataa, on usein ajettava koko järjestelmää samanaikaisesti. (Vahid 2002)

Sulautettu järjestelmä ei välttämättä toimi oikein vaikka HW on testattu toimivaksi ja SW on erikseen testattu toimivaksi. Näiden täytyy toimia moitteetta myös yhdessä.

Usein sulautettua järjestelmää hallitaan muutamilla napeilla ja käytössä voi olla esim.

pieni näyttö. Tämä ei mahdollista laajoja työkaluja järjestelmän ongelmakohtien löytämiseksi, vaan ongelman ratkaisemiseksi on mentävä aina piiritasolle asti.

Testauksen vaatimat työkalut eroavat merkittävästi PC-maailmasta. Sulautettu ohjelmisto sijoitetaan yleensä ROM-muistiin, joka ei sovellu tavallisten debugger- työkalujen käyttöön. Debuggerin on yleensä poistettava testattavasta koodista rivi, ja korvattava se omalla ohjauskäskyllä. Koska ROM-muistia voidaan ainoastaa lukea, täytyy testauksessa käyttää esimerkiksi ROM emulaattoreita. Mikäli käytössä on reaaliaikainen käyttöjärjestelmä, on testaus ja virheiden löytäminen entistä haastavampaa. RTOS käyttöjärjestelmää hankkiessa on varmistuttava sopivien testaustyökalujen löytyminen. Yleisimpiä työkaluja sulautettujen järjestelmien virheiden havainnointiin ja poistamiseen ovat In-circuit Emulator (ICE), ROM- emulaattori, logiikka-analysaattori, JTAG ja Nexus (Berger 2002)

(13)

2.3 Suunnitteluprosessi

Sulautetun järjestelmän suunnitteluprosessi voidaan toteuttaa top-down tai bottom-up suunnittelulla. Top-down (kuva 1.) suunnittelussa suunnittelu aloitetaan suuremmista suuntaviivoista ja järjestelmän vaatimuksista, päätyen tarkempien välivaiheiden kautta aina piiritason järjestelmäintegraatioon asti. Top-down ohjelmointi koostuu rakenteisen ja modulaarisen ohjelmoinnin periaatteista, sekä alaspäin tarkentuvasta etenemistavasta. Bottom-up suunnittelussa suunnittelu aloitetaan piiritasolta ja päädytään lopuksi koko järjestelmän kuvaukseen. (Almiala, 1985)

Kuva 1. Top-down suunnitteluprosessi.

2.3.1 Järjestelmän vaatimukset

Järjestelmän vaatimukset kuvataan sanallisesti yleisellä tasolla. Tällä tasolla määritellään sanallisesti laitteen toiminnallisuudet, käyttöliittymä, tulot ja lähdöt, suorituskyky, valmistuskustannukset, mahdolliset tavoitemyyntihinnat, suuntaa antavat fyysiset mitat, sähkönkulutus yms. Kuvaus on hyvin karkea, eikä siinä käytetä välttämättä konkreettisia mittayksiköitä. Piiritason toteutukseen ei oteta kantaa millään tavalla. Kuvaus voi olla toteutettu taulukon 1. tapaisella taulukolla. (Wolf 2001)

(14)

Nimi

Käyttötarkoitus Tulot

Lähdöt

Toiminnallisuus Suorituskyky Kustannukset Teho

Fyysinen koko

Taulukko 1. Taulukko järjestelmän vaatimuksille.

Kun toiminnallisuus on pääosin määritelty, on määritettävä tarkemmin tuotteen spesifikaatio. Spesifikaatiosta on selvittävä suunnittelijalle tarkasti mitä täytyy suunnitella, mutta ei miten täytyy suunnitella. Spesifikaation on oltava niin selkeä, ettei siinä ole mitään tulkinnanvaraisuutta, muutoin valmis järjestelmä ei enää välttämättä vastaa tilaajan alkuperäisiä vaatimuksia. Tässä vaiheessa suunnittelijalla on suuri vastuu olla tekemättä olettamuksia. Spesifikaation määrityksessä käytetään yleisesti UML kuvauskieltä.

UML on erityisesti ohjelmistojen kehittelijöille suunniteltu kuvauskieli. UML julkaistiin vuonna 1997 OMG (Object Management Group) toimesta. UML:n tarkoitus oli tarjota kehittäjille yhtenäinen kieli tietokoneohjelmistojen kehitykseen.

UML tarjoaa kehittäjille mahdollisuuden luoda ”piirustuksia” ohjelmistoista.

(IBM)

Seuraava vaihe sulautetun järjestelmän suunnittelussa on määrittää miten spesifikaatiossa määrätyt ohjelmallisuudet toteutetaan. Tässä vaiheessa suunnitellaan järjestelmän arkkitehtuuri. Useimmiten arkkitehtuuri kuvataan vuokaaviolla.

Tarkempi järjestelmän fyysisten osien kuvaaminen tapahtuu lohkokaavion avulla.

(Wolf 2001)

HW ja SW komponenttien suunnittelu päästään toteuttamaan arkkitehtuurin pohjalta,

(15)

josta nähdään mitä komponentteja tarvitaan. Suuri osa komponenteista (HW) voi löytyä suoraan hyllystä, mutta joitakin voidaan joutua suunnittelemaan itse esimerkiksi ohjelmoitavien logiikoiden avulla. Ohjelmiston puolella uutta joutuu luomaan paljon enemmän. Suunnittelussa on varmistuttava, että järjestelmä täyttää alunperin asetetut kriteerit reaaliaikaisuudesta, sekä esim. muistinhallinnasta.

Järjestelmän integrointi on vuorossa kun suunnittelu on jo tehty. Enää laitetaan vain palaset kohdilleen ja testataan järjestelmän toimivuus. Järjestelmän testaus on syytä tehdä pienissä osissa, moduuli kerrallaan, jotta pahimmat virheet havaitaan välittömästi. Myös testien valintaan on hyvä kiinnittää huomiota. Oikein valitut testit paljastavat huomattavasti tehokkaammin virhekohtia. Sulautetuissa järjestelmissä virheet ovat yleensä hyvin tehokkaasti piilossa, eikä työkaluja virheiden havainnointiin ole samalla tavalla käytössä kuin tietokoneohjelmistoissa. Mitä myöhemmin virhe havaitaan, sitä kalliimmaksi järjestelmän korjaaminen tulee.

Virheiden paikantaminen ja korjaus ovat todellinen haaste järjestelmän suunnitteluprosessissa, siksi spesifikaation ja arkkitehtuurin suunnitteluun on käytettävä reilusti aikaa, jotta vältytään etukäteen mahdollisilta turhilta virhetilanteilta. (Almala 1985)

(16)

3. KAASUILMAISIMEN SUUNNITTELU

Tässä työssä suunniteltava kaasuilmaisin suunnitellaan top-down menetelmällä, käyttäen teoriaosuudessa esitettyjä tapoja. Erityishuomiota kiinnitetään aikaisemmin esille tulleisiin suunnittelumenetelmiin.

3.1 Vaatimusten määrittely

Suunniteltavan tuotteen sanallinen yleiskuvaus on seuraavanlainen:

Kannettava kaasuilmaisin on laite, joka mittaa ilman epäpuhtauksia ja ilmoittaa niistä käyttäjälle sekä visuaalisesti, että mahdollisilla äänimerkeillä. Laitteen on oltava käyttäjäystävällinen, resoluution on oltava tarkka, sekä ennen kaikkea kuluttajahinnan on pysyttävä kohtuullisena. Laitteen on oltava kooltaan käsikäyttöinen.

Yleiskuvauksen tarjoamista tiedoista suunnittelua jatketaan hieman tarkempaan ja yksityiskohtaisempaan kuvaukseen.

Nimi Kannettava kaasuilmaisin siviilikäyttöön.

Käyttötarkoitus Kaasuilmaisin joka ilmoittaa käyttäjälle mahdollisista haitallisista poikkeamista ilmanlaadussa. Ilmaisee ilmansaasteiden määrän, sekä haihtuvien palavien ja orgaanisten yhdisteiden määrän.

Tulot 3 painonappia: Laite päälle/pois, sensorin valinta, äänimerkki päälle/pois, Resistor set oscillator

Lähdöt Ledipylväs, sensorin valinnasta indikoiva led- merkkivalo, mute-led, summeri, LCD näyttö (optio)

(17)

Toiminnallisuus Led-merkkivalo näyttää kumpaa sensoria käytetään, vaihtoehtoina ilmanlaatu ja haihtuvat orgaaniset yhdisteet.

Led-pylväs (4xvihreä led, 2x keltainen led, 2x punainen led) osoittavat mitatun ilmanlaadun.

Kun asetetut raja-arvot ylittyvät laite piippaa varoitukseksi. Mitä suurempi konsentraatio ilmassa havaitaan haitallista yhdistettä, sitä kiivaammin summeri varoittaa.

Varoitusäänet on mahdollista hiljentää painonapista.

Mittaus ottaa huomioon kosteuden aiheuttaman mittausvirheen.

Suorituskyky Havaitsee ilmansaasteista 1-30ppm pitoisuuksia ja orgaanisista yhdisteistä 50-5000ppm pitoisuuksia.

Kaasuilmaisin suunnitellaan siviilikäyttöä silmälläpitäen, eikä erityistä tarkkuutta vaativiin ammattikäytön tarpeisiin.

Valmistuskustannukset Kaupan hyllyllä alle 100€

Teho 3x1.5V paristo

Fyysiset mitat Kätevä pitää kädessä tai vyöllä

3.2 Spesifikaatio

Spesifikaatiossa on määriteltävä toiminnallisuus hieman tarkemmin, jotta saadaan

(18)

riittävät tiedot ja vaatimukset arkkitehtuurin onnistuneeseen suunnitteluun. Kuvassa 2 on esitetty luokat joista kaasuilmaisin koostuu. Koska prosessori on ohjelmoitu käyttäen ANSI C:tä, joka ei ole oliopohjainen kieli, ei UML:ää päästä hyödyntämään täysimääräisesti. UML-kuvaus selkeyttää silti suunnittelua ja toimii ikään kuin piirustuksina ohjelman kehitystä ajatellen.

Kaasuilmaisimen keskusyksikkö lukee jatkuvasti napin painalluksia ja muokkaa algoritmia käyttäjän valitsemien asetusten mukaiseksi. Tulos esitetään LED:eillä ja mahdollisella äänimerkillä.

Kuva 2. Kaasuilmaisimen UML-luokkakaavio

Tarkempi tarkastelu luokkien sisällä osoittaa luokkien tarvitsemat funktiot. Summerin soittamiseen riittää yksi ainut funktio, buzz(). Asetuksia muutetaan napeista, joten muutokset asettavat kyseisen asetuksen aktiiviseksi tai passiiviseksi. Ledit ilmaisevat kumpaako sensoria käytetään, sekä haitallisen yhdisteen konsentraation ilmassa.

ProcessingUnit -luokassa esitetään järjestelmän ohjauksen vaatimat funktiot ja muuttujat.

(19)

Kuva 3. Järjestelmän luokkien tarkempi tarkastelu.

Järjestelmä käyttää Round-Robin with interrupts-rakennetta. Tässä rakenteessa ohjelma kyselee vuoronperään oheislaitteilta, tarvitaanko palvelua. Rakenteessa on kuitenkin tärkeimpiä prosesseja varten mukana myös keskeytyksiä, kuten esimerkiksi laskureiden ylivuotoja varten. Round-Robin with interrupts- rakenteeseen on päädytty, koska pääohjelman suoritus kestää vain vähän aikaa, eikä kontrolleriin liitettyjen oheislaitteiden määrä ole huomattava. Ohjelman mittausosion tarkempi rakenne on esitetty kuvassa 4.

(20)

Kuva 4 Järjestelmän mittausosion lohkokaaviokuva.

Järjestelmä odottaa ajastinkeskeytystä, jonka jälkeen laskuriin ohjatut pulssit Resistor- Set-Sscillator:ista (LTC1799) otetaan talteen. Riippuen kumpaa toimintamoodia käytetään, saatua tulosta verrataan asetettuihin raja-arvoihin, joiden mukaan LED:it on asetettu syttymään. Mikäli hälytys on sallittu, soitetaan summeria. Summerin piippausten tiheys riippuu ilman epäpuhtauksien määrästä.

(21)

Kuva 5. Asetusten valinnan lohkokaaviokuva.

Järjestelmän asetukset määräytyvät kuvan 5. mukaan. Ohjelma tiedustelee onko käyttäjä painanut nappeja. Mikäli nappia on painettu, ohjelma selvittää mitä nappia on painettu ja asettaa toiminta-asetuksen sen mukaan.

3.3 Arkkitehtuuri

Järjestelmän arkkitehtuuri koostuu ATmega164P-mikrokontrollerista, sekä muutamista järjestelmän oheislaitteista. Ilman konsentraatio mitataan TGS2620 ja TGS2602 kaasusensoreilla. Antureiden resistanssi muutetaan digitaaliseen muotoon Resistor Set Oscillator:illa (LTC1799), jonka lähtö ohjataan kontrollerin laskuriin.

Mittausolosuhteet otetaan huomioon HCH-1000-002 kosteusanturilla, joka korjaa mittaustulosta. ATmega164P kytketään myös ulkoinen kide, jotta oskillaattorin tarkkuus täyttää asetetut vaatimukset. Tarkempi kuvaus järjestelmän arkkitehtuurista on esitetty kuvassa 6.

(22)

Kuva 6. Kaasuilmaisimen järjestelmäarkkitehtuuri

Ohjelmiston arkkitehtuuri kuvataan seuraavanlaisesti:

- 16-bittinen laskuri laskee ulkoisen oskillaattorin generoimia pulsseja.

Ajastin aiheuttaa keskeytyksen tietyn ajanjakson välein, jolloin otetaan muuttujaan talteen 16-bittisessä laskurissa oleva pulssien määrän ilmaiseva arvo. Tätä arvoa verrataan ennalta määrättyihin raja-arvoihin ja sytytetään LED-patsaasta tarvittava määrä valoja palamaan. Mikäli hälytysäänet on sallittu, ilmaistaan tulos myös soittamalla summeria tietyn ajanjakson välein.

- Ohjelma kyselee jatkuvasti onko asetusvalintanappeja painettu. Mikäli nappia on painettu, asetetaan uusi asetus voimaan.

- Ilmankosteus mitataan tyhjentämällä mittaussensorin varaus, jonka jälkeen ladataan sensori täyteen ja mitataan tähän kuluvaa aikaa analogiakomparaattorilla.

(23)

3.4 Komponentit

3.4.1 Mikrokontrolleri

Järjestelmän kontrollerina käytetään 8-bittistä Atmelin ATmega164P mikrokontrolleria. Kontrollerin arkkitehtuuri on esitetty kuvassa 7.

Kuva 7. Atmel ATmega164 arkkitehtuuri

ATmega164 sisältää mm. 32 I/O porttia, kolme ajastinta, Watchdog timerin ja analogisen vertailijan. Lisäksi siinä on 16kt ohjelmoitavaa Flash-muistia ja 4kt sisäistä RAM-muistia. Jopa jatkokehitystä ajatellen, nämä ominaisuudet ovat kontrollerille riittävät.

3.4.2 TGS 2602/2620

Ilman epäpuhtaudet havaitaan Figaron TGS2620 ja TGS2602 kaasusensoreilla.

Kummatkin sensorit reagoivat ilman epäpuhtauksiin resistanssin muutoksella.

TGS2620 on erityisen herkkä liuottimille ja haihtuville palaville kaasuille, kun taas

(24)

TGS2602 on herkkä orgaanisille yhdisteille ja ilmansaasteille.

3.4.3 LTC1799

Kaasusensoreiden resistanssi saadaan kontrollereille ymmärrettävään digitaaliseen muotoon käyttämällä Linear Technologyn Resistor Set SOT-23 Oscillator:ia, LTC1799. Tämä R/F-muunnin asettaa lähtöön kanttiaaltoa, jonka taajuus riippuu kaasusensoreiden resistanssista. LTC1799 taajuusväli on 1kHz-33Mhz. Taajuus voidaan laskea kaavasta 1.

fosc =10MHzi 10k NiRSET

!

"#

$

%& , (1)

jossa fosc on oskillaattorin taajuus, RSET on asetettu resistanssi ja N on esijakajan arvo, joka on tässä tapauksessa 10.

3.4.4 HCH-1000-002

Mittauksen ilmankosteutta mitataan Honeywellin HCH-1000-002, kapasitiivisella kosteussensorilla. HCH-1000-002 kapasitanssi vaihtelee 300pF-350pF. Kapasitanssin arvo saadaan mitattua kontrollerilla kytkemällä sensorin rinnalle vastus, joka muodostaa RC-piirin. RC-piirin aikavakio voidaan laskea kaavasta 2.

! =RC , (2)

jossa ! on aikavakio, R on resistanssin arvo ja C on kapasitanssin arvo.

Aikavakioksi haluttiin arvo joka on mitattavissa selkeästi kapasitiivisen kosteusanturin ala- ja ylärajalla. Valitsemalla resistanssin arvoksi 500kΩ, saadaan kontrollerin 8MHz taajuutta käyttämällä laskurin rajoiksi 1200 ja 1400 sykäystä.

3.5 Järjestelmän integrointi

Järjestelmä on hyvin yksinkertainen, joten sen toiminta voidaan testata melko helposti. Järjestelmää päästään testaamaan vasta, kun sekä piiri, että ohjelmisto ovat

(25)

valmiit. Testauksessa on varmistuttava, että käyttäjän valitsemat asetukset ja sensorit toimivat moitteetta. Tässä vaiheessa on hyvä tehdä raaka kalibrointi sensoreille, jotta varmistutaan sensoreiden toimivuudesta. Laite testataan toimivaksi selkeillä huuruilla, jotka pystyy myös haistamaan. Testauksessa on käytetty etanolipitoista Sinolia. Myös kaikkien asetusten toimivuus on testattava.

(26)

4. KAASUILMAISIMEN TOTEUTUS

4.1 Kehitysympäristö

Kaasuilmaisimen suunnittelussa käytettiin kahta eri ohjelmistoa. Ohjelmisto suunniteltiin AVR Studio 4:ää käyttäen. Koodi siirrettiin Olimexin AVR-P40-USB- 8535 Evaluation Board:ille käyttäen AVR-ISP-mkII:ta. Fyysinen piiri suunniteltiin Cadsoftin Eagle piirieditorilla.

4.2 Prototyyppi

Ensimmäinen prototyyppi rakennettiin koekytkentälevylle, käyttäen apuna Olimexin AVR-P40-USB-8535 Evaluation Board:ia, jossa virransyöttö hoidetaan USB- kaapelilla. Toisen prototyypin piirilevy teetetään. Prototyypin schema ja layout ovat liitteenä 1 ja liitteenä 2.

4.3 Kalibrointi

Ensimmäinen raaka kalibrointi suoritettiin Saleae Logic-logiikka-analysaattorin avulla. Sensoreiden annettiin olla tavallisessa tuuletetussa huoneilmassa, jonka jälkeen LTC1799 taajuus mitattiin. Anturin tyhjäkäyntitaajuusmittaus on esitetty kuvassa 8.

(27)

Kuva 8. Anturin raja-arvojen kalibrointi. Mitattu tyhjäkäyntitaajuus.

Tämän jälkeen sensorit altistettiin sinolille. Minuutin kuluttua mitattiin LTC1799 taajuus. Näin saatiin karkeat raja-arvot taajuuden vaihtelulle. Raja-arvot ledeille asetettiin siten, että puhdasta ilmaa indikoi yksi ledi, seuraavat syttyvät taajuuden kaksinkertaistuessa edellisestä.

Kuva 9. Anturin raja-arvojen kalibrointi. Mitattu taajuus, kun altistettu sinolille.

(28)

Tarkempi kalibrointi suoritetaan kun on saatu tarpeeksi tarkka ja luotettava mittausympäristö, jossa saadaan riittävällä tarkkuudella tieto ilman saasteiden konsentraatiosta. Laitteen kalibrointi suoritetaan ohjelmallisesti, eikä vaadi muuten merkittäviä toimenpiteitä.

(29)

5. KUSTANNUKSET

Laitteen kustannuksiin on toistaiseksi otettu huomioon ainoastaan ensimmäisen version tarvitsemat komponentit. Seuraavan version piiri suunnitellaan käyttäen pelkkiä pintaliitoskomponentteja, jolloin tarvittava pii-pinta-ala vähenee merkittävästi. Komponenttien hinnoissa käytetään pienen tuotantokoon vuoksi Digikeyn hintoja (>100kpl). Kehitysprojektin luonteen vuoksi tuotteen kehityskustannuksia (NRE) ei ole otettu huomioon.

5.1 Osaluettelo

Hinta €/kpl

2x C 100n Kondensaattori (SMD) 0.0066€

3x C 22p Kondensaattori (SMD) 0.0097€

1x HCH Kosteusantturi 2.48€

1x IC1 ATMEGA164P DIL40 Kontrolleri 2.25€

11x LED 5MM 0.02€

2x Q 2N7000 Transistori 0.143€

1x Q XTAL/S Oskillaattori 0.3917€

10x R 330 Vastus 0.00670€

4x R 1k Vastus 0.00670€

3x R 0.1k Vastus 0.00670€

4x R 10k Vastus 0.011€

1x R 500k Vastus 0.009€

3x S switch Mikrokytkin 0.20€

1x T BC547 Transistori 0.139

1x TGS_2602/20 Kaasusensori ei tiedossa

1x TGS_2620 Kaasusensori ei tiedossa

1x LTC1799 Resistor Set Oscillator 2.808€

1x Buzzer 0.36€

Yhteensä ilman TGS sensoreita 9.7259€

(30)

Kuten osaluettelosta voidaan huomata, suurimmat kustannukset koituvat kosteusanturista, ja mikrokontrollerista. Kokonaiskustannuksia voidaan pienentää huomattavasti vähentämällä hieman mittatarkkuutta jättämällä kosteussensori pois tai toteuttamalla se jollain vaihtoehtoisella tavalla. Koska myös mikrokontrolleri syö suuren osan kokonaiskustannuksista on suunniteltava kustannustehokkaampi versio, jossa pyritään toteuttamaan samat ominaisuuden mahdollisimman edullisella mikrokontrollerilla, esim. ATMega48, jonka hinta on noin puoleta ATMega 164P:n hinnasta. Kokonaiskustannuksiin vaikuttaa myös huomattavasti tuotantomäärät.

Mikäli 100 kappaleen sijasta tuotetaan 1000 kappaletta tuotetta, putoavat yksittäisen laitteen komponenttikulut 50-75 %.

(31)

6. JOHTOPÄÄTÖKSET

Kaasuilmaisimen yleinen toiminnallisuus on testattu toimivaksi. Imaisin tunnistaa ilman epäpuhtauksia ja ilmaisee konsentraation ledeillä ja äänimerkeillä niin kuin pitää. Ilmaisimen herkkyyttä on vielä hienosäädettävä optimoimalla sopiva herkkyystaso kaasulle ja muutettava ohjelmallisesti konsentraation raja-arvoja.

Seuraava tärkeä kehitysvaihe on saada piiri mahtumaan mahdollisimman pienelle pii- alalle käyttäen pintaliitoskomponentteja, jolloin minimoidaan valmistuskustannukset.

Samoin kontrollerin valintaan on kiinnitettävä entistä suurempaa huomiota.

6.1 Jatkokehitystä

Kaasuilmaisinta on helppo kehittää hyvin monipuolisesti eteenpäin. Nykyiseen versioon voi lisätä esim. LCD-näytön tuomaan laitteelle selkeän käyttöliittymän ja esim. graafisen mittaustuloksen. Ilmaisimeen voisi lisätä myös tehdasasetuksilla erilaisia kalibrointeja, jolloin voidaan mitata tarkemmin käyttäjän erikseen valitsemia kaasuja ja yhdisteitä. Valikoita ohjataan LCD näytöltä.

Kaasuilmaisinyksikköä voidaan kehittää myös hoitamaan pientaloasumisen ilmanvaihtoa. Näin voidaan parantaa sisäilmanlaatua ja asumismukavuutta huomattavasti. Pientaloversiossa sensoriyksiköitä on useampia, ja ne on yhdistetty esimerkiksi sarjakaapelilla keskusyksikköön, joka ohjaa talon ilmanvaihtoa. Tässä tapauksessa sensoriyksiköt mittaavat ilmanlaatua, kosteutta ja lämpötilaa.

Käyttöliittymä voidaan toteuttaa esim. PC-pohjaisesti tai seinässä olevalla ohjausyksiköllä.

Edelleen laajentamalla käyttökohteita, ilmaisin voi toimia teollisuuden ilmanvaihdon ohjauksessa. Tällöin keskusyksikkö on yhteydessä sensoriyksikköihin kenttäväylän välityksellä. Valvomossa käyttöä hallitaan graafisella PC-pohjaisella käyttöliittymällä.

(32)

LÄHTEET

Arnold S. Berger, Embedded Systems Design: An Introduction to Processes, Tools &

Techniques, 2002 ISBN: 1-57820-073-3

Frank Vahid / Tony Givargis, Embedded System Design: A Unified Hardware/Software Introduction

IBM [viitattu 13.8.2010]. Online

www.ibm.com/developerworks/rational/library/769.html

Jari Koskinen, Mikrotietokonetekniikka: Sulautetut järjestelmät, 2004 ISBN: 951-1-19063-6

Jean J. Labrosse, MicroC/OS-II The Real-Time Kernel, 2002 ISBN:1-57820-103-9

Juhani Almiala, Mikrotietokoneen ohjelmointi ja 8085 – Assembler, 1985 ISBN: 951-794-216-8

Sisäilmayhdistys ry [viitattu 13.8.2010]. Online

www.sisailmayhdistys.fi (-> Terveelliset tilat -> Sisäilmasto -> Perustietoa) Työterveyslaitos OVA-ohjeet [viitattu 13.8.2010]. Online

www.ttl.fi/ova/

Wayne Wolf, Computers as Components: Principles of Embedded Computing System Design 2001, ISBN 1-55860-394-9

W.Bolton, Microprocessor systems, 2000 ISBN: 0-582-41881-X

(33)

LIITTEET

Liite 1, Piirilevy

(34)

Liite 2. Kytkentäkaavio

(35)

Liite 3. Ohjelmakoodi

/********************************************************************

*

* Project: Portable gas detector

* Author: Sten Tamberg

* Date: 29.09.2010

* Version: 1.0 (proto)

* Chip: Atmega324p

*

********************************************************************/

#define F_CPU 8000000UL

#define TIMER1_ON TCCR1B|=(1<<CS12)|(1<<CS11)|(1<<CS10) //Counting from T1 pin

#defineTIMER1_OFF TCCR1B&=~(1<<CS12)&~(1<<CS11)&~(1<<CS10)

#define TIMER2_ON TCCR2B|=(1<<CS22)|(1<<CS21) // prescaler 256

#define TIMER2_OFF TCCR2B&=~(1<<CS22)&~(1<<CS21)&~(1<<CS20)

#include <avr/io.h>

#include <util/delay.h>

#include <avr/interrupt.h>

void buzzer(void);

void ledit(uint8_t lkm);

void beep(uint16_t time);

void pwm_init(void);

void timer0_init(void);

void timer1_init(void);

void timer2_init(void);

void ac_init(void);

void limits_1(float value);

void limits_2(float value);

volatile uint8_t lkm=0, calc_flag=0, buzzer_flag=0, delay;

volatile uint8_t mode=0x00 , alarm_enabled=0xFF;

volatile uint16_t t_hydro=0;

volatile float hydro, value;

int main(void){

//Disable interrupts cli();

(36)

//Initialize timers and AC timer0_init();

timer1_init();

timer2_init();

ac_init();

//Defining port directions DDRA=0xF0;

DDRB=0x00;

DDRC=0xFF;

DDRD=0xFF;

//Defining ports PORTA=0xA0;

PORTB=0x00;

PORTC=0x00;

PORTD=0xFF;

//Cutting edge initializion in progress effect PORTC=0x00;

_delay_ms(500);

PORTC=0xFF;

_delay_ms(500);

PORTC=0x00;

_delay_ms(500);

PORTC=0xFF;

_delay_ms(500);

buzzer();

//Enabling interrupts sei();

TIMER2_ON;

ACSR = 0x00;

while(1){

/************ Humidity test ********/

// PB2 as output DDRB |= _BV(2);

//Discharge capacitor PORTB &= ~_BV(2);

_delay_ms(100);

// PB2 as input, charge capacitor DDRB &= ~_BV(2);

(37)

t_hydro=0;

//while ac0 < ac1 while(!ACO) {

t_hydro++;

}

if(t_hydro >=0 && t_hydro <= 1200 ) //C~300pF -> H~5%

hydro=1;

if(t_hydro >=1201 && t_hydro <=1300) //C~320pF -> H~40%

hydro=1.5;

if(t_hydro >=1301 && t_hydro <= 1500) // C~350pF -> H~95%

hydro=2;

/************* sensor selection by button ***********/

if (PINA & (1<<PA2)) {

// Unbounce _delay_ms(40);

//Toggle transistors state PORTA^=_BV(PA5);

PORTA^=_BV(PA4);

//Change the operation mode mode= ~(mode);

//Lock input time _delay_ms(300);

}

/********** alarm_enable selection by button *******/

if (PINA & (1<<PA3)) {

// Unbounce _delay_ms(40);

//Change the state of alarm_enabled alarm_enabled = ~(alarm_enabled);

PORTA ^= _BV(6);

//Lock input time _delay_ms(300);

}

/********************* Flags *********************/

(38)

//Buzz if flag set if(buzzer_flag) {

buzzer();

}

//Compare to limits, when calc_flag set if(calc_flag)

{

value = value / hydro;

if (!mode) limits_1(value);

if(mode)

limits_2(value);

}

/**************** Controlling the buzzer period **********/

unsigned char valot=PORTC;

switch(valot) {

case 0x07:

//Set timer 0 compare limit to:

OCR0A=0xFE;

break;

case 0x0F:

OCR0A=0xFE;

break;

case 0x1F:

OCR0A=0x8F;

break;

case 0x3F:

OCR0A=0x2F;

break;

case 0x7F:

OCR0A=0x0A;

break;

case 0xFF:

OCR0A=0x05;

break;

(39)

default:

OCR0A=0xFF;

} }

return 0;

}

/*******************************************************/

/*** FUNCTIONS ***/

/*******************************************************/

/*************** Buzzer function *************/

void buzzer(void) {

int i=0;

for(i=0;i<=100;i++) {

PORTA |= _BV(PA7);

_delay_us(125);

PORTA &= ~_BV(PA7);

_delay_us(125);

}

buzzer_flag=0;

}

/******************** Analog comparator **********************/

void ac_init(void) // initialize analog comparator {

ACSR |= ~(1<<ACD) | (1<<ACIE); // analog comparator & ac interrupt enable

}

/********************* Timer 0 Initializion ******************/

(40)

void timer0_init(void) //8-bit timer, enables the TIMER0_COMPA &

TIMER0_COMPB interrupt vector {

TCCR0A |= (1<< WGM01); // Clear timer on compare match

TIMSK0 |= (1<<OCIE0A); //Output Compare Match A/B Interrupt Enable TCCR0B |= (1<<CS02) | (1<<CS01) | (1<<CS00); // From T0 pin, clock on rising edge.

}

/******************** Timer 1 Initializion ******************/

void timer1_init(void) {

TIMER1_ON;

}

/******************** Timer 2 Initializion ******************/

void timer2_init(void) {

TCCR2A |= (1<<COM2A0); // toggle OC2A on compare match TIMSK2 |= (1<<TOIE2); //Timer Overflow Interrupt Enable TIMER2_ON;

}

/************************* LED Driver ************************/

void ledit(uint8_t lkm) {

_delay_ms(50);

if(lkm==0) PORTC=1<<0;

else

PORTC |= 1<<(lkm);

return;

}

/*************************** Limits ****************************/

void limits_1(float value) {

(41)

if(value >= 32025 && value <= 66000) PORTC= 0xFF;

if(value >= 16013 && value <= 32024) PORTC= 0x7F;

if(value >= 12010 && value <= 16012) PORTC= 0x3F;

if(value >= 8007 && value <= 12009) PORTC= 0x1F;

if(value >= 4004 && value <= 8006) PORTC= 0x0F;

if(value >= 2001 && value <= 4003) PORTC= 0x07;

if(value >= 1001 && value <= 2000) PORTC= 0x03;

if(value >= 0 && value <= 1000) PORTC= 0x01;

// return;

}

void limits_2(float value) {

if(value >= 8025 && value <= 66000) PORTC= 0xFF;

if(value >= 6013 && value <= 8024) PORTC= 0x7F;

if(value >= 5010 && value <= 6012) PORTC= 0x3F;

if(value >= 4007 && value <= 5009) PORTC= 0x1F;

if(value >= 3004 && value <= 4006) PORTC= 0x0F;

if(value >= 2001 && value <= 3003) PORTC= 0x07;

if(value >= 1001 && value <= 2000) PORTC= 0x03;

if(value >= 0 && value <= 1000) PORTC= 0x01;

// return;

}

/********************** Interrupt vectors *****************/

ISR(TIMER0_COMPA_vect) {

if(alarm_enabled) {

if(OCR0A!=0xFF) buzzer_flag=1;

} }

ISR(TIMER2_OVF_vect) {

TIMER1_OFF;

TIMER2_OFF;

uint8_t low_byte;

(42)

uint16_t high_byte;

//The first 8-bits of the result low_byte = TCNT1L;

//Last 8-bits

high_byte = TCNT1H;

//Shifting high byte left and combining two values to get full 16-bit result value=(high_byte<<8 | (low_byte));

//Setting the calc_flag calc_flag=1;

TCNT1=0x0000;

TIMER1_ON;

TIMER2_ON;

}

/***************************** E O F ******************************/

Viittaukset

LIITTYVÄT TIEDOSTOT

Sähköverkkoon liitetyn aurinkosähköjärjestelmän suunnittelussa on otettava huo- mioon standardeja, lakeja ja määräyksiä, jotka koskevat muun muassa järjestelmän

Maksimaalisen hyödyn saamiseksi aurinkosähköjärjestelmän suunnittelussa tulee ottaa huomioon järjestelmän oikea mitoitus käyttötarpeen mukaan sekä varmistaa paneeliston

Ensimmäisen järjestelmän suunnittelu alusta loppuun on aikaa vievää, mutta se kannat- taa, koska saatuja tuloksia voidaan hyödyntää seuraavissa vastaavissa

(Aurinkosähköjärjestel- mien suunnittelu ja toteutus 2021, 67) Laskelmassa käytetään hintana 1800 e/kWp. Laskennan perusteella 10 vuoden laina-ajalla kyseisen

Kuorma määrää paneelin jännitteen ja tässä tapauksessa kuviosta 6 voidaan lukea, että suurin teho saadaan kun kuorman resistanssi on noin 6 Ω.. Parhaan

Kolmannen vaihtoehdon UPS-laitteiston fyysinen koko on paljon suurempi kuin ensimmäisen ja toisen, koska kolmannen vaihtoehdon UPS-laitteistoon tulee mukaan erillinen akus- to,

Moottoritehon laskemisen jälkeen lasketaan akustolta vaadittava teho, joka on taajuus- muuttajan välipiirin tarvitsema teho

Jakob Nielsen (4, s. 26) määrittelee käytettävyyden osatekijöiksi opittavuuden, tehokkuuden, muistettavuuden, käyttäjien tekemien virheiden vähyyden ja