Taitaja semifinaali 2010, Iisalmi Jääkaapin ovihälytin Ohjelmointitehtävänä on laatia ohjelma jääkaapin ovihälyttimelle. Hälytin toimii 3 V litium paristolla ja se sijoitetaan jääkaapin sisälle. Hälyttimen anturina toimii LDR vastus. Kun jääkaapin ovi on kiinni, kaapin sisällä on pimeää. Kun ovi on auki, kaapin sisällä loistaa valo, jonka laitteen LDR vastus havaitsee. Kun jääkaapin ovi avataan, laitteen ledin tulee vilahtaa 50 ms ajan 3 sekunnin välein. Ledin tarkoituksena on pääasiassa osoittaa, että laite toimii ja sen paristo on kunnossa. Kun jääkaapin ovi on jäänyt liian kauaksi aikaa auki, laite alkaa toistaa hälytysääntä. Hälytysääni on kaksi 0,1 s piippausta joiden välissä on 0,1 s tauko. Tätä hälytysääntä toistetaan niin kauan, kunnes jääkaapin ovi suljetaan. Tehtävässä annetut ajat ovat ohjeellisia, niistä voidaan poiketa ±20 %. Kuva 1. laitteen toiminta. Hälyttimen kytkentäkaavio on esitetty tehtäväpaperin liitteenä. Kytkennästä näkyy, mihin ATtiny25 mikroohjaimen liitäntöihin on liitetty anturina käytetty LDR vastus, ledi ja piezo summeri. Em. komponenttien toimisuunta pitää päätellä kytkentäkaaviosta tai selvittää mittaamalla/kokeilemalla. Laitteen mikro ohjaimeen ei ole kytketty ulkoista kidettä tai oskillaattoria, joten mikro ohjainta tahdittaa sen sisäinen RCoskillaattori (piirin oletus). Nyt käytössä oleva laite on ns. tuotekehittelyprototyyppi. Lopullinen laite pitää luonnollisesti koteloida ja laitteen piirilevy suunnitellaan kotelon asettamien mittojen mukaan. Lopullisessa versiossa ei tietysti ole enää ohjelmointiliitintä ja piirilevyn komponentit tulevat olemaan tuotannollisista syistä pintaliitoskomponentteja. Laitteen paristona olevan 3 V litium pariston kapasiteetti on vain 25 mah. Jos laite toimisi mikro ohjaimen sisäisen RC oskillaattorin 1 MHz taajuudella koko ajan aktiivisena (virran kulutus n. 2,5 ma), laite toimisi paristolla korkeitaan 10 tuntia! Mikäli se vilkuttaisi lediä ja hälyttäisi summerilla, käyttöaika olisi vielä pienempi. Siksi lopulliseen ohjelmaan tulee sisällyttää mikro ohjaimen asettaminen Power down virransäästötilaan, missä koko laitteen virrankulutus on noin 2 µa ja tällöin laitteen toiminta aika yli yhden vuoden.
Ohjelmointitehtävä, ohjelmointi 1. Tee ensin pieni testiohjelma, joka vilkuttaa jotenkin kortilla olevaa lediä. Näytä kilpailun valvojalle, että ole saanut laadittua testiohjelman, ladattua sen kortille ja se toimii kortillasi (ohjelman kehitysympäristösi on kunnossa ja osaat käyttää sitä). Tästä saa jo ensimmäiset pisteet. 2A. Tee jääkaapinovihälytin kortille ohjelma, joka vilauttaa laitteen lediä joka 3 s välein (50 ms vilaus), jos kaapin ovi on auki jos kaapin ovi on ollut yhtämittaisesti auki vähintään 15 s, ledin vilkutus loppuu ja laitteen piezosummeri piippaa kaksi kertaa (0,1 s pituista piippausta, joiden välissä on 0,1 s välinen aika) 3 s välein (ks. kuva 1) äänimerkkiä toistetaan jatkuvasti, jos jääkaapin ovi on auki ohjelma ei saa tehdä mitään muita toimintoja, kuin mitä edellä on määritelty! ledin vilkkumisväli ja piezo summerin piippaus väli pitää määritellä ohjelmassa vakiona, jotta sen arvo voitaisiin helposti muuttaa lopullista ohjelmaa varten 2B. (Mukautettu suoritus) Mikäli et saa tehtyä kohdassa 2A määriteltyä tehtävää, voit silti saada pisteitä tekemällä jommankumman seuraavista ohjelmista. Ensimmäinen on helpompi ja toinen on vaikeampi. Toisesta saat enemmän pisteitä kuin ensimmäisestä vilkuttaa laitteen lediä epäsymmetrisesti, esim. 0,1 s vilaus 3 s välein vilkuttaa laitteen lediä epäsymmetrisesti, esim. 0,1 s vilaus 3 s välein, jos laitteen LDR näkee valoa Kun olet valmis, näytä tehtävän valvojalle, että ohjelmasi toimii määritellyllä tavalla. Talleta lopuksi ohjelmasi lähdekielinen tiedosto muistitikulle ja anna se tehtävän valvojalle. Nimeä tiedosto: Etunimi_Sukunimi.c Esim. August_September.c
Ohjelmointitehtävä, teoria osa Nimi: Pisteet: Koulu: Vastaa sopivassa seuraaviin ohjelmointitehtävään liittyviin kysymyksiin. Katso samalla laitteen kytkentäkaaviota, osa kysymyksistä selviää sen avulla. ATtiny25 mikro ohjaimessa on vain yksi I/O liitäntäportti, jossa on kuusi liitäntää. Näistä vain viittä (PB0 PB4) voidaan käyttää käytössämme olevilla ohjelmointilaitteilla tuloina tai lähtöinä. I/O portin bittien suunnat määritellään rekisterillä DDRB. Rekisterin bitin arvo 0 tarkoittaa tuloa ja 1 tarkoittaa lähtöä. DDRB PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 0 0 0?? 0? 0 Ne bitit, jotka eivät ole käytössä tai ei käytetä (esim. ohjelmointiliitännän bitit jätetään tuloiksi), arvoksi asetetaan nolla (tulo). Muut bitit pitää asettaa kytkennän mukaan tuloksi (0) tai lähdöksi (1). 1. Kirjoita C kielinen lause, joka asettaa DDRB rekisterille tehtävässä tarvittavan arvon. Rekisterin arvo pitää antaa C kielen syntaksin mukaisena heksalukuna. PORTB rekisterissä annetaan lähtöjen kohdalle lähtöbitin tila mikro ohjaimen käynnistettyä (0 = lähtö alatilassa, 1 = lähtö ylätilassa). Vastaavasti tulon kohdalla bitin tila vastaa tuloon kytkettävää ylösvetovastusta (0 = ylösvetovastus ei ole kytketty, 1 = ylösvetovastus on kytketty). Tässä tehtävässä kaikki lähdöt pitää asettaa siten, että ne eivät ole aktiivisessa tilassa (LED ei loista, piezosummeri ei soi). LDR vastukselle pitää kytkeä ylösvetovastus. Muut (käyttämättömät) liitännät ovat tuloja, joihin ei aseteta ylövetovastusta käyttöön. 2. Kirjoita C kielinen lause, joka asettaa PORTB rekisterille tehtävässä tarvittavan arvon. Rekisterin arvo pitää antaa C kielen syntaksin mukaisena heksalukuna.
3. Kirjoita C kielinen lause, jolla kytkennässä oleva ledi (LD1) saadaan loistamaan. 4. Kirjoita C kielinen lause, jolla verrataan, onko PB1 tulon tila alatilassa (LDR vastus) 5. Kirjoita C kielinen ohjelmanpätkä, joka vilkuttaa kytkennän lediä 5 kertaa. Ledin pitää loistaa 0,1 s ja vilkahdusten väli on 1 s. Kirjoita myös tarvittavien muuttujien tyyppi määrittelyt. Muuttujat pitää olla unsigned char tyyppiä (8 bittinen positiivinen luku). Palauta tämä kaksisivuinen vastauspaperi kilpailun valvojalle, kun olet vastannut kysymyksiin.