tiistai 15. toukokuuta 2018

Kiinalaisia kehitystyökaluja

Nykyään ei paljon kannata itse alkaa rakentelemaan edes mitään yksinkertaisia flässäystyökaluja, toista se oli vielä 10 vuotta sitten... Tietysti niin asioihin vakavasti suhtautuva harrastelija kuin ammattilainenkin käyttää valmistajan tukemia työkaluja ja maksaa niistä usein kovan hinnan, mutta saa vastineeksi toimivan ja hyvin tuetun kokonaisuuden.

Nykyaikaan kuuluu, että netistä etsitään milloin mihinkin tarkoitukseen halpoja ratkaisuja ja laitteita, jolloin ajaudutaan usein kiinalaisten nettikauppojen tai ebay.comin kiinalaisten myyjien sivuille. Totuushan on, että jos haluaa ostaa halvan ja hyvän, niin pitää tehdä kaksi ostosta. Esimerkkinä tässä projektissa itseäni alkoi kiinnostamaan, tekeekö noilla kiinalaisten tarjoamilla ohjelmointityökaluilla yleensäkään mitään. Tilasin kokeeksi tälläisen alle kahden euron palikan:

USB ISP ohjelmointipalikka
 
Samasta tuotteesta löytyy kymmeniä eri versioita niin kuorilla kuin ilmankin. Itse otin tuollaisen vähän kalliimman kuorellisen version, se tuntui jotenkin luotettavammalta kuin vielä halvempi riisuttu versio. Toiminnassa versioiden välillä ei varmaankaan ole eroja, kalustetut piirilevyt tulevat todennäköisesti samasta tehtaasta.

Onhan tuolla tuotteen yhteydessä sanottu, että se toimii yhteen vain  jonkun kiinalaisen Chi Feng Softwaren (?) kanssa, mutta sillä perusteella ei netistä mitään järkevää löytynyt. Kun palikan tyrkkäsi USB-porttiin, se asentui HID-laitteeksi eikä mikään tunnettu flässäyssofta sitä tunnistanut. Kehitysympäristönä käyttämäni Atmel Studio 7 ei tue muita laitteita kuin lähinnä Atmelin omia, mutta Open Source -toteutuksena löytyy useisiin käyttöjärjestelmäympäristöihin paremmalla laitetuella toteutettu avrdude -niminen flässäysohjelma.

avrdude osaa kommunikoida USB-porttiin liitetyn laitteen kanssa joko suoraan tai virtuaalisen sarjaportin kautta. Netistä löytyy AVR mikrokontrollereiden ohjelmointiin tarkoitettu yksinkertaisen laitteistospeksin ja avoimen lähdekoodin kokonaisuus nimeltään USBasp, jota myös avrdude tukee. Speksin mukainen USBasp laite asentuu Windowsiin Universal Serial Bus -laitteeksi ja sille on saatavissa myös Windows 10:een asentuva ja siinä toimiva USB-ajuri. Tuo tilaamani kiinalainen palikka on raudaltaan hyvin lähellä USBasp:n rautaa, joten aloin tutkimaan pystyisikö USBasp:n softan modaamaan ja flässäämään tähän Kiinan ihmeeseen.

Enpä ollut ensimmäinen tähän ongelmaan törmännyt, ja pienellä googlettamisella löytyikin hyödyllinen nettisaitti: http://irq5.io/2017/07/25/making-usbasp-chinese-clones-usable/

Sivulta löytyy myös analyysia laitteen komponenteista ja ohjeet kuinka USBasp-softan saa ladattua tähän palikkaan. Ohjeet ovat kuitenkin joltain osalta vanhentuneet, joten laitan tähän ne omat modaukseni, jolla sain rakennettua alle viidellä eurolla ja reilun tunnin työllä toimivan ohjemointisysteemin ATmega-sarjan mikrokontrollereille. Toivottavasti näistä ohjeista on apua jollekulle muullekin saman ongelman kanssa painiskelevalle.

Homman tekemiseen tarvitaan seuraavat tarvikkeet:

Palikan ohjelmointi avrduden kanssa yhteensopivaksi USBasp-laitteeksi sujui näin

  1. Hae netistä USBasp-laitteelle tarkoitettu valmiiksi käännetyn USBasp-softan .hex-tiedosto. Sellainen löytyy ainakin täältä: https://www.sciencetronics.com/greenphotons/?p=1937 > lataa koneellesi tiedosto (toimii sellaisenaan ilman muutoksia) 20161227_mega88_usbasp.hex

  2. Poista USBISP-palikan suojakuori liuttamalla se USB-liittimen suuntaan ja juota piirilevylle kuvan mukainen hyppylanka. Hyppylanka mahdollistaa uuden ohjelman lataamisen prosessorille, joka on kiinalainen kopio ATmega88:sta:

    Ohjelmoinnin mahdollistava hyppylanka

    Piirikortin prosessori

  3. Liitä Arduino Uno USB-kaapelilla tietokoneeseen ja käynnistä Arduino Software IDE. Valitse valikoista Board ja Programmer tavalliseen tapaan:


  4.  Valinnat Arduino IDE:ssä

  5. Valitse sketsiksi valmiista esimerkeistä ArduinoISP
  6.  
    Esimerkkisketsin avaaminen

  7. Ohjelmakoodiin pitää tehdä pieni muutos määrittelemällä Arduino-kortin pinnit 11,12 ja 13 käyttöön. Poista koodista kommenttimerkintä keltaisella merkityltä #define-riviltä. Tämän jälkeen käytössä on korostetuilla riveillä olevat pinnit. Käännä sketsi ja lataa se tavalliseen tapaan Arduinoon (Sketch > Upload). 

  8. Esimerkkikoodin muokkaaminen

  9. Nyt Arduinoon ladatulla ohjelmalla pystytään lataamaan Arduinon GPIO-pinneihin liitetyn prosessorin flash-muistiin uusi ohjelmakoodi eli Arduino toimii tässä välipalikkana ja hoitaa kohdeprossun ohjelmoinnin.

    Liitä USBISP palikan 10-napainen ISP-urosliitin hyppylangoilla Arduinon liitinrimaan. Liitännässä käytetään Arduinon piirikortin liittimen numeroita 10 > ISP pin 5 (RST), 11 > ISP pin 1 (MOSI), 12 > ISP pin 9 (MISO) ja 13 > ISP pin 7 (SCK). Vcc ja GND (käyttöjännite ja maa) otetaan myös Arduinon kortilta. Alla olevassa kuvassa käyttöjännite ja maa on otettu Arduinon 6-pinnisen ISP-liittimen pinneistä 2 ja 6.


  10. Liitäntä ohjelmointiin Arduinolla

  11. Seuraavaksi on syytä testata liitännän toimivuus. Tämä tapahtuu käynnistämällä avrdude Windowsin komentokehotteessa. avrdude löytyy normaalisti hakemistosta
    C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe
    ,
    mutta olen kopioinut tiedostot avrdude.exe ja avrdude.conf samaan työhakemistoon, mihin kopioin kohdassa 1. .hex-tiedoston (komento tulee vähän lyhyemmäksi kun ei tarvitse kirjoitella pitkiä polkuja). Laitehallinnasta pitää katsoa mihin virtuaaliseen COM-porttiin yhteys Arduinoon on muodostettava, minulla portti on COM7. Yhteyden testaaminen onnistuu antamalla työhakemistossa seuraava komento, jolla Arduino lukee tietoja kohdeprosessorista:

  12. avrdude -C .\avrdude.conf -vv -c stk500v1 -b 19200 -P COM7 -p m88
    [...]
    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.04s

    avrdude: Device signature = 0x1e930a (probably m88)
    avrdude: safemode: hfuse reads as DD
    avrdude: safemode: efuse reads as F9

    avrdude: safemode: hfuse reads as DD
    avrdude: safemode: efuse reads as F9
    avrdude: safemode: Fuses OK (E:F9, H:DD, L:FF)

    avrdude done.  Thank you.


    Tärkeätä on, että Device signaturena näkyy 0x1e930a, muu arvo kertoo virhetilanteesta. Tarkista tällöin kytkennät ja yritä uudestaan! Varmista, että kaikki 6 hyppylankaa ovat kytkettyinä. Jos signature luetaan oikein, yhteys on kunnossa ja palikka voidaan ohjelmoida.

  13. Ohjelmointi suoritetaan antamalla seuraava komento (lihavoitu teksti yhdelle riville):

  14. avrdude -vv -c stk500v1 -b 19200 -P COM7 -p m88 -U flash:w:20161227_mega88_usbasp.hex:i
    [...]
    avrdude: AVR device initialized and ready to accept instructions

    Reading | ################################################## | 100% 0.04s

    avrdude: Device signature = 0x1e930a (probably m88)
    avrdude: safemode: hfuse reads as DD
    avrdude: safemode: efuse reads as F9
    avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
             To disable this feature, specify the -D option.
    avrdude: erasing chip
    avrdude: reading input file "20161227_mega88_usbasp.hex"
    avrdude: writing flash (3720 bytes):

    Writing | ################################################## | 100% 7.75s

    avrdude: 3720 bytes of flash written
    avrdude: verifying flash memory against 20161227_mega88_usbasp.hex:
    avrdude: load data flash data from input file 20161227_mega88_usbasp.hex:
    avrdude: input file 20161227_mega88_usbasp.hex contains 3720 bytes
    avrdude: reading on-chip flash data:

    Reading | ################################################## | 100% 3.88s

    avrdude: verifying ...
    avrdude: 3720 bytes of flash verified

    avrdude: safemode: hfuse reads as DD
    avrdude: safemode: efuse reads as F9
    avrdude: safemode: Fuses OK (E:F9, H:DD, L:FF)avrdude done.  Thank you.


  15. Tämän jälkeen pitää vielä muistaa poistaa kohdassa 2. piirilevylle juotettu hyppylanka! Sen jälkeen kuori paikalleen ja palikka USB-porttiin. Jos sininen LED syttyy ja palaa vilkkumatta, kaikki on kunnossa ja voidaan siirtyä varsinaiseen kohdeprosessorin ohjelmointiin nyt USBasp:ksi modatun palikan avulla.

USBasp:n käyttö ohjelmoinnissa


Windows 10 asentaa uudelle USBasp-laitteelle automaattisesti laiteajurin, kun palikka asetetaan ensimmäisen kerran USB-porttiin. Ajuri näkyy asennuksen jälkeen Windowsin Laitehallinnassa Universal Serial Bus -laitteissa. Valitettavasti tämä ajuri on jo vanhentunut siinä mielessä, että sitä ei ole signeerattu, tämän takia asennuksen jälkeen laitteen nimen vieressä näkyy keltainen huutomerkki.

Tässä vaiheessa pitääkin tehdä pieni lisämodaus, jotta Windowsin vaatimukset täyttyvät.  Itse sain driverin toimimaan 64-bittisessä Windows 10:ssä tämän sivun ohjeilla, jonka jälkeen laitehallintakin näyttää laitteen olevan toimintakuntoinen:
https://rayshobby.net/dead-simple-driver-installation-for-usbasp-and-usbtiny-on-windows/

Toimiva USBasp-ohjain Windows Laitehallinnassa

Kohdeprosessorin ohjelmointi on helpointa tehdä aiemmin puheena olleen yksinkertaisen kehitysalustan avulla. Alustassa on zif-kanta ohjelmoitavalle prosessorille ja 10-napainen liitin ISP-kaapelille. Eli USBISP-palikan mukana tullut kaapeli kiinni palikkaan ja toinen pää alustaan. Ulkoista jännitelähdettä ei tarvita vaan jännitesyöttö tulee palikan kautta. Tämä toimii siis VAIN 5V prossuille, 3,3V prossuille tämä EI toimi!

 ATmega88 kehitysalustassa ohjelmoitavana USBASP-palikalla

Ohjelmoinnissa tarvitaan buildauksen yhteydessä syntyvä .hex-tiedosto, esimerkkinä käytän tämän Valtra DPS-projektin release-version tiedostoa ValtraDPS.hex, joka tällä kertaa on käännetty ATmega88-mikrokontrollerille, eo. kuvan alustassa on siis ohjelmoitavana prosessorina ATmega88. Flässäys käynnistetään seuraavalla komennolla (avrdude ja .hex samassa hakemistossa):

avrdude -c usbasp -p m88p -B 5 -U flash:w:ValtraDPS.hex:i

avrdude: set SCK frequency to 187500 Hz
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x1e930f (probably m88p)
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: set SCK frequency to 187500 Hz
avrdude: reading input file "ValtraDPS.hex"
avrdude: writing flash (944 bytes):

Writing | ################################################## | 100% 0.62s

avrdude: 944 bytes of flash written
avrdude: verifying flash memory against ValtraDPS.hex:
avrdude: load data flash data from input file ValtraDPS.hex:
avrdude: input file ValtraDPS.hex contains 944 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.35s

avrdude: verifying ...
avrdude: 944 bytes of flash verified

avrdude: safemode: Fuses OK (E:F9, H:DF, L:62)

avrdude done.  Thank you.


avrdude kommunikoi siis suoraan USB-portissa olevan USBasp:ksi ohjelmoidun palikan kanssa. avrduden parametrit pitää tietenkin asettaa tapauskohtaisesti. Tärkeimmät ovat -p ja -U, joiden jälkeen on annettava kohdeprosessorin tyyppi ja flässättävän .hex-tiedoston nimi. Parametreista saa parhaiten lisää tietoa ohjelman helpistä käynnistämällä avrdude ilman parametreja.

Käytännössä flässäys kannattaa toiminnan varmistamisen jälkeen määritellä käynnistettäväksi suoraan Atmel Studio 7:sta, niin ei tarvitse kirjoitella komentokehotteessa noita pitkiä komentoja. Atmel Studion Tools-valikosta löytyy valinta External Tools..., jolla saa lisättyä valikkoon omia komentoja:

Atmel Studio 7 omien työkalujen määrittäminen

Työkaluksi olen lisännyt valikkoon valinnan Flash USBasp (Release m88p) seuraavilla parametreilla:
 
Työkalun määritys

Title: Flash USBasp (Release m88p)
Command: C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avrdude.exe
Arguments: -C "C:\Program Files (x86)\Arduino\hardware\tools\avr\etc\avrdude.conf" -c usbasp -p m88p -B 5 -U flash:w:"$(ProjectDir)Release\$(TargetName).hex":i


 Komennot ovat samat kuin edellä komentokehotteessa kirjoitettiin, hakemistoviittaukset ovat avrduden oletushakemistoiin. Tämän jälkeen flässäys käynnistyy yksinkertaiseti valitsemalla ao. työkalu Tools-valikosta, ilmoitukset tulevat näkyviin Atmel Studion Output-ikkunaan.


Kuten esimerkistä näkyy, kohdeprosessorin ohjelmointi onnistui ongelmitta. Eli halvallakin voi saada ihan käyttökelpoista tavaraa, kunhan käyttää aikaa asiaan paneutumiseen ja tekee tarvittavat korjaukset itse. Tässä on vielä syytä korostaa, että nämä halpisvehkeet EIVÄT sovellu debuggaukseen, koska niile ei löydy tukea kehitysympäristön (esim. Atmel Studio 7) ohjelmasta!


Vähän jälkikäteen löysin alkuperäisen USBISP-palikalle tehdyn ohjelman: http://www.electrodragon.com/w/8051 Ei tuo  kovin hyvältä tai käyttökelpoiselta näytä, avrdude on paljon paremmin tuettu ja se toimii myös hyvin Atmel Studion kanssa. Olisi tietenkin pitänyt kokeilla alkuperäistä ohjelmaa aluksi, mutta kun sitä en heti löytynyt, niin tuli tehtyä tuo peruuttamaton modaus ensin. Lopputulos on todennäköisesti tällä tavoin tehtynä parempi.


sunnuntai 13. toukokuuta 2018

Mittauksia traktorissa

Tuli tilaisuus käväistä logiikka-analysaattorin kanssa mittailemassa DPS-ohjainkortin ajastuksia Mezzo-sarjan vm. 1999 Valtra 6800:ssa. Tässä yksilössä on käytössä DPS-ohjainkortin uusin versio, se on vaihdettu muutama vuosi sitten hajonneen alkuperäisen kortin paikalle.

Ensimmäisenä silmiin pisti pikavaihteen vaihtonappikytkimen kytkinvärähtely (kytkin vapautettu eli ajan mittaus signaalin laskevasta reunasta):

DPS-vaihtokytkimen kytkinvärähtely

Omassa testipenkissäni en ilmiötä näin voimakkaana ole havainnut, mutta tietenkin nuo mekaaniset mikrokytkimet aikaa myöten kuluvat ja jousivoima heikkenee. Kun kytkin vapautetaan kursorin kohdassa A1, niin vasta n. 10 ms kuluttua signaali asettuu nollatilaan eli tuon aikaa se hyppii ylös ja alas. Softaani rakennettu värähtelysuodin ei siis ole tarpeeton. Tuloksista näkyi myös se, että tyypillinen napin painallus kestää 100-200 ms.

Seuraavaksi katsoin kuinka kauan napin painamisesta menee aikaa siihen, kun solenoidin ohjaus aloitetaan:

 Aika valinnasta ohjaukseen

Kun vaihtonappia painetaan, niin solenoidin ohjaus aloitetaan vastan reilun 160 ms:n jälkeen. Yllättävän suuri viive, mutta sille lienee syynsä. Eihän tuo siis käytännössä pitkä aika ole, napin painalluskin kestää pitempään eli solenoidit on ohjattu ennen, kuin nappi on vapautettu (vihreän pulssin laskeva reuna). Sama viive esiintyy kaikissa vaihtotilanteissa riippumatta siitä, vaihdetaanko ylös- vai alaspäin. Kuvan mittakaava on sellainen, että kytkinvärähtelyt eivät siinä erotu, mutta tässäkin kytkimessä ilmiö on nähtävissä.

Edellisestä kuvasta näkyy myös solenoidien ohjausten välinen aika eli tilanne, jossa molemmat solenoidit vaihtavat tilaansa. Solenoideja ei ohjata yhtä aikaa vaan niiden ohjausten välissä on n. 50 ms viive. Eli ensin ohjataan toinen solenoidi, sitten 50 ms tauko ja vasta sitten toinen:

  Solenoidien ohjausten välinen aika

Nämä viiveet on helppo toteuttaa uuden prosessorin ohjelmaan ja tulen tekemään sen noiden mittausten perusteella.

Mielenkiintoisin asia, joka näistä mittauksista paljastui on se, että Valtra on näköjään poistanut ainakin ohjainkortin uusimmasta versiosta kokonaan käsijarrulta ja kytkinpolkimelta tulevien signaalien käsittelyn. Eli kytkinpoljn tai käsijarru EIVÄT vaikuta pikavaihteen ohjaukseen vaan solenoidit ohjataan kytkimen tai käsijarrun tilasta riippumatta. Ehkä ovat katsoneet, että on parempi, että vaihde on valmiiksi päällä siinä vaiheessa kun kässäri vapautetaan. Käsijarrun summerille menevä signaali on erillinen prosessorille menevästä, joten summerin ohjaus toimii itsenäisesti vaikka signaalia ei prosessorissa käsiteltäisikään.

Käsijarrun ja kytkimen rajakytkinten haistelun toteutus on todistetusti ollut (=olen mitannut testipenkissäni) ainakin joissain kortin versioissa, myös siinä, joka tässä Valtrassa oli alunperin asennettuna. Tulen tekemään nämä uusimman korttiversion ominaisuudet myös omaan softaani, jolloin päivitetty kortti tulee toimimaan samalla tavalla kuin jos koneeseen hankittaisiin varaosana uusi kortti. 
 

maanantai 7. toukokuuta 2018

Piirilevyn testausta

Piirilevyt tulivatkin yllättävän pian ja tietysti piti päästä heti kokeilemaan. Levyt näyttävät ihan laadukkailta ja varsinkin hinta laatusuhde on loistava: 11 kpl 13,00 e postikuluineen eli 1,18 e/kpl. Toimittaja laittoi siis näköjään vielä yhden levyn kaupanpäällisiksi. Toimitusaikakaan ei huono: tilaus 25.4., toimitus 7.5. eli 12 päivää. PCBway:lla näyttäisi muuten olevan parasta aikaa aika hyvä tarjous: 10 levyä (1- tai 2-kerrosta) max. 100x100 mm vain $5 + pk. Lisäksi siellä on jaossa ilmaisia prototyyppireikälevyjä.

Uusia piirilevyjä

Juotin ulompiin reikiin holkkikannasta puretut pinnit (yksi irtonainen näkyy kuvan alareunassa) ja tähän ensimmäiseen kokeiluversioon 28-napaisen DIL-kannan, jotta prosessorin saa vielä irti ja pystyy ohjelmoimaan helpommin uudestaan. Kunhan ohjelma on käytännössä testattu, juotan ATmega8:n suoraan piirilevylle, jotta mahdollisia kontaktihäiriöpaikkoja olisi mahdollisimman vähän. Ja tietenkin päälle vielä suojalakka, joka tukkii myös nyt näkyvissä olevat holkkien päihin tyhjiksi jäävät reiät.

Pikkupiirilevyn kantaan sitten AVR Dragonissa ohjelmoitu ATmega8 ja piirilevy DPS-kortille ST62T15:n kantaan. Piirilevy sopii täsmälleen alkuperäisen prosessorin kantaan niinkuin kuuluukin. Yhtään isompi piirilevy tähän ei mahtuisi, joten mitoituskin onnistui ensi yrittämällä.

 Uusi prosessori asennettuna alkuperäisen paikalle

Sitten ei muuta kuin kortti testipenkkiin kiinni ja kokeilemaan. Yllätyksiä ei tullut eli kortti alkoi toimimaan odotusten mukaisesti. Siis testipenkissä...
Uuden prosessorin ja piirilevyn testaus

Tästä on hyvä jatkaa projektin viimeiseen vaiheeseen eli kortin kokeilemiseen traktorissa. Logiikka sinänsä tuntuu toimivan oikein, mutta viiveet on vedetty enemmän tai vähemmän hihasta. Eniten mietityttää kytkinpolkimen käyttö. Pikavaihdehan kytkeytyy kytkintä painettaessa pois ja uudestaan päällä kytkintä nostettaessa. Onko siinä vaiheessa viivettä, kun tieto kytkimen ylönostamisesta tulee siihen, kun pikavaihde ohjataan uudestaan päälle? Sadan tai parinkaan sadan millisekunnin viivettä ei korvakuulolta huomaa, mutta sillä voi olla merkitystä toiminnan kannalta.

Pitää yrittää houkutella vaimon sukulaismies testaamaan kortti omassa traktorissaan mielellään vielä vähän pitemmän aikaa, jotta toiminta saadaan käytännössä varmistettua. Täytyy samalla skoopata alkuperäisen kortin ohjaukset, jotta todelliset viiveet ohjauksissa varmistuvat.

Ajastusten selvittämistä varten piti vähän askarrella lisää tarvikkeita. Traktorissa kortilta suoraan on hyvin vaikeata mitata signaaleja, joten sen takia tein väliadapterin, johon saan kiinni logiikka-analysaattorin piuhat. Testipenkissä väliadaperi näyttää tältä:


Logiikka-analysaattorin liitäntä

DPS-korttiin sopivat naarasliittimet ovat näköjään käyneet vähiin, joten laitoin 18-napaisen paikalle 14-napaisen. Tästä aiheutuu se, että vaihteiden merkkivalot eivät toimi, mutta niitä ei ajastusten mittauksissa tarvitakaan. Adapterissa on liitinrima, josta on helppo hyppylangoilla yhdistää tarvittavat signaalit logiikka-analysaattoriin.

Analysaattorina minulla on kovin vaatimaton USB-liitännällä varustettu Saleae Logic 16:n vanha versio, mutta sen nopeus ja näytteenottokyky kyllä riittävät erittäin hyvin näin hitaiden signaalien mittaamiseen. Hyvää tässä analysaattorissa on sen edullisen hinnan lisäksi se, että sen Windows-softa on kohtuullisen hyvä ja sitä on myös vuosien mittaa ylläpidetty ja kehitetty. Uusin softa toimii Windows 10:ssäkin tuolla minunkin vanhalla laiteversiolla mainiosti.

Kokeeksi kytkin signaalit analysaattorille solenoideilta (DPS A ja DPS B), vaihtonapeilta (DPS- ja DPS+) ja kytkinpolkimen mikrokytkimeltä sekä mittasin ne omalla softalla varustetulta kortilta testipenkissä. Analysaattori tuottaa tämmöistä dataa:
  Logiikka-analysaattorin mittauksia

Traktorissahan kytkinpolkimessa on mikrokytkin, joka polkimen ollessa ylhäällä on kytketty +12V:iin ja joka poljinta painettaessa avautuu, joka näkyy sitten kortilla optoerottimen jälkeen 0V:na. Triggeriksi eli näytteenoton aloittajaksi on valittu kytkinpolkimelta tulevan signaalin muutos ykkösestä nollaan. Analysaattori tallentaa ja näyttää tästä tapahtumasta signaalien tilat sekunnin eteenpäin ja lisäksi asetuksissa valitun ajan eli 200 ms dataa ennen triggerin laukeamista.

Oranssi ja punainen signaali (DPS A ja DPS B) kuvaavat solenoidelle meneviä ohjauksia. Molemmat ovat ylhäällä, joten valittuna on siis kakkosvaihde. Sininen signaali (Clutch) kuvaa kytkinpolkimen mikrokytkimeltä tulevaa signaalia ja se laskee alas kursorin kohdassa A1 eli kytkin on painettu niillä main alas. Kursorin kohdassa A2 DPS A ja DPS B menevät alas eli ohjaus solenoidelle loppuu ja pikavaihde menee pois päältä. Kytkinpolkimen mikrokytkimen avautumisesta menee tässä tapauksessa n. 27 ms siihen, kun pikavaihde ohjataan pois päältä. Tarkkaan katsoen kuvassa näkyy myös kytkinvärähtely sinisessä signaalissa, softassa tämä on suodatettu pois eli vain ensimmäinen muutos huomioidaan.

Seuraavaksi siirryn sitten sopivan tilaisuuden tullen mittaamaan ajastukset eri tilanteissa traktoriin ja viritän oman softan vastaamaan toiminnaltaan alkuperäistä.
 

perjantai 4. toukokuuta 2018

HW debuggausta

Aiemmin mainitsin, että projektissa käyttämäni mikrokontrolleri ATmega8 ei tue rautatason debuggausta. Sulautetuissa projekteissa pelkkä simulaattoridebuggaus ei yleensä riitä, vaan softaa pitää pystyä ajamaan todellisessa ympäristössä ja testauksessa pitää pystyä asettamaan lähdekoodiin pysäytyskohtia (break points) esimerkiksi keskeytyskäsittelijöihin, jolloin niiden toiminta saadaan varmistettua. Koska HW debuggaus on siis oleellinen osa tuotekehitystä, käsittelen sitä tässä erikseen toisella prossulla, mutta sovellus pysyy kuitenkin samana.

HW debuggauksessa tarvitaan kohdeprossun ja softakehitystyökalun (tässä siis Atmel Studio 7) välille tähän tarkoitukseen suunniteltu elektroniikka. Normaalisti liitäntänä käytetään teollisuudessa de facto standardiksi muodostunutta JTAG-liitäntää, mutta harrastehommiin aidogt JTAG-purkit ovat usein hankintahinnaltaan turhan arvokkaita. Atmelin AVR-tuoteperheen prossuissa voidaan käyttää elektroniikaltaan edullisemmin toteutettua debugWIRE (dWire) -tekniikkaa, jota tässäkin tulen käyttämään.

Debuggauksen voisi tehdä sijoittamalla kohdeprosessori AVR Dragonin prototype arealle juotettuun kantaan, mutta teen homman tässä vähän toisella tavalla käyttäen prossulle erillistä halpisalustaa. Alustan etu on lähinnä siinä, että I/O-johdotus on hieman helpompaa kuin Dragonin 2-riviseltä liittimeltä ja toisaalta samaa alustaa voidaan käyttää itsenäisesti protoilussa ja testauksessa ilman Dragonia ja PC:tä. Yksinkertainen kehitysalusta näyttää esimerkiksi tältä:

Alusta AVR-mikrokontrollerille

Alustassa ei käytännössä ole muuta kuin helppokäyttöinen zif-kanta prosessorille, piikkirimat prosessorin pinneille, 10-napainen urosliitin ISP-kaapelille, reset-logiikka ja -painike, kide ja pari lediä. Kuvassa näkyvä USB-A-liitin on ilmeisesti tarkoitettu käyttöjännitteen syöttöön, vaikka se tähän tarkoitukseen onkin väärän mallinen. Tai sitten se on tarkoitettu jännitteen ulosottoon. USB:n datapinnejä ei luonnollisesti ole kytketty, koska alustassa ei ole USB-kontrolleria. Ainakin tuosta kuvan alustasta kannattaa ottaa huomioon se, että sillä voi käyttää prossun sisäistä AD-muunninta vain rajoitetusti, koska sekä Vref että Avcc tulot on yhdistetty suoraan käyttöjännitteeseen.

 AVR ISP on Atmelin ohjelmointiliitäntä ja sen fyysinen liitin on joko 10- tai 6-napainen. Koska Dragonissa tämä liitin on 6-napainen ja yhdistämisessä on helpointa käyttää 10p-nauhakaapelia, niin tarvitaan vielä kuvassa näkyvä sovitin. Näitä parin euron alustoja löytyy mm. Aliexpressistä, samoin sovittimia. Sovittimetkaan eivät ole hinnalla pilattuja, pari kappaletta maksoi muistaakseni postikuluineen alle euron.

Jos alustaa käytetään ohjelmoinnin (flässäyksen) lisäksi debuggaukseen, siihen pitää tehdä pieni muutos. debugWIRE -liitäntä käyttää prosessorin /RESET-linjaa, joten linjassa ei saa olla mitään ylimääräistä elektroniikkaa. Alustassa on toteutettu PoR (Power on Reset) kuvaan merkityillä ylösvetovastuksella ja kondensaattorilla. Alusta maksaa pari euroa kappale, joten niitä kannattaa hankkia samalla kertaa ainakin kaksi kappaletta. Toisesta poistetaan debuggausta varten PoR-elektroniikka eli vastus ja kondesaattori ja toiseen ne jätetään paikalleen, jolloin jälkimmäistä voi käyttää itsenäisesti. Piirilevyltä voi myös katkaista /RESET-pinniin menevän folion, mutta pitää huolehtia siitä, että yhteys ISP-liittimelle kuitenkin säilyy ehjänä.

Testauksessa käytän nyt tähän alustaan sijoitettua ATmega328P -prosessoria, joka on 28-napaisessa DIL-kotelossa pinniyhteensopiva ATmega8:n kanssa. Aiemmin tekemääni ohjelmaa voi käyttää lähes sellaisenaan, ainoastaan keskeytysrekistereiden tunnukset ovat erilaiset. Molemmat määritykset voi koodata samaan lähdekoodiin ja ympäröidä määritykset sopivilla #ifdef #else #endif direktiiveillä. Kohdeprosessori on tietenkin Atmel Studiossa ennen buildausta vaihdettava kohteen mukaiseksi. Liitännät tehdään vastaavalla tavalla kuin aiemmin kuvaamassani testausjärjestelyssä. Liitäntänä softakehitysympäristön (Atmel Studio 7) ja raudan välillä käytän edelleenkin AVR Dragonia.

Testaus ja debuggaus erillisellä prosessorialustalla

Dragon ja prosessorialusta liitetään 10p-ISP-nauhakaapelilla, jonka Dragonin päässä on Dragonin 6p-urosliittimeen sopiva sovitinadaperi. Dragonista vedetään lisäksi hyppylangalla prosessorin +5V käyttöjännite, maa yhdistyy ISP-kaapelin kautta. Prosessorialustan liitinrimoilta vedetään hyppylangat DPS-ohjainkortin ST62T15:n kantaan vastaaviin pinneihin.

Ohjelman flässäys Atmel Studiosta hoituu täsmälleen samalla tavalla kuin jos prosessori olisi Dragonissa prototype arean kannassa, tästä löytyy tarinaa aiemmasta blogikirjoituksestani. Edellyttäen tietenkin, että ISP-kaapeli on kytketty Dragonin 6p-urosliittimeen oikein päin: nauhakaapelissa pinni 1 on merkitty punaisella, sen pitää olla siis levylle merkityn ykköspinnin puolella (kts. kuva). Nauhakaapeli menee urosliittimiin vain yhdessä asennossa liittimissä olevan ohjausloven ansiosta. Ennen ohjelman ajamista raudassa käännetty ohjelmabinääri on siis ladattava normaaliin tapaan prosessorin flash-muistiin.

Varsinainen debuggaus raudassa käynnistetään Atmel Studiossa debuggaustyökalun valinnalla, joka tapahtuu helpoiten klikkaamalla työkalurivin kuvaketta kuvan mukaisesti ja valitsemalla sitten lomakkeelta työkaluksi AVR Dragon:
Debuggaustyökalun valinta

Tämä jälkeen valitaan interfaceksi debugWIRE. Jos debugWIRE -valintaa ei ole näkyvissä, se tarkoittaa yleensä sitä, että projektiin valittu prosessori (esim ATmega8) ei tue rautatason debuggausta.
Liitäntäprotokollan valinta

Lähdekoodiin kannattaa heti kättelyssä asettaa sopiviin kohtiin pysäytyskohtia (break point) F9:llä tai Debug-valikon valinnoilla. Ohjelma käynnistetään esim. F5:lla tai muilla Debug-valikon valinnoilla. Watch-ikkunaan voi laittaa seurattavien muuttujien tai rekistereiden arvoja, I/O-rekisterit ja pinnit saa näkyviin omaan ikkunaansa. Debuggauksen aluksi tulee ilmoitus, koska Dragonin ja kohdeprosessorin välisessä kommunikoinnissa voidaan käyttää kerrallaan vain yhtä protokollaa. Protokollan vaihto voidaan tehdä vain muuttamalla yhtä prosessorin sisäisistä asetuksista (DWEN fuse):



Kohdeprosessori pitää vielä käynnistää uudestaan, jotta uusi toimitila tulee voimaan. Tämä kerrotaan seuraavalla ilmoituksella: 

Tämän jälkeen debuggaus uudestaan käyntiin esim. F5:lla, jonka jälkeen ohjelma suoritetaan raudassa kunnes suoritus etenee pysäytyskohtaan (tässä tapauksessa keskeytyskäsittelyfunktioon). Seuraavaksi suoritettava rivi näkyy keltaisella pohjalla, pysäytyskohdat punaisella:
 

 Ohjelman suoritusta voidaan nyt jatkaa tai tarkastella sen hetkisiä muuttujien arvoja tai askeltaa lähdekoodia koodia rivi kerrallaan. Eli suoritetaan normaaleita ohjelman toiminnan selvittämiseen  ja/tai virheen etsimiseen liittyviä toimia. Huomattavaa on, että ohjelmaa suoritetaan koko ajan raudassa, Atmel Studioon tulee debugWIRE-liitännän kautta ainoastaan tietoa suorituksesta ja muuttujien arvoista ja toisaalta suoritusta ohjataan Studiosta käsin.

Lopuksi pitää vielä degugWIRE -toimitila lopettaa valitsemalla Debug -valikosta Disable debugWIRE and Close. Ellei tätä tee, niin uutta binääriä ei pysty flässäämään. Tietenkin jos haluaa debugata koodia uudestaan, kannattaa pysyä debugWIRE-toimitilassa.

 
 Tässä siis lyhyet ohjeet miten rautatason debuggaus hoidetaan AVR mikrokontrollereilla AVR Dragonin kautta. HW debuggaus on jokaisen sulautettuja softia tekevän ehdottomasti hallittava, ilman näitä työkaluja softan tekeminen ja ennen kaikkea sen toimivaksi saattaminen on usein lähes mahdotonta!
 

torstai 3. toukokuuta 2018

Softaprotoilua

No niin, ensimmäinen softaproto on nyt tehty ja testattu. Hyvin toimii ainakin testipenkissä eli projektilla on mahdollisuus jopa onnistua. Alla on kuva testijärjestelystä:

ATmega8 ensitestissä

Testausta tein siten, että ensinnäkin ATmega8 on AVR Dragon kehitysalustan kortilla ja prossu on yhdistetty hyppylangoilla Dragonin ISP-ohjelmointiliittimeen. Kun Dragon on yhdistetty USB:llä PC-koneeseen, niin saan ladattua ohjelmabinäärin ATmega8:n flash-muistiin eli flässättyä sen suoraan prossulle. Tässä vaiheessa huomasin, että oli valinnut vähän harkitsemattomasti samoja GPIO-pinnejä käytettäväksi DPS-outputtien ohjaukseen, joita käytetään myös Dragonin ja ATmega8:n väliseen kommunikointiin. Jotta hyppylankoja ei tarvitsisi ohjelmoinnin ajaksi vaihtaa paikasta toiseen, tein softaan sellaisen pienen muutoksen, että kun siitä käännetään debug-versio, niin käytössä on eri GPIO-pinnikonfiguraatio kuin lopullisessa versiossa. Hyppylankoja tulee ihan kohtuullinen määrä kuten kuvasta näkyy:

 ATmega8 johdotettu AVR Dragonista ST62T15:n kantaan

Softa sinänsä toimi lähes ensimmäisellä yrittämällä ongelmitta. Tässä ehkä näkyy kokemus, kun tästä huomattavasti vaativampia softaprojekteja on tullut aika pitkään tehtyä. Eipä tuohon paljon lähdekoodirivejä tullut, harvoin on tullut näin pieniä softia (kokonaisuudessan luokkaa 500 riviä lähdekoodia) tullut kirjoiteltua. Suurin ongelma käyntiin saamisen kanssa oli yksi viallinen hyppylanka, vika selvisi vasta mittaamalla kaikki hyppylangat yleismittarilla. Tämä on tätä tyypillistä kiinalaista laatua. Kun halpaa ostaa niin vikariski on aina olemassa. Tosin tuolla 20 kpl:een puolentoista euron hankintahinnalla (sis. pk.) ei itse viitsi alkaa näitä väsäämään, pienet laatupoikkeamat sallittakoon.

Kun mekaniikkaa ohjataan digitaalisesti, ongelmaksi usein tulee ohjauksen nopeus. Tuollainen 8-bittinenkin RISC-prossu toimiessaan pienimmällä mahdollisella kellotaajuudella (ATmega8:ssa 1 Mhz) suorittaa se n. miljoona toimenpidettä eli käskyä sekunnissa ts. millisekunnissakin vaikkapa ohjattavaa lähtöä ehditään heiluttelemaan luokkaa tuhat kertaa ja ATmega8:n perustajuudella (8 MHz) jo luokkaa 8000 kertaa.

Solenoidin toiminta-aika ilman eritystoimenpiteitä on luokkaa 30-80 ms, joka prosessorin mittakaavassa on todella pitkä aika: prossu ehtii tekemään kymmeniätuhansia tai jopa satojatuhansia käskyjä tuona aikana. DPS-ohjauksessa on lisäksi otettava huomioon hydrauliventtiilin toiminta-aika, joka sekin on luokkaa vähintään 10-20 ms. Eli kovin nopsasti venttiileitä ei saa yrittää avata ja sulkea. Käytännössä tämä tarkoittaa sitä, että kun venttiiliä ohjaavan solenoidin tilaa muutetaan, pitää toimenpidettä odotella luokkaa 100 ms eli 0,1 s eikä tänä aikana saa yrittää muuttaa tilaa uudestaan (eli valita uutta vaihdetta). Tämän 100 ms viiveen ohjelmoin myös tähän softaan oletuksena eli tuona aikana ei uutta ohjausta tehdä. Pitää vielä varmistaa olenko oikeilla jäljillä kunhan saan toimivan DPS-ohjainkortin käsiini. Aiemmin en ole tätä ohjaussekvenssiä tällä tasolla aika-akselilla tutkinut.

Tästä on hyvä jatkaa softan testausta ja viimeistelyä. Seuraava isompi askel tulee sitten, kun saan tilaamani piirilevyt ja saa asennettua uuden prossun DPS-kortille ja pääsen kokeilemaan korttia itsenäisesti. Sen jälkeen kortti otetaan käyttöön oikeassa ympäristössään eli koekäytän sitä Valtran traktorissa riittävän pitkän koejaon (päiviä tai viikkoja).

Tässä vaiheessa voisin tehdä pientä yhteenvetoa projektin kustannuksista. Rahaa ei juurikaan ole kulunut lähinnä siksi, että itselläni on ollut valmiina aika paljon tuotekehityksessä tarvittavaa kalustoa. Suurin kustannus oli piirilevyjen hankinta, ne maksoivat kokonaista 13 euroa/10 kpl. ATmega8 maksaa Suomesta kaupasta ostettuna n. 4,50 e/kpl. Viallisen DPS-ohjainkortin prosessorin korvaamisen tarvittavat osat maksavat siis n. 6 euroa, alle kympillä saa jo vanhat konkatkin uusittua todella hyvälaatuisilla versioilla. Eli kovin paha hinta tämä ei ole verrattuna uuden varaosakortin hintaan, joka alvillisena on tietääkseni nykyään luokkaa 700 euroa. Kympillä en tietenkään tule näitä korjauksia tekemään, mutta uuden kortin hintaan verrattuna erittäin kohtuullisella hinnalla korjaus tulee kyllä onnistumaan. Jos siis näitä prosessorivikaisia kortteja alkaa ilmaantumaan enemmän...

keskiviikko 2. toukokuuta 2018

Softakehitystä

Atmelin AVR-tuoteperheen 8-bittiset RISC-prosessorit (tai oikeammin mikrokontrollerit) ovat suosittuja ennen kaikkea harrastajien piirissä, ammattikäyttäjille on tarjolla saman perheen jopa 32-bittisiä prossuja. Suosion syynä on mm. on hyvä saatavuus, edulliset hinnat ja laaja valikoima. Harrastajille on tarjolla suuri joukko 10-30 euron kehitysalustoja, joilla pääsee liikkeelle helposti. Arduino-tuoteperheen alustat lienevät harrastuspiireissä tunnetuimpia, niillä aloittelijakin pääsee helposti tekemään käytännön toteutuksia. Oheislaitteita ja lisäkortteja Arduinoihin on saatavana enemmän kuin tarpeeksi.
Arduino Uno -kehitysalusta
 Softan kehitystyökaluja AVR:lle on tarjolla runsaasti yleisimpiin markkinoilla oleviin käyttöjärjestelmiin. Ammattikäyttöön maksullinen kehitysympäristö löytyy mm. IAR:lta,  samoin sulautettuja käyttöjärjestelmiä on tarjolla enemmän kuin tarpeeksi usealta eri toimittajalta. Microchipilta on ladattavissa myös ilmainen Microsoft Visual Studioon perustuva helppokäyttöinen Windows-pohjainen kehitysympäristö Atmel Studio, jota tulen myös tässä projektissa käyttämään. Atmel Studiossa on mukana assembler-kääntäjän lisäksi sekä C- että C++ -kääntäjä ja se tukee useita HW-alustoja ja kaikkia AVR-tuoteperheen prossuja. Studiosta löytyy myös ehkä enemmänkin aloittelijoille suunnattu yksinkertainen koodigeneraattori (Advanced Software Framework, ASF), jolla eri toimintojen toteuttamista on yksinkertaistettu. Valmiita kirjastoja ja ohjelmapalikoita löytyy netistä googlettamalla lähes joka tarkoitukseen mieletön määrä.

Atmel Studio 7

Tämä projektin softan toteutan perusC:llä ja ilman mitään frameworkia tai realiaikakäyttöjärjestelmää, koska tarvittava ohjelma tulee olemaan hyvinkin yksinkertainen. Pääohjelman rakenne on ns. ikiluuppi eli päätasolla on vain yksi päättymätön silmukka, jonka sisällä eri ohjaukset suoritetaan. Softan perusrakenteen olen esittänyt jo aiemmin, tosin siihen tulee varmasti tarkennuksia matkan varrella.

Tässä vaiheessa en käsittele vielä varsinaista ohjelma toteutusta tai sisältöä sen tarkemmin vaan keskityn esittelemään käyttämäni työkalut ja alustat sekä dokumentoimaan niin rauta- kuin softapuolenkin asiat siten, että joku toinenkin niistä mahdollisesti hyötyy sulautettuja projekteja tehdessään. Näistä kaikista kyllä löytyy taas kerran tietoa netistä lukemattomista eri paikoista, mutta teen tämän dokumentin myös itselleni muistiinpanoksi. Nykyään tuntuu, että uusia asioita tulee niin paljon eteen, että jos jossakin ympäristössä on vaikkapa puoli vuotta tekemättä mitään, niin yksityiskohdat tahtovat unohtua...

Atmel Studio 7 käyttöliittymä

Sulautetun järjestelmän softakehitystä ei tehdä tyypillisesti lopputuotteessa vaan käytetään valmista yleiskäyttöistä kehitysympäristöä. Softaa aletaan yleensä tekemään ennen kuin lopullinen rauta on valmis, niin tapahtuu tässäkin projektissa. Kehitysympäristöllä tarkoitetaan softan kirjoitus- ja käännöstyökalujen lisäksi HW-alustaa, jolla projektissa käytettävä prosessori saadaan henkiin ja jolla toisaalta saadaan käännetty ohjelma ladattua muistiin sekä suoritettua se. Rautapuolella tarvitaan siis prosessorin ympärille komponentteja, mahdollisesti toinen prosessori hoitamaan PC:n ja kohdeprosessorin välistä liikennöintiä (yleensä USB-liitännän kautta) sekä liitännät IO-porteille ja debuggaukselle.

Tässä projektissa käytän rautapuolen alustana yhtä monista halpisalustoista nimeltään AVR Dragon. Dragonia käytetään myös debuggaukseen liittämällä se esim. JTAG-liitännän kautta kohdeprosessoriin, mutta Dragonin levyllä on myös ns. Onboard Prototype Area:lla paikka, johon voidaan sijoittaa mikä tahansa AVR-tuoteperheen prosessori eli tässä tapauksessa siis ATmega8. Dragon osaa keskustella suoraan Atmel Studion (tai sieltä käynnistettävän työkaluohjelman) kanssa ja hoitaa tietojen tallentamisen ATmega8:n flash-muistiin ("flässätä") sekä keskustella kohdeprossun (pl. Atmega8) kanssa ohjelmaa debugtaessa. Ulospäin kommunikointi ja käyttöjännitteen syöttö niin alustalle kuin kohdeprosessorillekin hoituu USB-liitännällä.

AVR Dragonissa on oletuksena vain juotospaikka (ei siis kantaa) kohdeprossulle, joten levylle on juotettava kanta ja liitinrima ennen kuin Dragonin käyttö tässä projektissa onnistuu. Kantana kannattaisi käyttää ns. ZIF-kantaa (Zero Insertion Force socket, nollavoimakanta), jolla prosessorin sijoittaminen ja irroittaminen on helppoa. Tätä projektia varten vapaana minulla sattui olemaan vain tavallisella DIP-28-kannalla varustettu versio, mutta se toimii yhtä hyvin kun vaan prosessorin asentaa ja irroittaa varovaisesti.

 AVR Dragon kehitysalusta

AVR Dragon varustettuna ZIF-kannalla ja liitinrimalla

Dragonissa kohdeprosessorin kannalta tulevat signaalit on piirilevyllä kytketty vain liitinrimaan (juotettava levylle erikseen), joten kytkennät prossun ja Dragonin välille on tehtävä hyppylangoilla. ATmega8:n tapauksessa kytkentä menee seuraavan kuvan mukaisesti:
AVR Dragon/ATmega8 SPI- ja debugWIRE-kytkennät

Tässä kuvassa on oma alustani sekä siinä ATmega8 odottamassa ohjelmointia. Kytkentä on tehty hyppylangoilla edellisen kuvan mukaisesti. AVR Dragon vaatii normaalin USB-laitteen tavoin ensin ajureiden asentamisen, jonka jälkeen Atmel Studio tunnistaa laitteen, kun se on kytkettynä.

AVR Dragon ja ATmega8 prototype arealla

Atmel Studiossa lähdekoodin onnistuneen kääntämisen ja linkityksen eli buildauksen jälkeen syntyy prosessoriin ladattava ja siellä suoritettava binäärinen ohjelmakoodi ns. elf-tiedostoksi projektin kohdehakemistoon:
Debug-moodissa buildatun projektin .elf-tiedosto

.elf-tiedoston lataaminen eli flässäys kohdeprosessoriin tapahtuu Atmel Studiossa seuraavasti: 



  1. Valitse Tools | Device Programming ja sitten AVR Dragon ja laitteeksi ATmega8

2. Valitse Interfaceksi ISP ja lue Device Signature
 3. Valitse projektihakemistosta projektin .elf -tiedosto. Tarkista valinnat ja paina Program -painiketta.
4. Onnistuneen flässäyksen jälkeen näkyy flässätyn binäärin koko ja tilarivillä verifioinnin tila
ATmega8:n tapauksessa muuta oikeastaan Atmel Studiossa ei pysty rautaan päin tekemäänkään, koska ATmega8 ei tue rautatason debuggausta. Tämä näkyy mm. siten, että kuvissa esitetyn lomakkeen Interface-pudostuslistalta ei löydy dWire (debug wire) valintaa, joka on Atmelin protokolla prosessorin ja kehitysympristön väliseen kommunikointiin (Atmelin yhteydessä puhutaan myös OCD:stä eli On-Chip Debugging:sta, jota ATmega8 ei siis tue). Rautatason debuggausta ei siis tässä projektissa tulla käyttämään. Ei sitä varmaankaan tarvitakaan, koska ohjelma on kuitenkin erittäin yksinkertainen. Perustoiminnot saan varmistettua ajamalla ohjelmaa Atmel Studion simulaattorissa ja ajastukset ja muut testaamalla lopputulosta testipenkissä ja tarvittaessa skooppaamalla tai tutkimalla signaalit logiikka-analysaattorilla.

Ensimmäinen versio softasta on nyt flässätty ATmega8:aan ja seuraavaksi kokeillaan onnistunko ohjaamaan sillä DSP-ohjainkortin rautaa. Kokeilu tulee tapahtumaan siten, että yhdistän tarvittavat ohjauspinnit AVR Dragonin liitinrimalta DSP-ohjainkortille siltä irroitetun ST62T15:n kantaan. Kortin liitän aiemmin tekemääni DSP-ohjainkortin testipenkkiin, jolla saan perustoiminnot testattua. Tällä tavoin saan toivottavasti koko softan testattua melko valmiiksi siihen mennessä, kun tilatut piirilevyt tulevan Kiinasta. 
DPS-ohjainkortin testipenkki
(testissä näyttäisi olevan viallinen kortti, koska 2-vaihteella vain toinen lamppu palaa...)