Sari la conținut
ELFORUM - Forumul electronistilor

Boboc...la PIC


kovari_andrei

Postări Recomandate

SaltareSunt la mate-info si as dori sa studiez programarea PIC-urilor si ulterior AtmegaAs dori sa stiu in ce masura pot adapta/folosi programele pe care le utilizez la scoala in programare( la scoala folosesc mingw versiunea pt olimpiada OJIkit)Vreau sa precizez ca stiu o mare parte din baza C++Ascult orice sfat P.S.La ora actuala nici un stiu cu ce se "manaca" un PIC.

Link spre comentariu
  • Răspunsuri 22
  • Creat
  • Ultimul Răspuns

Top autori în acest subiect

  • kovari_andrei

    7

  • Liviu M

    4

  • pegas

    3

  • nooob64

    3

Top autori în acest subiect

Asadar pana acum stiu cateva componente alea unui microcontroller(vreau sa folosesc PIC-urile in acest scop)-Sistem de calcul -Baza de timp-Memorie-Periferice Totusi am ceva nelamuriri in ceea ce inseamna un bootloader.... si celelalte chestii legate de partea de programator(hardware si software) Astept nerabdator sfaturi...P.S.Mi s-a recomandat sa incep cu un arduino severino....ceva prin usb nu e mai practic?

Link spre comentariu

Dupa cum reiese si din descrierea ta, microcontrollerele sunt un fel de "calculatoare integrate". Din motive de integrare, resursele disponibile intr-un microcontroller sunt limitate fata de resursele unul calculator, dar in general sunt suficiente pentru aplicatii specifice.

Bootloaderul e un programel (altul decat programul aplicatie) care preia controlul la alimentare/reset si permite programarea microcontrollerului cu programul aplicatie. Daca un oarecare timp de la alimentare/reset nu incerci o reprogramare a microcontrollerului, bootloaderul lasa microcontrollerul la dispozitia unui program aplicatie deja existent in microcontroller (daca nu exista niciunul, nu se intampla nimic).

Scrierea de programe pentru microcontrollere se face cu ajutorul unor compilatoare "dedicate", care sa stie sa genereze cod masina recunoscut de microcontrollerul respectiv. Cel mai "apropiat" de microcontroller e assemblerul, dar exista si compilatoare "de nivel inalt", cel mai intalnit fiind C-ul.

Din pacare eu n-am auzit de compilatoare C++ pentru microcontrollere.

Tot din pacate, cel putin pentru picuri MinGW (de fapt gcc, ca MinGW e un port de windows al gcc) nu genereaza cod compatibil, asa ca iti e inutil. Da' daca intri la uChip pe site, o sa gasesti compilatoare C gratis/linkuri la compilatoare C.

Spui ca esti la mate-info. Asta e liceu? Cu electronica cum stai? Pentru ca, spre deosebire de PC unde poti programa fara sa ai idee ce e in jurul procesorului, la microcontrollere fiecare program e facut sa interactioneze destul de strans cu exteriorul, asa ca notiunile (macar elementare) de electronica sunt necesare.

Arduino ar fi si el un inceput, dupa cum un inceput (ieftin) ar putea fi launchpad-ul de la TI (in tara se pare ca se gaseste la Farnell).

Link spre comentariu

Multumesc liviu pentru informatii :aplauze Cu electronica nu am probleme (amplificatoarea audio pe la colegi si vacanta asta 3 concursuri nationale cu rezultate bune) Chiar de aceea mi s-a recomandat un arduino(sa il realizez eu)Din care am inteles pe el poti dezvolta o gramada de lucruri.Si inca ceva assemblerul e mai greu/asemanator/mai simplu decat limbajul C ?Assemblerul se poate folosi si pentu Atmega?Multumesc inca o data :dans:

Link spre comentariu

Nu va aruncati la asambler(cel putin nu la creeare unui program complex , ci doar la ceva rutine simple), oricit de compact ar iesii programul , un programator care scrie in C sau in alt limbaj de nivel inalt va fii mult mai productiv , mai nou microcontrolerele au arhitectura asa fel conceputa sa poata fii utilizata cit mai bine de catre compilatoarele in C.In C++ nu stiu cit de bine va iesii codul , sunt prea putine compilatoare pentru asa ceva , mai sunt si prost testate (cel putin la AVR) , este necesar microcontroler cu mult flash (mai mult de 16KB) , dar nu cred ca cineva are nevoie de creeat clase si alte minunatii ale limbajelor orientate pe obiecte , care apoi sa le utilizeze pe un amarit de controller.Cel mai simplu e cu un compilator in C , eu folosesc Mikroc PRO doar pentru ca are o multime de librarii gata implementate , insa astept sa apara o versiune stabila a lui MPLAB X (BETA momentan) si sa il combin cu HI-TECH C .

Link spre comentariu

Chiar de aceea mi s-a recomandat un arduino(sa il realizez eu)

Succes. N-am lucrat cu el, da' am auzit destul de "de bine" despre el.

Din care am inteles pe el poti dezvolta o gramada de lucruri.

Tinand cont ca e un ATMegaXX (sau pe acolo, nu stiu exact, nu ma certati daca am pocit putin numele), ce poti face cu el poti face si cu un ATMegaXX, da' (tot din cate am inteles) are o serie de module/biblioteci "de-a gata", ceea ce te ajuta sa ajungi mai repede la "produsul finit".

Si inca ceva assemblerul e mai greu/asemanator/mai simplu decat limbajul C ?

Dupa parerea mea, ca nu prea stiu assembler, e mai greu. Dupa parerea cuiva care stie assembler da' nu stie C, assemblerul e mai usor.

Assemblerul se poate folosi si pentu Atmega?

Sigur ca da. Da' assemblerul pentru ATMega. :rade:

Cu alte cuvinte, fiecare (in general) familie de uControllere are propriul set de comenzi (propriul assembler).

 

insa astept sa apara o versiune stabila a lui MPLAB X (BETA momentan) si sa il combin cu HI-TECH C .

Hi-Tech C se integreaza foarte bine cu mplabul actual.

Link spre comentariu

Asadar nu conteaza dificultatea limbajuluiNici Roma nu a fost construita peste noapte Constientizez ca orice lucreu necesita mult timp si rabdare Oricum e doresc sa ma axez pe C++Vara asta am cunoscut o gramada de persoane care programeaza in C++ si nu au nici o problema cu compilatoru'(scz de cacofonie)Dar nah daca nu se poate altfel sunt dispus sa invat si assembler...Dar inca cevaPt cei ce cunosc, e vreo diferenta mare mare (inafara de chichite) intre C si C++?P.S.Poate cineva sa imi ataseze o arhiva cu un fisier de programare pt o operatie simpla (hex sau cum ii spune, dar in principal ce e de scris in C++ ca sa vad cu se mananca :nas: )

Link spre comentariu

Asadar nu conteaza dificultatea limbajuluiOricum e doresc sa ma axez pe C++Vara asta am cunoscut o gramada de persoane care programeaza in C++ si nu au nici o problema cu compilatoru'(scz de cacofonie)Dar nah daca nu se poate altfel sunt dispus sa invat si assembler...Dar inca cevaPt cei ce cunosc, e vreo diferenta mare mare (inafara de chichite) intre C si C++?

Fara suparare dar daca intrebi care e diferenta intre C si C++ imi pot imagina ca tu la liceu ai facut doar C si poate o vaga initiere in C++ , oricum la liceu nu prea se fac initieri in limbaje orientate pe obiecte , sau doar la clase speciale intensiv.Aici ai 10 diferente majore intre C si C++ : http://zarrata.com/durofy/programming/10-major-differences-between-c-and-c/Nu cred ca vei ajunge pre repede sa scrii un program pentru microcontroler in C++ , decit daca vei ajunge la ceva microcontrolere pe 32 bit.Un mic program in C ( compilator MikroC PRO , PIC18F24J11) care afiseaza pe un lcd un mini ceas bazat pe intreruperi.
sbit LCD_RS at LATB2_bit;  // for writing to output pin always use latch (PIC18 family)sbit LCD_EN at LATB3_bit;  // for writing to output pin always use latch (PIC18 family)sbit LCD_D4 at LATB4_bit;  // for writing to output pin always use latch (PIC18 family)sbit LCD_D5 at LATB5_bit;  // for writing to output pin always use latch (PIC18 family)sbit LCD_D6 at LATB6_bit;  // for writing to output pin always use latch (PIC18 family)sbit LCD_D7 at LATB7_bit;  // for writing to output pin always use latch (PIC18 family)sbit LCD_RS_Direction at TRISB2_bit;sbit LCD_EN_Direction at TRISB3_bit;sbit LCD_D4_Direction at TRISB4_bit;sbit LCD_D5_Direction at TRISB5_bit;sbit LCD_D6_Direction at TRISB6_bit;sbit LCD_D7_Direction at TRISB7_bit;// End LCD module connectionsint sec_ = 0 , min_ = 0 , ore_ = 0;unsigned cnt=0,cnt2=0,flag_secunda = 0,refresh = 0;char lcd_buffer[17];void write1x16(char buffer[16]){unsigned char i;  Lcd_Chr(1,1,buffer[0]) ;for(i=1;i<8;i++)   Lcd_Chr_CP(buffer[i]) ;  Lcd_Chr(2,1,buffer[8]) ;for(i=9;i<16;i++)   Lcd_Chr_CP(buffer[i]) ;}void interrupt() {  if (TMR0IF_bit) {    cnt++;             // Increment value of cnt on every interrupt    TMR0L  = 1;    TMR0IF_bit = 0;    // clear TMR0IF  }   if (TMR1IF_bit) {    cnt2++;             // Increment value of cnt on every interrupt    TMR1IF_bit = 0;    // clear TMR2IF  }}void main() {T0CON  = 0xC7;       // Setam timer0 sa numere pe 8 biti , setam prescaler 1:256T1CON = 0b00010001;          // Setam timer1  mod 8 bit  1:2INTCON = 0xC0;       // Set GIE, PEIETMR0L  = 1;          //setam valoare registrului timer0 , mod 8 bitTMR0IE_bit = 1;      // Enable TMRO interruptTMR2IE_bit = 1;      // Enable TMR2 interrupt//ANCON1: A/D PORT CONFIGURATION REGISTER 1//PCFG<12:8>: Analog Port Configuration bits (AN<12:8>)ANCON1.PCFG12 = 1;ANCON1.PCFG11 = 1;ANCON1.PCFG10 = 1;ANCON1.PCFG9 = 1;ANCON1.PCFG8 = 1;//------------------------------------------------------//PCFG<7:0>: Analog Port Configuration bits (AN<7:0>)//1 = Pin configured as a digital port//0 = Pin configured as an analog channel – digital input disabled and reads ‘0’ANCON0 = 0xFE;//------------------------------------------------------TRISB = 0xFF;  //setam portB ca intrarePORTB = 0x00;TRISA = 0x00;  //setam portA ca iesireLcd_Init();Lcd_Cmd(_LCD_CURSOR_OFF); Sound_Init(&PORTC,2); Sound_Play(2000,100); write1x16("TESTING ...     "); delay_ms(1000); sprinti(lcd_buffer,"%u:%u:%u           ",ore_,min_,sec_);  write1x16(lcd_buffer);do {    if (cnt >= 46) {      sec_++;      refresh = 1;      cnt = 0;         // Reset cnt    }     if(sec_ == 60)     {        sec_ = 0;        min_++;      }     if(min_ == 60)     {        min_ = 0;        ore_++;     }     if(ore_ == 24)     {        ore_ = 0;     }     if(refresh)     {         sprinti(lcd_buffer,"%u:%u:%u           ",ore_,min_,sec_);         write1x16(lcd_buffer);         refresh = 0;     }          if (cnt2 >= 23) {       Sound_Play(4000,5);      cnt2 = 0;         // Reset cnt    }  } while(1);          // endless loop }
Link spre comentariu

Bun observ ca nu m-am prezentat prea bineSunt la mate-info intensiv informatica iar tot ce am lucrat a au fost probleme de matematica(ordonari, filtrari,insertii etc in matrici de numere, pana acum) in limbajul C++ folosind mingw.De aceea chiam am precizat ca vreau sa ma axez pe C++. :rade: C simplu nu stiu o boaba doar C++ si de aceea am intrebatSi multumesc pentru site-ul cu cele 10 diferente Foarte util :da Asadar C este mai putin avansat decat C++Astept in continuare sfaturi :dans:

Link spre comentariu

Imposibil sa nu stii C si sa stii C++ , te incurci putin , dar nu e problema ... asa eram si eu , la liceu ziceam ca fac C++ , insa erau exercitii de baza (matematice) si se folosea o banala afisare tipica C++ insa era C si nu C++;

Cind o sa vezi un program ca si cel de mai jos atunci poti vorbii de C++ , sunt multe probleme care trebuie luate in calcul cum ar fii constructori , destructori , mosteniri de clase , clase virtuale , clase derivate ...

class CRectangle {    int x, y;  public:    void set_values (int,int);    int area () {return (x*y);}};void CRectangle::set_values (int a, int b) {  x = a;  y = b;}int main () {  CRectangle rect;  rect.set_values (3,4);  cout << "area: " << rect.area();  return 0;}

Poti sa descarci MikroC PRO varianta trial de la http://www.mikroe.com si sa studiezi help-ul programului ; este foarte bine structurat , iti arata la fiecare chichta cum se procedeaza. Si eu eram la fel , prima oara cautam cum naiba sa accesez un pin , nici macar nu stiam ce e ala microcontroler pe 8 biti sa nu mai vorbesc de registrii , si asta acum 3 ani ... acum am ajuns pina la controlere pe 32 bit insa fara folos practic.

 

Daca vrei sa te apuci detreaba si ai un buget sa zicem 200 lei iti cumperi un programator PICKIT 2 , PIC16F887 capsula DIP , studiezi ce anume mai este necesar pentru functionarea corecta (condensatoare si rezistente aferente montajului de baza pentru microcontroler) , apoi iti mai cumperi periferice pentru microcontroller (leduri , push-butoane ,un LCD alfanumeric, mai multe...) . Musai sa ai un breadboard pe care sa faci montajul de test , nu are rost sa te pui sa cumperi nu stiu ce placa de dezvoltare pentru ca nu o sa inveti partea hardware .

Sunt mai multe lucruri care trebuie sa le iei in considerare , te mai uiti pe forum si mai gasesti topc-uri in care altii au intrebat cam aceleasi lucruri.

 

PS : sa nu crezi ca vreau sa ma leg de tine , insa asa sunt eu mai "agresiv" :rade:

Link spre comentariu

Stiu la ce te referi insa profesorii nu ne pot preda asa ceva(sunt singurul din clasa care se ocupa cu d'astea) mai mult se pune baza pe calcul matematic si pe dezvoltarea gandirii....

In fisierul prezentat am creeat un program cu matrice si citiri din fisier(ca sa iti poti face o idee despre ce am studiat), o problema banala

Si oricum vreau sa ma apuc de programare a microcontrolerelor nu numai pentru a realiza proiecte fizice ci in special pentru a-mi largi orizonturile si gandirea...

 

/*se citeste o matrice tipica.a) sa se afisezeb) sa se calc suma elem de pe coloanele imparec) sa se afiseze numarul elem negative din matriced) sa se afle elem maxim de pe linia k (k se citeste din fisier)e) sa se afle elem maxim al matricei*/#include<iostream>#include<fstream>using namespace std;int main(void){ifstream f("in.txt");ofstream g("out.txt");int n,m,a[100][100],i,j,s,neg,max,k;f>>n;f>>m;f>>k;if(k>n){cout<<"Valoarea lui k este prea mare pentru matricea introdusa"<<endl<<"Reintroduceti o alta valoare a lui k"<<endl;cin>>k;}	for(i=1;i<=n;i++)	for(j=1;j<=m;j++)		f>>a[i][j];g<<"Matricea citita este "<<endl;for(i=1;i<=n;i++)	{for(j=1;j<=m;j++) g<<a[i][j]<<" ";                           g<<endl;}	for(j=1;j<=m;j++) 	if(j%2==1){s=0;		  g<<"Suma coloanei "<<j<<" este"<<endl;		  for(i=1;i<=n;i++)		  s=s+a[i][j];	          g<<s<<endl;} g<<"In matricea introdusa ";for(i=1;i<=n;i++)	{for(j=1;j<=m;j++)		if(a[i][j]<0) neg++;}	if(neg!=0) g<<"exista "<<neg<<" elemente pare"<<endl;		else g<<"nu exista elemente negative"<<endl; {max=a[k][1];for(j=1;j<=m;j++)if(a[k][j]>max) max=a[k][j];g<<"Elementu' maxim de pe linia "<<k<<" este "<<max;}{max=a[1][1];for(i=1;i<=n;i++)for(j=1;j<=m;j++)if(a[i][j]>max) max=a[i][j];g<<endl<<"Elementu' maxim al matricei este "<<max;}}
P.S.

Mi s-a mai spus ca lucrez dezordonat in C++ :jytuiyu

Link spre comentariu

da, cum spunea si colegul de mai sus, asta e C pur. nici boaba de C++. a spune ca stii C++ dar deloc C e ca si cum ai spune ca stii sa scrii cuvinte dar nu stii literele.iar replicile gen "lucrezi dezordonat in C++" provin din necunoasterea/ignoranta/inghetarea in timp a profesorilor...cum adica lucrezi dezordonat? ca nu le aranjezi ca in Pascal? referitor la PIC-uri, ia de exemplu datasheetul de la 16f84a si citeste-l.pe urma, pune intrebari pe aici, sa vezi ce nu ai inteles si sa intelegi.

Link spre comentariu

iar replicile gen "lucrezi dezordonat in C++" provin din necunoasterea/ignoranta/inghetarea in timp a profesorilor...cum adica lucrezi dezordonat? ca nu le aranjezi ca in Pascal?

Sorry, da' un program bine scris nu e cel care face (numai) ce vrei de la el, ci cel pe care-l mai intelegi peste 2 saptamani, 2 luni, 2 ani..., cand vrei sa-l "repari", imbunatatesti, extinzi. Un program scris "ca din furca" si necomentat e greu de intretinut. N-are nici o legatura cu "anchilozarea" profesorilor. Si nu, nu-s profesor. Si nici nu scriu cod ingrijit, de-aia si stiu cat e de nasol e sa scrii astfel de cod. :rade:LE Referitor la programul de mai sus, nu pot decat sa fiu de acord cu profii - e scris mizerabil. Parerea mea, normal.
Link spre comentariu

Foarte bine ce ai inceput cu uC urile.Mai posteaza pe aici ce ai mai reusit sa faci in ultima vreme ca sa ne dam cu parerea.Si eu vreau sa mai fac cate ceva ca sa nu uit totul.In principiu daca citesti datasheetul de la PICul cu care vrei sa lucrezi si dai cate un Google la ce nu intelegi imposibil sa nu-l faci sa mearga.Succesuri!PS: As fi vrut si eu in liceu sa am dorinta ta de a-mi largi orizonturile. :aplauze

Link spre comentariu

Creează un cont sau autentifică-te pentru a adăuga comentariu

Trebuie să fi un membru pentru a putea lăsa un comentariu.

Creează un cont

Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!

Înregistrează un nou cont

Autentificare

Ai deja un cont? Autentifică-te aici.

Autentifică-te acum



×
×
  • Creează nouă...

Informații Importante

Am plasat cookie-uri pe dispozitivul tău pentru a îmbunătății navigarea pe acest site. Poți modifica setările cookie, altfel considerăm că ești de acord să continui.Termeni de Utilizare si Ghidări