Jump to content
ELFORUM - Forumul electronistilor

pareri Arduino


stefan_k

Recommended Posts

Am vazut cateva pareri pro/contra Arduino. Cum ma joc de ceva vreme cu placa asta, imi expun si eu parerea.

 

1. Limbajul de programare e C/C++, compilatorul din spate e gcc-avr.

2. Doar "mediul de lucru" (editorul, practic) e scris in java, probabil pentru a fi portat mai usor. Oricum ca si editor de programare, e slabut (nu are autocompletion, copy/paste-ul poate fi cam aiurea, etc). Pentru un editor scris in java putea avea mai multe pretentii (nu ca ele ar fi de prea mare ajutor pt programarea microntrolerelor).

3. Librariile disponibile sunt destul de variate si interesante. Foarte bune pentru scop demonstrativ, dar inceptatorul risca sa nu mai vada ce e in spate si ca urmare sa invete practici proaste. Oricum sursele librariilor sunt disponibile, din plimbatul prin cateva fisiere te lamuresti ce face.

4. Tot legat de librarii: sunt prea generice si ca urmare slab optimizate. De exemplu din cateva linii de test pentru controlul unui afisor 7-segmente multidigit, scris cu librariile de arduino, a iesit un binar de peste 1K. Aceeasi functionalitate am obtinut-o scris "de la zero" in vreo 500 de bytes (si probabil puteam sa cobor si mai jos).

 

Pe scurt: librariile sunt ideale pentru cei cu mai putine cunostinte de programare, sau carora le pasa prea putin de marimea codului generat (in fond, 16-32-128K cat au placile uzuale poate fi si "mult prea mult").

 

5. Platforma hardware (placa, propriu zis) e banala: microcontroler + cristal cuartz + sursa stabilizata + adaptor USB. Pentru cine nu are nevoie de USB (exista si varianta doar cu RS232) sau se descurca sa isi lipeasca un FT232RL, probabil nu merita sa cumpere placa.

6. Chestie care m-a enervat la culme: headerele (pinii de in/out) nu sunt aranjati la 100mils (exista 4 grupe de headere, iar 3 dintre acestea sunt deplasate cu 25/75mils pe orizontala). Probabil au facut asta pentru a nu putea introduce "shielduri" gresit. In schimb efectul nefast e ca folosirea unei placi standard de prototip e cam imposibila; m-a obligat sa imi fac propria placa cu gauri.

 

7. Important: poate fi folosit ca programator AVR-ISP. Asta pentru cine a intrebat daca poate programa cu el un tiny. Detalii:

http://www.arduino.cc/playground/Code/MegaISP

 

Ca o concluzie: in scop introductiv merge, isi face treaba. Exista riscul ca odata ce faceti cativa pasi mai departe, sa nu va mai satisfaca prea mult. In acest caz, il transformati in programator avrisp si va faceti treaba in continuare.

Link to comment
  • Replies 20
  • Created
  • Last Reply

Top Posters In This Topic

  • Laci

    9

  • nana

    8

  • stefan_k

    3

  • srdjan

    1

Top Posters In This Topic

Si vine cu bootloader programat care este un PRO mare :), normal ca nu se pot face librarii generale si super optimizate, arduino este ideal pentru proiecte de robotica simple, efecte vizuale chestii simple si demonstrative. Nu este recomandat daca vrei sa inveti programare embedded ca treci peste chestiile esentiale.

Link to comment

Laci, da tu ce folosesti pentru programare embedded ?Eu folosesc avr-gcc si pana acu nu am vazut inca prog care sa nu il fac sa mearga, si 2 optimizeaza foarte bine codu mai ales cand vine vorba de coduri mari.Cel mai potrivit ar fi ASM-ul dar sincer nu imi vine sa scriu 100 de lini de cod pentru o simpla functie matematica.

Link to comment

Si arduino tot cu avr-gcc compileaza, nu asta e problema. GCC-ul e suficient de bine optimizat, nu e musai ASM pentru lucrurile uzuale. Problema e nivelul de abstractizare.Un exemplu simplu de chestie care in arduino va face codul sa iasa maaare. Ex, vrei sa aprinzi cateva leduri. Cu librariile de arduino scrii:pinMode(pin1, OUTPUT);pinMode(pin2, OUTPUT);pinMode(pin3, OUTPUT);digitalWrite(pin1, HIGH);digitalWrite(pin2, HIGH);digitalWrite(pin3, HIGH);Asta inseamna 6 apeluri de functii, care in spate mai fac si alte chestii. Iar ledurile nu se vor aprinde simultan, ci unul dupa altul (evident, cu viteza foarte mare, insesizabil, in final tot vor ramane aprinse toate, dar problema ramane).Pentru cineva care abia se apuca de microcontrolere codul de mai sus e foarte intuitiv, si poate fi multumit. Pana se uita la codul generat si (in cazul meu) ajunge la 1020 bytes.Daca sari peste librariile lu' arlechino, sa zicem ca poti scrie (scuzati, simplific):DDRD = 0xFF; // eventual doar pinii care intereseazaPORTD = (1<

Link to comment

Stiu ca-i facut prin avr-gcc :)Dar asa este daca vrei cod super intuitiv si usor de inteles atunci te "costa", un bun exemplu este printf-ul :)Ce imi place la arduino cel mai mult ca este open hardware(si desigur open source)

Link to comment

Nustiu dece zici ca printf nu este optimizat, in avr-gcc cel putin ai aces la lib printf_min din obtiunile compilatorului asta daca nu folosesti numere flotante sau alte minunati de formate suportate de printf standard lib si atunci e ok.Eu folosesc destul de des printf-ul, mai ales pe USART ma salveaza de o gramada de functi si pointeri mai ales cand am de scris si un text cand afisez ceva. Da daca vrei optim atunci folosesti doar registri si pointeri la afisari si totu e superoptimizat, dar muncesti la un cod cel putin dublu.Acu fiecare face cum ii place si cum ii impune programu pe care il are de creat. :nas:

Link to comment

Da stiu ca-i bun si eu folosesc printf_min, dar cand am de afisat numai text sau niste numere atunci folosesc functiile mele, daca vreau sa reduc codul desigur, altfel pun printf si gata.

Link to comment

Punemi si mie sa vad cum ai facut functile alea de afisare sunt curios daca vrei si sunt open surce. Uite asa mai dezvoltam si noi ceva subiecte despre coduri ca m-am saturat jumatate din subiecte sunt despre programatoare si programarea cipurilor in topicul asta.

Link to comment

Atunci o sa deschid un topic in legatura cu asta, dar parca vad ca in 2-3 zile se umple cu prostii.O alta problema este ca unii moderatori sunt nesimtiti, si nu consider ca forumul merita sa postez aici sursele mele.Oricum lasa un mail pe pm si iti trimit sursele pentru uart, nui mare lucru 2 buferi circulari pentru rx/tx si foloseste intreruperi, daca vrei sa trimiti un mesaj cu string constant si valori atunci trebuie sa-l pregatesti cu itoa strcat, oricum codul este mult mai mic decat cu printf. Cand nu trebuie sa optimizez codul folosesc printf dar in loc de functia putchar(ala care scrie direct in UDR) folosesc functia scrisa de mine care foloseste un buffer si intreruperi.

Link to comment

daca tot vorbeam despre printf pe usart nu stii exact care sunt liburile pentru avr-gcc si optiunea pentru linker option ca sa afiseze numere flotante. am o functie de genu printf("\nSet Val S1=%f => F1=%f, F2=%f, F3=%f",1.23,trapez(s1/100,a1,b1,c1,d1),triunghi(s1/100,a3,b3,c3),trapez(s1/100,a4,b4,c4,d4));si imi afiseaza ceva de genul "Set Val S1=? => F1=?, F2=?, F3=?" stiu ca m-am jucat mai demult si trebuia inclusa libraria libprintf_flt in proj options si mai era o obtiune de genu :-Wl,-u,vfprintf -lprintf_flt : insa nu vrea sa functioneze nici cum. :sparge: e singura chestie pe care o urasc la GCC pana acum.

Link to comment

La project options / libraries add to project: lprintf_flt.asi la custom options: -Wl,-u,vfprintf -lprintf_flt -lmprintf options://minimal printf option, no %02 support..-Wl,-u,vfprintf -lprintf_min//full float option-Wl,-u,vfprintf -lprintf_flt -lmVarianta lprintf_min nu stie nici float nici %02, cand vrei padding pentru un minim de lungime de ex ai o variabila care vrei sa afisezi, sa fie un unsigned short care ia valori intre 0-9999, cu printf("%04i",i); daca i=1 apare asa: 0001 samd..., e util cand masori ceva u,i.Poate stiai deja, dar sper ca informatia este utila si pentru alti.

Link to comment

La project options / libraries add to project: lprintf_flt.asi la custom options: -Wl,-u,vfprintf -lprintf_flt -lmprintf options://minimal printf option, no %02 support..-Wl,-u,vfprintf -lprintf_min//full float option-Wl,-u,vfprintf -lprintf_flt -lmVarianta lprintf_min nu stie nici float nici %02, cand vrei padding pentru un minim de lungime de ex ai o variabila care vrei sa afisezi, sa fie un unsigned short care ia valori intre 0-9999, cu printf("%04i",i); daca i=1 apare asa: 0001 samd..., e util cand masori ceva u,i.Poate stiai deja, dar sper ca informatia este utila si pentru alti.

Da stiam si de faza cu octeti in functie pe cati vrei sa afisezi. Pe mine ma interesa doar float si oricum incepe sa ma dispere avr-cc ca nu prea inteleg cum lucreaza el cu numerele flotante si sunt sigur ca imi pierde pe undeva date.Da l-am facut sa mearga bagasem din greseala in loc de linker options bagasem direct pe toate fisierele la compilare, :bataie oricum nustiu ce naiba se intampla dar pe calculator scris algoritmul in C imi da niste date dupa ce il pun pe avrgcc pe controler imi da total aiurea :( si deja ma gandesc ca simulez doar cu 2 variabile cand o sa pun un sir intreg adica 5 var simultan cred ca o sa o iau la fuga. :cry:
Link to comment

Cand incepi sa dai vina pe compiler a venit timpul sa rescrii tot codul de la 0 :), ma refer la compilatoare bune ca gcc sau IAR, nu la codevision sau icc ca la alea se intampla chestii ciudate...

Link to comment

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now



×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.Terms of Use si Guidelines