MetkuMods

Kuinka pääset alkuun mikrokontrollereiden kanssa - Osa 1.

Perusteet käyttäen Atmelin mikrokontrollereita
 
Kirjoittaja: Aki Korhonen
Julkaistu: 26.01.2009
In English In English
Suomeksi Suomeksi

Esimerkki 3: 5 ledin skanneri / Ritari Ässä -animaatio

Olet varmaankin lukenut Metkun pari vanhaa modausartikkelia vilkkuvista ledeistä (Vilkkuvalot 1 ja Vilkkuvalot 2), jotka on tehty useita vuosia sitten. Nyt tehdään samantyylinen systeemi mikrokontrollerilla. Päävahvuudet mikrokontrollerin käyttöön verrattuna normaaliin piiriin ovat, että voit ohjelmoida kontrollerin tekemään minkälaisia animaatioita vaan haluat ilman, että muutat ledien fyysistä järjestystä. Kirjoita vaan uusi animaatiosekvenssi, liitä ohjelmointikaapeli piiriin ja siirrä uusi ohjelma sisälle, vóila.

Jos tulee virheitä, kun yrität ohjelmoida piiriä (kuten 'Device not found' yms) koita ledien irroittamista pinneistä 5, 6 ja 7, jotka on käytössä ohjelmoinnissa (ledit ottavat virtansa ohjelmointilinjoista ja piiri ei saa tarpeeksi, joten se ei ohjelmoidu). Kun ohjelmointi on valmis, kytke ledit takaisin paikoilleen. Helppo korjaus tähän voisi olla käyttää yhteistä maata ledeille, joka on kytketty yhdellä johdolla yleiseen maahan, joten ohjelmoidessa voit ottaa ainoastaan tämän yhden kytkennän irti.

 

How to get started with microcontrollers - Part 1
Lisää ledejä lisättynä alkuperäiseen kytkentään

// Taajuusarvo, jonka viivefunktio tarvitsee.
// Piiri on tehdasasetettu toimimaan sisäisellä
// oskillaattorilla 1 MHz taajuudella, joten arvoksi tulee tähän 1000000UL
#define F_CPU 1000000UL

#include <avr/io.h>
#include <util/delay.h>

// Animaatioruutujen määrä
#define FRAMES 8

// Animaatiosekvenssin taulukko.
// Kaikki arvot ovat binäärimuodossa helppoa
// lukemista varten (1 = ledi päällä / 0 = ledi pois päältä)
// Oikeanpuoleisin bitti on PB0 ja vasemmanpuoleisin
// bitti '0b' jälkeen on PB4.
// -> 0b[4][3][2][1][0]
char animation[FRAMES] =
{
	0b00001,
	0b00010,
	0b00100,
	0b01000,
	0b10000,
	0b01000,
	0b00100,
	0b00010
};

int main(void)
{
	DDRB = 0x1F; // PB0-PB4 ulostuloja
	PORTB = 0x00; // Aseta kaikki pinnit alas
	
	int i;
	
	while(1)
	{
		// Käy läpi kaikki ruudut taulukosta ja jatka loputtomasti
		for(i=0 ; i<FRAMES ; i++)
		{
			// Kirjoita taulukon arvo porttiin
			PORTB = animation[i];
			
			// Odota 100 ms ennenkuin siirrytään seuraavaan
			_delay_ms(100);
		}
	}
	
	return 0;
}

 

How to get started with microcontrollers - Part 1
Esimerkki 3 toiminnassa

Yhteenveto

Toivomme, että sait kytkentäsi toimimaan ja ledit vilkkumaan ohjeiden avulla. Jätä kommentti tai kysymys, jos on jotakin kysyttävää. Artikkelin kakkososa on suunnitteluvaiheessa ja voit jättää ideoita kommenttiosioon, mikäli haluaisit jotain nähdä kyseisessä artikkelissa (esimerkkejä jne). Kaikki ideat ja ehdotukset otetaan huomioon ja hyödyllisimmät saattavat päästä valituksi.

Alla on muutama hyödyllinen linkki, joita kannattaa katsoa:
» Atmel AVR - Atmelin AVR-tuotesivut
» AVR Freaks - AVR-yhteisö, AVR-projekteja, foorumi yms.
» Arduino - AVR-kontrolleria käyttävä avoin kytkentäalusta
» Open Directory: AVR - Lisää AVR:ään liittyviä linkkejä

Muista myös rekisteröityä ja lähettää kuva laitteestasi AllTheModsiin (muut projektit yms ovat tervetulleita myös!)

Subscribe to Metku.net
Digg It
Save This Page
Stumble it!
Add to Facebook


Aiheeseen liittyviä artikkeleja Metkussa:


Monikerroskaiverrusten animointi


Animoidut ledit:Episode 2


Electroniikan perusteet


ColorFade


HDD Eyez


On-line laskuri ledin etuvastukselle


Osallistu keskusteluun. Artikkeliin liittyvä viestiketju foorumissa.
  • 27.01.2009 12:58 zaketus

  • Great!
    I use ATtiny85s, ATmega8s and Arduino. ATtiny85 is same as ATtiny45 that was used in article, but it has more flash memory (more than enough for small projects). With small package, low price and great performance it's great uC to start with.

    Only sky is the limit when it comes to uC projects. For example it's possible to scan many buttons with one i/o pin by making voltage divider with resistors and using ADC (analog to digital converter).

    There are lots of libraries to be used when interfacing some devices (like some LCDs (nokia 3310's display for example)), so it's easier to make something. After some time, it gets easier to modify those libraries, due the learned stuff.


    And what comes to programming languages... I started with C then tried Bascom-AVR (it's like telling uC what to do, in english :P) and then came back to C. The real fun will begin shortly, when I start programming with ASM :D

    One advice for starters: print (or draw) picture of you uC with pinout to paper, open texteditor (or AVR-Studio...what ever you use from writing your programs) to half of the screen and open your uC's datasheet to another half of the screen. This way you don't need to "surf" through the windows.

    I've been thinking to make that USBasp for long long time... Maybe I'll make it someday, so I can use my eee from programming uC:s (except pics...still have to program them with desktop pc).


    Hmmph too lazy to translate this to finnish... Hopefully everyone understands what I wrote. If you don't, just ask.


    E: AVRFreaks's (link also in article, www.avrfreaks.com) forums are great place to search AVR related stuff. Lots of tutorials, projects, questions and answers related to common and not so common problems... EVERYTHING and more.

    Everyone who plays with uC:s raise your hand!

    o/ -One AVR and pic user over here!
  • 27.01.2009 23:09 Zyrppa

  • Itse käyttäisi mikrokontrollereita, mutta en ole opetellut C:tä eikä oikein innosta ruveta harjoittelemaan sitä.
    Onko C-kieli paljonkin vaikeampaa kuin PHP? Esimerkkikoodeista ymmärsin kyllä osan, mutta esim. nuo heksajutut menevät yli hilseen.
  • 27.01.2009 23:11 qwerty

  • Odotan innolla jatkoa...
  • 27.01.2009 23:15 japala

  • PHP ja C ovat hyvinkin lähellä toisiaan loppupeleissä. Noi hex tai yleensäkin luvut, kun mennään pois kymmenjärjestelmästä voivat tuntua aluksi hankalilta mutta, kun ymmärtää mitä noilla luvuilla koetetaan ohjaimelle sanoa niin kyllä niitä oppii sitten käyttämäänkin. Ihan säännöt noiden käyttöön on, ei ole salatiede kyseessä. :) Yleensä noi alun heksatkin menee enemmän tai vähemmän samoilla lähtöarvoilla, joten voi panostaa sitten tuohon C-koodin vääntöön.
  • 28.01.2009 00:09 zaketus

  • DDRB = 0x1F; kohta voidaan kirjoittaa myös binäärimuodossa:
    DDRB = 0b00011111;

    Molemmat tekevät saman jutun... PB0-PB4 asetetaan ulostuloiksi. Kuten saattaa huomata, viisi oikeanpuoleista numeroa ovat ykkösiä (PB0-PB4 -> viisi pinniä, jotka on asetettu ulostuloiksi) , loput ovat nollia. Tuota 0b:n perässä olevaa lukua lähdetään lukemaan oikealta: ensimmäinen on bit0, seuraava on bit1, seuraava on bit2 jne.
    Samaa 0b******** muotoa voidaan käyttää myös muihin rekistereihin kirjoitettaessa.

    DDRB on tiedon kulkusuunta -rekisteri B-portille. Kyseinen rekisteri sisältää kahdeksan bittiä. ATtiny15/-25/-45/-85 piireissä on vain B-portti ja siinäkin on vain kuusi i/o-pinniä. Tällöin siis esim DDRC:llä ei voi määritellä piirin pinnien input/output tyyppiä.

    Eli jos DDRB:n bit* on ykkönen, on PB* ulostulo. Jos DDRB:n bit* taasen nolla on PB*....aivan, sisääntulo.

    Pitkähkö viesti kirjoitettuna puoliunissaan tietää harvoin hyvää, mutta otan riskin.
  • 28.01.2009 02:21 toffie

  • first thing, great guide!
    second thing, bad people from Finland posting replies here in Finnish ;)

    poor Swedes and all others :D
    anyway.. great guide and I really look forward to next part!

    ideas for next part.. why not make an uC control one servo and one dc engine on the same circuit?
    controlled by two buttons each, back/forward for the engine and left/right for the servo..

    that would be a project I would like to follow and try out myself if you could get the software for it, as I just cant understand C programming yet ;)
    I have no problems with PHP as I've worked it for a couple of years, so I know the basics in programming.. but learning C for an uC, that isnt the easiest.. for now :D

    looking forward to part 2 !! :)

    // Chris from SweMOD ;)
  • 28.01.2009 08:19 japala

  • It seems that motors are something that our friends on #metku.net channen in IRC are also interested in. I too feel that this could be a good choice for the next topic. If not in the part 2 but at least in parts that follow it.
  • 28.01.2009 11:12 Mipi

  • Japala; Could you post schematics & code from your projects (water heat indicator, etc.) as an example? They would make a great self-study material.
  • 29.01.2009 01:18 Jipa

  • zaketus wrote:
    DDRB = 0x1F; can also be written in binary:
    DDRB = 0b00011111;


    I'm slowly starting to remember stuff from the school :D After all I DID go through the four year school and SHOULD know this stuff... I just haven't used it for a year now... Most likely some day I'll get back to that :)
  • 17.02.2009 22:45 deadman

  • koskas seuraava osa tulee?
  • 03.03.2009 07:56 Wilzu

  • Jos mahdollista, voisitteko seuraavaan osioon laittaa myös vaihtoehtoisia tapoja toteuttaa nuo koodit? Meillä koulussa tuollainen ritariässävalo on tehty hitusen eri tavalla, joten en kaikkia koodinpätkiä ihan ymmärtänyt. Myöskään C-kielestä yleisestiottaen ei liikaa ole kokemusta, joten joku pieni "sanakirja" mitä mikäkin komento tarkoittaa tai linkki johonkin idioottivarmaan oppaaseen olisi tosi jees..
  • 03.03.2009 13:44 Jack_Hammer

  • Ensi jaksossa jotakin mutkikkaanpaa ku ledien välkyttelyä, esim. automaattinen tuulettimensäädin.
  • 04.03.2009 19:42 gNome^

  • Meneekin mahdottoman mutkikkaaksi ;)

    A nice guide

    Anyone who is interested in embedded projects and µC's should check out www.avrfreaks.net I noticed that Japala is registered there also.

    And for converting hex to binary to decimal and back again, Windows calculator does this automatically.

    Hopefully we'll see more of this, since embedded systems are becoming a trend in modding these days.
  • 07.04.2009 16:24 Wilzu

  • Missäs vaiheessa seuraava osuus tutoriaalista on? atinyssä ei taida olla a/d-muuntimia, joten nuo säätimet taitavat olla vähän utopistisia?

    Tosiaan olisi hyvä jos raapaistaisiin vähän syvemmin sitä ohjelmointipuolta. Ei nuo normaalit c-kielen oppaat oikein sytytä, kun yleensä niiden avulla ei tehdä mitään konkreettista..
  • 07.04.2009 21:53 zaketus

  • *Kuulemani mukaan jatkoa on tulossa ja vieläpä ihan mukavalla sisällölläkin... mutta sitä odotellessa (luvassa odottamisen arvoista tavaraa, tekijän tietäen):*
    AVR-Freaksin foorumeilla tutorials-osiossa on kyllä todella hyviä ohjelmointioppaita. Sieltä löytyy ihan step-by-step vinkkejä. Lähtökohtana ihan selkokielellä ohjelma kohta kohdalta ja aina pienin askelin vaihdetaan selkokieli C:ksi. Sieltä löytyy hyvät oppaat niin ADC:n, PWM:n, keskeytyksien, kuin monen muunkin ominaisuuden käyttöön. Näitä kun yhdistelee/muokkailee oman mielen/tarpeen mukaan, pääsee jo pitkälle. Isojen projektien tekohan on usein melko pitkälti ihan perinteisten ominaisuuksien yhdistelyä oman tarpeen mukaan.

    Edit: Ja monissa ATtinyissä on ADC. Myös noissa ATtiny15, -25, -45 ja -85.


    :P
  • 07.04.2009 22:48 japala

  • Höh, ei näin. Ei innostunutta lukijaa heti ensimmäisenä ohjata muualle vaan naputetaan se juttu!!!11 ;)
  • 08.04.2009 01:09 AK

  • Jutun toinen osa valmistuu pikkuhiljaa. Näillä näkyvin luvassa ainakin jotain moottoreihin liittyvää, vilkutellaan ledejä vähän eri tavalla, laitetaan kontrolleri jutustelemaan tietokoneen kanssa ja varmaankin jotain a/d-muuntimeen liittyvää.

    And repeats in english; the second part of the article is on its way and there should be something related to motors, a bit different led flashing, controller talking with the computer and something related to a/d-converters.

    [quote="japala"]Höh, ei näin. Ei innostunutta lukijaa heti ensimmäisenä ohjata muualle vaan naputetaan se juttu!!!11 ;)[/quote]
    Taisi mennä henkilöt sekaisin? ;)
  • 08.04.2009 07:29 japala

  • "Missä se edit-nappula onkaan !%#&#" ... Heh, no juu, myönnetään. :roll:
  • 07.07.2009 08:14 Bramfeld

  • Tulee mieleen vain yksi kysymys. Mistä ihmeestä noita Atmelin mikrokontrollereita voi ostaa? Ei tunnu löytyvän oikein mistään.
  • 07.07.2009 16:16 Bramfeld

  • [quote="gNome^"]http://www.elfa.se
    http://www.farnell.fi

    sieltä niitä saa. muitakin nettikauppoja varmaan on, mutta noilla on pärjätty tähän asti.[/quote]

    Ja mitenkä ihmeessä tilata sieltä yksityishenkilönä?
  • 08.07.2009 15:58 Bramfeld

  • Tämä oli aluksi ihan huvittavaa, mutta nyt se on lähinnä surullista... On mielenkiintoista että näitä siruja voisi ohjelmoida kymmenvuotias lapsikin ainakin tämän oppaan kanssa, mutta niitä ei yksityishenkilönä voi ostaa mistään. Olen oikeasti selaillut googlea tässä jo pari päivää eikä niitä saa ostettua mistään. Noilla farnellin jälleenmyyjillä ei yhdelläkään taida olla lainkaan atmelin tuotteita. Partcolta voisi tilata toki yksityishenkilönä mutta siellä ei ole attiny25/45 siruja. Tottakai niitä ulkomailta löytyisi, mutta siinä tulee kivat postikulut mukaan, joten ei oikein huvita tilata kokeilun vuoksi. Paras minkä olen löytänyt on Tietopetri Oy, mutta se nyt tuntuu hieman pimeältä kaupalta. Mistä te hyvät ihmiset oikeasti hommaate näitä siruja?
  • 09.07.2009 13:26 zaketus

  • Itse olen muutamaankin kertaan tilaillut Tietopetriltä (ja Tietomyrkyltä) piirejä ja jotain muutakin ihan hyvällä kokemuksella.
    Kerran ei ollut tilattua tuotetta hyllyssä, joten lähettivät sähköpostia asiasta ja ehdottivat, mitkä tuotteet voisivat kelvata tilalle jne. Jotkut kaupat saattavat ilmoittamatta etukäteen odottaa, kunnes tuotetta saapuu ja lähettävät sitten. Tai sitten saattavat pistää jotain "vastaavia" tuotteita tilalle.

    Toimitus ja asiakaspalvelu toimii mielestäni erinomaisesti ainakin sähköisesti asioidessa. Hinnatkaan eivät (ainakaan tilaamissani tuotteissa) ole olleet kovin korkeita Suomen hintatasolla. Toki piirit maksavat hieman enemmän kuin esimerkiksi Farnellilla yms, mutta silti ovat usein "kohtuullisia".


    EDIT: Kannattaa myös kysyä esimerkiksi Farnellin jälleenmyyjiltä, voivatko he toimittaa Farnellin valikoimissa olevia piirejä, mikäli niitä ei jälleenmyjän valikoimista löydy. Sain juuri vastauksen K-S Elektroniikalta (eräs Farnellin jällenmyyjä), että he saavat tarvittaessa hankittua avr-piirejä esimerkiksi Farnellilta.
  • 24.11.2009 17:47 anmo1257

  • I did a double check of all my wiring and eventhough I have an error at the time of trying to download the code into my ATtiny25 (unknown device (-24), have you ever gone through this kind of error ???
  • 24.11.2009 18:32 AK

  • >> "I did a double check of all my wiring and eventhough I have an error at the time of trying to download the code into my ATtiny25 (unknown device (-24), have you ever gone through this kind of error ???"

    Are you using the passive or active parallel port programming cable and are you using a laptop or a normal computer for programming? If you're using the passive cable and a laptop (although this problem might exist with a normal computer also) the voltage levels might be to low for programming. In this case I'd suggest you to first test it with another computer (or two) or maybe consider building the active cable.


Sivut:  1 2 3 4 5 6 


 
  Content in english!
  Sisältö suomeksi!

 Google





 .:Back to top Bandwidth by Mpoli

Copyright © Metku.net, All Rights Reserved.
All content and graphics in MetkuMods are sole property of Jani Pönkkö and may not be reproduced or copied in any manner without written permission from him.
All brand names, trademarks and copyrights are the property of their respective owners.Privacy Policy