Jump to content
ELFORUM - Forumul Electronistilor
riciu

limbaje de programare

Recommended Posts

Vreaus a incep sa ma joc cu microcontrolere, insa nu stiu ce program sa ma apuc sa invat. pe net am gasit o gramada de pareri care m-au facut sa ma apuc de 3 limbaje pana acum: assembler, C++ iar acum ma chinui cu C care cica, ar fi cel mai usor. Dar parca nici o documentatie nu te ia de la zero. Insa, vreau sa stiu, pentru programarea unui PIC, de exemplu pt o aplicatie de automatizare medie, e nevoie sa invat tot C-ul sau doar anumite chestii? La alte limbaje vad ca se incepe programarea cu definirea pinilor ( adica se vede ca programezi o componenta), pe cand in C vad ca ma invata cum sa imi apara mesaje pe ecran, calcule, etc. Si nu inteleg cum poti definii in C pinii unei componente? Mi-e teama ca am sa invat tot C-ul ca apoi sa aflu ca nu imi foloseste in programarea PIC-urilor.

Share this post


Link to post
Share on other sites

Daca vrei sa ai succes in programarea embedded (adica pentru microcontrolere) iti recomand sa inveti ceva care iti va da rapid o "rasplata".

 

Ai nevoie de un proiect mic. Propune-ti intr-o prima faza sa aprinzi un LED.

 

Pentru ca sa vezi ca "se poate" iti recomand sa incepi cu ceva usor cum ar fi sa folosesti programarea "vizuala" cu un program ca Flowcode sau Great Basic Cow (cu accent pe Flowcode).

 

Apo i iti recomand sa folosesti mikroC for PIC de la mikroelectronica.

Orice program facut pentru un microcontroler incepe insa cu citirea unui datasheet (fisa tehnica) a unui microcontroler. Incearca cu 12F675 (ieftin si nu foarte complicat) si datasheet-ul sau este aici.

Share this post


Link to post
Share on other sites

sa folosesti programarea "vizuala" cu un program ca Flowcode

Ups. Ai deschis cutia... :rade:

Edited by Liviu M

Share this post


Link to post
Share on other sites

Sincer, accept parerea fiecaruia atata timp cat o accepta pe a mea.

Eu imi ofer parerea personala, altii sunt liberi sa o faca si ei. :)

Share this post


Link to post
Share on other sites

in principiu orice limbaj ai folosi trebuie sa stii un for, un while, repet sa initializezi variabile, sigur o sa vrei sa folosesti si o intrerupere. ziceai ca se initializeaza pinii. ceva normal deoarece la un pic de ex pinii pot fi intrari iesiri digitale, analogice, etc. daca ai habar de astea iei niste exemple si stiind oarecum ce am zis mai sus deduci ce si cum se face. apoi treci pe mai complex si ajungi sa face multe treburi cu un uC. fac asta des, desi ca hobyy si am facut si proiecte la gata destul de complexe. ceva mai usor din multe puncte de vedere este Arduino de care ai auzit sigur. ar fi mai bun la inceput pt ca ai o gramada de shield-uri gata facute care funcioneaza din prima ca si hardware si nu pierzi  timp cu partea de proiectare. bafta si daca pot sa te mai ajut intreba.

Share this post


Link to post
Share on other sites

Pai daca e de dat cu parerea... :rade:

Cum am trecut de ceva timp de pragul "al meu e mai bun", dupa parerea mea cel mai bun limbaj e ala cu care te impaci cel mai bine. In cazul in care nu te impaci inca cu nici unul, cel mai bun e cel pe care il inveti cel mai usor sau cel cu care ajungi sa fii cel mai repede "productiv". Pentru unii mai conteaza si pretul.

In orice caz de doo lucruri nu scapi:

1. invatat un limbaj "de uz general" (pentru PC) + adaptarile lui la un controller. Poate ca la un mediu vizual scapi de partea cu "uz general".

2. studiat documentatia controllerului.

Edited by Liviu M

Share this post


Link to post
Share on other sites

Depinde cat esti dispus sa inveti si ce vrei sa faci mai departe.

In primul rand trebuie sa incepi prin a te documenta ce inseamna un mcu, principiul de functionare, etc si aici ma refer la partea "hard". Pana nu intelegi ce se petrece acolo, nu trece mai departe, trebuie sa intelegi ce faci!

Dupa ce te-ai cam prins cu ce se mananca un mcu, poti sa incepi sa citesti putin despre asamblare sa te deprinzi cu configurarea si ordinea in care trebuie sa-i spui mcu ce sa faca.

Daca nu ai renuntat parcurgand pasii de mai sus si vrei rezultate imdeiate, iti recomand in continuare Flowcode, este un program cu o interfata prietenoasa, iar daca ai deprins informatiile minime, te descurci in orice directie cu el.

Succes!

Share this post


Link to post
Share on other sites

Tot C-ul nu o sa inveti asa repede findca e mult, C++ este o continuare a lui C care cuprinde si ceva programare pe objecte care este inutil in PIC-uri. 

 

Partea pe care trebuie sa-l inveti din C sunt :

 

- variabilele (int,float,char,etc..)

- functii si trimiterea parametrilor intre doua functii.

- cicluri ( for,while,do-while,etc...)

- criterii ( if,if-else,etc...)

 

dupa care poti sa incepi cu tutoriale pentru PIC-uri, unde vei invata definirea pinilor, cum faci o citire ADC, sa generezi semnal PWM,etc... 

Share this post


Link to post
Share on other sites

Daca vrei sa ai succes in programarea embedded (adica pentru microcontrolere) iti recomand sa inveti ceva care iti va da rapid o "rasplata".

 

Ai nevoie de un proiect mic. Propune-ti intr-o prima faza sa aprinzi un LED.

 

Pentru ca sa vezi ca "se poate" iti recomand sa incepi cu ceva usor cum ar fi sa folosesti programarea "vizuala" cu un program ca Flowcode sau Great Basic Cow (cu accent pe Flowcode).

 

Apo i iti recomand sa folosesti mikroC for PIC de la mikroelectronica.

Orice program facut pentru un microcontroler incepe insa cu citirea unui datasheet (fisa tehnica) a unui microcontroler. Incearca cu 12F675 (ieftin si nu foarte complicat) si datasheet-ul sau este aici.

 Treaba cu plecatul de la un montaj simplu o practic si eu . Doar ca prefer sa invat un singur program dar bine, decat sa bajbai 7 programe pe care niciodata nu o sa le stiu perfect. Cand lucrez cu ceva, am obiceiul de a-l studia de la zero si a-l intelege bine si nu sa merg la ghiceala cum mai fac unii.  De aia prefer sa ma axez pe un singur program, dar bun.

in principiu orice limbaj ai folosi trebuie sa stii un for, un while, repet sa initializezi variabile, sigur o sa vrei sa folosesti si o intrerupere. ziceai ca se initializeaza pinii. ceva normal deoarece la un pic de ex pinii pot fi intrari iesiri digitale, analogice, etc. daca ai habar de astea iei niste exemple si stiind oarecum ce am zis mai sus deduci ce si cum se face. apoi treci pe mai complex si ajungi sa face multe treburi cu un uC. fac asta des, desi ca hobyy si am facut si proiecte la gata destul de complexe. ceva mai usor din multe puncte de vedere este Arduino de care ai auzit sigur. ar fi mai bun la inceput pt ca ai o gramada de shield-uri gata facute care funcioneaza din prima ca si hardware si nu pierzi  timp cu partea de proiectare. bafta si daca pot sa te mai ajut intreba.

Arduino nu e rau,dar din cate imi dau seama daca vreau sa fac trei montaje de automatizari , trebuie sa cumpar trei placi arduino plus auxiliarele. Asta m-ar costa cred extrem de mult fata de situatia incare as cumpara 3 Pic-uri si ceva componente si sa fac eu totul. Multumesc pt oferta de ajutor. Cred ca o sa mai vorbim.

Share this post


Link to post
Share on other sites

Eu am strecurat mai sus o informatie fara sa o subliniez. Tu ai nevoie sa inveti C pentru embedded si nu C pentru PC. Desi este acelasi limbaj, fiecare aplicatie are particularitatile sale specifice.

 

"C for embedded" este o expresie buna de cautat pe Internet.

Arduino nu e rau,dar din cate imi dau seama daca vreau sa fac trei montaje de automatizari , trebuie sa cumpar trei placi arduino plus auxiliarele. Asta m-ar costa cred extrem de mult fata de situatia incare as cumpara 3 Pic-uri si ceva componente si sa fac eu totul.

 

Trei bucati Arduino Mini cumparate din CN ajung cam la 6 ... 7 USD. Adica aproape 30 lei.

Trei bucati PIC cu un numar echivalent de pini plus sursele de alimentare, plus cuarturi (daca nu te folosesti de oscilatorul intern) ajung tot pe acolo ca pret daca nu ceva mai scump (de ex un controler deja invechit 16F877A costa cam 12 lei bucata).

Nu inteleg unde este diferenta enorma de pret in favoarea PIC cand Arduino este mai ieftin si le ai sub forma modulara ceea ce ofera si flexibilitate.

 

Ce inteleg este placerea de a construi totul de la zero.

Edited by mars01

Share this post


Link to post
Share on other sites

Tu ai nevoie sa inveti C pentru embedded si nu C pentru PC.

Probabil sunt "preformat" de "experienta" proprie, dar la mine a fost invers - intai am invatat C-ul pentru PC si dupa aia am invatat particularitatile unui compiler.

M-am uitat acum prin manualul lui xc8 si nu mi s-a parut deloc un "manual de c", Kernighan & Ritchie e, in schimb, o carte excelenta.

Share this post


Link to post
Share on other sites

Sigur Liviu, sunt multe cai catre aceasi destinatie. Fiecare merge pe drumul lui, functie de experienta si evenimentele din viata lui.

Insa OP prin postul sau arata foarte clar ca nu stie de unde sa inceapa dar stie totusi ce vrea, citez:  "Vreaus a incep sa ma joc cu microcontrolere". Ergo sugestia mea sa caute "C for embedded". 

 

Experienta personala imi garanteaza ca daca OP vrea nu doar sa "inceapa" dar sa si continue sa lucreze cu microcontrolerele, are nevoie de ceva care sa ii ofere rezultate rapide, chiar de la inceput.

Si intr-adevar (cum s-a mentionat anterior) Arduino se potriveste perfect pt aceasta sarcina, nu l-am mentionat de la inceput pentru ca totusi suntem pe un topic care discuta controlerele PIC.

Edited by mars01

Share this post


Link to post
Share on other sites

Eu am strecurat mai sus o informatie fara sa o subliniez. Tu ai nevoie sa inveti C pentru embedded si nu C pentru PC. Desi este acelasi limbaj, fiecare aplicatie are particularitatile sale specifice.

 

"C for embedded" este o expresie buna de cautat pe Internet.

 

Trei bucati Arduino Mini cumparate din CN ajung cam la 6 ... 7 USD. Adica aproape 30 lei.

Trei bucati PIC cu un numar echivalent de pini plus sursele de alimentare, plus cuarturi (daca nu te folosesti de oscilatorul intern) ajung tot pe acolo ca pret daca nu ceva mai scump (de ex un controler deja invechit 16F877A costa cam 12 lei bucata).

Nu inteleg unde este diferenta enorma de pret in favoarea PIC cand Arduino este mai ieftin si le ai sub forma modulara ceea ce ofera si flexibilitate.

 

Ce inteleg este placerea de a construi totul de la zero.

E, asta vroiam sa aud. Deci, exista doua tipuri de C. Din cauza asta vedeam eu ca nu prea are legatura cu electronica. Despre arduino, nu inteleg ce a acela CN (china???) de unde le pot cumpara asa ieftin. De Arduino mini nu stiam. Ca cel normal vad ca e de la 100 lei in sus, doar placa. Si da, pot sa spun ca imi place sa fac totul de la zero si sa readuc la viata lucrurile moarte.

Share this post


Link to post
Share on other sites

Deci, exista doua tipuri de C.

E, eu asta as fi vrut sa evitam.

In cazul C exista un standard, ANSI C si mai multe implementari mai apropiate sau mai departate de standard. In general, din cauza resurselor limitate si diferentelor hardware, compilerele pentru microcontrollere difera de standard, dar suficient de putin in asa fel incat odata stapanit ANSI C,  adaptarea la variantele pentru microcontrollere sa nu constituie o problema. Indiferent de microntrollere.

C in sine contine putine functii; poate fi folosit in atat de multe situatii datorita bibliotecilor care-l insotesc. In general "adaptarea" la alte platforme consta in cateva biblioteci (nu librarii :limb:) specifice hardului, limitari in tipurile de date suportate...

Cum am mai spus si cu alte ocazii, nu-s convins ca documentatia care insoteste compilerele pentru microcontrollere e suficienta pentru invatarea C. Senzatia mea a fost ca documentatiile astea presupun existenta unui minim de cunostinte. Sunt sanse sa ma insel (n-am rasfoit decat documentatia de la picc/xc8 si numai cand am cautat ceva anume) si m-as bucura sa existe compilere cu documentatie completa.

 

Ma opresc aici, cred c-a inteles toata lumea punctul meu de vedere - fanatic. :rade:

Edited by Liviu M

Share this post


Link to post
Share on other sites

Liviu, ai perfecta dreptate. Dpdv academic, stiintific sunt de acord cu tine. Doar ca a invata ceva presupune uneori o abordare gradata, practic "dai tarcoale, simti aroma" :)

Cand nu ai cunostiinte sau o educatie specifica, atunci incepi prin ceva care iti prinde atentia si iti da o stare de bine. Avand asociata aceasta stare de bine, de "iata ca pot si eu ..." , este mai usor de abordat o materie care este plina de abstract.

 

Nu toata lumea are de la inceput o minte ordonata si atenta la detalii (cum s-a dovedit ca ai tu, de ex) de care este nevoie in programare. Dar prin exercitiu se poate obtine.

Deci la inceput te joci putin, aprinzi un LED, ii faci un "toggle" etc. Apoi cand vezi ca se poate, trece la studiu mai serios al C.

Sunt treptele unei scari.

Eu aici vad esecul sistemului romanesc de educatie. Baga la greu abstract si pe multi ii pierde. Sistemul american in schimb merge exact pe partea practica. Mai intai te "prinde" cu chestii "shiny" si pe urma trece la chestii abstracte. In fiecare din noi este o "maimuta" care alearga dupa chestiile "stralucitoare".

Si se vede clar care sistem are succes.

In concluzie: ce propui este o etapa avansata si ulterioara etapei la care OP se gaseste.

 

@riciu

Da, CN este acronimul pentru China. Se pot cumpara atat de ieftin module Arduino Mini de pe site-uri gen www.aliexpress.com sau www.ebay.com

Nu exista doua tipuri de C, cel putin nu in sensul amintit. Ca altfel exista dezvoltari ulterioare ale C care s-au transformat in limbaje de sine statatoare desi includ sintaxa C pe alocuri: C++, C#.

C pentru embedded adica C pentru microcontrolere este limbajul C care este aplicat in programarea microcontrolerelor.

 

Are anumite particularitati adica este intr-un anume fel, specializat.

Ce inseamna aceasta? 

 

Inseamna ca limbajul C pentru controlere (C for embedded) se ocupa cu problemele ridicate de programarea microcontrolerului. Pentru aceasta trebuie sa intelegi ca un microcontroler este o suma de mici module (denumite periferice. Exemple de periferice: PWM, ADC, timer etc) incorporate in jurul unei unitati logice aritmetice (ALU, sau mai grosolan, CPU).

C pentru microcontrolere se ocupa in principal pe configurarea acestor periferice si accesarea lor cat si punerea lor la treaba. Una dintre actiunile comune si simple este de ex sa "faci conexiunile interne" astfel incat un periferic sa fie conectat la pinii hardware ai controlerului (aceasta pentru ca de multe ori un controller are prea putini pini pentru cate periferice are si trebuie sa alegi pe care modul/periferic il folosesti la un moment dat).

 

Dupa ce faci aceasta configurare incepi sa creezi efectiv programul C care va spune controler-ului (implicit si perifericelor activate anterior tot de tine) ce sa faca.

 

Un exemplu intr-o logica simpla este cum aprinzi un LED pe un controller.

 

1. Mai intai alegi un controler care sa il folosesti (sunt multe pe piata si alegi unul care sa poata face functia dorita si sa aiba un pret decent). Pentru aceasta citeste fisa tehnica a acelui controller. Fisa tehnica  (datasheet-ul) este prietenul tau. Se gaseste la fiecare producator pe site-ul lor si fara datasheet (fisa tehnica) nu poti face nimic. Din acea fisa tehnica cunosti controllerul, vezi ca periferice are, pe ce pini se pot conecta etc etc. Pt cazul nostru ai nevoie de un pin care sa aiba functia de digital I/O (input/output digital) adica poate fi configurat in intrare sau iesire care accepta nivele HIGH sau LOW.

2. Configurezi controler-ul. Aceasta este mai complicat de explicat (ia mult timp si nu am de gand sa fac aceasta aici). Se citeste datasheet-ul.

3. Configurezi oscilatorul controllerului sa functioneze pe frecventa dorita. Oscilatorul este "inima" controler-ului si da acel "tick" dupa care toate operatiile se executa.

4. Configurezi pinul hardware sa fie digital I/O si conectezi si LED-ul printr-un rezistor la acel pin al controller-ului.

5. Configurezi pinul care este acum digital I/O ca si IESIRE.

6. Creezi logica pentru a  controla LED-ul folosit. Pentru aceasta te vei folosi de asa numitii "registri" si poate de instructiuni decizionale cum ar "if" "then", "while" etc

Edited by mars01

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


×
×
  • 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.