Aloitteljan kehitysalusta?

Eli hakusessa olisi jokin halvahko (opiskelija kun olen) mikropiirialusta, jolla lähteä opettelemaan piirin koodausta.

En aivan aloittelija ole elektroniikan kanssa (asentaja-tutkinto), mutta mikroprosessoriohjelmointia opiskeltiin vain piceillä (PIC16F877A) ja Matrix Multimedian Flowcode-ympäristöllä. Nyt kun olen ajatellut jotain projektia aloitella totesin, että koulun loputtua ei (maksullinen ja aika kallis) flowcode olekaan enää saatavilla enkä oikein tiedä miten C:llä piirejä ohjelmoidaan, joten aika perusteista pitää lähteä liikkeelle. C-kurssi kuitenkin onneksi käytiin, joten syntaksi ei ole aivan vieras, mutta laiteohjelmointi sillä on.

Lueskelin tuossa juuri nuo Laurin kirjoittamat oppaat läpi, ja vaikutti tuo Duemilanove olevan kohtuu pätevän oloinen, kuten myös TI:n launchpad. Pystyykö kyseisillä alustoilla ohjelmoimaan useampia erilaisia piirejä, vai onko ne sidottu tietynmalliseen piiriin? Entä voiko arduinon IDE:llä ohjelmoida piiriä samaan tapaan kuin muitakin, vai oikovatko nuo valmiit funktiot liikaa? Haluaisin jotain, jolla voi lähteä liikkeelle ihan erilaisista ledivilkuttimista, mutta myöhemmin sitten mahdollisesti tehdä laajempaakin projektia.

Mikäli ohjelmointi ei ole kovin tuttua hommaa, niin suosittelisin lähtemään aivan ensimmäisenä liikkeelle Arduinolla (jotka käyttävät siis Atmelin ATmega-mikrokontrollereita). Tällöin ei tarvitse tehdä hommia rekisteritasolla, mikäli ei halua. Löytyy esim. paljon valmiita funktioita, jotka tekevät asioita ohjelmoijan puolesta.

Arduino-hommeleita hyväksikäyttämällä ledi voisi vilkkua esim. näin:

[code]#define LEDPIN = 13;

void setup()
{
pinMode(LEDPIN, OUTPUT);
}

void loop()
{
digitalWrite(LEDPIN, HIGH);
delay(1000);
digitalWrite(LEDPIN, LOW);
delay(1000);
}[/code]

Esim. Texas Instrumentsin MSP430G-sarjan MCU:illa ledi taas vilkkuisi näin:

[code]#include <msp430g2231.h> // MCU:ta vastaava header-tiedosto

void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Pysäytetään watchdog-timer
P1DIR |= 0x01; // Asetetaan P1.0 ulostuloksi
// (0x01 = 0b00000001)
unsigned int i;

while(1)
{
    P1OUT ^= 0x01;             // Muutetaan pinnin tilaa XOR-operaatiolla
    for (i=0; i<50000; i++);   // Viive
}

}[/code]

Mikäli hankit Arduino-alustan (esim. Duemilanove tai Mega), ei mikään estä käyttämästä sitä ilman Arduino-kirjastoja. Mikäli Bootloader poistetaan muistista, ei flashaus onnistu kuitenkaan enää suoraan USB:llä, vaan tarvitset erillisen ohjelmointilaitteen. Tällöin asioita joutuu tekemään rekisteritasolla, joka tietysti vaikeuttaa aluksi.

Arduino Duemilanovessa käytetään DIP-koteloitua mikrokontrolleria, joten se on helposti vaihdettavissa ilman juottamista. Yhteensopivia ATmega328P:n lisäksi ovat muistaakseni ATmega48/88/168. Noissa siis erona ainoastaan flash-muistin määrä (4, 8 ja 16 kilotavua).

TI:n LaunchPadilla voi ohjelmoida MSP430G2xxx-sarjan mikrokontrollereita:

“LaunchPad’s DIP target socket allows users to quickly drop in any MSP430 Value Line device that is in a DIP package of up to 20 pins. Currently, the devices shown in the table below are supported. LaunchPad will also continue to support the new devices of the MSP430 Value Line.”

Kiitos vastauksesta, päädyin tilaamaan Arduino Unon ja starter kitin paeae:lta, näytti tuo koodi huomattavasti ymmärrettävämmältä kuin launchpadilla, ja taitaa nuo atmelin prosessorit ainakin vielä yleisemmin käytettyjä.

Jäi vielä kysyttävää tuosta bootloaderin pyyhkimisestä, eli saako sitä ajettua takaisin mitenkään, jos sen vahingossa tai tarkoituksellisesti poistaa? Lakkaako silloin koko usb-roska toimimasta, eli ISP:llä joutuu sen jälkeen ajamaan softat sisään?

Kyllä Arduino-bootloaderin siirtäminen takaisin onnistuu. Siihen tarvitsee tosin ohjelmointilaitteen. Olen kirjoittanut aiheesta yhden oppaankin, mutta sitä ei ole vielä julkaistu, koska vaatii vielä päivittelyä. Bootloaderin voi siirtää takaisin esim. Arduino IDE:llä tai vaikkapa AVR Studio 4:llä.

Itse tilasin myös arduinon ja muutaman viikon kokoemuksen jälkeen on ollut erittäin helppo ohjelmoida, valmiita pätkiä on paljon ja hyvin nopeasti sitä oppii itse kyhäilemään.

Kokemusta koodamisesta ennen arduinoa oli php mutta hyvin pitkälle pääsi jo sillä tiedolla kun koodamisen perustieto oli kunnossa.

Ja puhdas AVR C blinken licht demo löytyy täältä:
http://www.nongnu.org/avr-libc/user-manual/group__demo__project.html

Koodaamisesta… Ei ole merkitystä mikä on kieli. Itse puhun Hitachin HS sarjalle ja AVR:lle assembleria jos niin tarvitsee, C:tä ja C++ tietokoneille ja kaikille sitä ymmärtäville. Tuossa ihan huvikseni kirjoitin ja lottonumeroiden arvonnan brainfuckilla. PRNG oli tietenkin vähän pöljä, mutta idea ohjelmoinnissa on, että kielellä ei ole merkitystä. Vain tietorakenteet ja kontrolli on tärkeää. Syntaksi on vain mukavuustekijä.

Ero noilla arduino ja launchpad koodeissa oli, että arduinossa kutsuttiin funktiota sytytä() ja sammuta() kun taas launchpad sanoi aja XOR paikkaan portti.

Puhds AVR-C toteutushan menee niin, että käännösvaiheessa tulee kontrolleri kohtaiset headerit käyttöön. Silloin esimerkiksi UARTin käsittely tai keskeytykset voivat mennä särki ja ne pitää kirjoittaa oikeaan keskeytykseen. #ifdef on kuitenkin tuossa hyvä ystävä.

Nämä ovat sitten makuasioita ja niistä voi kiistellä maailman tappiin asti mikä on parempaa ja mikä helpompaa ja mikä parempaa. Ja tämä on vain minun perustuslain turvaama mielipide ja se tulee sellaisena ottaa. :slight_smile: