Aloittelijan ensimmäinen tehtävä?

Moi,

olen 16-v poika lukiosta ja nämä erilaiset mikrokontrolleri ja ohjelmointiasiat ovat alkaneet kiinnostaa. Jonkin verran olen elektroniikkaa rakennellut (mm. takavalo skootteriin :laughing: ), mutta en mitään sen haastavampaa. Nyt on kuitenkin alkanut kiinnostaa erityisesti tämä Arduino ja sen avulla tehtävät erilaiset LED-vimpaimet. Paljon muutakin tuolla tietysti voi tehdä.

Voisiko joku selittää tarkasti, SUOMENkielellä, ei siis mitään koodikieltä, mitä mun kannattaisi ihan ensin lähteä harjoittelemaan. Tuotahan ohjelmoidaan C++ (?) ohjelmointikielellä/mikä lieneekään. Miten sen harjoitteleminen olisi fiksuinta? Olen siis käytännössä täysin nollilla tällaisen ohjelmointielektroniikan parissa. Mitään en osaa, mutta intoa on paljon :smiley:. Toivottavasti joku viitsii kertoa, tai linkata jonkun perusoppaan, jolla pääsisi aloittelemaan. Haaveena olisi tehdä jonkinlainen led-kello joskus ja siitä edetä kosketusnäyttöhommiin :wink:.

Kiitokset kaikille. Älkääkä nyt heti lähtekö aliarvioimaan :slight_smile:

robomaa.com/index.php?main_p … cts_id=914

Tuo opas on varsin hyvä, pääsee alkuun. Voi myös löytyä kirjastosta…

Mutta kuten kaikilla mikrokontrollereilla, kannattaa lähetä alussa ihan vain ledin vilkuttelusta. Tällä varmistetaan kehitysympäristön toimivuus ja koodin perusteetkin tulevat selväksi.

Hei!

Hienoa että junioreitakin kiinnostaa tämmöiset asiat, vaikka ei tässä itekään mikään vanhus vielä ole :wink:

Arduinosta en osaa neuvoa, mutta esimerkiksi Launchpadin ohjelmoinnista ja muita esimerkkejä löydät sivuiltani hutasu.net/Mikrokontrollerit … nchpad.htm (sori mainostus ;D )

Vaikka kyseessä on eri alustalle tehty opas, niin periaatteessa kaikki ledien vilkutushommelit yms on samanlaista. Arduinolla tosin tehdään enemmän ylemmän tason koodia kun taas piceillä, armeilla ja msp43-kontrollereilla ei välttämättä… Eli suomennettuna yhden “arduino-koodirivin” taakse kätkeytyy useampi matalan tason toiminnallisuus, joka on puolestaan C:llä/assemblyllä koodattu… Mutta tähän ei sinun kannata alussa takertua, vaan ottaa sellainen alusta käyttöön joka tunnustaa kivalta. Jos ei ala aukeamaan heti niin ainahan voi vaihtaa ja palata “vaikeampaan” sitten myöhemmin kun kokemusta on kertynyt.

Uskon että arduino-tietäjiä on täällä jotka osaa puolestaan neuvoa jos tosiaan arduino on se mitä haluat opetella :slight_smile: Kaikkea hyvää uuden harrastuksen pariin kuitenkin!

Eipä sillä alustalla varmastikkaan ole väliä, kunhan jonkun helpon löytäisi josta on hyvä aloittaa. Arduino vain on tutuin kaikista. Tuosta Launchpadistakin olen jotain lukenut, mutta vähemmän kuin Arduinosta. Täytyy tutkailla hieman noita sun sivuja, ainakin ensisilmäyksellä vaikuttaa olevan ihan asiallista tekstiä :wink:.

Täytyy varmaan partcosta käydä tänään tai huomenna kyselemässä mikä olisi järkevin alusta lähteä liikkeelle. Siitähän on sitten helppo jatkaa hieman vaikeampaan, kun helpommasta aloittaa.

Onko noilla ohjelmointikielillä paljonkin erilaisia eroja? Esimerkiksi tuolla C+±kielellä ja C-kielellä? Ymmärtääkseni C++ on ikäänkuin uudempi versio tuosta C-kielestä?

C++ tosiaankin on pikkasen uudempi ja kehittyneempi kieli. C++ tukee luokkia (class) ja muita hienouksia, mutta niiden käyttö ei taida olla kovin hyvin tuettuna pienemmillä kontrollereilla.

Jos kyseessä sulautettu linux tasoa oleva järjestelmä, niin silloin alkaa jo olemaan C++ hyötyä.

Ite olen lähinnä C:tä käyttänyt AVR:lle kirjoitettaessa. Arduinon oma kielikin on C johdannainen, johon on lisätty omat kirjastot.

Hyvä juttu. Tutustu aiheisiin ja päätä itse mikä kiinnostaa eniten :slight_smile:

Partcossa noita launchpadeja taisi olla alle kympillä, ainakin verkkokaupan puolella oli vielä pari viikkoa sitten. Robomaa.com kaupasta saa arduinoita ja muitakin alustoja.

Jokaisessa ohjelmointikielessä on yhtäläisyyksiä kuin erojakin joten ei nyt pysty kaikkea alkaa tähän kertomaan mitä on eroja jne, mutta C-kieli on mielestäni aloittelijan helpompi omaksua kuin alkaa suoraan opettelemaan oliopohjaisuuden hienouksia. Periaatteessa kielellä ei ole väliä, saman ledin vilkutuksen sinä joudut tekemään olipa kyse C:stä, C++:sta, arduinosta tai jostain muusta kielestä.

Itse olen käyttänyt eniten C:tä ja on tullu tehtyä koodia AVR:lle, MSP430:lle ja STM32-ARM-prossuille.

Kysele apuja jos tulee seinä vastaan, sitä vartenhan täällä toisaalta “lurkkaillaan” :wink:

Alustaksi suosittelen sitä mitä aiot oikeasti käyttää. Monimutkaisempi ja tehokkaampi on haastavampi opetella ja yksinkertaisempi sitten ei välttämättä riitä tekemään FFT:tä ja muuta raakaa signaalin käsittelyä jos niikseen on tarvetta. Kaikissa on oppimiskynnys ja mikään alusta ei ala soimaan heti niin kuin toivoo.

Mitä tulee C:n ja C++:n välisiin eroihin niin aloitetaan sanomalla, että ovat eri kieliä. C++ sisältää olio-ohjelmoinnin ja paljon muutakin. Monet asiat jotka ovat oikein tehdä C:ssä ovat paheksuttavia C++:ssa. Lisäksi C++:n kääntäminen on tautisen hidasta, luo usein suurempi binäärejä ja jos oikeasti tarvitsee ihmetellä sen tekosia niin siinäpä on ihmettelmistä verrattuna C:llä tehtyyn ratkaisuun. C:ssä kun on dataa, funktioita ja kontrollia. C++ tulee sitten olio-ominaiuuksien takia “ylimääräistä” tavaraa joukkoon. C++ kääntäjä osaa yleensä kääntää C-kieltäkin ja sitä voi tunkea C++:n joukkoon, jos niikseen tulee.

Kaikilla alustoilla ei ole tarjolla kuitenkaan C++ kääntäjiä.

Minun tekisi mieleni sanoa, että ota jokin pieni kehityslankku nokan eteen ja datalehti ruudulle. sen jälkeen ala törkkimään assemblyllä rekisterejä ja osoitteita yms sellaista. Pääsisit sisälle maailmaan. Se on kuitenkin raskas tie ja vähän palkitseva. Verrattuna johonkin pythonia pyörittävään laitteeseen jolle sanotaan import blinking led. Älä kuitenkaan. Sillä motivaatio karisee ja varmasti helpompia tapojakin on.

Itse kävin tuon tien aikoinaan läpi atmelilla alkaessa. Kirjoitin ensin C:llä jotain, käänsin sen ja pyrin aina kirjoittamaan pienemmän totetutuksen assemblerillä. Mutta päämäärini ovatkin usein törkeästi täydellisyyteen pyrkiviä.

Kiitokset kaikista vastauksista tähän mennessä :wink: !

Tarkoituksena on pyytää joululahjaksi varmaankin Arduino. Se nyt tuntuu kuitenkin kiinnostavan kaikista eniten. Aloittelen sillä sitten ledien vilkuttelusta ja yritän harjaantua tuon kielen kirjoittamisessa. Eiköhän tuosta päästä hyvin alkuun. Toisaalta tuo Launchpadikin varmasti ihan hyvä, olisiko se jopa parempi vaihtoehto? Onko Launchpadilla tällaisen tekeminen mahdollista? Pienemmässä mittakaavassa, mutta tuollaisen haluaisin joskus saada tehtyä. Tuosta tämä innostus ja halu oppia lähti liikkellekkin :stuck_out_tongue:

Nuo ohjelmointikielten kääntäjät pitää varmastikkin ladata netistä, mistä ? Tosissaan aika alkutekijöissä ollaan, joten tyhmiä kysymyksiä tulee (tämä tuntuu juuri yhdeltä sellaiselta… :smiley:) Ilmaista vaihtoehtoa tässä nyt haen… Mikä on paras näistä ilmaisista mitä nyt on tarjolla? Googlea käyttämällä löytyi pari vaihtoehtoa: nämä.

Millaista kieltä noihin kääntäjiin sitten kirjoitetaan? Noissahan on varmasti joitain komentoja, kuten upeassa laskimessani, jossa kirjoitetaan: solve[lasku,x] = vastaus

Tässä on jonkinlainen käyttöesimerkki tuolta aiemmin linkkaamaltani sivulta. Mitä nuo erilaiset komennot tarkoittavat? Esimerkiksi tuo jokaisen uuden kappaleen alussa oleva [b]C:[/b] Pitääkö nuo komennot opetella ihan ulkoa, jossain jonkinlaista taulukkoa? Tuolla CsCrazyn sivulla oli ainakin noita “varattuja” sanoja. Kai jotain muitakin sanoja löytyy? Ymmärtääkö nuo ohjelmat esimerkiksi, jos kirjoitan käskyn: Blink LED? Todennäköisesti eivät, vaan tuokin pitää kirjoittaa jollain koodikielellä :smiley:

Sitten jos joku voisi vielä kertoa mitä syntaksi tarkoittaa… :mrgreen:

Jos tuohon arduinoon päädyit niin sen kääntäjä löytyy täältä: arduino.cc/en/Main/Software
Esimerkkejä kyseiselle alustalle arduino.cc/en/Tutorial/HomePage
näytti olevan aika hyvin esimerkkejä perus ledin vilkuttelusta langattomaan tiedonsiirtoon…

Varatut sanat: Näitä sanoja ei saa käyttää muuhun kuin niille varattuun tarkoitukseen. Muuten voitkin määritellä muuttujat haluamillasi nimillä.

Ei tarvitse välittää noista kääntäjien komennoista. IDE tekee kaiketi sen puolestasi.

Toivottavasti en sekoita, kun paljastan karuja totuuksia.

Jos tuohon Arduinoon päädyt niin tuolla tutorial sivulla on blinking LED esimerkki.
Suurinpiirtein sama esimerkki pelkällä Atmelilla löytyy http://nongnu.org/avr-libc/user-manual/group__demo__project.html

Kaikki tuon kään tämiseen kuuluvat tapahtumat kääntämisessä tapahtuu Arduinon IDEn takana ja kirjastojen avulla. Tuossa AVR libc:n esimerkissä on käytetty keskeytyksiä ja se on tosiaan hieman erilainen.

Täysin samanlainen vilkutusohjelma raa’alla Atmelilla olisi:

#include <avr/io.h>
#include <util/delay.h>
void setup(){
  DDRB = (1<<5); //Ulostuloksi
}
int main(){
  setup();
  while(1){
    _delay_ms(1000); //viive
    PORTB |= (1 << 5); //Päälle
    _delay_ms(1000); //viive
    PORTB &= ~(1 << 5); //Pois
  }
}

Kuten huomataan, on Arduino luonut oman ympäristön, joka on huomattavasti yksinkertaisempi. Noista bittioperaatioista olen kirjoittanut artikkelinkin miten nuo tapahtuvat.

Ja ihan mielen lisää sekoittamiseksi paljastan, että kyllä. Voit kirjoittaa led-blink, kuten forthilla on tehty. http://amforth.sourceforge.net/recipes/arduino-helloworld.html Olen kirjoittanut tuostakin mielenkiintoisesta ohjelmointikielestä lukija-artikkelin, joten siitä voi tutustua asiaan. Forth on sitten kaikkea muuta kuin tavanomainen kieli. Lisäksi amforthin flashaaminen siihen vie yhteensopivuuden Arduinon kanssa. Ja kaiketi tarvitset myös jonkun ohjelmmointilaitteen jos ylikirjoittaisit arduinon buuttiloaderin. Tuon tunkkaaminen pystyyn olisi sitten jo vaikea temppu, jos nollasta lähtee liikkeelle.

Sitten on muuta kummaa kuten http://www.picobasic.com/fi/index.html joka on PIC alustalle tehty. Se on sitten oma maailmansa myös. Jos kuuslankku on tuttu nuoruudesta niin pääsee BASICilla ohjelmoimaan.

Vaihtoehtoja on pajon ja sovelluskohteita määrättömästi. Se minne haluat hyökätä riippuu omista mielenkiinnoista ja uteliaisuudesta.

Mutta Arduino ja Launchpadosaamista löytyy foorumilta eniten.

Tuli tuosta mieleen, että tuossa paketissa pitäs olla kohtuu hyvä opus arduinolla alotteluun. Tuosta kirjasta voi saada myös muita projekti ideoita.

partco.biz/verkkokauppa/prod … s_id=10772

Edit:
Ite en ole arduinoon koskenyt, mutta itellä käsitys, että pitäs olla helpoin ympäristö aloittaa. Eli ei ole ympäristön kanssa tappelua. Esim. jos vertaa gcc ympäristöä windowssissa msp430 launchpadille, jossa piti kääntää oma debuggeri yms :slight_smile:

Kun on oppinut arduinolla tekemään, niin kannattaa tutustua AVR:n natiivi ympäristöön eli AVR Studio + WINAVR (Itellä AVR Studio 4 + WINAVR + AVR Dragon debuggeri. Näyttää että uusin AVR Studio 6 sisältää C/C++ kääntäjän ja tuen AVR:lle ja ARM Cortex M3 + M4 sarjalle)