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...)
 


   


Ei kommentteja: