JÄNNITEOHJATTU PULSSINLEVEYSMODULAATIO



Samankaltaiset tiedostot
6.2. AVR_rauta. Analogia-komparaattori-ohjelmointia , pva

Successive approximation AD-muunnin

Signaalien datamuunnokset. Näytteenotto ja pito -piirit

S Elektroniikan häiriökysymykset. Laboratoriotyö, kevät 2010

Arduino. Kimmo Silvonen (X)

Taitaja2005/Elektroniikka. 1) Resistanssien sarjakytkentä kuormittaa a) enemmän b) vähemmän c) yhtä paljon sähkölähdettä kuin niiden rinnankytkentä

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Jukka Helle

6. Analogisen signaalin liittäminen mikroprosessoriin Näytteenotto analogisesta signaalista DA-muuntimet 4

A/D-muuntimia. Flash ADC

P I C A X E O H J E L M O I N T I

Signaalien datamuunnokset

Tekniikka ja liikenne (5) Tietoliikennetekniikan laboratorio

1. Yleistä. 2. Ominaisuudet. 3. Liitännät

Ohjelmistoradio. Mikä se on:

1 YLEISTÄ. Taitaja2002, Imatra Teollisuuselektroniikkatyö Protorakentelu 1.1 PROJEKTIN TARKOITUS

Mikrokontrollerit. Mikrokontrolleri

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. FT Ari Viinikainen

1 Muutokset piirilevylle

Arduino. Kimmo Silvonen (X)

Flash AD-muunnin. Ominaisuudet. +nopea -> voidaan käyttää korkeataajuuksisen signaalin muuntamiseen (GHz) +yksinkertainen

6.1. AVR_rauta. ADC-ohjelmointi pva, kuvat jma

- Käyttäjä voi valita halutun sisääntulon signaalin asetusvalikosta (esim. 0 5V, 0 10 V tai 4 20 ma)

LUMA SUOMI -kehittämisohjelma LUMA FINLAND -utvecklingsprogram LUMA FINLAND development programme Ohjelmointia Arduinolla

- Käyttäjä voi valita halutun sisääntulon signaalin asetusvalikosta (esim. 0 5V, 0 10 V tai 4 20 ma)

Taitaja semifinaali 2010, Iisalmi Jääkaapin ovihälytin

Flash AD-muunnin. suurin kaistanleveys muista muuntimista (gigahertsejä) pieni resoluutio (max 8) kalliita

S Elektroniikan häiriökysymykset. Laboratoriotyö 1

KÄYTTÖOHJE. M2M Point - to - Point

ELEC-C5070 Elektroniikkapaja (5 op)

OPERAATIOVAHVISTIN. Oulun seudun ammattikorkeakoulu Tekniikan yksikkö. Elektroniikan laboratoriotyö. Työryhmä Selostuksen kirjoitti

OMNIA OPINNÄYTETYÖ AMMATTIOPISTO. Diginoppa ICTP09SLG OMNIAN AMMATTIOPISTO

Arduino. Kimmo Silvonen (X)

Kontrollerin tehonsäätö

7.3. Oheisrautaa. DS

6.3. AVR_rauta. EEPROM-muisti pva

PM10OUT2A-kortti. Ohje

Perusmittalaitteet 2. Yleismittari Taajuuslaskuri

11. kierros. 1. Lähipäivä

CLPD ja FPGA piirien arkkitehtuuri ja ominaisuudet

Jussi Klemola 3D- KEITTIÖSUUNNITTELUOHJELMAN KÄYTTÖÖNOTTO

Testidatan generointi

Kojemeteorologia. Sami Haapanala syksy Fysiikan laitos, Ilmakehätieteiden osasto

Elektroniikkalajin semifinaalitehtävien kuvaukset

6.6. Ajastin/laskuri - Timer/Counter pva, kuvat jma

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Mikro-ohjain µc harjoitukset - yleisohje

ELEC-A4010 Sähköpaja Arduinon ohjelmointi. Peter Kronström

NiMH Laturi. Suunnittelu Olli Haikarainen

S85 laseretäisyysanturi

Vahvistimet. A-luokka. AB-luokka

PR SARJA ASENNUS JA KYTKENTÄ

TIEP114 Tietokoneen rakenne ja arkkitehtuuri, 3 op. Assembly ja konekieli

Sähköpajan elektroniikkaa

TIETOKONETEKNIIKAN LABORAATIOT V2.0 VHDL ohjelmoinnin perusteet

Taitaja2007/Elektroniikka

KOHINASALPAKORTTI BX58 JA RX58

A / D - MUUNTIMET. 2 Bittimäärä 1. tai. A / D muunnin, A/D converter, ADC, ( Analog to Digital Converter )

Sulautettujen järjestelmien kilpailutehtävä

Projektityöt. Sami Alaiso, Jyri Lujanen 30. marraskuuta 2009

Väylään liitettävä laite: Pheonix Contact ILB PB DI8 DIO8

Multivibraattorit. Bistabiili multivibraattori:

HUOM! Tämä on vain pikaohje. Manuaalissa tarkemmat tiedot turvamääräyksistä, vaatimuksista ja asennuksesta sekä kytkennästä.

Sami Tikkanen kwh-mittaus kylmälaitoksesta

Supply jännite: Ei kuormaa Tuuletin Vastus Molemmat DC AC Taajuus/taajuudet

ELEKTRONIIKAN PERUSTEET

Anturit ja Arduino. ELEC-A4010 Sähköpaja Tomi Pulli Signaalinkäsittelyn ja akustiikan laitos Mittaustekniikka

LABORATORIOTYÖ 3 VAIHELUKITTU VAHVISTIN

DC-moottorin pyörimisnopeuden mittaaminen back-emf-menetelmällä

Varauspumppu-PLL. Taulukko 1: ulostulot sisääntulojen funktiona

Semifinaalin ennakkotiedot Ohjelmat

Tehtävä 5. ECIO dataloggeri lämpötila-anturilla

KÄYTTÖOHJE PEL 1000 / PEL 1000-M

Näppäimistö CT Käyttäjäopas. Global Safety & Security Solutions Oy info@globalsafety.fi. CT1000v.5

EVTEK/ Antti Piironen & Pekka Valtonen 1/6 TM01S/ Elektroniikan komponentit ja järjestelmät Laboraatiot, Syksy 2003

JOHDATUS ELEKTRONIIKKAAN. Oppitunti 2 Elektroniikan järjestelmät

Akkujen aktiivinen balansointi

TIES530 TIES530. A/D-muuntimet. Mikrokontrollerit - arkkitehtuuri. Mikrokontrollerit - arkkitehtuuri. A/D- ja D/A-muuntimet

9.6 Kannettava testilaite

AUTO3030 Digitaalitekniikan jatkokurssi, harjoitus 2, ratkaisuja

GALVAANISEN EROTTIMEN KÄYTTÖ

Mikkelin ammattikorkeakoulu Tarkk` ampujankuja 1 PL 181, MIKKELI KÄYTTÖOHJEET: FLUKE Networks IntelliTone 200 Toner ja Probe

Ongelma(t): Mistä loogisista lausekkeista ja niitä käytännössä toteuttavista loogisista piireistä olisi hyötyä tietojenkäsittelyssä ja tietokoneen

HARJOITUSTYÖ: LabVIEW, Kiihtyvyysanturi

AS Servotekniikka Seminaariesityksen kirjallinen versio, mikrokontrollerit

Digitaalinen potentiometri Catalyst CAT5401

Arduino ohjelmistokehitys

S14 09 Sisäpeltorobotti AS Automaatio ja systeemitekniikan projektityöt. Antti Kulpakko, Mikko Ikonen

Nopea tiedonkeruulaitteisto radiokanavamittauksiin

PR SARJA ASENNUS JA KYTKENTÄ

HARJOITUSTYÖ: LabVIEW, Liiketunnistin

Piirien väliset ohjaus- ja tiedonsiirtoväylät H. Honkanen

BL40A17x0 Digitaalielektroniikka A/B: Ohjelmoitavat logiikkapiirit

Tehokas ledivalaisin 30 valkoisella ledillä. Käyttöjännite 12 20V. Nimellisvirta on noin 0.10A A Suunnittelija Mikko Esala.

Tietorakenteet ja algoritmit

TAITAJA 2007 ELEKTRONIIKKAFINAALI KILPAILIJAN TEHTÄVÄT. Kilpailijan nimi / Nro:

ELEKTRONIIKAN PERUSTEET T700504

IIZE3010 Elektroniikan perusteet Harjoitustyö. Pasi Vähämartti, C1303, IST4SE

LHV325 Ohjelmoinnin perusteet. WorkBook. Jussi Tapio Kuosa

Operaatiovahvistimen vahvistus voidaan säätää halutun suuruiseksi käyttämällä takaisinkytkentävastusta.

Teekkareiden Juomapeli

Transkriptio:

JÄNNITEOHJATTU PULSSINLEVEYSMODULAATIO Atmel ATmega8 mikro-ohjaimella LAHDEN AMMATTIKORKEAKOULU Tietotekniikan koulutusohjelma Tietokone-elektroniikka Opinnäytetyö Kevät 2009 Joonas Lehtinen

Lahden ammattikorkeakoulu Tietotekniikan koulutusohjelma LEHTINEN, JOONAS: Jänniteohjattu pulssinleveysmodulaatio ATmega8 mikro-ohjaimella Tietokone-elektroniikan opinnäytetyö, 35 sivua, 9 liitesivua Kevät 2009 TIIVISTELMÄ Tässä opinnäytetyössä käsitellään jännitteellä ohjatun pulssinleveysmodulaatiopiirin suunnittelemista, valmistamista sekä piirin testausta. Piiri on suunniteltu ja tehty kevään 2009 aikana Lahdessa toimivalle koulutuskeskus Salpaukselle opetuskäyttöön. Työssä perehdytään pulssinleveysmodulaation toimintaan, työssä käytetyn Atmega8 mikro-ohjaimen tärkeimpiin ominaisuuksiin ja perehdytään laitteiston suunnitelemisessa ja valmistamisessa käytettyihin menetelmiin. Lopuksi valoitetaan projektin toteutuksen onnistumista ja testaustuloksia. Onko jotain parannettavaa ja miten laite toimii. Avainsanat: PWM, pulssinleveysmodulaatio, Atmega8, piirilevysuunnittelu

Lahti University of Applied Sciences Faculty of Technology LEHTINEN, JOONAS: Voltage controlled pulse-width modulation Using ATmega8 microcontroller Bachelor s Thesis in Computer Electronics, 35 pages, 9 appendixes Spring 2009 ABSTRACT This Bachelor s thesis deals with design, production and testing of voltage controlled pulse-width modulation circuit. Circuit is designed and produced in spring 2009 to Salpaus further education for teaching purposes. In this thesis introduces the function of pulse-width modulation, the main features of Atmega8 micro-controller that is used on this project and introduce the methods used to design and produce the circuit. At the end of the thesis the results of the project and tests are described. How does the appliance work and what whould be done better. Key words: PWM, pulse-width modulation, Atmega8, PCB design

SISÄLLYS 1 JOHDANTO 1 2 SUUNNITTELUMENETELMÄT 2 2.1 Työssä käytetyt materiaalit 2 2.2 Työssä käytetyt menetelmät 2 2.2.1 Cadsoft Eagle layout editor 5.4 2 2.2.2 CodevisionAVR 3 2.2.3 National instruments Multisim 10.1 4 2.2.4 Atmel AVR studio 4 5 3 PULSSINLEVEYSMODULAATIO 7 3.1 A/D muunnos 8 3.2 Open collector-ulostulo 8 3.3 TTL-ulostulo 9 4 ATMEGA8 MIKRO-OHJAIN 9 4.1 Ominaisuudet 10 Liitännät 11 5 PROJEKTI 15 5.1 Toiminnan kuvaus 15 5.2 Toteutus 19 5.3 Mittaustulokset ja testaus 26 6 YHTEENVETO 33 LÄHTEET 35 LIITTEET 36

1 JOHDANTO Tämä opinnäytetyö käsittelee jänniteohjatun pulssinleveysmodulaatiopiirin suunnittelua ja toteutusta Lahdessa toimivalle koulutuskeskus Salpaukselle, jossa laite tulee opetuskäyttöön. Samalla käsitellään työssä käytettyjä suunnittelumenetelmiä, ohjelmistoja, projektissa käytetyn mikro-ohjaimen kriittisiä ominaisuuksia ja projektin onnistumista. Nykypäivänä pulssinleveysmodulaatio on yleisesti käytetty ohjausmenetelmä esimerkiksi sähkömoottottorien ohjauksessa, koska energiatehokkuus on yhä enemmän yksi merkittävimmistä laitteistosuunnittelulähtökohdista. Pulssinleveysmodulaatiolla saadaan huomattavasti hyötysuhteeltaan parempia järjestelmiä kuin normaaleilla resistanssiin perustuvilla menetelmillä. Pulssinleveysmodulaatio voidaan toteuttaa monella eri tavalla, tässä työssä pulssinleveysmodulaatio toteutetaan mikro-ohjain pohjaisella ratkaisulla. Työn tärkeimmät vaiheet ovat piirikaaviosuunnittelu, piirilevysuunnittelu, mikroohjaimen ohjelmointi, fyysinen toteutus ja valmiin laitteiston testaus. Sähköisinä vaatimuksina projektissa oli että se sisältää: - kaksi sisääntulokanavaa 0-10Vdc - kaksi open collector lähtöä 24Vdc - kaksi TTL tasoista lähtöä - lähtöjen tilan indikointi LEDillä - tarvittavat testipisteet mittauksia varten - 24Vdc käyttöjänniteen

2 2 SUUNNITTELUMENETELMÄT 2.1 Työssä käytetyt materiaalit Työssä käytin Atmelin valmistamaa ATmega8 mikro-ohjainta ohjaamaan sisääntulevia signaaleita ja tuottamaan pulssinleveysmodulaation. 7805- jänniteregulaattoria käytettiin tuottamaan mikro-ohjaimelle reguloitu käyttöjännite ja TIP31CG-transistoreja käytettiin tuottamaan open-collector lähtö. Peruselektroniikkakomponentteja käytettiin alipäästösuodattimeen, jänniteen rajoittamiseen ja häiriönpoistoon. Kaikki komponentit olivat läpijuotettavaa mallia. Piirilevy tuli suunnitella DIN-kiskomoduuliin sopivaksi. Piirilevy myös toteutettiin koulutuskeskus Salpauksen piirilevyn syövytyslaitteistolla. 2.2 Työssä käytetyt menetelmät Työn suunnitteleminen toteutettiin kokonaan tietokoneella erilaisilla suunnitteluohjelmistoilla. Myös kytkentöjen ja ohjelmiston testaus tapahtui erilaisilla simulaattoreilla ennen varsinaista toteutusta. 2.2.1 Cadsoft Eagle layout editor 5.4 Piirikaavio- ja piirilevysuunnittelu tuli toteuttaa Cadsoftin Eagle layout editor 5.4- ohjelmistolla. Cadsoft Eagle layout editor koostuu kolmesta päämodulista, joita ovat piirikaaviosuunnittelu, piirilevysuunnittelu ja autorouter. Eagle layout editor on ohjelmisto, josta saa ilmaisen version ladattua internetistä; rajoituksina ilmaisessa versiossa on, että piirilevyalue on rajoitettu 100 x 80 mm alueelle, siinä on mahdollista suunnitella kaksi signaalikerrosta, ja työhön voi tehdä ainoastaan yhden piirikaavion. Rajoituksista huolimatta ohjelmisto oli sopiva työn suunnittelemiseen. EAGLE on akronyymi sanoille Easily Applicable Graphical Layout Editor. (CadSoft Computer Inc. 2009.) Kuviossa 1 on Eagle layout editorin käyttöliittymä.

3 KUVIO 1. Eagle layout editor 5.4 (Lehtinen 2009) 2.2.2 CodevisionAVR ATmega8 prosessoreiden ohjelmoinnin toteutin CodevisionAVR Evaluation V2.03.9-ohjelmistolla. CodevisionAVR on erityisesti Atmelin tuotteille suunnattu ohjelmointityökalu, joka tukee lähes kaikkia Atmelin prosessoreita. Ohjelmointikieli, jota ohjelma käyttää, on C. Codevisionissa on myös valmiiksi joitakin hyödyllisiä porttien alustuksia, jotka generoidaan uutta projektia aloittaessa. CodevisionAVR on suosituin kaupallinen C-kääntäjä Atmelin AVRtuotteille (HP InfoTech. 2008) Kuviossa 2 on CodevisionAVR:n käyttöliittymä.

4 KUVIO 2. CodevisionAVR (Lehtinen 2009) 2.2.3 National instruments Multisim 10.1 National Instrumentsin Multisim 10.1 on ohjelmisto elektroniikkakytkentöjen testaamiseen. Multisimistä löytyy erittäin laaja valikoima komponentteja, niitä on yli 16000( National Instruments. 2009.). National Instrumentsin internetsivuilta on ladattavissa Multisim10.1:n kokeiluversio, jota hyödynsin tässä työssä analogiaelektroniikan komponenttien testaukseen ja kytkentöjen suunnittelemiseen. Kuviossa 3 on Multisimin käyttöliittymä.

5 KUVIO 3. Multisim 10.1 (Lehtinen 2009) 2.2.4 Atmel AVR studio 4 Atmelin AVRstudio 4 on ohjelmointityökalu AVR-ohjelmien kirjoittamiseen ja testaamiseen. Ohjelma sisältää kääntäjän ja simulaattorin, jolla voi simuloida ohjelmaa, ohjelmointikielinä AVR-studio tukee C:tä, Pascalia, BASICia ja Assemblya. AVR-studiolla on myös mahdollista muodostaa yhteys kehityspiireihin, esimerkiksi STK-500:aan, joka mahdollistaa piirien vaivattoman ohjelmoinnin ja testaamisen. Atmel AVR-studio tukee kaikkia atmelin AVR -laitteita. Atmel AVR studio:n voi ladata ilmaiseksi Atmelin internetsivuilta. (Atmel Corporation 2009.) Kuviossa 4 on AVR-studion käyttöliittymä.

KUVIO 4. Atmel AVR studio 4 (Lehtinen 2009) 6

7 3 PULSSINLEVEYSMODULAATIO Pulssinleveysmodulaatio on modulointitapa, jolla muutetaan vakiotaajuisen signaalin pulssin leveyttä. Pulssin leveyttä moduloimalla pystytään muuttamaan kuormaan vaikuttavaa tasajännitettä: mitä pitemmän aikaa pulssi on johtavassa tilassa, sen suurempi analogiajännite saadaan ulostuloon. Pulssinleveysmodulaatiossa säädetään vain pulssisuhdetta, joka tarkoittaa johtavan ajan suhdetta jakson aikaan, eli johtavan ja ei-johtavan ajan summaan. Pulssinleveysmodulaation hyötysuhde on suuri verrattuna tavalliseen resistanssiin perustuviin ohjausmenetelmiin, koska ulostulo on joko johtavassa tilassa tai estää virran kulun kokonaan. Tämä tekee myös pulssinleveysmodulaatiosta erittäin ekologisen ratkaisun. Pulssinlevysmodulaatiota käytetään yleisesti sähkömoottoreiden ohjaamiseen hyötysuhteensa johdosta. Kuviossa 5 on kuvattu jännitteen aaltomuotoa 50%, 75% ja 25% pulssisuhteella. KUVIO 5. Pulssinleveysmodulaatio (Adler & Surtell 2003)

8 3.1 A/D-muunnos Kun analogista signaalia halutaan käsitellä mikro-ohjaimella, tulee se ensin muuntaa digitaaliseen muotoon käyttäen analog to digital (A/D) muunnosta. Nykyaikaisissa mikro-ohjaimissa tämä A/D muunnin on integroituna, jolloin se pienentää kytkennässä käytettävien komponenttien lukumäärää. Tässä projektissa käytin Atmega8 mikro-ohjainta jossa on myös sisäänrakennettuna 8-kanavainen A/D-muunnin, joka mahdollistaa 8 eri A/D-muunnosta yhtäaikaisesti. Myös mikro-ohjaimen ohjelmointi helpottuu sisäisen A/D-muuntimen ansiosta. A/D-muunnosta tehdessä prosessorille syötetään referenssijännite, joka on muunnoksen maksimiarvo. Kun prosessorille syötetään digitaaliseksi muunnettava analogiasignaali prosessori muuntaa tämän signaalin digitaaliseksi arvoksi, jonka arvo riippuu analogiasignaalin ja referenssisignaalin suhteesta toisiinsa. 8-bittisessä muunnoksessa maksimiarvo, jonka A/D-muunnos voi saavuttaa, on 0xFF, joka vastaa desimaaleina numeroa 255. 3.2 Open collector-ulostulo Open collector ulostulo on usein käytetty ulostulomenetelmä sulautetuissa järjestelmissä. Open collectorin periaate on että mikropiiriltä ulos tulevaa jännitettä joka on hyvin pieni, ei käytetä suoraan, vaan se johdetaan NPNtyyppisen transistorin kantaan base. Emitter on kytketty maahan. Kolmanteen liittimeen eli collectoriin tuodaan haluttu jännite, jota ohjataan maatasoon Basekantaan tulevalla signaalilla. Kuviossa 6 on esitetty NPN-transistorin piirrosmerkki ja fyysinen muoto TO-220 kannalla Eagle-layouteditorissa.

9 KUVIO 6. NPN transistori Eagle layout editorissa TO-220 kannalla (Lehtinen 2009) 3.3 TTL-ulostulo TTL eli transistor transistor logic on digitaalielektroniikassa käytetty menetelmä, jonka käyttöjännite on 5V. TTL:ssä käytetään biopolaarisia transistoreita ja vastuksia tuottamaan digitaalista ulostuloa, jossa 0-0.8v vastaavat digitaalista 0 tilaa, ja kun ulostulo on 2.2-5v, se vastaa digitaalista 1 tilaa. Tässä työssä Atmega8 mikro-ohjainta käytetään 5 voltin reguloidulla jännitteellä. Koska mikro-ohjaimen käyttöjännite määrää myös mikro-ohjaimen antaman ulostulojännitteen, voidaan siis Atmega8 ulostuloja käyttää tuottamaan TTLtasoista jännitettä, eikä ulkoista elektroniikkaa tarvita. Jos kuorma olisi suuri, tulisi ulostulossa käyttää esimerkiksi komparaattoria vakaamaan jännite. 4 ATMEGA8 MIKRO-OHJAIN Atmelin valmistama ATmega8 on vähän tehoa vaativa CMOS 8-bittinen mikroohjain, joka pohjautuu AVR RISC -arkkitehtuuriin. Suorittamalla tehokkaita käskyjä yhdellä kellojaksolla. ATmega8 saavuttaa lähes 1MIPS suorituskyvyn per MHz antaen täten suunnittelijan optimoida tehon kulutuksen ja suorituskyvyn sovellukseen sopivaksi (ATmega8 datasheet 2007.). 4.1 Ominaisuudet

10 8-bittinen Atmega8 mikro-ohjaimen pääominaisuudet ovat: kaksi 8-bitistä laskuria, yksi 16-bittinen laskuri, reaaliaikalaskuri, kolme PWM kanavaa, 8- kanavainen A/D-muunnin 10-bitin tarkkuudella, ja sisäinen analogia komparaattori. Atmega8 mikro-ohjaimessa on 23 ohjelmoitavaa I/O-liitäntää.

11 Liitännät KUVIO 7. Atmega8 PDIP-liitännät (ATmega8 datasheet 2007) ATmega8 mikro-ohjaimessa on kolme porttia PB, PC ja PD, joiden ominaisuudet eroavat toisistaan. Kuviossa 7 on ATmega8 PDIP-liitännät.

12 Portti B on 8-bittinen kaksisuuntainen I/O portti sisäisillä ylösveto vastuksilla. Riippuen kellon määrittelystä, PB6:ta voidaan käyttää sisääntulona kääntävälle oskilaattorivahvistimelle ja sisääntulona sisäisen kellon ohjauspiirille. Port B:llä on myös muita erikoisominaisuuksia, jotka ovat kuvattu taulukossa 1. (ATmega8 datasheet 2007). TAULUKKO 1. Port B erikoisominaisuudet (ATmega8 datasheet 2007) Portti C on 7-bittinen kaksisuuntainen I/O-portti sisäisillä ylösvetovastuksilla. PC6 voidaan käyttää I/O-porttina tai RESET:inä. On huomioitava että sähköiset vaatimukset eroavat muista Portti C:n pinneistä jos sitä käytetään I/O-porttina. RESET:inä käytettäessä on annettu minimi pulssinipituus, joka takaa resetin toiminnan, nämä arvot ovat kuvattu taulukossa 2. (ATmega8 datasheet 2007). TAULUKKO 2. Reset:in toiminnan takaavat arvot (ATmega8 datasheet 2007)

13 Portti D on 8-bittinen kaksisuuntainen I/O portti sisäisillä ylösvetovastuksilla. Port D:llä on myös erikoisominaisuuksia jotka ovat kuvattu taulukossa 3. (ATmega8 datasheet 2007). TAULUKKO 3. Port D erikoisominaisuudet (ATmega8 datasheet 2007) AVcc on A/D muuntimen käyttöjänniteen sisääntulo Portille C(3..0), ja ADC(7..6). Tämä pinni tulee kytkeä Vcc nastaan, vaikka ADC:tä ei käytettäisikään. Jos ADC:tä käytetään, Avcc pinni tulee kytkeä Vcc pinniin alipäästösuodattimen läpi. AREF on analoginen referenssi pinni A/D muuntimelle.(atmega8 datasheet 2007).

KUVIO 8. Atmega8 lohkokaavio (ATmega8 datasheet 2007) 14

15 5 PROJEKTI 5.1 Toiminnan kuvaus Piiriin syötetään 24Vdc käyttöjännite logiikalta, joka muunnetaan 5Vdc reguloimattomaksi jännitteeksi A/D-muuntimen referenssiä varten. Tämän jännitteen voisi myös reguloida tarpeen mukaa, jotta saataisiin erittäin tarkka A/D-muunnos. Koska tässä työssä haluttu tarkkuus toteutuu myös ilman regulaatiopiiriä, se jätettiin pois. KUVIO 9. Reguloimaton 5Vdc (Lehtinen 2009) 24Vdc-käyttöjännite muutetaan myös 5Vdc-reguloiduksi jännitteeksi mikroohjaimen käyttöjännitettä varten, jännitteen regulointi on toteutettu 7805 jänniteregulaattorilla. Tämä mikro-ohjaimen käyttöjännite on hyvä reguloida, koska logiikkapiiriltä syötettävä 24Vdc on noin-arvo, eli se ei ole kovinkaan tarkka. Regulaatiopiiri 7805 pitää ulostulevan jännitteen 5Vdc- vaikka sisääntuleva jännite huojahtelisi. On myös tärkeää syöttää mikro-ohjaimeen 5Vdckäyttöjännite, koska tämä määrää I/O porttien ulostulojännitteen. Kuviossa 10. on esitetty jännitteen reguloinnin kytkentä.

16 KUVIO 10. Jännitteen regulointi jossa VI on noin 24vdc ja VO 5Vdc (Lehtinen 2009) 24Vdc-käyttöjännite tuodaan myös muuntamattomana open-collector-lähtöä varten. Tämä liitäntä on tehty ajatellen käytettävyyttä ja mahdollistaa sen, ettei ulkoista virtalähdettä tarvita ohjaamaan open-collector lähdön laitetta, mutta halutessa on myös mahdollista käyttää ulkoista virtalähdettä. Piirin ADC0- ja ADC1-liitännät ovat 0-10Vdc A/D-muunnoksen sisääntuloja. Nämä sisääntulot rajoitetaan 5Vdc ennen mikro-ohjainta. Näillä sisääntuloilla ohjataan lähtöjen OSC1A ja OSC1B tuottaman PWM-signaalin pulssinleveyttä. Pulssinleveys määräytyy A/D-muunnoksen tuloksen mukaan, joka taas määräytyy ADC0- ja ADC1-suhteesta A/D-muuntimen referenssijännitteeseen(aref). Eli mitä suurempi jännite tuodaan ADC0- ja ADC1- pinneihin, sen suurempi on A/D-muunnoksen tulos. OSC1A ja OSC1B PWM-ulostulot on kytketty kahteen eri tyyppiseen lähtöön jotka eroavat huomattavasti toisistaan. Lähtöjen tyypit ovat open-collector ja transistor transistor logic (TTL). TTL-tasoinen lähtö saadaan suoraan mikro-ohjaimen OSC1A ja OSC1B:stä, koska mikro-ohjain on kytketty 5Vdc-reguloituun käyttöjännitteeseen, joka määrää I/O-porttien ulostulojännitteen. TTL-ulostulojen viereen on myös tuotu

17 erilliset maatasoliittimet helpottamaan liitettävän laitteen kytkemistä. TTLulostulossa tämä on lähes välttämätön. Kuviossa 11 on esitetty TTL-ulostulo. KUVIO 11. TTL-ulostulo (Lehtinen 2009) Open-collector lähtö on toteutettu syöttämällä mikro-ohjaimesta TTL-tasoinen ohjausjännite NPN tyyppisiin transistoreihin, jotka toimivat kytkimien tapaan. Tämä lähtö toimii 24Vdc jännitteellä. Kummassakin lähdössä on LED-indikointi, joka ilmaisee lähtöjen tilan. Kuviossa 12 on esitetty open-collector-ulostulo.

18 KUVIO 12. Open-collector ulostulo(lehtinen 2009) Koska laite tulee opetuskäyttöön on piirilevyssä STK-200 ohjelmointiliitin, joka mahdollistaa helpon liitettävyyden tietokoneeseen ilman piirin irroittamista piirilevyltä. Tämä on käytännöllinen tehdessä piirillä ohjelmointiharjoituksia. Tämän takia piirissä on myös ulkoinen 8Mhz kellokide, joka varmistaa toiminnan, jos ohjelmoitaessa mikro-ohjain menee tilaan, jossa se käyttää ulkoista kellolähdettä. Vielä varalta kellokiteen lisäksi on mahdollista liittää ulkoinen oskilaattori tuottamaan kellosignaalia piirille. Kuviossa 13 on esitetty STK-200- liitin ja reset.

19 KUVIO 13. STK-200 liitin ja reset (Lehtinen 2009) 5.2 Toteutus Projektin toteutus alkoi tutustumalla menetelmiin, joilla voitaisiin toteuttaa jännitteellä ohjattu pulssinleveysmodulaatio. Vaihtoehtoina olivat joko komparaattoreilla toteuttaminen tai mikro-ohjain pohjainen vaihtoehto. Päädyin käyttämään mikro-ohjain pohjaista ratkaisua, jotta projekti olisi mielenkiintoisempi kuin suhteellisen yksinkertainen komparaattoriratkaisu. Kun toteutustapa oli tiedossa, alkoi tutustuminen Atmel ATmega8 mikroohjaimen ominaisuuksiin. Tämä mikro-ohjain oli jo entuudestaan tuttu, koska olin koulussa aiemmin suunnitellut joitakin projekteja myös kyseiselle mikroohjaimelle. Projekti on hyvä aloittaa tutustumalla Atmelin ATmega8 datalehtiin jotka ovat ladattavissa Atmelin internetsivuilta. Datalehdistä saa tietää kaiken siitä, miten mikro-ohjain toimii ja mitä se vaatii toimiakseen. ATmega8 on hyvin monipuolinen mikro-ohjain, josta datalehdistä lötyy tietoa yli 300 sivun verran. Kiinnostuksen kohteena näissä datalehdissä olivat lähinnä A/D-muunnin ja PWMsignaalin generointi sekä se, mistä ulostuloista PWM-signaalin voi saada. Datalehdistä löytyy myös valmistajan suosittelemia menetelmiä, jotka takaavat oikean toiminnan, esimerkiksi Avcc-pinnin alipäästösuodattimen kytkemisestä, joka on esitetty kuviossa 14.

20 KUVIO 14. AVcc kytkentä (ATmega8 datasheet 2007) Seuraavaksi tuli kartoittaa projektissa tarvittavat liitännät, joita olivat käyttöjännite, kaksi AD-muunnos sisääntuloa, kaksi open-collector ulostuloa, kaksi TTL tasoista ulostuloa ja STK-200 ohjelmointiliitin. Näiden tietojen perusteella tuli tutustua, miten nämä liitännät tulisi toteuttaa. Kun tiedot näistä liitännöistä oli saatu, voitiin aloittaa itse piirikaavion suunnitteleminen. Myös mikro-ohjaimen ohjelmointi voitiin aloittaa, kun tiedettiin, mitä signaalia mihinkin liittimeen olisi tulossa. Piirikaaviota suuniteltaessa tuli huomioida millä kannalla osa on, ja koska Eagle layout editorissa on valtava komponenttikirjasto, oli oikean komponentin etsiminen hankalaa. Tässä vaiheessa on myös helppo tehdä virheitä, jotka vaikuttavat olennaisesti itse piirilevyyn. Kuviossa 15 on esitetty projektin piirikaaviosuunitelma versio 1.1.

21 KUVIO 15. Projektin piirikaavio versio 1.1 (Lehtinen 2009) Ohjemoitaessa Atmega8 prosessoria tuli ensin tutustua tarvittaviin rekistereihin. CodevisionAVR, jota käytin ohjelmoinnissa, sisältää codewizard-toiminnon, joka generoi tarvittavat alustukset käyttötarkoituksen mukaan. Ne valitaan halutunlaisiksi codewizardin asetuksista. Tässä työssä codewizardia käytettiin generoimaan Timer/counter1, ADC ja Port B:n alustukset. Koodin toimintaperiaate on että Timer/counter1 laskee 0xFF (255 desimaaleissa) asti minkä jälkeen se aloittaa laskemisen alusta: tätä ohjelma tekee jatkuvasti. Ohjelmassa on kaksi unsigned char-tyyppistä muuttujaa, ADC1 ja ADC2, jotka saavat arvonsa sisääntulevien jännitteiden mukaan, kuitenkin saavuttaen maksimissaan arvon 0xFF(255). Kun ohjelma huomaa, että ADC-muuttujien arvo on sama kun Timer/counter1, ulostulot muuttavat tilaansa. Ulostuloiksi on asetettu ohjelmassa PWM ulostulot, jotka ovat Timer/counter1:lle PB1 ja PB2. Kuviossa 16 on esitetty koodin toimintaperiaate.

22 KUVIO 16. C ohjelman toimintaperiaate (Lehtinen 2009) CodevisionAVR ohjelmassa ei ole omaa simulointiominaisuutta, joten koodin toimivuus tuli testata muulla ohjelmalla. Atmelin AVRstudio 4 on yhteensopiva CodevisionAVR:n kanssa, ja suoritin koodin simuloinnin tällä ohjelmalla. AVRstudio:n mukaan ohjelmakoodi oli toimiva. Kun piirikaavio oli suunniteltu voitiin aloittaa piirilevysuunnittelu, tässä vaiheessa jokaiselle komponentille suunnitellaan oma sijainti piirilevyllä ja reititetään fyysiset kytkennät. Komponentteja on projektissa sen verran, ettei yksipuoleinen piirilevy riittänyt. Jotta vältyttäisiin päällekkäin meneviltä johdotuksilta, tuli piirilevystä tehdä kaksikerroksinen. Kuviossa 16 on esitetty piirilevysuunitelma, jossa näkyvät piirilevyn molempien kerroksien reititykset (LIITE 1 ja LIITE 2) ja

23 komponenttien asettelu (LIITE 3). Kuviossa 17 punainen väri tarkoittaa piirilevyn yläkerroksen ja sininen alakerroksen johdinten reititystä. KUVIO 17. Piirilevysuunnitelma, jossa reititykset ja komponenttien asettelu (Lehtinen 2009) Piirilevyn valmistus toteutettiin koulutuskeskus Salpauksen piirilevynsyövytyslaitteistolla, joka sisältää piirilevyn valotuskoneen (Kuvio 18) ja syövytyslaitteiston (Kuvio 19).

24 KUVIO 18. Piirilevyn valotuskone (Lehtinen 2009) KUVIO 19. Piirilevyn syövytyslaitteisto (Lehtinen 2009)

25 Ennen kuin piirilevyä voidaan aloittaa valmistaa, tulee piirilevysuunnitelma tulostaa kerroksittain kalvoille. Tulostaessa piirilevysuunitelmaa tulee Eagle layout editorin tulostusasetuksista valita black ja solid (Kuvio 20). KUVIO 20. Tulostusasetukset (Lehtinen 2009) Ensimmäistä piirilevyä syövyttäessä edellä mainitut vaihtoehdot eivät olleet valittuna jonka johdosta valotuksessa esiintyi ongelma: Piirilevyä syövyttäessä piirilevy syöpyi toiselta puolelta nopeammin kuin toiselta, joten piirilevystä tuli käyttökelvoton. Päädyin vaihtamaan johtimien paksuutta vielä ennen seuraavaa syövytyskertaa, joka varmistaisi onnistuneen lopputuloksen, syövytys onnistuikin toisella syövytyskerralla. Liitteessä 6 on syövytetty piirilevy. Kun piirilevy oli syövytetty tuli komponenttien jalkojen paikat ja läpiviennit porata levyyn, mikä tapahtui pienellä pystyporakoneella. Tämän jälkeen komponentit voitiin sijoitella paikoilleen osasijoittelukuvan (LIITE 3) perusteella, minkä jälkeen komponentit kiinnitettiin kolvaamalla. 5.3 Mittaustulokset ja testaus

26 Mittaamisessa ja testaamisessa käytetyt laitteet: Multisim 10.1, Fluke 179 yleismittari ja Agilent Technologies MSO6032A oskiloskooppi Jännitteen reguloinnin testauksen toteutin Multisim 10.1 ohjelmistolla ennen toteuttamista. Kuviossa 21 on esitetty jännitteen reguloinnin testauskytkentä ja kuviossa 22 mittaustulokset. KUVIO 21. Jännitteen reguloinnin testauskytkentä (Lehtinen 2009)

27 KUVIO 22. Jännitteen reguloinnin mittaustulokset (Lehtinen 2009) Kun osat oli juotettu paikoilleen, piiri tuli silmämääräisesti tarkastaa kylmäjuotosten varalta. Silmämääräisen tarkastuksen jälkeen päätin käydä piirilevyn kytkennät läpi yleismittarin johtavuus ominaisuutta käyttäen, periaate tässä ominaisuudessa on, että mittari antaa äänimerkin, kun komponenttien välillä on yhteys. Tämä menetelmä on hyödyllinen, jos halutaan varmistaa kytkentöjen toimivuus ja helpottaa seuraavia mahdollisia vianmäärityksiä. Tässä vaiheessa testausta löytyikin kytkentöjä, joiden kytkennät eivät johtaneet. Kuviossa 23 on esitetty kytkentöjen testauskokoonpano.

28 KUVIO 23. Kytkentöjen testauskokoonpano (Lehtinen 2009) Ohjelmiston testauksen toteutin Atmelin AVR studiolla, jonka mukaan koodi toimisi halutulla tavalla. Kuviossa 24 on esitetty ohjelmakoodin testausjärjestelyt. Liitteessä 5 on projektissa käytetty c-koodi.

29 KUVIO 24. Ohjelman testaus (Lehtinen 2009) Kun ohjelmakoodi oli todettu toimivaksi AVR-studiolla, kytkennät oli testattu silmämääräisesti ja yleismittarilla voitiin laitteeseen ladata ohjelma, ensimmäistä kertaa ohjelmoitaessa mikro-ohjainta käytin ohjelmointialustana STK-500:aa. Ohjelmakoodia ladatessa huomasin että työstä puuttui jännitteen rajoittamiset Aref ja ADC pinneille, joihin ei voida suoraan tuoda 10Vdc-jännitettä rikkomatta mikro-ohjainta, tästä johtuen vaihdoin 10Vdc-jännitteenjakopiirin vastukset tuottamaan 5Vdc-referenssijännitteen, ja lisäsin myös ADC pinneille vastukset rajoittamaan jännitteen maksimissaan 5Vdc.

30 KUVIO 25. Laitteiston testikokoonpano (Lehtinen 2009) Kun tarvittavat muutokset oli tehty, voitiin laitteeseen kytkeä virta. Ensimmäisellä koekerralla laitteen käyttöjännitteen ilmaiseva LED syttyi, mutta ulostulot antoivat vain erittäin heikkoa PWM-signaalia eivätkä ulostulojen tilaa indikoivat ledit syttyneet. Tämä vika johtui open-collector-lähtöjen base-kannan ohjausjännitteen ohjautumisesta suoraan transistorin maatasoon. Vika korjattiin lisäämällä vastukset ennen kummankin transistorin base kantaa. Tämän jälkeen vika korjautui ja laite antoi ulos 5Vdc pulssia. Laite ei kuitenkaan toiminut vielä halutulla tavalla: ADC-ohjausjännitettä kasvattaessa pulssinleveys saavutti maksimiarvonsa jo 2.5Vdc jännitteellä vaikka tämän olisi pitänyt tapahtua vasta 10Vdc jännitteellä. Tämä vika diagnosoitiin olevan A/D-muuntimen ohjelmakoodissa. Ohjelmakoodista olikin unohtunut asettaa A/D-muunnin käyttämään ainoastaan 8 eniten merkitsevää bittiä, korjattuani tämän laite alkoi toimia halutulla tavalla. Kuvioissa 25 on esitetty laitteiston testauskokoonpano ja kuvioissa 26 ja 27 on esitetty TTL-ulostulojen mittaustulokset eri ADCjännitteillä. Kuvioissa 28 ja 29 on esitetty open-collector ulostulojen mittaustulokset.

31 KUVIO 26. TTL- ulostulon mittaustulokset eri ADC jännitteillä (Lehtinen 2009) KUVIO 27. TTL-ulostulon mittaustulokset eri ADC jännitteillä (Lehtinen 2009)

32 KUVIO 28. Open-collector ulostulon mittaustulokset eri jännitteillä (Lehtinen 2009) KUVIO 29. Open-collector ulostulon mittaustulokset eri jännitteillä (Lehtinen 2009)

33 6 YHTEENVETO Tässä opinnäytetyössä tarkoituksena oli suunnitella ja rakentaa jänniteohjattu pulssinleveysmodulaatiopiiri. Työssä keskeisimpänä sisältönä olivat piirikaaviosuunnittelu, piirilevysuunnittelu, ohjelmakoodin ohjelmointi, laitteiston rakentaminen ja testaus. ATmega8 mikro-ohjain, AD-muunnos ja pulssinleveysmodulaatio esiteltiin aluksi, jotta lukia saa käsityksen työssä käytetyistä komponenteista ja menetelmistä. Samalla tuotiin julki suunnittelemiseen käytetyistä ohjelmistoista. Piirikaavion suunnitteleminen onnistui halutulla tavalla, ainoana takaiskuna oli ADC- ja Vref-jännitteiden rajoittamiseen liittyvien kytkentöjen poisjääminen. Havainnon jälkeen laitteeseen lisättiin jälkikäteen jännitteen rajoittimet. Piirilevysuunnitelma toteutettiin myös onnistuneesti. Piirilevysuunnitelman suunnittelemisessa parannettavaa olisi piirilevyn yläkerroksien johdinten läpivienti alakerrokseen ennen komponenttia, mikä helpottaisi huomattavasti komponenttien paikalleenasettelua. Ohjelmakoodi saatiin laitteeseen suunniteltua onnistuneesti. Kun ohjelmakoodi oltiin ladattu laitteeseen voitiin laiteen toimivuus testata Laitteelle suoritetut testit osoittivat, että mikro-ohjain ohjaa pulssinleveyttä halutulla tavalla ja että laite toimii moitteettomasti. Projekti kokonaisuutena oli haasteellinen, mutta se saatiin onnistumaan halutulla tavalla asetetussa aikataulussa. Tämän laitteen käyttökohteet ovat lähes rajoittamattomat, ja se tuokin laitteelle myös lähes rajoittamattomat jatkokehitysmahdollisuudet: työtä voidaan käyttää alustana esimerkiksi erilaisten mootoreiden ohjauksessa, valaistuksen säätämisessä, anturitiedon ohjaamiseen. Ainoastaan ohjelmakoodia muuttamalla laitteen toimintaa voidaan muuttaa erilaisiin käyytötarkoituksiin sopivaksi.

34

35 LÄHTEET Atmel Corporation. 2009. Atmel Products Tools & Software. Atmel Corporation. [viitattu01.04.2009]. Saatavissa: http://www.atmel.com/dyn/products/tools_card.asp?tool_id=2725 Atmel Corporation. 2007 High-performance, Low-power AVR 8-bit Microcontroller ATmega8 datasheet. Atmel Corporation. [viitattu01.04.2009]. Saatavissa: http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf CadSoft Computer Inc. 2009. Home of the EAGLE Layout Editor. Cadsoft Computer Inc. [viitattu01.04.2009]. Saatavissa: http://www.cadsoftusa.com/info.htm HP InfoTech. 2008. Development Tools for Microcontrollers, C Compilers, In- System Programmers. HP InfoTech. [viitattu01.04.2009]. Saatavissa: http://www.hpinfotech.ro/ Michael Adler, Tim Surtell. 2003. Pulse Width Modulation. Michael Adler, Tim Surtell. [viitattu01.04.2009]. Saatavissa: http://www.eleinmec.com/article.asp?28 National Instruments. 2009. Products and Services. National Instruments. [viitattu01.04.2009]. Saatavissa: http://www.ni.com/multisim/ LIITTEET LIITE 1

36 LIITE 2 LIITE 3

LIITE 4 37

LIITE 5 38

39 /***************************************************** Project : Voltage controlled pulse-width modulation Version : 2.0 Date : 6.4.2009 Author : Joonas Lehtinen Company : Comments: Chip type : ATmega8 Program type : Application AVR Core Clock frequency: 8,000000 MHz Memory model : Small External RAM size : 0 Data Stack size : 256 *****************************************************/ #include <mega8.h> #include <delay.h> #define FIRST_ADC_INPUT 0 #define LAST_ADC_INPUT 1 unsigned char adc_data[last_adc_input-first_adc_input+1]; #define ADC_VREF_TYPE 0x20 // ADC interrupt service routine // with auto input scanning interrupt [ADC_INT] void adc_isr(void) { static unsigned char input_index=0;

40 // Read the 8 most significant bits // of the AD conversion result adc_data[input_index]=adch; // Select next ADC input if (++input_index > (LAST_ADC_INPUT-FIRST_ADC_INPUT)) input_index=0; ADMUX=(FIRST_ADC_INPUT (ADC_VREF_TYPE & 0xff))+input_index; // Delay needed for the stabilization of the ADC input voltage delay_us(10); // Start the AD conversion ADCSRA =0x40; } // Declare your global variables here unsigned char ADC1; unsigned char ADC2; void main(void) { // Declare your local variables here // Input/Output Ports initialization // Port B initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=Out Func1=Out Func0=In // State7=T State6=T State5=T State4=T State3=T State2=0 State1=0 State0=T PORTB=0x00; DDRB=0x06; // Port C initialization // Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTC=0x00;

41 DDRC=0x00; // Port D initialization // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T PORTD=0x00; DDRD=0x00; // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: Timer 0 Stopped TCCR0=0x00; TCNT0=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 1000,000 khz // Mode: Fast PWM top=00ffh // OC1A output: Non-Inv. // OC1B output: Non-Inv. // Noise Canceler: Off // Input Capture on Falling Edge // Timer 1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=0xA1; TCCR1B=0x0A; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00;

42 OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 2 initialization // Clock source: System Clock // Clock value: Timer 2 Stopped // Mode: Normal top=ffh // OC2 output: Disconnected ASSR=0x00; TCCR2=0x00; TCNT2=0x00; OCR2=0x00; // External Interrupt(s) initialization // INT0: Off // INT1: Off MCUCR=0x00; // Timer(s)/Counter(s) Interrupt(s) initialization TIMSK=0x00; // Analog Comparator initialization // Analog Comparator: Off // Analog Comparator Input Capture by Timer/Counter 1: Off ACSR=0x80; SFIOR=0x00; // ADC initialization // ADC Clock frequency: 62,500 khz // ADC Voltage Reference: AREF pin // Only the 8 most significant bits of

43 // the AD conversion result are used ADMUX=FIRST_ADC_INPUT (ADC_VREF_TYPE & 0xff); ADCSRA=0xCF; // Global enable interrupts #asm("sei") while (1) { #asm ("cli") ADC1 = adc_data[0]; #asm ("sei") OCR1AH = (unsigned char)(adc1 >> 8); OCR1AL = (unsigned char)(adc1 & 0xff); #asm ("cli") ADC2 = adc_data[1]; #asm ("sei") OCR1BH = (unsigned char)(adc2 >> 8); OCR1BL = (unsigned char)(adc2 & 0xff); } };