Skip to content

Programarea placii in C, cu Eclipse IDE si Atmel toolkit

The english page here

1. Instalare Eclipse IDE in Linux

Personal, prefer descarcarea pachetului direct de pe situl eclipse.org, pentru ca unele distributii de Linux nu-l ofera pentru instalare si nici nu va pot impune eu o anumita distributie de linux. Pentru utilizatorii Windows, tutorialul este valabil in mare parte asa ca poate fi parcurs si de catre acestia fara probleme.

Din pagina de download a eclipse.org, alegeti varianta „Eclipse IDE for C/C++ Developers” , pentru linux 32 sau 64 biti, in functie de varianta de linux instalata. Dezarhivati arhiva in folderul $HOME personal (in cazul meu, /home/suse). Veti avea calea $HOME/eclipse (adica /home/suse/eclipse in cazul meu). Puteti folosi un program de arhivare/dezarhivare cu interfata grafica, asemanator cu WinZip, asa ca nu va spun comanda pentru consola. Dar puteti instala Eclipse si din repozitoriul pus la dispozitie de varianta de linux pe care o folositi.

Lansati Eclipse (deschideti managerul de fisiere, mergeti la $HOME/eclipse si faceti dublu-click pe fisierul executabil eclipse) si stabiliti denumirea folderului „workspace” (sau o lasati asa cum este implicit). La mine se intampla sa lansez de doua ori la inceput, pana porneste o data…

2. Instalare plugin avr-eclipse 2.4.0

Exact versiunea asta. Porniti Eclipse daca nu ati facut-o inca, mergeti la meniu „Help/Install New Software…” si in primul camp din fereasta care apare introduceti urmatorul link „http://avr-eclipse.sourceforge.net/updatesite” – fara gilimele. Apasati butonul [Add…] din dreapta campului si apare o alta fereastra:

avr-eclipse-plugin-update-site

Completati la „Name” orice doriti (de exemplu, ca in imaginea de mai sus) si apasati butonul [OK]. Asteptati putin si veti avea urmatoarea fereastra:

bifati-elementul-din-lista

Bifati elementul (AVR Eclipse Plugin) din lista de mai „jos” si apasati butonul [Next]. Dupa alte cateva click-uri, vi se va cere sa aprobati licenta si apoi se instaleaza. Restartati Eclipse. Puteti apoi sa-l inchideti pentru ca vom instala componenta necesara functionarii corecte a plugin-ului.

Daca explicatia mea este ambigua, aveti o pagina aici.

Ok, descarcati fisierul .jar de aici. Acum, daca ati instalat Eclipse din arhiva downloadata, puneti fisierul .jar in folderul $HOME/eclipse/plugins – se va scrie peste fisierul original. Daca ati instalat Eclipse din repozitoriul distributiei linux pe care o folositi, calea va fi aceasta $HOME/.eclipse/plugins – observati ca este vorba de folderul ascuns .eclipse din $HOME.

Si cu aceasta gata, plugin-ul este instalat. Vom trece la configurarea lui.

3. Configurare plugin avr-eclipse

Mai intai de toate, descarcam toolchain-ul pentru linux (este vorba de cel pentru AVR 8biti) de pe situl Atmel. Vi se va cere numele si email-ul, pe care apoi trebuie sa le confirmati validitatea raspunzand la un email primit de la Atmel (procedura standard de autentificare, nimic special). Abia dupa aceea veti avea acces la link-ul de downloadare. La final, in folderul de download-uri trebuie sa aveti fisierul avr8-gnu-toolchain-3.4.2.939-linux.any.x86.tar.gz (disponibil la data scrierii articolului – in timp, aceasta denumire va diferi). Deschideti arhiva cu un manager de arhive si dezarhivati continutul in folderul $HOME. Eventual, redenumiti folderul rezultat (eu l-am redenumit pentru a mai scurta din lungime, avr8-gnu-toolchain, insa inainte de configurare plugin). Gata, avem toolchain-ul instalat.

Mai avem un mic pas de facut inainte de configurare – instalarea avrdude (acest pas nu este necesar sub Windows pentru ca toolchain-ul Atmel pentru Windows  are inclus avrdude.exe – in orice caz, fisierul avrdude.conf de pe situl meu are suport pentru mai multe microcontrolere). Puteti sa o faceti din repozitoriul distributiei voastre de Linux, insa pentru cei care nu-l au, il pot gasi in pachetul mhvavrtools de pe situl „makehackvoid.com„, sau de la mine de pe sit (este acelasi program de la australienii de la makehackvoid, insa separat, pentru usurinta in instalare). Daca nu va intereseaza binarul, atunci in mod sigur va va interesa macar fisierul de configurare. In orice caz, daca-l luati de la mine, dezarhivati in folderul $HOME/avr8-gnu-toolchain/bin (daca l-ati redenumit ca mine). Fisierul de configurare este destul de bogat in microcontrollere, programatoare si bootloadere, asa ca il recomand – daca aveti voi ceva mai bun, as fi interesat. Gata cu avrdude…

Deschideti Eclipse, si mergeti la meniul „Window/Preferences„. In fereastra care apare, expandati AVR si selectati elementul AVRDude, apoi in dreapta bifati optiunea „Use custom configuration file for AVRDude” si apasati butonul [Browse] pentru a cauta fisierul de configurare.

preferinte-avrdude-cfg

Mergeti exact unde este dezarhivat fisierul si il selectati.

avrdude-conf-selectat

Selectati din panelul din stanga, elementul Paths si apoi asteptati o gramada de timp pana Eclipse va va preda din nou controlul (la mine pe PC incepe in momentul acela o cautare frenetica, ce dureaza o groaza de timp – pot sa-mi beau cafeaua pana atunci). In fine, apare in dreapta o lista cu path-urile configurate automat, pe care noi le vom modifica ca in imaginile urmatoare (totul este relativ la folderul unde am eu instalat toolchain-ul).

path-select

selectare-path-avr-gcc

Atentie la combobox-ul din stanga-sus, daca nu este „Custom”, nu veti putea schimba nimic.

In final, totul arata ca aici:

gata-pathuri

Apasati butonul [OK] si in momentul acesta avem configurat avr-eclipse si un toolchain functional.

4. Instalare Subclipse

Mergeti in pagina de download a tigris.org unde aveti optiunea sa instalati versiunea 1.8 din URL, sau din arhiva. Eu prefer din arhiva, dar acum vom instala din URL. De fapt, nu mai trebuie sa mergeti nicaieri, faceti click dreapta pe acest link si copiati-l.

In Eclipse, mergeti in meniu la „Help/Install New Software…” si in primul camp din fereastra care apare, lipiti link-ul copiat, apoi apasati butonul [Add] din dreapta (va aparea o caseta in care doar denumiti repozitoriul ca „Subclipse” si apasati butonul [OK] – nu modificati „Location”):

tigris-url

In lista de sub buton vor aparea doua elemente, din care bifati doar elementul „Subclipse” si procedati cu instalarea (acceptati licenta, etc.).

subclipse-selectare

Raspundeti cu [OK] la „Security Warnings” si apoi restartati Eclipse. Am terminat si cu asta. Nu uitati ca instalarea plugin-ului presupune sa aveti deja instalat in linux pachetul subversion (cred ca orice distributie linux il are in repozitoriu). In ubuntu il instalati cu comanda

sudo apt-get install subversion

Pentru alte versiuni de Linux, va descurcati cu Managerul de pachete sau programul pentru „Install/Remove Software” sau ceva asemanator… De asemenea, va trebui sa aveti instalat make (daca aveti deja instalat in linux uneltele pentru programare PC, inseamna ca aveti instalat deja si make – no voi spune cum se face, cred ca va descurcati).

NOTA: Pentru cei cu distribuitii Linux bazate pe Ubuntu, care au instalat Eclipse din repozitoriul Ubuntu si care intampina probleme la instalarea Subclipse, Florin mi-a trimis o solutie:

Ca sa mearga subeclipse:
#instalare subversion
sudo apt-get install subversion
#instalare libsvn-java
sudo apt-get install libsvn-java
#cautam libraria libsvnjavahl-1.so
sudo find / -name libsvnjavahl-1.so
#copiem calea unde se afla libraria si o scriem in eclipse.ini
sudo nano /etc/eclipse.ini

Continut fisier eclipse.ini

#asa arata la mine eclipse.ini
-startup
plugins/org.eclipse.equinox.launcher_1.3.0.dist.jar
--launcher.library
plugins/org.eclipse.equinox.launcher.gtk.linux.x86_64_1.1.200.dist
-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
256m
--launcher.defaultAction
openFile
-vmargs
-Djava.library.path=/usr/lib/x86_64-linux-gnu/jni/ #aici am scris calea unde sa caute dupa librarie
-Xms40m
-Xmx384m
-Dorg.eclipse.equinox.p2.reconciler.dropins.directory=/usr/share/eclipse/dropins

NOTA 2: Pentru cei care au o versiune mai vache de 1.7 a bibliotecii libsvn-java si nu vor sa renunte la linuxul care-l folosesc, pot sa instaleze subclipse facand selectia din imagine (nu va mai avea nevoie de biblioteca libsvn-java):
subversion-package-selection

5. Importare biblioteca ATmega-CLib din SVN

Am terminat cu instalarea uneltelor. Acum vom instala bibliotecile necesare dezvoltarii de aplicatii pentru placile EvB4.3, Arduino, Sanguino, etc., folosind plugin-ul subclipse.

Porniti Eclipse daca nu este pornit. Deschideti Firefox si mergeti la adresa asta. Selectati textul ca in imaginea de mai jos si copiati:

eclipse-svn-repo-source

Treceti din nou la Eclipse, mergeti in meniul „File/Import„, si in fereastra care apare, expandeaza SVN si selecteaza „Checkout Projects from SVN„. Apasa butonul [Next]

selecteaza-checkout

Apasati inca o data butonul [Next] pentru a crea o noua locatie de repozitoriu, si in campul URL care apare, lipim URL-ul copiat din Firefox (ca mai jos):

repo-url

Inca o data [Next]. Din lista care apare, selectam elementul ATmegaCLib si apasam butonul [Finish].

lista-svn

Dupa o vreme, in panelul din stanga al Eclipse (Project Explorer) va aparea un nou proiect, ca in imaginea de mai jos.

project-explorer

Faceti click dreapta pe proiect si in meniul care apare, selectati optiunea „Clean Project„. Faceti din nou click-dreapta pe proiect si selectati optiunea „Properties„. In fereastra care apare, expandati elementul „AVR” si selectati elementul „Target Hardware„. In dreapta puteti selecta un nou procesor insa va sfatuiesc sa lasati frecventa la 16MHz pentru ca biblioteca nu suporta o alta frecventa (nu uitati ca vorbim aici de placi Arduino si compatibile, cu bootloader OptiBot).

selectare-tip-procesor

In general, pentru aceasta biblioteca importata, nu trebuie sa mai faceti alte setari in casetele Eclipse (au fost facute in momentul crearii bibliotecii, care biblioteca a fost exportata in SVN sub forma de proiect Eclipse, cu toate setarile necesare), ci doar la tipul de microcontroller si eventual, setarile din fisierul header al bibliotecii. Pentru fiecare proiect care necesita compilare pentru un microcontroller diferit, setati microcontrollerul atat pentru biblioteca, cat si pentru proiectul in sine (nu uitati sa efectuati „Clean Project” la fiecare schimbare de cod si microcontroller)

5.1 Ce facem daca avem nevoie de biblioteca si exemplele din branches?

Si s-ar putea sa aveti, pentru ca actualmente biblioteca ATmegaCLib2 este dezvoltata intensiv si contine functii imbunatatite. Totul este sa specificam adresa SVN corecta, care in cazul nostru ese cea de mai jos:

http://atmega-clib.googlecode.com/svn/branches/

6. Importare proiect-exemplu din SVN

In mod asemanator, vom importa un proiect-exemplu din SVN (vorbim de proiectul aflat la http://atmega-clib.googlecode.com). Mergeti in Eclipse la meniul „File/Import…” si faceti la fel ca la importarea bibliotecii, insa atunci cand va cere sa specificati un nou repozitoriu, selectati pe cel existent (optiunea „Use existing repository location„). Selectati proiectul „ATmega_PWM_LED” de exemplu, si nu uitati sa-l curatati cu „Clean Project„. expandati-l si selectati fisierul pwmofledexample.c – deschideti-l pentru editare pentru a studia cerintele.

a. Compilare proiect

Asigurati-va ca proiectul are setat acelasi tip de microcontroller ca si biblioteca ATmegaCLib – sau invers. Din nou, ca in cazul bibliotecii, nu mai este necesar sa facem nici o setare in Eclipse, pentru ca au fost facute deja la crearea proiectului (intr-un tutorial viitor, vom vedea cum se creaza un proiect de la zero, proiect care foloseste biblioteca ATmegaCLib).

Este foarte posibil ca setarile din header-ul bibliotecii sa nu mai corespunda cu cerintele programului pentru ca le schimb de fiecare data cand lucrez cu alt program, si poate diferi de la un update de SVN, la altul. Deci, facem clic pe proiectul ATmegaCLib din stanga, il expadam, si deschidem header-ul atmegaclib.h pentru editare. In prealabil, am studiat cerintele programului care sunt specificate sub forma de comentariu in fisierul pwmofledexample.c – dar le specific si mai jos:

//Activate the following definitions on "atmegaclib.h" header:

//#define UART_BAUD_RATE      57600 // default is 57600
//#define UART_BAUD_SELECT    (F_CPU / (UART_BAUD_RATE * 16L) - 1)
//#define ENABLE_SERIAL_POLL  // require CONVERSION, conflicts with SERIAL
//#define ENABLE_PWM          // motor or led control (conflicts with pwmservo)
//#define ENABLE_CONVERSION   // useful for Serial, LCD and 7SEG Display
//#define ENABLE_MILLIS       // enable millis()

Cu alte cuvinte trebuie sa ne asiguram ca in headerul atmegaclib.h, definitiile de mai sus sunt activate, iar toate celelalte sunt dezactivate (nu stergeti absolut nimic, si atentie la baud rate ca si aia o schimb din cand in cand). Deci headerul editat, ar arata cam asa

// *****************************************************************************
// Enabling/disabling additional functionality
// *****************************************************************************
#define UART_BAUD_RATE            57600 // default is 57600
#define UART_BAUD_SELECT        (F_CPU / (UART_BAUD_RATE * 16L) - 1)
//#define ENABLE_SERIAL // Interrupt based, require CONVERSION, conflicts with SERIAL_POLL
#define ENABLE_SERIAL_POLL // require CONVERSION, conflicts with SERIAL
//#define ENABLE_PWMSERVO // servo control (conflicts with regular pwm)
#define ENABLE_PWM      // motor or led control (conflicts with pwmservo)
//#define ENABLE_IR       // infrared receiver, SONY protocol- it use TIMER0
//#define IR_DEBOUNCE     // uncomment to debounce IR with a delay
//#define ENABLE_ADC      // analog to digital converter
//#define ENABLE_TWI        // hardware I2C
//#define ENABLE_I2C_SOFTWARE // software I2C
#define ENABLE_CONVERSION // useful for Serial, LCD and 7SEG Display
//#define ENABLE_PCF8583    // require CONVERSION and I2C
//#define ENABLE_ONE_WIRE // one wire protocol
//#define ENABLE_DALLAS_TEMP // Dallas temperature sensors, require ONE_WIRE
#define ENABLE_MILLIS     // enable Arduino millis() - it use TIMER0
//#define ENABLE_LCD      // require CONVERSION
//#define ENABLE_7SEG     // starting from one digit, up to eight digits.
//#define ENABLE_SPI      // hardware SPI (master)
//#define ENABLE_SD_CARD  // raw SD Card operations; require SPI
//#define ENABLE_FAT32    // require SPI and SD_CARD
//#define OPTIMIZE_SPEED
// *****************************************************************************
// End block of "enable/disable" features
// *****************************************************************************

Deci, cele sase definitii ale noastre sunt active, iar celelalte sunt dezactivate.

Salvati fisierul (plugin-ul avr-eclipse nu va salva automat un fisier nesalvat in timpul compilarii). Selectati in Project Explorer proiectul ATmega_PWM_LED si selectati „Build Project„. Daca totul este ok, ar trebui sa se compileze fara probleme.

example-in-action

b. Configurare hardware

Initial, programul a fost scris de autorul bibliotecii libarduino (atmega-clib este un fork al acelui proiect) si demonstra doar PWM-ul; eu l-am modificat sa mai execute in paralel si clipirea unui al doilea LED (folosind functia millis), si transmitere pe serial a valorilor PWM-ului. Este prezentata functionarea in filmuletul de mai jos

Deci, LED-ul PWM este conectat la canalul 1 (trebuie sa vedeti pe care pin este PWM1 la placa Arduino – armega328p, si pe care pin este PWM1 la placa Sanguino – atmega644p). LED-ul al doilea este conectat la PC6 in cazul Sanguino, si la PB1 in cazul Arduino UNO. Serialul este virtual, pe USB…

c. Upload-are program in microcontroller – configurare avrdude

Selectam proiectul ATmega_PWM_LED cu click-dreapta in panoul Project Explorer si alegem „Properties” de la sfarsitul proiectului. In fereastra in care apare, expandam „AVR” si selectam elementul „AVRDude„. In dreapta apasam pe butonul [New..] pentru a defini un nou tip de programator (fie el si doar un bootloader):

avrdude-prog-config

Introduceti datele ca in imaginea de mai jos: (stabiliti o denumire a programatorului, denumire ce va aparea in combobox, alegeti tipul de protocol din lista – in cazul nostru, Arduino, stabiliti portul ca fiind /dev/ttyACM0 sau /dev/ttyUSB0 si bauds de 115200, dar ultimii doi parametrii ii alegeti in functie de tipul de Arduino pe care-l aveti):

avrdude-valori-conf

In final, noul programator definit va aparea in combobox. Data viitoare, cand creati/editati un alt proiect, nu faceti decat sa selectati programatorul definit:

avrdude-final-conf

Apasati [OK], compilati proiectul, selectati-l in „Project Explorer” si apasati butonul [AVR] din Toolbar pentru a uploada programul in microcontroller.

NOTA: Este posibil ca sa nu mearga totul brici. Mai ales daca nu ati mai instalat pana acum o placa Arduino in linux. Pot fi doua motive principale:

a. Cerintele de sistem: este nevoie sa instalati libusb pentru comunicatia seriala pe USB, sa instalati doua fisiere pentru permisiuni si sa va asigurati ca user-ul pe care-l folositi in Linux apartine grupurilor plugdev, users, dial-up, uucp, lock – care grup plugdev trebuie sa aiba deasemenea ca membri uucp si pe care trebuie sa-l creati daca nu exista, asa cum este cazul in openSUSE linux. Cele doua fisiere necesare pentru permisiuni, se instaleaza in folderul /etc/udev/rules.d si se iau de aici. De regula, toate acestea se rezolva automat prin instalarea Arduino IDE din repozitoriul linuxului cu care lucrati. Vizitati si situl http://www.arduino.cc pentru detalii despre instalarea Arduino in Linux si permisiunile necesare pentru udev.

b. Port blocat, nedisponibil: uneori, cand folositi un Terminal pentru comunicatia seriala, se intampla sa se blocheze si sa iasa fara sa inchida conexiunea. In acest moment, comunicatia cu placa nu este posibila si simpla deconectare si reconectare a cablului USB nu va ajuta pentru ca va fi creat un nou port, /dev/ttyACM1, pentru care noi nu avem setari. Solutia este sa reeditati setarile AVRDude pentru programatorul curent folosit, sau sa restartati linux.

Va rog, nu folositi limbaj de messenger. Multumesc!

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s

%d blogeri au apreciat asta: