Jotta mikro-ohjainsovelluksissa päästäisiin haluttuihin lähtö- ja näyttöarvoihin, on tarpeen määrittää ensin ohjainpiirin kukin oheislaite vaiheittain. AD-muunnin, ajastimet sekä CCP- ja USART-yksiköt kannattaa konfiguroida ja toteuttaa askel kerrallaan ja liittää lopuksi yhteen.
Artikkelin kirjoittaja Mark Pallones toimii Microchip Technologyn MCU08-sovellustiimin vetäjänä. Hän tuli Microchipin palvelukseen vanhemmaksi sovellusinsinööriksi vuonna 2010. Nykyisessä tehtävässään Mark on toiminut syksystä 2013 lähtien. Aiemmin hän työskenteli esimerkiksi Emerson Network Powerilla suunnittelijana. Hänellä on elektroniikkainsinöörin tutkinto Manilan yliopistosta Filippiineillä. |
Saadakseen kaiken irti modernista mikro-ohjaimesta on varmistettava, että ohjainpiiriin integroidut oheislaitteet on määritetty oikein. Yleensä tämä vaatii etenemistä askel kerrallaan, ennen kuin kokonaisuus voidaan liittää yhteen.
Tämän ennakointi on erityisen tärkeää siinä vaiheessa, kun mikro-ohjainta valitaan, koska kunkin ohjaintyypin oheislaitteet soveltuvat parhaiten tiettyjen sovellusten erityistarpeisiin. Ellei tässä vaiheessa ole huolellinen, oheislaitteiden tehokkuus saattaa jäädä vajavaiseksi.
Hyvänä esimerkkinä voi tarkastella Microchipin keskitason 8-bittisten mikro-ohjainten perheitä PIC16F7X ja PIC16C7X. Näistä ensin mainittu on flash-tyyppinen piiriperhe ja jälkimmäinen tyypiltään kertaohjelmoitava (OTP). Niiden sisältämiä oheislaitteita ovat ajastimet, sieppaus-vertaus-tyyppiset (CCP) PWM-lohkot, AD-muunnin sekä USART-lähetin-vastaanotin.
AD-muunnin
ADC-yksikkö muuntaa analogisen tulosignaalin vastaavaksi 8-bittiseksi digitaalikoodiksi. Sisäisen näytteenotto- ja pitopiirin lähtö toimii tuloliitäntänä AD-muuntimelle, joka generoi tuloksen peräkkäisapproksimaation avulla. Analogiseksi vertailujännitteeksi voidaan ohjelmallisesti valita ohjainpiirin positiivinen syöttöjännite (VDD) tai jännitetaso piirin Vref-nastassa. AD-muunninta on mahdollista käyttää myös silloin, kun ohjainpiiri on lepotilassa. AD-muunnoksen toteutus on esitetty lohkokaaviona kuvassa 1.
Kuva 1: AD-muunnoksen toteutuksen lohkokaavio.
AD-muunnin koostuu kolmesta rekisteristä: kaksi ohjausrekisteriä ADcon0 ja ADcon1 sekä tulosrekisteri ADres. ADcon0 ohjaa muuntimen toimintaa. Sen avulla valitaan muunnoksen kellotaajuus ja analoginen kanava. Se myös määrittää muunnostapahtuman aloituksen ja lopetuksen. ADcon1 puolestaan määrittää liitäntänastojen toiminnot. Mikro-ohjaimella on joko viisi tai kahdeksan I/O-nastaa, jotka voidaan määrittää analogisiksi tulolinjoiksi.
Kun ADcon0 ja ADcon1 on määritetty, ADcon0-rekisterin go/done-bitti asetetaan ykköseksi, mikä käynnistää muunnoksen ja asettaa rekisterin valvomaan, milloin muunnos on saatu tehdyksi. Kun AD-muunnos on saatu valmiiksi, tulos ladataan ADres-rekisteriin, go/done-bitti nollataan ja keskeytyslippubitti (ADif) asetetaan ykköseksi.
Muunnoksen tuloksena saatu näytekoodi luetaan ADres-rekisteristä ja siirretään USART- sekä CCP-moduuleihin (Capture-Compare PWM). Vaihtaminen kahden analogisen tulokanavan välillä tapahtuu muuttamalla CHS2:CHS0-bittien arvoja ADcon0-rekisterissä. Kuvassa 1 nähdään vain analogiatulot AN1 ja AN0, mutta mitkä tahansa analogisista tulokanavista voidaan valita CHS2:CHS0-bittien avulla.
Ajastimet
Mikro-ohjaimissa on kolme ajastinlohkoa: timer0, timer1 ja timer2. Kukin niistä voi tuottaa keskeytyksen, kun jokin tapahtuma, kuten ajastimen ylivuoto, on ilmennyt. Timer0 on yksinkertainen 8 bitin ajastin-laskuri. Timer1 puolestaan on 16-bittinen ajastin-laskuri, joka koostuu kahdesta 8-bittisestä rekisteristä, jotka ovat tyypiltään luettavia ja kirjoitettavia.
Timer2 on 8-bittinen ajastin, joka sisältää esiskaalaimen, jälkiskaalaimen ja periodirekisterin. Käyttämällä esi- ja jälkiskaalainta enimmäisasetuksin, ylivuotoaika on sama kuin 16-bittisellä ajastimella. Timer2 toimii pulssinleveysmodulaation aika-akselina, kun CCP-moduulia käytetään PWM-toimintamuodossa.
PWM-muodossa täytyy määrittää timer2:n periodirekisteri (PR2) ja ohjausrekisteri (T2con) sekä PIR1-rekisteri. PWM-lähtö koostuu aika-akselista (periodi) ja käyttöjaksosta eli ajasta, jonka lähtö pysyy ylhäällä (duty cycle). PWM-taajuus on periodin käänteisarvo. PWM-periodi määritetään kirjoittamalla PR2-rekisteriin.
CCP-tyyppiset PWM-moduulit
Ohjaimet sisältävät kaksi sieppaus-vertaus-tyyppistä PWM-yksikköä. Kumpikin niistä koostuu 16-bittisestä rekisteristä, jotka voivat toimia 16-bittisenä sieppausrekisterinä, 16-bittisenä vertausrekisterinä tai 10-bittisenä isäntä-renki-tyyppisenä PWM-käyttöjaksorekisterinä. Yksiköt ovat toiminnoiltaan muuten identtiset, mutta poikkeavat toisistaan erityistapahtumien liipaisumahdollisuuksien osalta.
USART-yksikkö
Ohjaimen USART-lohko eli yleiskäyttöinen synkroninen/asynkroninen lähetin-vastaanotin on toinen kahdesta sarjamuotoisesta I/O-lohkosta - toinen on SSP eli synkroninen sarjaportti. USART-yksikköä kutsutaan myös nimellä SCI (Serial Communications Interface). Sen voi konfiguroida täysdupleksimuotoon asynkroniseksi järjestelmäksi, joka kommunikoi ulkoisten oheislaitteiden kuten näyttöpäätteiden ja PC-koneiden kanssa. Vaihtoehtoisesti sen voi määrittää puolidupleksimuotoon synkroniseksi järjestelmäksi, joka voi kommunikoida esimerkiksi ulkoisten AD- ja DA-muunninpiirien tai sarja-EEPROM-piirien kanssa.
Esimerkkiohjelmassa yksikkö on konfiguroitu täysdupleksimuotoon asynkroniseksi järjestelmäksi kommunikoimaan PC:n kanssa. Tässä USART-lohkoa käytetään vain lähettämiseen. Toimintaan tarvittavat rekisterit ovat baudinopeuden generointirekisteri SPBRG, lähetystila- ja valvontarekisteri TXSTA, vastaanottotila- ja valvontarekisteri RCSTA sekä lähetysdatarekisteri TXREG.
8-bittinen SPBRG-rekisteri ohjaa vapaasti juoksevan 8-bittisen ajastimen jakson pituutta. Asynkronisessa toimintamuodossa yksi bitti ohjaa myös baudinopeutta. Synkronisessa muodossa tämä bitti ei ole käytössä.
Asynkroninen toimintamuoto ja 8-bittinen lähetysmuoto valitaan TXSTA-rekisterissä. Sen 'lähetys sallittu' -bitti TXen mahdollistaa datan lähettämisen. Lähetyksen siirtorekisterin statusbitti TRMT on ainoastaan luettava bitti, joka ilmaisee lähetyksen siirtorekisterin (TSR) tilan. Lähetyksen käynnistämiseksi on RCSTA-rekisterin SPen-bitti (serial port enable) ensin asetettava ykköseksi. Lähetysdatarekisteriin TXREG kirjoittaminen käynnistää sen jälkeen lähetyksen. Esimerkkikoodissa AD-muunnoksen tulos kopioidaan TXREG-rekisteriin. Arvo siirretään automaattisesti siirtorekisteriin TSR ja edelleen ulos ohjainpiirin RC6/TX-nastan kautta.
Oheislaitteiden liittäminen
Sen jälkeen kun ohjainpiirin kukin oheislaite on määritetty, ne pitää liittää vielä yhteen. Esimerkkiohjelman koodiin kuuluva silmukkasegmentti osoittaa, miten oheislaitteet on liitetty toisiinsa. Määritys- ja liitäntäprosessit on koottu kiinteän ohjelman vuokaavioon kuvassa 2.
Kuva 2: Kiinteän ohjelmiston vuokaavio.
Kaikki I/O-liitännät täytyy ensin alustaa. Myös sarjaliitännät pitää sallia USART-lähetystä varten ja sen jälkeen määrittää oheislaitteet timer2, ADC, CCP ja USART. AD-muunninta varten valitaan vain yksi analoginen tulokanava määritysprosessin aikana. Ajastinyksikkö Timer2 sallitaan ja ohjelma alkaa kysyä lippubitin TMR2IF tilaa. Tämä bitti asettuu ykköseksi aina, kun rekisterien TMR2 ja PR2 sisällöt täsmäävät. Kun täsmäys havaitaan, TMR2IF-bitti asettuu, ja AD-muunnos aloitetaan.
Kun AD-muunnos on saatu valmiiksi, ohjelma tarkkailee TRMT-bitin asettumista. Se ilmaisee USART-yksikön TSR-rekisterin olevan tyhjä ja valmiina lähetykseen. Sen jälkeen AD-muunnoksen arvo kirjoitetaan TXREG- ja CCPR2L-rekistereihin. Tämän jälkeen valitaan seuraava analoginen kanava ja prosessi toistetaan. USART- ja CCP-yksiköiden lähdöt vastaanotetaan ja prosessoidaan ulkoisilla piireillä.
Piiritason laitteisto
Kuvassa 3 on esitetty mikro-ohjainlaitteisto piirikaaviona. Sen pohjana on osa PICDEM 2 Plus -demokortin piirikaaviosta lisättynä muutamilla oheiskomponenteilla.
Kuva 3: PIC16F7X- ja PIC16C7X-mikro-ohjainten demopiirikaavio.
Kytkemistä analogisten tulokanavien välillä demonstroidaan säätövastusten RP1 ja RP2 avulla. Näillä trimmereillä määrätään myös tulojännitteen taso, joka syötetään AD-muuntimelle. PWM-yksikön lähtönastaan RC1/CCP2 on kytketty ledi L1, joka on sarjassa virranrajoitusvastuksen R1 kanssa. Piiri U2 on RS232-sarjaliitännän linjaohjain, joka muodostaa sähköisen liitännän USART-yksikön ja sarjaporttiliittimen P1 välille.
Analoginen tulojännite syötetään AD-muuntimelle, joka muuntaa jännitteen vastaavaksi digitaaliseksi arvoksi. Jännite otetaan tulolinjasta AN0 tai AN1 riippuen analogisen tulokanavan määrittelystä. Digitaalinen tulos siirretään sekä USART- että CCP-yksiköille. USART lähettää tämän arvon sarjapääteohjelmalle, joka näyttää lähtöarvon tietyssä muodossa riippuen päätteen konfiguraatiosta. Lisäksi CCP-yksikön PWM-lohkossa voidaan muuttaa lähtöpulssin käyttöjaksoa (duty cycle) ja säätää näin ledin kirkkautta.
Sarjamuotoista lähetystä ja näyttöä varten USART-yksikön lähtö lähetetään sarjamuotoiselle pääteohjelmalle kytkemällä USB-to-UART-sarjamuunnin PICDEM 2 Plus -demokortin sarjaporttiliittimen ja PC:n USB-liittimen väliin, kuten kuvasta 4 nähdään. USB-to-UART-sarjamuuntimena voidaan käyttää esimerkiksi Microchipin MCP2200-muunninpiiriä.
Kuva 4: Sarjamuotoisen lähetyksen lohkokaavio.
Koska AD-muunnokseen käytetään kahta analogista kanavaa, myös PC:n näytöllä nähdään kaksi arvoa. Sarjamuotoista pääteohjelmaa käytetään sieppaamaan, ohjaamaan ja korjaamaan binäärimuotoista datavirtaa. Pääteohjelma pitää asettaa toimimaan 2400 baudin nopeudella, käyttämään kahdeksaa databittiä ja yhtä stop-bittiä sekä toimimaan 'ei pariteettia' -muodossa, jotta yhteensopivuus ohjelmallisten USART-määritysten kanssa saavutetaan. Näytettävä arvo voidaan esittää myös muissa numeerisissa esitysmuodoissa kuten ASCII-, ANSI-, heksadesimaali- tai binäärimuodossa sarjamuotoisen pääteohjelman ominaisuuksista riippuen.