Mikrokontrollerit

Perusteet

Mistä mikrokontorollerista kannattaisi aloittaa mikrokontrollerien kokeilu ?

Yleensä aloittelijan vaatimukseno on että kontrollereiden pitäisi olla mahdollisimman halpoja, niiden ohjelmoimiseen ei tarvita mitään kalliita ohjelmointilaitteita, ja niiden ei pitäisi vaatia paljonkaan oheiskomponentteja toimiakseen.

Yksi vaatimuksesi täyttävä on Motorolan 68HC11 perheen piirit. Niitä voi käyttää ihan single-chip modessa sisäisellä (E)EPROM:illa tai ulkoisella muistilla. Piirit eivät tarvitse mitään erillistä ohjelmointilaitetta, vaan ne voidaan ohjelmoida suoraan PC:n sarjaportista. Hinta riippuu sitten mallista. Saa my|s versioita, joissa on 8..10bit ADC. Toinen kiva on, että HC11 prosessorille löytyy vapasti saatava ihan toimiva C-kääntäjä. Kääntäjä löytyy vaikkapa nic.funet.fi:stä osoitteesta ftp://nic.funet.fi/pub/microprocs/68hc11/. Prossori-lehdessä on joitain vuosia sitten julkaistu 68HC11 exaluointikortin rakennusohjekin. 68HC11 aiheisia linkkejä löytyy osoitteesta http://www.epanorama.net/microprocessor.html.

Toinen helppo mikrokontrollerisarja ovat Microchipin PIC-sarjan mikrokontrollerit. Monissa PICeissä on sisäinen ohjelmamuisti, ja käskykannan pitäisi olla helposti opittavissa (vian parikymmetntä konekielikäskyä). Lisäksi netistä löytyy paljon esimerkkiprojekteja PIC-mikro-ohjaimille. Harrastajalle ehkä suositeltavin PIC on PIC16F84, koska se on monta kertaa ohjelmoitava (flash-ohjelmamuisti), sen saa toimimaan hyvin pienellä määrällä oheiskomponentteja ja se maksaa vaan pari kymppiä. PIC prosessorien ohjelmoimiseen tarvitaan ohjelmointilaite mutta sen voi helposti itse rakentaa (ohjeita allut mm. Elektorissa ja useilla PIC aiheisilla webbisivuilla). Ilmaisia ohjelmointityökalujakin PIC prosessoreille löytyy verkosta ihan kivasti. PIC aiheisia linkkejä löytyy osoitteesta http://www.epanorama.net/microprocessor.html.

8051-pohjaiset mikrokontrollerit ovat edelleenkin yksi kaikkein suosituin mikrokontrolleriryhmä. Erityisesti Atmelin valmistamat mallit ovat halpoja ja aiheeseen liityviä rakennusohjeita löytyy useilta webbisivuilta. Aiheeseen liittyvila linkkejä löytyy osoitteista http://www.epanorama.net/microprocessor.html.

Lisäksi on olemassa Atmelin AVR-risc-mikro-ohjaimet, joissa on sisäinen flash-muisti ja ohjelmointi tapahtuu SPI-tyylisellä sarjalinkillä.

Alla pieni vertailu eri mikrokontrolliperheistä:

Motorola 68HC11

+ yleisessä käytössä
+ softaa löytyy
+ C-kääntäjä löytyy ilmaiseksi
- vähän uudelleenohjelmoitavia malleja
- vanha arkkitehtuuri
- heikohko suorituskyky

Microchip PIC

+ paljon erilaisia malleja
+ softaa löytyy paljon
+ harrastelijoitten suosiossa
- vähän uudelleenohjelmoitavia malleja
- paljon erilaisia malleja
- ei-niin-viisas arkkitehtuuri

Intel MCS51

+ yleisessä käytössä
+ softaa löytyy paljon
+ harrastelijoittenkin suosiossa
+ monta valmistajaa, esim. Atmelilla kaikki uudelleenohjelmoitavia
- ei kovin suorituskykyinen
- vanha arkkitehtuuri
- ei ilmaista C-kääntäjää

Dallas 8051-perhe:

+ (katso Intel)
- (katso Intel, ei kuitenkaan hitaus)
- hinta

Atmel AVR

+ suorituskykyinen
+ edullinen
+ uusi arkkitehtuuri
+ assembler + sälää valmistajalta ilmaiseksi
+ kaikki mallit SPI:n kautta ohjelmoitavia (ISP)
+ ilmainen C-kääntäjä löytyy
- toistaiseksi vähän käytetty

Jos aiot kirjoittaa ohjelmasi konekielellä, käytännössä kaikkiin edellä mainittuihin prosessoriperheisiin löytyy assembler ilmaiseksi. Sen sijaan toimivaa C:tä löytyy harvemmin. Motorolaan löytyy ilmainen C-kääntäjä ja samoin PICiin. Inteliin ja AVR:ään sen ainakin joutuu ostamaan. Tosin esimerkiksi Micro-C lähtee kolminumeroisella hinnalla (markoissa).

Korkeamman tason kieliä ajatellen kaikki vanhemmat prosessorit ovat varsin tuskallisia (Intel, Motorola, PIC).

Jos meinaat kirjoittaa ohjelmasi C-kielellä ja tarvitset paljon vääntöä, niin sitten 68000-pohjainen kontrolleri on harkinnan arvoinen, koska sopii hyvin C-ohjelmointiin ja ilmainen gcc tukee ainakin 68k-pohjaisia prosessoreja. Esimerkiksi 68332 on erittäin mainio peli moneen tehoa vaativaan sovellukseen. Haittana näissä on harrastelijan kannalta ikävät kotelot (TQFP jne).

Miten mikrokontrollerin ohjelmointi tapahtuu ?

Ensiksi mikrokontrollerille kirjoitetaan ohjelma tarvittavilla ohjelmointityökaluilla, joista yleisimmät ovat assembler- ja C-kääntäjät. Näillä ohjelmointityökaluilla muodostetaan lähdekoodista itse mikro-ohjaimelle ladattavan binaarikoodin.

Tuon binaarikoodin lataamiseen mikro-ohjaimelle on tyypillisesti kaksi menetelmää:

  • 1. Jos mikro-ohjaimessa käytetään ulkoista ohjelmamuistia, kuten EPROM-muistia, ohjelmointi tapahtuu muistipiirien ohjelmointilaitteella. Tyypillisesti tällaiset laitteet maksavat tuhannesta tai parista ylöspäin.
  • 2. Jos mikro-ohjaimessa on sisäinen ohjelmamuisti EPROM, OTP-EPROM, EEPROM- tai Flash-muisti on olemassa yleensä kaksi tapaa.
    • a) Ohjelmointilaitteella:
      • Yleiskäyttöiset ohjelmointilaitteet (ovat yleensä kalliita)
      • Mikro-ohjainperhe kohtaiset (halpoja, hinnat alkaa satasita, joihinkin rakennusohjeita Internetistä). Näillä perhekohtaisilla ei voi tietenkään ohjelmoida kuin tiettyjä piirejä.
    • b) mikro-ohjain osaa tehdä ohjelmoinnin itse: Joissain mikro-ohjaimissa on nykyisin yleensä sarjaliitäntä (asynkroninen tai synkroninen), jonka avulla ohjelma siirretään mikro-ohjaimen muistiin. Mikro-ohjain huolehtii varsinaisen ohjelmoinnin. Tällaisissa systeemeissä tarvitaan yleensä vain ohjelma PC-mikroon, joka hoitaa tiedonsiirron mikro-ohjaimeen.

Mistä löydän tietoa PIC-ohjelmoinnin aloittamiseen ?

Kannattaa tutustua seuraaviin webbisivuihin:

Osoitteesta http://samengstrom.com/elec/pic/index.html löytyy yksinkertainen yhteenveto, kuinka PIC:n ohjelmointihommat kannattaa aloittaa.

Millaisen kytkennän tarvitsen PC:n RS-232 signaalien sovittamiseksi PIC:n sisään- ja ulostulonastoihin ?

PC:n sarjaportti käyttää RS-232 signaalitasoja (+9V, -9V) kun taas PIC haluaa CMOS-tasoista (0V, +5V) signaalia. Helppo standardiratkaisu on käyttää välissä esimerkiksi MAX232 driveripiiria sovittamaan 5V signaalit ja RS-232-signaalit toisiinsa.

Jos ei yritä hirveitä nopeuksia, piuha ei ole pitkä eikä masiinan tarvitse toimia kuin yhden tietyn PC:n kanssa, niin virityksiäkin voi kokeilla. Yksisuuntaisen liikennöinbub PIC->PC saa toimimaan ihan kelvollisesti suoraan (1200 bps), useimmille PC:n sarjaporteille riittää 0/+5V vastaanottotasoiksi, ei toki kaikille. Vastaavasti vastaanottoa Vastaavasti sitä toista suuntaa voisi kokeilla virityksellä vastus (virranrajoitus) - signaalidiodi nurinpäin maihin (-9V -> ~0V) - 4.7V zeneri (+9V -> ~5V). Jopa ilman diodeita jos vastus on riittävän iso ja luottaa PIC:n sisääntulonastojen sisäisiin suojauksiin. Eli yksinkertaisesti:

  • PC:ltä lähtevä data -> vastus -> pic sisään
  • PICiltä lähtevä data -> pc data sisään
Kannattaa lukea, onko käyttämäsi PIC:in datalehdissä jotain varoituksia latch-upista tms. ennen kuin alkaa viritellä.

Viritellessä kannattaa muistaa, että suorassa kytkennässä signaalitilat menevät juuri vastakkain siitä mitä ne ovat puskuripiirin kanssa (MAX232 invertoi signaalit).

Mitä eroa on PIC 16F84:llä ja PIC 16C84:llä ?

PIC 16F84 on PIC 16C84:n korvaava malli. 16C84:ssä oli bugi, joka aiheutti sen, että mikrokontrollerissa olevan ohjelman sai käyttöjännitteiden kanssa temppuilemalla luettua vaikka suojausbitti oli päällä. Ohjelmointiprotokolla molemmissa samanlainen. Muutaman konfiguraatiobitin merkitys on erilainen, mutta tästä ei kannata huolestua, kunhan vaan valitsee ohjelmointiohjelman, joka hallitsee kummatkin piirityypit.

Ainoa ongelama PIC16F84 on se, että jotkut vanhaemmat ohjelmointiohjelmat eivät tunnista PIC16F84 ja sulakebitit menevät väärinpäin.

Miten PIC:in ohjelmointi onnistuu Linuxin alaisuudesta ?

Linuxiin on saatavana koko työkalut PIC:in ohjelmointia varten. Lisätietoa aiheesta löytyy osoitteesta http://www.yty.net/pic/.

Onko olemassa kätevää PIC-piiriin liitettävää UART-piiriä ?

Maximilta saa melkoisen hyvin PIC:ille sopivaa UART:ia MAX3100. Kyseinen piiri käyttää SPI Microwire -yhteensopivaaa sarjaväylää mikroprosessorin kommunikoinnissa ja tarjoaa sisällään pienen FIFO:n. PIC-softa tulee datasheetin takana valmiina käytettäväksi. Datalehti löytyy osoitteesta http://www.maxim-ic.com/quick_view2.cfm/qv_pk/1731/ln/en.

Mistä saa ostaa ohjelmointilaitteen PIC16F84:lle ?

Probyte (http://www.kolumbus.fi/probyte/) myy PIC-ohjelmointilaiteita ohjelmineen. Osaava voi tietysti kolvata kytkennän itse ja etsiä ilmaiset ohjelmointityökalut verkosta.

Mistä löydän suomenkielistä opastata Atmelin AVR-mikro-ohjaimien käyttämiseen ?

Osoitteesta http://www.vaoltl.edu.hel.fi/paattot/MakelaJussi_LangTommi/indextl.html löytyy Tommi Långin päättötyö AVR MIKRO-OHJAIMET: KÄYTTÖ JA OHJELMOINTI TUTUKSI.

Mitä on vialla PIC:n ohjelmoimisessa, kun kaiken pitäisi olla pip-02 ohjelmassa oikein asetettu, mutta ohjelmointi ei vaan onnistu kunnolla ?

Tarkista tuon PIP-02-ohjelman asetukset. Sen asetustuedostoissa voi asettaa eri ohjelmointihommien viivietä, ja nuo viideasetukset pitää koneeis nopeuden mukaan asettaa sellaiseksi, että piiriä ei yritä ohjelmoida liian nopeasti. Viiveet määritellän ohjelman .ini tiedostossa (ascii-tiedosto). Laitteen pitäisi lähteä toimimaan kunnolla, kun asetat viiveet koneesi nopeuteen sopiviksi. Tuo viive määritellään Pip02.ini tiedoston asetuksella

DELAY100NS=xx
Jossa xx on sopiva viivearvo. Monesti suositellaan arvoa 30, mutta nopeammilla koneilla knnataa kokeilla arvoa kokoluokassa 300 tai jopa enemmän. Delay ei toimi PIP02:sen vanhemmilla versioilla. Ver. 1.25 näyttää jo tukevan tuota.

Ennen pip-02 ohjelman käynnistymistä kannattaa varmistaa, että sen tarvitsema com84- driveri on kunnolla lautuatunut muistiin. PIP02 paketeissa tulee vaihtelevasti COM84.EXE:ä ja JDM84.EXE:ä mukana, JDM tuntuu toimivan paremmin.

Oheispiirit

Millä piirillä ohjaisin kätevästi pariakymmentä LEDiä ?

MAX7219 on aika kätevä, siihen saa 64 lediä, ja niitä piirejä voi kytkeä peräkkäin periaatteessa niin monta kuin haluaa. Piirin datalehtiä kannattaa etsiä osoitteesta http://www.maxim-ic.com/ ja kytkentäesimerkki löytyy osoitteesta http://www.neutech.fi/~raipe/kello.html.

Mikä olisi kätevä 8 bittinen D/A muunnin mikrokontrollerin jatkoksi ?

Sarjamuotoisella liitännällä varustetuista piireistä voisiko kokeilla seuraavia:

  • MAX517, MAX550A ovat 8 bitin , DIP8 piirejä, 5V
  • MAX515CPA on 10 bitin 5V:n DIP8 DA-muunnin
  • MAX538 on 12 bitin 5V:n DIP8 DA-muunnin

TLC7524 on 8 bittinen rinnkkaissisääntulolla varustettu D/A-muunnin.


Tomi Engdahl <[email protected]>


Takaisin hakemistoon