Arduino

Ahoj,
znáte Arduino? Osobně mě to jako začátečníka hodně nadchlo :slight_smile: Tak nějak sem se rozhodl, že ho chci v čechách propagovat, protože tady o tom skoro nikdo neví. Je to open-source projekt s poměrně velkou komunitou. V podstatě jde o obyčejnou ATmegu v desce, která má bootloader, kterej umožňuje používání jazyku Wiring (takový skorocéčko). Trochu sem se o něm rozepsal na svym blogu:

techdot.eu/index.php/2008/01 … procesory/

Budu rád za případný komentáře a otázky :slight_smile:

A není praktičtější si zakoupit vývojový kit s ATmegou a tu naprogramovat? Na blogu píšeš, že pro Arduino je spousta tutoriálů, ale řekl bych, že pro ATmegy bude na internetu mnohem více příkladů a kódu ke stažení…

No ano i ne. Ono Arduino kolem a kolem neni nic jinýho než ATmega v katalogovym zapojení + FT232RL + stabilizace. Ono asi hlavní tahákem má být to, že každý kdo si chce něco vyzkoušet, pájení mu není vlastní, o mikroprocesorech nic neví a slovo AVR v životě neslyšel si může koupit už hotovej kit a programovat ho jazykem, kterej je si trochu ad-hoc, ale díky tomu může bejt hodně jednoduchej. Ale určitě to může bejt zajímavý i pro lidi trochu zběhlejší. Já třeba s elektronikou problémy nemam, ale jediný co sem kdy programoval byla 8051 ve škole v jakymsi kitu. Takže mě osobně docela Arduino zaujalo svojí jednoduchostí. Neříkam, že u něj chci zůstat do konce života, ale zatim mi vyhovuje.

Napadlo mě, že pokud bys měl chuť a chtěl trochu googlovat, mohl bys mi poslat pár odkazů na takovou čistě AVR alternativu k Arduinu? Myslim jako odkaz na nějakej ten vývojovej kit, nějaký vývojový prostředí nebo aspoň kompiler a kdyžtak nějakej kód na blikání ledkou a podobnej tutorial? Docela by mě to zajímalo a byl bych ti za to jako AVR znalci vděčný :slight_smile:

Skus trebars

smileymicros.com/

na

www.avrfreaks.net

su mrte odkazov na podobne projekty. Len teraz na tej stranke nieco prestavovali a neviem sa dostat k starsim clankom.
Myslim ale, ze Arduino bude asi lacnejsie.

citat:
“Pokud Vás někdy zaujal některý z mnoha projektů používajících mikroprocesory, ale neumíte pájet nebo si jen prostě netroufáte postavit si vlastní desku, určitě Vás zaujme italský open-source projekt Arduino. Arduino je prototypovací platforma, fungující na mikroprocesoru Atmel ATmega168 (starší verze ATmega8), která poskytne začátečníkovi veškerý komfort, který si jen může přát. Arduino jednoduše připojíte k počítači pomocí USB díky čipu FTDI FT232RL a už můžete začít programovat ve speciálním jazyce Wiring/Processing, který strukturou vychází z jazyka C. Díky Arduinu se nemusíte učit ani Assembler ani C, abyste si mohli postavit třeba vlastního robota.”

Sam som pred casom stal pred problemom, v com programovat AVR. Na zaklade roznych rozhodovacich a prioritnych procesov som postupoval nasledovne:

  1. programovaci jazyk

k dispozicii su rozne ako napriklad ASM, BASCOM, rozne C, nejaky ten PASCAL a tak podobne, rozne speudo jazyky pre graficke programovanie, aj Atmel ma na nieco take odkaz na svojej stranke.

Ako zaciatocnik som mal trochu strach z C, lebo chyry okolo neho ma dost odradzali (peklo ukazatelov, atd…). Hladal som nieco velmi jednoduche, co sa bude dat zvladnut rychlo. Faktom vsak je, ze v C je napisane a dostupne priam gargantuovske mnozstvo kodu. Kedze viem, ze vyvoj ide dopredu a o 10-20 rokov bude AVR niekde v tych oblastiach ako je dnes x51, rozhodol som sa na programovanie pouzivat nieco, co je relativne najmenej zavisle na roznych platformach a je to dostupne aj na jednocipoch a to preto, aby som v buducnosti vlastne rutiny mohol pouzivat bez toho, aby som musel neustale nieco prepisovat do niecoho ineho, napriklad ak sa rozhodnem niekde pouzit ARM. To sa tyka pripadnej prace s inym typom procesora, ktory sa aktualne vyskytne, napr. 51, HC08, PIC atd. Tu jednoznacne vyhrava C, lebo taky BASCOM sa jednoducho nechyta.
Nakupil som si Heroutove knihy a zacal som pomaly programovat konzolove aplikacie na PC. Po par mesiacoch tukania som dosiel k zaveru, ze ucit sa C na PC v mojom pripade - ak chcem programovat hlavne jednocipy - je volovina. Pre pracu v C na PC je treba hlavne ovladat pristup k suborom a standartne konzolove opracie. To na jednocipoch nie je, na rozdiel od PC je tam plno LEDiek a tlacitok, ktore treba co najskor rozpohybovat :smiley:.

Smelo som teda naintalovat AVR studio - je zdarma na strankach Atmelu, obsahuje aj simulator ( existuje este projekt Eclipse, ze vraj ma nejake veci naviac ale neskusal som.)

a kupil ICC od ImageCraftu.
Praca v C bola zrazu velmi jednoducha, LEDka mi blikala SKUTOCNE do 10 minut po spusteni AVRstudia.
V samotnom manuali k procesorom AVR su priklady kodu v C pre tu ktoru cinnost.
V C mi na zaciatku robilo najviac problemov zatvorkovanie, kym si moje oci zvykli rychlo identifikovat zlozene zatvorky miesto slov then a end, ktore na tychto miestach pouzivaju ine jazyky.
Musim upozornit na jeden dolezity fakt. Jazyk C nikoho nenuti pouzivat krkolomne a horsie na prvy pohlad analyzovatelne vyrazy ako napriklad

++a &= b–.

Volakedy to snad malo zmysel podkladat prekladacu takeho sakypaky, ale dnes su prekladace omnoho inteligentnejsie a vedia si kod sami optimalizovat, takze kludne mozete pisat kod “rozvlacnym” ale zato prehladnym sposobom napriklad ako BASIC.
V dnesnych ucebniciach programovania sa dokonca pred krkolomnymi vyrazmi dorazne varuje. Vznika tym neprehladny kod (po mesiaci, dvoch i pre samotneho tvorcu) a hladanie chyb je omnoho tazsie.
Ak bude v dosledku rozvlacneho zapisu zdrojaku vysledny kod o 20% dlhsi a pomalsi, vobec to neprekaza. AVR robi instrukciu na takt, takze pri 16MHz je k dispozicii takmer 16000000 instrukcii za sekundu.

Jasne, ze som na zaciatku robil chyby a po kratkej uvahe som z nich obvinoval prekladac, VZDY vsak bola nakoniec chyba medzi stolickou a klavesnicou.

Neskor som narazil na projekt WinAVR, ziadne casove obmedzenie pouzivania alebo obmedzenie na dlzku kodu.

winavr.sourceforge.net/

co je vlasnte GCC pre AVR. Porovnal som vygenerovany kod ICC a GCC a ked som zistl, ze GCC vygenerovalo kod cca o 20% mensi, nebolo nad cim vahat. GCC je zdarma, takze nemusim prenasat HW kluc z roboty domov a naopak. Zaroven moze vela ludi robit na nejakom projekte bez toho aby museli mat vsetci nakupene HW kluce. GCC vyvija a testuje velka komunita profesionalnych programatorov desiatky rokov, takze myslim zastavenie projektu pre “opotrebovanie” tvorcov hrozi z uvedenych projektov najmenej.

Na zaciatku bol moj zdrojovy text pisany v C tak, ze obsahoval priame vazby na HW procesora. Je to prehladne, ale prenositelnost takeho kodu je dost problematicka. Uz len vyskusat, ktory kompilator lepsie “kompiluje” je na upravu zdrojaku take narocne, ze sa na to clovek radsej vykasle. Casom som si vsak osvojil techniku pouzivania makier tak, ze vytvorim hlavickovy subor obsahujuci makra pre ten ktory procesor alebo aj hw design a v samotnom C len napisem meno makra pre danu cinnost.

napriklad v hlavickovom subore je pre ATmega8:

    #define ZAKAZ_PRERUSENIA cli()
#define POVOLENIE_PRERUSENIA sei()

v C subore napisem


ZAKAZ_PRERUSENIA

Pěkně jsi to napsal, škoda tě na ATMEly :smiley:

sorry, nejak som to predcasne odklepol :smiley: :smiley:

pre iny procesor vytvorim iny hlavickovy subor s definiciami makier a v samotnom C nemusim nic menit, tym padom ani omylom pokazit uz overeny algoritmus.

Inak k tomu C, po pochopeni ako pracuju ukazatele si uz zivot bez nich ani neviem predstavit. Skvela vec. Trochu nebezpecna, ale pri zasadach minimalnej opatrnosti fakt nic nehrozi a kod sa stava prehladnejsi, kompaktnejsi, rychlejsi a kratsi.

Neskor som si uvedomil dalsie vyhody GCC. Je to platforma fungujuca na AVR, ARM, PC Win (ano, nie je len Visual C/C++), Linux - bez rozdielu platformy, takze aj na male moduly 5x5cm s Ethernet konektorom. Skratka parada. 8)

Zda sa, ze na zaciatku sa treba trochu viac ucit ako pri niecom “zdanlivo”
jednoduchsom kym sa v C dosiahne vysledok, ale nie je to tak

Priklad programu v C na blikanie LED na porte C, blikat bude cely port. Netreba ani ziadny samostatny *.h subor.

#include <avr/io.h>
#include <avr/iom8.h>

#define VYPNI_LED 0
#define ZAPNI_LED 255
#define PORT_VYSTUP 255
#define PERIODA_BLIKANIA 32000
#define LED_SVIETI 1000

int main(void)
{

uint32_t casovac = PERIODA_BLIKANIA; // casovac je 32bitove cislo

DDRC = PORT_VYSTUP;
for( ; ; ) {

            if (casovac < (LED_SVIETI)) {
	    PORTC = ZAPNI_LED;
            }
           else {
	    PORTC = VYPNI_LED;
            }
            casovac = casovac - 1; // ortodoxni prepacia  zapis :slight_smile: 
            if (casovac == 0) casovac = PERIODA_BLIKANIA;
    }

Dufam, ze som tam nenarobil chyby, (teraz som to tak stvoril a neodskusal, ked tak dajte vediet)
Zapisat sa to da aj uspornejsie, len som chcel pripadnym novacikom ukazat ake je to jednoduche vo AVRstudiu a s WinAVR.

Co sa HW tyka. Po prvom uzitocnom kode (co uz vykonava nejaku samostatnu zaujimavu cinnost) som zistil, ze jeho velkost sa pohybuje v okoli 4 - 7kB. Nedajboze ho este o nieco rozsirit, uz sa tam nic nezmesti.
Myslim si, ze pri dnesnych cenach procesorov nema zmysel siahat po nicom mensom ako je ATmega32, mozno v opodstatnenychpripadoch ATmega8. Ale tam kde ma byt ATmega16, kludne moze byt ATmega32, ktora ma 32kB Flash a 2kB RAM. Hlavne tu RAM je citit pri spracovavani vacsieho mnozstva online udajov a rozhodne tazsie pretecie zasobnik. Puzdro DIL40 je idealne pre domace bastlenie. Sup s ATmegou do patice, k tomu jeden 7805, definovat stavy na vstupoch pomocou odporov medzi nozickami a Ucc - hodia sa na to hrebenove odporove polia napriklad s hodhotou 4k7 a su velmi lacne, staci naletovat zospodu plosaku priamo na paticu. Vyviest na maly konektor - lamacia svorkovnica MOSI, MISO, CLK, RESET, Ucc a GND a pripojit priamo Ponyprog. Pripojit Xtal a 2x 18pF k nemu.

HW je spraveny za 2-3 hodinky aj s vyrobou plosacika, naklady minimalne, radost obrovska.

Ponyprog si stiahnete na

lancos.com/prog.html

je tam aj schema, velmi jednoduche. Potrebujete ale HW paralelny port. Prevodniky USB/LPT nie su na dany ucel funkcne.

Dalsej praci uz nic nebrani.
Este mala uvaha k vyberu procesoru. Moze sa zdat, ze usetrnim 100Sk za vykonnejsi procesor si clovek pomoze. Opak je pravdou. Optimalizovat kod kvoli tomu, ze sa dana funkcionalita uz nezmesti do vybraneho procesora nie je nejak extra efektivne a clovek sa tym ani prilis nevzdelava. Prekladac pre inu platformu (napr. ARM) nemusi optimalizacie pre AVR vobec ocenit a naopak. ATmega8 ma podla mojich skusenosti zmysel pouzit iba kvoli mensiemu puzdru. Pre ATmega16 zmysel nevidim, ale to je moj subjektivny nazor, nemusiaci zodpovedat objektivnej realite.

Ja osobne pouzivam procesory v puzdrach TQFP, ale nie kazdemu musi sposobovat radost letovat SMD nozicky 0.8mmod seba. V pripade ATmega to nie je chvala bohu nutne, existuju i DIL varianty.

Neviem, ci som spomenul vsetko, ale aj tak sa uz moc rozkecavam.
Dufam, ze som mozno niekomu pomohol aspon v zorientovani sa na zaciatok. Ospravedlnte pripadne nedostatky a nepresnosti v predchadzajucom texte.
Netvrdim ze volba C je jedina spravna, inak by predsa neexistovali ine programovacie nastroje, moje potreby ma vsak nakoniec k C doviedli.

Martin

Este mala drobnost k rychlosti C-ka

na vacsinu projektov s ktorymi som sa stretol, stacila nejaka klasicka 8051 taktovana na 18,432HMz.

Ak je ATmega 12x rychlejsia ako x51 - instrukcia na 12taktov, potom ak by bol vysledny kod po preklade C-ka 12x pomalsi oproti AVR asembleru, stale bude aplikacia rychla ako to iste v asm pre klasicku x51. A to Cko 12x pomalsie nie je :slight_smile:

Ak treba mat v kode naozaj nejake rychle kusky kodu, da sa priamo do GCC vkladat asembler (je to ale strasne o hubu a do dnes som to poriadne nepochopil), alebo sa da prilinkovat *.asm, co uz je velmi v pohode. To plati pre GCC i pre ine platformy, takze netreba sa bat znizenia rychlosti programov v C. A hlavne program v Cku mozete konzultovat krizom krazom po celom svete. Ako som uz spomenul, su hotove algoritmy pre komunikaciu s MMC, SD kartami, roznymi displaymi, rozne algoritmy, ci uz filtre, sifrovanie, CRC, komunikacne protokoly, co len chcete (skoro). Myslim, ze cas vrazeny do ucenia sa C-ka sa mnohonasobne vrati usetrenim casu pri pisani a odladovani mnoheho uzitocneho kodu. Je jasne, ze to nie je uplne trivialne - skopirujem zdrojak od kamarata pracujuceho na inej platforme a automaticky to funguje - ale uz hotovy a odladeny algoritmus netreba znovu vymyslat, staci ho len upravit pre tu ktoru platformu a to nie je az taka drina.
Okrem toho pri C-ku neriskujete, ze ak napriklad kvoli vykonu musite prejst napriklad na 32b procesory, musite si vsetko znovu pracne napisat od zaciatku, lebo vami vybrane vyvojovy jazyk pre 8bit na 32bit neexistuje. Potom vznika silny tlak ostat pri tom 8bite a “nejak” do tam natlacit. Nakoniec sa zmene aj tak nevyhnete.

Co sa pamatovych narokov tyka, dnes su dostupne procesory s 256kB Flas a 64kB RAM priamo na cipe, napr. STR71x za cca 300Sk bez dane. Ma to 55MIPS, spotrebu cca 20-30mA, 4UART, CAN, I2C, SPI, pripojitelnost externej pamate… Niet sa coho obavat a to sa vyvoj HW zenie neuveritelne dopredu a ceny stale klesaju. Netreba preto lpiet na “starych” pamatovych narokoch. Robit vsetko na vykonnejsich procesoroch - aj jednoduche veci ako napr. dialkove ovladanie sa skratka oplati, lebo vznikne omnoho viac roznych uzitocnych konstrukcii za kratsi cas a zaujem o jednocipy sa tak moze skor odrazit i v amaterskej praxi v podobe spokojnosti ostatnych clenov rodiny, ak sa z pod ruk “kutila” hrnie jedna uzitocnost za druhou a tento “kutil” nie je obmedzeny napriklad 36B RAM a nemusi venovat 80% casu tomu, ako danu funkcionalitu do to “nanocipu” narve. Okrem toho moze pri pamatovych obmedzeniach horsie vyuzivat uz napisany kod, lebo treba neustale optimalizovat a v dosledku toho sa generuju sekundarne chyby… . Myslim, ze vacsina z citatelov vie o com hovorim.

Martin

Čoveče to byl sloh :slight_smile: Oceňuju tvoje snažení. Ono programovat v C je dneska celkem základ. Ona ho většina jazyků stejně kopíruje. Java, PHP, Wiring… všechno je to C (btw: doc. Herout mě v minulym semestru učil javu :slight_smile: ). Taky se mi líbí to avrgcc.

Blikání LED v Wiringu:

[code]int ledPin = 13; // LED connected to digital pin 13

void setup()
{
pinMode(ledPin, OUTPUT); // sets the digital pin as output
}

void loop()
{
digitalWrite(ledPin, HIGH); // sets the LED on
delay(1000); // waits for a second
digitalWrite(ledPin, LOW); // sets the LED off
delay(1000); // waits for a second
}[/code]
Je to takový trochu upovídanější, jako Java.

Jinak bych řekl, proč je pro spoustu lidí Arduino zajímavý. Ono je to trochu tim brandingem toho jmena Arduino a tim pocitem all-in-one-box. Prostě ten člověk ví že když vygoogluje Arduino, že se dostane na návody na konkrétní desku, že na to je jen jedno vývojový prostředí, proto je to pořád stejný a tak.

A jen tak mimochodem, Arduino jde samozřejmě použít s čimkoli, třeba s avrgcc :slight_smile:

Tak jsem se dal na distribuci Arduina do ČR. :slight_smile:

techdot.eu/index.php/2008/03/27/arduino-diecimila-na-ceskem-trhu/

Když už je tu řeč o Arduinu, mrkněte na moje projekty:
Harvie blog - Arduino Projekt

No já bych si tohle nikdy nekoupil… :slight_smile:
Jinak zatím neznám nikoho kdo by se učil programovat AVR a ani nevěděl co je to trnzistor (i když asi se nějací najdou)… :slight_smile:
Jinak nejlepší je kontroléra zabodnout do ¨kontaktního pole, připojit k tomu nějakou periferii, a stím si pohrát. Přijde mi to zábavnější :slight_smile: Ale je to věc názoru. Zatím zdarrr