sunnuntai 22. huhtikuuta 2018

Korvaava prosessori

Uuden mikrokontrollerin valinta

Masinistien keskustelupalstalla minulle on ehdotettu prossun vaihdon sijasta koko kortin uudelleen toteuttamista vaikkapa Arduinon kehitysalustalla ja siihen liitettävällä tarpeellisella lisäelektroniikalla. En itse pidä tälläistä lähestymistä kovin järkevänä. Kehitysalustat on tarkoitettu kehitykseen, ei lopputuotteen tekemiseen. En näe tarpeellisena käyttää vaikkapa Arduinon korttia ja rakentaa sen päälle lisää elektroniikkaa ainakin seuraavilla perusteilla:
  • Arduinoissa käytetyt liittimet eivät ole ainakaan ajoneuvokäytössä riittävän luotettavia
  • tarvittaisiin joka tapauksessa toinen kortti, jolle pitäisi toteuttaa tarvittava ohjauselektroniikka (prossu olisi järkevämpää ympätä samalle kortille!)
  • Arduinossa on paljon loppukäytössä tarpeetonta tavaraa (mm. USB-liitäntä ja sen ohjauksen ja pääprossun flässäyksen hoitava toinen prosessori)
  • Arduinon kortilta puuttuu mm. jännitelähde
  • Mekaniikkaongelmat: miten korttiviritelmä kiinnitetään luotettavasti ja saadaan sopimaan alkuperäisen kortin paikalle? 
  • Hinta: Arduino maksaa 20-30 euroa, pelkkä prosessori 2-3 euroa
Arduino Uno-kehitysalusta
 
Sen sijaan Arduinoissa käytetyt Atmelin RISC-prosessoriperheestä löytyy tähänkin projektiin sopiva mikrokontrolleri. Vaatimuksina mm. seuraavaa:
  • 5V käyttöjännite
  • 28-jalkainen läpiladottava kotelo (helpompi ja luotettavampi juotettavuus kotioloissa kuin pintaliitoskotelolla. Lisäksi koska ohjelma pitää flashata ja todennäköisesti myös HW-debugata, niin jalallisen kotelon käsittely on helpompaa kuin pintaliitosversion.)
  • ST62T15:sta vastaava RESET-toiminto, riittävä määärä GPIO-pinnejä
  • 8 Mhz kellotaajuus (voidaan hyödyntää alkuperäisen kortin kidettä)
 Vanhalla kortilla käytetty ST62T15 on nykyisiin mikrokontrollereihin verrattuna kovin vaatimaton:
  • ohjelmamuistiana OTP (One Time Programable memory) 1836 tavua, RAMia 64 tavua
  • 20 GPIO-pinniä
  • 1 8-bittinen ajastin (timer)
  • 5 keskeytysvektoria, joista 2 ulkoista valituille GPIO-pinneille, 1 NMI-keskeytyslinja (NMI ei käytössä DPS-ohjainkortilla)
Koska itselläni on kokemusta Atmelin mikrokontrollereista ja niiden ohjelmointiin tarvittavat softat ja kehitysalustat H/W-debuggereineen, niin prossun valinta on aika helppo. Atmelilta/Microchipilta löytyy siis tähänkin tarkoitukseen sopiva mikrokontrolleri, joka tuntee mallinimen ATmega8. Lisäksi näitä prossuja sattuu olemaan kourallinen sekä kiinakopioina että alkuperäisinä miljoonalaatikossa, joten valinta on silläkin perusteella helppoa. Suorituskykyä, muistia ja muita ominaisuuksia on vähintään riittävästi verrattuna ST62T15:een...
Atmel ATmega8 DIL-28-kotelossa

Seuraavaksi sitten pistetäänkin prossut rinnakkain, selvitetään mitkä nastat ovat nykyisellä kortilla käytössä ja katsotaan nastojen vastaavuudet:

 ATmega8

ST62T15

NMI, TEST ja TIMER on ST62T15:ssa yhdistetty GND:en. Kun katsotaan mihin ST62T15:n pinneihin DPS-ohjainkortin liittimen signaalit yhdistyvät, saadaan seuraava kaavio. Huom. lähtösignaalit on kuvattu vain loogisesti eli ne eivät mene suoraan prossulta liittimelle vaan välissä on elektroniikkaa, jota signaalit ohjaavat.  Tulosignaalit on galvaanisesti erotettu optoerottimilla:
Signaalit kortin liitin - ST62T15 - ATmega8

Tästä päästäänkin sitten määrittämään yhteydet ST62T15:n ja ATmega8:n välille (ne on jo merkitty yllä olevaan kuvaan). ATmega8:ssa ulkoisille keskeytyksille voidaan konfiguroida vain GPIO-pinnit PD0 ja PD1, joten pikavaihteen vaihtokytkimiltä tulevat signaalit pitää yhdistää näihin pinneihin, koska painokytkimiä on järkevä softassa käsitellä keskeytysten avulla. Muita keskeytyksiä softassa ei tulla tarvitsemaankaan vaan IO:t käsitellään tarvittaessa pollaamalla. Muiden GPIO-pinnien yhteyksillä ei ole merkitystä koska ne voidaan softassa konfata tarpeen mukaan.

Muut ATmega8:n pinnit kytketään datalehden mukaisesti (esim. AVcc pitää kytkeä käyttöjännitteeseen vaikka AD-muunnin ei olekaan käytössä) tai vastaaviin ST62T15:n pinneihin (RESET, XTAL1, XTAL2 jne.). Kuvassa keltaisina on alkuperäisen prosessorin pinninumerot merkittyinä vastaavien ATmega8:n pinnien kohdille:
ATmega8 > ST62T15
 
Tästä edetään sitten piirtämällä piirikaavio ja muodostamalla siitä piirilevy. Kun olen itse joutunut tekemään harrasteprojekteissa piirilevyjä, olen käyttänyt Autodesk Eaglen ilmaisversiota. Piirilevyt tulen tilaamaan Kiinasta, sieltä saa edullisesti laadukkaitakin levyjä. Koska tässä ei tulla tarvitsemaan monikerroslevyjä vaan tavallisia kaksipuoleisia FR4:a, niin laatu on riittävä ja sen varmistaminen helppoa.
 

1 kommentti:

Unknown kirjoitti...
Blogin hallinnoija on poistanut tämän kommentin.