Laitteiston suunnittelu


[edellinen sivu] [seuraava sivu] [sisällysluetteloon] [etusivulle]

Vaatimusten määrittely asetti laitteistolle mm. seuraavat vaatimukset:

Vaatimusten pohjalta lähdettiin valitsemaan komponentteja.

Käytettävät komponentit ja niiden valinta

Komponentteina päätettiin käyttää vain "yleisesti saatavilla olevia" komponentteja (lainausmerkit johtuvat elektroniikkateollisuuden komponenttien saatavuudessa tapahtuvista, toisinaan äkillisistäkin muutoksista. Suurkäyttäjien suuret tilaukset vaikuttavat markkinatilanteeseen erittäin paljon). Uudet, juuri tuotantoon tulossa olevat komponentit suljettiin siten pois valittavien joukosta, samoin kuin sellaiset, joiden saatavuudessa tiedettiin olevan ongelmia (kunkin puolijohdeosan tilanne varmistettiin puhelimitse suomalaisilta edustajilta. Saatavuuden varmistaminen on tehtävä, joka pääsee helposti unohtumaan - ikäviä yllätyksiä on sattunut jopa kaupallisia tuotteita suunnitteleville elektroniikkasuunnittelijoille).

Ohjelmiston asettamat vaatimukset

Jos käytettäisiin osittainkin valmista ohjelmistoa (esim. tiettyä käyttöjärjestelmää), rajoittuisi laitteistoon valittavan prosessorin (mikrokontrollerin) valinta vain johonkin tiettyyn tuoteperheeseen. Tässä tapauksessa sen ja muiden komponenttien valinta voitiin tehdä suhteellisen vapaasti, koska mitään ennalta valittua ohjelmistoa ei ollut. Valinnan pohjaksi laadittiin seuraavat listat:

Ohjelmiston muistivaatimuksiksi arvioitiin:

I/O-ominaisuuksia arvioitiin tarvittavan seuraavasti:

Näyttöjen liittämistä varten täytyi vielä erikseen tutustua LCD-näyttöjen ohjaukseen.

Tarvittavat näytöt

Virrankulutuksen minimoimiseksi päätettiin jo aikaisemmin käyttää LCD-näyttöjä. LCD:n toimintaperiaate edellyyttää, että näyttöpintana toimivaa elemettiä ohjataan vaihtovirralla (LCD-elementtiin kohdistuva tasajännitekomponentti tuhoaa sen). LCD-näytöt vaativat siksi menetelmät, joilla varmistetaan näytön virkistäminen tasalaatuisesti.

LCD-näyttöjä on yleisesti saatavilla kolmea päätyyppiä:

Soveltuvat näyttötyypit

Edellä kuvatuista näyttövaihtoehdoista soveluvat parhaiten käytettäviksi 7-segmenttinäytöt ja alfanumeeriset modulit. Edellisiä tarvitaan useita kappaleita mitattujen tietojen esittämiseen. Niiden lisäksi voidaan laitteeseen sisällyttää yksi alfanumeerinen moduli käyttöliittymän helpottamiseksi. Koska sen ominaisuudet eivät katselurajoitusten takia sovellu mitattujen tietojen esittämiseen veneen ulkotiloissa, päätettiin varsinainen käyttöliittymä sijoittaa veneen sisälle ja käyttää kaikki ulkotiloihin tulevan kotelon pinta-ala segmenttinäytöille.

Kuten edellä on kerrottu, on alfanumeerisen modulin liittäminen hyvin yksinkertaista. Sille tarvitsee vain varata liitin, jonka kautta se voidaan liittää prosessorin väylään. Segmenttinäyttöjen liittäminen on sen sijaan paljon monimutkaisempaa.

Sattumalta projektin alkuvaiheessa löytyi romuksi tuomittuja laitteita, joihin sisältyi riittävä määrä tähän projektiin soveltuvia 6-numeroisia 7-segmentti-LCD-näyttöjä. Niihin myös sisältyi tähänkin käyttötarkoitukseen soveltuva, yksinkertainen I/O-logiikka: LCD-lasit on liitetty CMOS-logiikasta tehtyyn 56-bittiseen siirtorekisteriin (data sarjamuotoisena sisään, ulostulot rinnakkaisesti. Data siirtyy ulostuloihin vasta kun ohjaussignaali Lp vaihtaa tilaa). Moduleita voi ketjuttaa, jolloin esim. neljä näyttöä muodostavat 224-bittisen siirtorekisterin.

LCD-moduleiden periaate on esitetty alla olevassa kuvassa. Myös numerosegmenttien välissä olevia pisteitä voidaan ohjata yksitellen. Kaksoispisteiden pisteet ovat yhteisohjattavia. Kuuden numeron näytössä on siten itsenäisesti ohjattavia segmenttejä yhteensä 4*7+5+2=49 kpl.

Näiden näyttöjen käyttäminen siis edellyttää jatkuvaa ohjelmallista päivittämistä:

Siirtorekisterejä on ohjattava LCD-näyttöjen ohjausvaatimuksen mukaisesti, eli jokainen näyttöjä ohjaava bitti on komplementoitava täsmällisin välein. Jotta komplementointi tapahtuisi juuri oikealla hetkellä on datan siirtoa rekisterien ulostuloihin ohjaava signaali (Lp) saatava ajastimelta.

Seuraavaksi käytettävä data (edellisen komplementti) voidaan siirtää siirtorekistereihin odottamaan milloin vain Lp-signaalin tilanvaihdosten välillä.

(Huom. myös näyttömodulin backplane on kytketty siirtorekisterin yhteen ulostuloon, joten se komplementoituu samalla taajuudella kuin segmenttien ohjauslinjatkin. Segmentti on joko musta tai läpinäkyvä sen mukaan, onko sen ohjauslinja samassa- vai erivaiheessa backplanen kanssa).

Valitut LCD-näytöt aiheuttavat ohjelmiston rakenteelle seuraavat vaatimukset:

Ellei yllä lueteltuja vaatimuksia pystytä kaikissa tilanteissa toteuttamaan, on seurauksena LCD-näyttöjen kuluminen loppuun ajanmittaan (=vaurioituminen pysyvästi).

Koska yhtenä tavoitteena on prosessorin kellotaajuuden laskeminen mahdollisimman alas, saadaan näyttöjen rakenteen aiheuttamista ohjelmistovaatimuksista johdettua minimi prosessorin kellotaajuudelle, kun LCD-näyttöjä päivittävän ohjelmiston rakenne (ja suoritusajat) on määritelty.

Mikrokontrollerin valinta

Mikrokontrolleri ja -prosessorivaihtoehtoja on esitelty liitteenä olevassa lyhyessä kuvauksessa. Kaikkia mahdollisia kontrolleriperheitä ei edes harkittu, vaan haku rajattiin Motorolan ja Intelin 8-bittisiin tuotteisiin useista syystä:

Valinta kohdistui lopulta Motorolan 68HC11-kontrolleriin. Aluksi oli tarkoitus käyttää mallia E1, mutta alustava suunnittelu osoitti, että mallia F1 käytettäessä päästään vähempään ulkoisten komponenttien määrään ja säästetään tarvittavaa piirilevypinta-alaa.

Valinnan ratkaisivat 68HC11:n eduksi

Malliin F1 päädyttiin kahdesta syystä: Sen muistiväylä on multipleksoimaton, eli osoite- ja datalinjat ovat erillään. Siten sitä käytettäessä ei tarvita ulkoista latch-piiriä alimpien osoitelinjojen erottamiseksi multipleksoidusta väylästä. Mm. A- ja E-malleissa käytetyssä multipleksoidussa väylässä puolet osoiteväylästä ja dataväylä tuodaan ulos kontrollerista samoja linjoja pitkin.

Kontrollerissa on myös chip selectien tuottamiseen tarvittava logiikka (ellei sellaista ole (esim. malli E1), tuotetaan tarvittavat chip selectit ulkoisella logiikalla ylimmistä osoitelinjoista ja CPU:n kellosignaalista).

Käytettävät muistipiirit

Valittu mikrokontrolleri, MC68HC11F1, sisältää ROM-muistia vain 0.5 kilotavua (EEPROM), joka on tarpeisiin nähden aivan liian vähän. Ohjelmamuistia varten tarvittiin siis ulkoinen muistipiiri, jollaiseksi valittiin 128 kilotavun blokkierasoitava AMD:n FlashROM-piiri Am29F010. 128 kilotavun muistipiiri on tarpeisiin nähden turhankin suuri, mutta se on pienin mahdollinen soveltuvista muistipiireistä. FlashROM-piirien toimintaa on selitetty tarkemmin kappaleessa FlashROM-muistit.

Ulkoisen muistin ja I/O-laitteiden liittäminen 68HC11F1-kontrolleriin on helppoa, koska se tuottaa muistin tarvitsemat chip select-valintasignaalit kahdelle muistipiirille ja kahdelle I/O-laitteelle. Toinen muistipiiri on ohjelmamuisti (ROM), ja toinen valintasignaali päätettiin käyttää lisämuistipiirille, jollaisena voidaan käyttää joko RAM- tai ROM-muistia (lisämuistia (RAM) tarvitaan lähinnä ohjelmankehityksen aikana). Lisämuistin koko voi vaihdella 8 - 128 kilotavun välillä. I/O-valintasignaalien avulla tarvittavan alfanumeerisen LCD-näytön liittämiseen ei tarvita yhtään aktiivista lisäkomponenttia.

Mikrokontrollerin sisältämä yhden kilotavun RAM-muisti on mahdollista varmistaa ulkoisen muistinvarmistuspariston avulla. Valitettavasti sellaisen käyttäminen vaatisi lisäämään ulkoista logiikkaa (prosessorin muistinsäilytysjännitteen syöttöpinnillä on muitakin tehtäviä). Kun kelloa varten löytyi sopiva piiri, joka sisältää myös 56 tavua RAM-muistia, päätettiin prosessorin muisti jättää varmistamatta. Se siis nollautuu jokaisen virtakatkon yhteydessä, samoin kuin ulkoinen lisämuisti-RAM. Kellopiirin 56 tavua riittävät täyttämään haihtumattoman muistin tarpeen.

Seuraavaan kuvaan on koottu kaikki järjestelmään sisältyvät muistit. Kuvasta näkyy myös ulkoisten muistipiirien kytkentäperiaate. Osoiteavaruutta suurempien, 128 kilotavun muistipiirien ylimmät osoitelinjat on yhdistetty I/O-linjoihin, jolloin muistista voidaan ohjelmallisesti valita 32 kilon sivu näkymään muistiavaruudessa. Tähän palataan vielä myöhemmin.

Reaaliaikakello

Markkinoilla on useita erilaisia reaaliaikakellopiirejä. Yleisimmät tyypit ovat prosessorin väylään suoraan liitettävät, muistipiirinä osoitettavat kellopiirit (jotka yleensä sisältävät myös RAM-muistia muutamasta kymmestä tavusta muutamaan kilotavuun), sekä sarjaliitännälliset mallit, joista osassa on RAM-muistia ja osassa vain kello.

Väylään liitettävistä piireistä on malleja, joihin kuuluu kiinteästi ainakin kymmeneksi vuodeksi riittävä lithium-paristo (ulkoista paristoa ei tarvita). Sellaisia on käytetty mm. PC-tietokoneissa ja niiden saatavuus Suomesta on hyvä. Väylään liitettävien piirien huono puoli on kuitenkin se, että ne vaativat chip select-signaalin, ja muisteille sopivat kaksi linjaa oli jo varattu. Valinta kohdistui siten sarjaliitännällisiin kellopiireihin.

Dallas Semiconductorsin datakirjasta löytyi kiinnostava malli, joka olisi sisältänyt mm. ohjelmoitavia hälytysominaisuuksia. Piiriä ei ollut saatavissa pienissä erissä, joten tilalle oli etsittävä toinen malli. Soittokierros suomalaisille puolijohdekauppialle paljasti kuitenkin, ettei sarjaliitännällisiä malleja juurikaan varastoida suomessa. Varasto-ohjelmista löytyy vain sellaisia malleja, joita muutamat suuret elektroniikkatuotteiden valmistajat käyttävät omissa tuotteissaan, joten valinta rajoittui niihin. Jokseenkin ainoa soveltuva malli oli SGS-Thomsonin MK41T56, piiri, jossa on kellon lisäksi 56 tavua RAM-muistia.

Valittu kellopiiri on tarkoitettu liitettäväksi I2C-yhteensopivaan väylään. I2C on kahden linjan (kello ja data) sarjaväylä, johon voidaan liittää useita erilaisia muisti- ja I/O-piirejä. Väylän siirtonopeus on enintään 100kbps. Sitä käytetään mm. kulutuselektroniikkatuotteissa. Useissa mikrokontrollereissa, mm. monissa Philipsin tuotteissa, on I2C-väyläohjain sisäänrakennettuna, mutta 68HC11-malleissa sellaista ei ole.

I2C-väylän simuloiminen ohjelmallisesti tavallisia I/O-linjoja käyttäen on mahdollista ainakin tätä piiriä käytettäessä, koska sarjaväylän kellotaajuudelle on minimiksi määritelty 0hz. Siten piirin ohjainohjelma voi toimia keskeytykset sallittuina, jolloin LCD-näyttöjen päivitysohjelman toiminta ei esty pitkienkään I2C-väyläoperaatioiden aikana.

Sarjaliitännän puskurointi

Kortille tuleva asynkroninen sarjaliitäntä päätettiin varustaa RS-232 (EIA-232)-tyyppisellä puskuroinnilla, jotta laite voitaisiin liittää suoraan tietokoneeseen. Puskuroinnin tarkoituksena on vain jännitetasojen sovittaminen. Varsinainen sarjaliitäntätoiminto (UART-toiminnallisuus) sisältyy kontrollerin SCI-liitäntään.

Puskurointia varten tarvitavan piirin valinta oli yksinkertainen: Maximin MAX232 seuraajineen on saavuttanut "teollisuusstandardin" aseman. MAX232:n ainoa ongelma on suuri virrankulutus, 10mA, joka on aivan liikaa tässä sovelluksessa, jossa ko. sarjaliitäntään ei yleensä ole liitetty yhtään mitään. Onneksi sama valmistaja tekee yhteensopivaa mallia, jolla on pienempi virrankulutus (2mA, 0.5mA typ., MAX220), sekä kahta laajennettua mallia, jotka voidaan ohjata shutdown-tilaan (10uA, MAX222 ja MAX242).

Kaikkia em. piirejä voidaan käyttää samalla piirilevyllä, kun levy suunnitellaan MAX242:ta varten. Se valittiin siten ensisijaiseksi vaihtoehdoksi.

Vene-elektroniikan yleisesti käyttämä sarjaväylä NMEA-0183 ei ole RS-232-yhteensopiva. Koska NMEA-standardista on olemassa useita versioita, jotka eivät ole keskenään yhteensopivia, eikä koko väylään ollut suoranaista tarvetta, päätettiin se jättää pois suunnitelmista ja korvata RS-232-puskureilla, josta on selvästi enemmän hyötyä. Tarvittaessa NMEA-väylää varten voitaisiin lisätä ulkoisia komponetteja vaikka erilliselle piirilevylle.

Komponenteista laitteeksi

Komponenttien valinnan jälkeen oli aika tehdä niistä tarvittava laitteisto, eli ensin piirtää piirikaavio ja sen jälkeen tehdä suunnitelmaa vastaava piirilevy. Suuri osa tarvittavista kytkennöistä oli mahdollista tehdä vain yhdellä tavalla (esim. dataväylä kontrollerilta muistipiireille), joten tehtävät olivat pääosin suoraviivaisia. Molempien tehtävien yhteydessä kuitenkin täytyi vielä päättää useista toteutukseen vaikuttavista linjauksista. Näitä kysymyksiä käsitellään seuraavassa.

Laitteiston käyttäminen muuhun tarkoitukseen

Suunnittelun eräänä toissijaisena tavoitteena oli tuottaa laitteisto, jota voisi käyttää muissakin projekteissa. Ts. tavoitteena oli jonkinasteinen yleiskäyttöisyys, johon pääsemiseksi päätettiin:

I/O-linjojen käyttötarkoitukset

Mikrokontrollerin I/O-linjoista osa on käytettävissä vain suoraan ohjelman ohjauksessa, osa voidaan asettaa jonkin kontrollerin alijärjestelmän käytettäväksi (SPI, ajastin tms.). Esimerkiksi portin D pinni 3 voi toimia joko yleiskäyttöisenä I/O-linjana tai SPI:n datalinjana, ja portin A linjat liittyvät ajastimen ominaisuuksiin. Näiden käyttämisestä tämän sovelluksen tarpeisiin oli myös päätettävä.

Ominaisuuksia jaettiin seuraavasti:

Tässä yhteydessä tuli vastaan vaikeus, jonka kiertäminen oli käytännössä mahdotonta: Työtä tehtiin talvella, jolloin ei päästy mittaamaan pulssianturin liitännän sähköisiä ominaisuuksia (vene maissa), joten liitäntäelektroniikan suunnittelu oli jättävä kesään. Siten kortille suunnitellulle protoalueelle oli jo tiedossa käyttöä.

Muistiavaruutta suuremmat muistipiirit

Kuten edellä kerrottiin, on käytettävän muistipiirin koko 128 kilotavua, kaksi kertaa kontrollerin muistiavaruutta suurempi. Lisäksi toisena muistipiirinä haluttiin käyttää myös suurimmillaan 128 kilotavun piirejä.

"Liian isojen" muistipiirien käyttämiseksi oli useita vaihtoehtoja:

Muistien kytkennän yleisrakenne on esitetty edellä muistipiirien käsittelyn yhteydessä. Kuvassa näkyy myös I/O-linjojen käyttäminen muistipiirien ylimpinä osoitelinjoina. Linjat, joita käytetään lisämuistipiirin ylimpinä osoitteina, toimivat myös I2C-väylänä kellopiirille. Tämän järjestelyn tarkoituksena on säästää I/O-linjoja. I2C-väylän toimintaa ja samojen linjojen käyttämistä useissa tarkoituksissa käsitellään vielä ohjelmiston yhteydessä.

(68HC11-kontrollerista on olemassa malleja, joihin sisältyy mahdollisuus 1 megatavun muistiavaruuden käyttämiseen. F1-malli ei kuitenkaan ole sellainen).

Piirilevyn valmistus- ja kokoamistekniikka

Piirilevytehtaat valmistavat levyjä erilaisilla prosesseilla ja tarkkuuksilla. Nykyisin yleisesti käytössä oleva monikerrostekniikka antaa valmiudet varsin vapaaseen piirilevyn suunnitteluun (ellei tila tunnu muuten riittävän, on helppo siirtyä käyttämään useampia kerroksia). Monikerrostekniikan yhteydessä käytettävä käytäntö varata jännite- ja maatasoja varten omat kerroksensa parantaa myös laitteen häiriönsietoisuutta. Valitettavasti monikerroslevyt ovat perinteisiä 1- tai 2-puolisia levyjä huomattavasti kalliimpia valmistaa eivätkä mitenkään sovellu itse tehtäviksi.

Piirilevy päätettiin suunnitella 2-puoliseksi sellaista valmistusprosessia varten, johon voi hyvissä olosuhteissa päästä itse tehden, vaikka protoa varten olikin tarkoitus teettää levy. Tämä sääntö rajoitti "normaalietäisyydellä" (0.1") olevien piirin jalkojen välistä vedettävien vetojen määrän yhteen ja pakotti käyttämään suhteellisen leveää viivanleveyttä.

Toinen suunnitteluun vaikuttava seikka on käytettävä kokoamistekniikka: Tämän laitteen prototyyppi, samoin kuin kaikki mahdollisesti myöhemmin tehtävät kappaleet oli tarkoitus koota käsityönä. Se sulkee pois ainakin pienimmät pintaliitososat (suurempia pystyy kyllä asettelemaan pinsettien avulla). Lopulta päädyttiin käyttämään vain "perinteisiä" osia, pintaliitososia ei käytetty.

Piirilevy suunniteltiin Circad-ohjelman demoversiolla.

Kellotaajuuden laskeminen

Mikrokontrollerin kellotaajuuden määrää käytettävä kide, jonka taajuuden päättämiseksi selvitettiin ensin LCD-näyttöjen päivittämisen tarvitsema suoritusaika (kts. LCD-näyttöjen ohjaus ohjelmistoa käsittelevässä luvussa). 68HC11:n normaalimalleille maksimikellotaajuus on 2MHz (8MHz kide: Kellotaajuus saadaan jakamalla kidetaajuus neljällä!).

Arvioitu 750 kellojaksoa tarkoittaa, että suurimmalla päivitystaajuudella (100Hz) päivitys käyttäisi

Juurikaan 250kHz pienempää kellotaajuutta ei liene syytä harkita.

Seuraavassa kaaviossa on esitetty päivitysrutiinin suoritus suhteessa aikaan. LCD-näyttöjä ohjaava Lp-signaali vaihtaa tilaa hetkillä 0,n,2n,3n,... ja antaa samalla keskeytyksen. Päivitysrutiinin suoritus (1,2,3,4) aloitetaan heti kun mahdollista, ts. välittömästi kun keskeytysten käsittely on sallittu (td0, td1 tai td2 kuluttua Lp:stä). Tällä keskeytyksellä on suurin prioriteetti, joten muut keskeytyspalvelut eivät pääse väliin. Näyttöjen vaurioitumisen välttämiseksi on pystyttävä takaamaan, että käsittelyn alkamisen viive lisättynä keskeytyksen suoritusajalla (tx) ei ylitä päivitysjakson pituutta (n).

Näyttöjen päivittämisen lisäksi vaatimuksiin sisältyy sarjaliitännän käyttäminen. Koska kontrollerin sarjaliitäntä ei sisällä erillistä FIFOa, vaan jokainen merkki on luettava erikseen, saadaan suurin mahdollinen siirtonopeus määriteltyä näyttöjen päivitysten vaatiman ajan perusteella: Näyttöjen päivitystä suoritettaessa ovat muut keskeytykset estettyinä, joten päivitys saa kestää korkeintaan kahden merkin vastaanottamiseksi tarvittavan ajan lisättynä ajalla, joka saattaa kulua keskeytysten ollessa estettynä muusta syystä (koska näyttöjä päivittävällä keskeytyksellä on suurin prioriteetti).

Kun edelliseen kuvaan lisätään näyttöjen päivitysten lisäksi sarjaliikennekeskeytykset, saadaan periaatekuva näistä lähteistä aiheutuvista keskeytyksistä. Sarjaliitännän keskeytys toistuu enimmillään. 5 kertaa useammin kun näyttöjen (mikä seuraa aiotusta 4800 bps siirtonopeudesta vs. 100Hz näyttöjen maksimipäivitystaajuudesta).

Kellotaajuuden laskennan pohjaksi käy arvio, että muut keskeytykset kieltävät osuudet kestävät korkeintaan 250 kellojaksoa. Silloin kahden vastaanotetun merkin saapumisajoilla pitää olla väliä vähintään 1000 kellojaksoa. Merkkien välissä kuluva aika määräytyy yksinkertaisesti siirtonopeudesta ja siirrettävien bittien määrästä.

Sarjaliitännän käyttäminen NMEA-liitännän toteuttamiseen haluttiin pitää mahdollisena, joten minimivaatimukseksi tuli NMEA:n määrittelemä siirtotapa (4800 bps, 8 bittiä dataa, ei pariteettia, 1 stop-bitti, eli yhteensä 10 bittiä/merkki), eli 480 merkkiä sekunnissa. Tästä saadaan kellotaajuudeksi 480kHz, mikä tarkoittaisi (noin) 1.92MHz:n kiteen käyttämistä. Käytännössä kide on valittava siten, että siitä saadaan muodostettua asynkronisen sarjaliitännän vaatima ohjaustaajuus. Lähimmät sopivat taajuudet ovat 2.0MHz ja 1.8432MHz.

Kidetaajuudeksi päätettiin valita 1.8432MHz. Se tarkoittaa myös käytännössä, että muiden kuin näyttöjä päivittävän rutiinin aiheuttamien keskeytysten kieltämisten maksimikesto saa olla vain 210 kellojaksoa, ja silloinkin ollaan aivan äärirajoilla (Huom. tässäkin tapauksessa aikaa jää muuhunkin. Pahimmillaan saadaan välittömästi peräkkäin keskeytykset sarjaliitännältä, näyttöjen päivityksestä ja uudestaan sarjaliitännältä, mutta sen jälkeen ei seuraa uutta näyttökeskeytystä).


[edellinen sivu] [seuraava sivu] [sisällysluetteloon] [etusivulle]

[versio 1.6, 1996/03/10 20:08:32] [Lähetä palautetta Laurille]

Copyright © 1996 Lauri Aarnio. All Rights Reserved.