Cum se programează un microcircuit pentru începători. Noțiuni de bază pentru programarea microcontrolerului AVR

Subiectul designului electronic devine din ce în ce mai popular. Vă aducem în atenție un articol care vă va vorbi despre microcontrolere pentru începători.

Ce microcontrolere există?

În primul rând, este necesar să schițăm situația cu microcontrolere. Faptul este că sunt produse nu de o singură companie, ci de mai multe simultan, așa că există destul de multe microcontrolere diferite care au parametri diferiți, caracteristici diferite atunci când sunt utilizate și capacități diferite. Ele diferă în ceea ce privește viteza, interfețele suplimentare și numărul de pini. Cei mai populari din fosta URSS sunt reprezentanții RIS și AVR. Programarea microcontrolerelor AVR și PIC nu este dificilă, ceea ce le-a asigurat popularitatea.

Cum sunt programate microcontrolerele?

Programarea microcontrolerelor se realizează, de regulă, folosind dispozitive speciale numite programatori. Programatorii pot fi achiziționați sau de casă. Dar, atunci când flashezi un microcontroler folosind un programator de casă, șansa ca acesta să se transforme într-o „cărămidă” este destul de mare. Există o altă opțiune care poate fi luată în considerare folosind placa Arduino ca exemplu. Placa rulează pe un microcontroller Atmel și este folosită pentru programarea microcontrolerelor AVR. Placa are deja un bootloader pre-flash și un port USB, care vă permit să flashați în siguranță microcontrolerul în uz, fără a oferi utilizatorului acces la date care ar putea deteriora același microcontroler. Programarea microcontrolerelor pentru începători nu este atât de dificilă pe cât ar părea și, cu o oarecare îndemânare și inteligență, vă va scuti de nevoia de a alege un nou mecanism.

Diferențele hardware între diferite microcontrolere

Atunci când alegeți microcontrolere, ar trebui să acordați atenție unor diferențe hardware, nici măcar de la companii diferite, dar și din aceeași gamă de modele. În primul rând, ar trebui să acordați atenție posibilității de a rescrie informațiile pe microcontroler. Această funcție vă va permite să experimentați cu un MK pentru o lungă perioadă de timp. De asemenea, acordați atenție numărului de pini cu scopul lor. Nu neglijați frecvența de operare a cristalului pe care funcționează circuitul: de acesta depinde numărul de operații pe secundă pe care le poate efectua microcontrolerul. Când examinăm aceste caracteristici, precum și memoria MK, la început poate părea că nu se poate face nimic semnificativ pe microcontrolere, dar aceasta este o opinie greșită. Amintiți-vă că programarea microcontrolerelor pentru începători nu necesită cel mai bun echipament la început, dar puteți avea ceva mai puternic în rezervă.

Limbaje de programare pentru microcontroler

Pentru programarea microcontrolerelor sunt folosite două limbaje: C/C++ și assembler. Fiecare dintre ele are propriile sale avantaje și dezavantaje. Deci, dacă vorbim despre asamblator, atunci face posibil să faceți totul foarte subtil și eficient, acest lucru este deosebit de important atunci când nu există suficientă RAM sau putere operațională (ceea ce, totuși, se întâmplă destul de rar). Dar studiul lui și scrierea programelor pe el necesită destul de mult efort, punctualitate și timp. Prin urmare, pentru dezvoltarea bazată pe microcontrolere, sunt adesea folosite limbajele de programare C și C++. Sunt mai înțeleși în aspectul și structura lor, sunt aproape de vorbirea umană, deși nu o reprezintă într-o înțelegere deplină. De asemenea, au o funcționalitate foarte bine dezvoltată care poate interacționa ușor cu hardware-ul, imaginându-și că este doar un element de program. Cu toate avantajele lor evidente, programele mai voluminoase sunt create în C și C++ decât în ​​asamblare.

De asemenea, în unele cazuri, când spațiul operațional utilizat este critic, aceste limbi pot fi combinate. Aproape toate mediile de dezvoltare pentru C și C++ au capacitatea de a instala inserții de asamblare în program. Prin urmare, dacă apare o problemă într-o zonă critică, puteți scrie o inserție de ansamblu și o puteți integra în firmware-ul pentru microcontroler, iar firmware-ul în sine, sau mai degrabă, cea mai mare parte, poate fi scris în C sau C++. Programarea microcontrolerelor în SI este mai ușoară, motiv pentru care mulți oameni aleg aceste limbaje. Dar cei care nu se tem de dificultăți și doresc să înțeleagă particularitățile modului în care funcționează echipamentul își pot încerca limbajul de asamblare.

Cuvinte de despărțire

Dacă vrei să experimentezi cu grozav. Vă putem sfătui doar să aveți răbdare și perseverență, iar apoi orice obiective stabilite pentru inventator se vor dovedi a fi fezabile. Programarea microcontrolerelor pentru începători și pentru oamenii cu experiență arată diferit: ceea ce este dificil pentru începători este o rutină pentru oamenii experimentați. Principalul lucru este să ne amintim că tot ceea ce nu contrazice legile fizicii este fezabil și rezolvabil.

Sunt categoric împotriva acestei abordări. De obicei, totul se termină - fie cu nimic, fie cu forumuri înfundate cu cereri de ajutor. Chiar dacă cineva este ajutat, în 90% din cazuri nu va mai apărea niciodată pe site-urile de electronice. În restul de 10%, continuă să inunde forumurile cu rugăminți, mai întâi îl vor da cu piciorul, apoi vor arunca cu noroi în el. Din aceste 10%, alte 9% sunt eliminate. Apoi există două opțiuni: fie că vine la un cap prost și încă merge la început, fie în variantele deosebit de neglijate, este treaba lui să copieze desenele altora, fără să se gândească la modul în care funcționează. Arduiniștii se nasc adesea din acestea din urmă.

Calea de la zero, după părerea mea, este să studiez perifericele și caracteristicile, dacă este un microcontroler. Este mai bine să vă dați seama mai întâi cum să vă loviți cu picioarele, apoi temporizatoarele, apoi interfețele. Și abia atunci încearcă să-ți crești GRASIȘIT. Da, acest lucru nu este rapid și va necesita timp și efort, dar practica arată că, indiferent cum ai încerca să scurtezi această cale, vor apărea în continuare probleme care vor trebui rezolvate și vei petrece mult mai mult timp fără această bază.

Doar nu confundați cald și moale. În primul rând, există excepții de la toate regulile, am văzut personal oameni care nu au avut niciodată microcontrolere în mână înainte, dar într-o perioadă extrem de scurtă de timp au reușit să depășească radioamatorii cu experiență, nu-i luăm în considerare. În al doilea rând, am întâlnit persoane care au început prin a copia diagrame și și-au dat seama imediat, dar aceasta este cel mai probabil o excepție de la regulă. În al treilea rând, există și programatori experimentați printre dezvoltatorii Arduino, aceasta este doar o platformă, dar aceasta este mai degrabă o excepție.

Dacă vorbim despre masa generală, atunci lucrurile sunt exact așa cum am descris la început: reticența de a te ocupa de elementele de bază, în cel mai bun caz, întârzie momentul în care trebuie să te întorci la aceste probleme. În cel mai rău caz, vei atinge rapid plafonul cunoștințelor tale și vei da mereu vina pe altcineva pentru problemele tale.

2. Înainte de a rezolva o problemă, descompuneți-o până la absurd, până la „lipirea unui rezistor”, acest lucru ajută, a fost testat. Problemele mici sunt mult mai ușor de rezolvat. Când o sarcină mare este împărțită într-o grămadă de acțiuni mici, tot ce rămâne este să le finalizezi. Îți mai pot da un sfat bun, chiar dacă ți se pare nebunesc - ia-ți un caiet și scrie în el tot ce vei face. Crezi că îmi voi aminti asta, dar nu. Să spunem că astăzi sunt într-o dispoziție bună și mă gândesc cum să adun tabla. Scrieți un plan de acțiune: mergeți să cumpărați un rezistor, pregătiți firele, montați afișajul. Atunci vei uita totul, vei deschide caietul și vei uita - da, astăzi am chef să văd și să planific, voi face o fixare. Sau asamblați o placă și ultima componentă rămâne să fie lipită, dar nu este cazul, rezistențele s-au terminat, așa că ar fi trebuit să o notez înainte de lipit, apoi mi-am amintit.

3. Nu folosiți generatoare de coduri, caracteristici non-standard și alte simplificări, cel puțin în primele etape. Vă pot da exemplul meu personal. Când foloseam în mod activ AVR, am folosit CAVR codogen. Am fost complet mulțumit de el, deși toată lumea spunea că este o prostie. Clopotele bateau continuu, erau probleme cu bibliotecile, cu sintaxa, cu portarea, dar era greu sa renunti la asta. Nu am înțeles cum funcționează, știam doar unde și cum să bifez casetele.

Miza a fost bătută în sicriul meu odată cu apariția STM32, a fost necesar să mă târesc pe ele și atunci au apărut problemele. Problemele sunt ușor de spus, de fapt, a trebuit să stăpânesc microcontrolere și limbajul C de la zero. Nu am mai repetat greșelile din trecut. Trebuie să spun că acest lucru a fost deja util de mai multe ori. De atunci, am avut ocazia să lucrez cu alte platforme și nu întâmpin dificultăți, abordarea se justifică.

În ceea ce privește toate îmbunătățirile și simplificările, a existat o comparație foarte bună: sunt ca niște scaune cu rotile care circulă pe șine, poți merge și te bucuri, dar nu te poți ridica, unde te duc, vei ajunge acolo.

4. Învață limbajul C. Oh, cât de des aud radioamatori începători lăudându-se că cunosc bine radioul. Asta a devenit hrană pentru mine întotdeauna îmi place să mă consult cu astfel de interlocutori. De obicei, devine clar imediat că ei nu știu deloc limba. Pot spune că, în ciuda aparentei simplități, nu am întâlnit mulți oameni care să-l cunoască cu adevărat bine. Practic, toată lumea îl cunoaște atât cât este necesar pentru a rezolva probleme.

Cu toate acestea, problema după părerea mea este că, fără să cunoști posibilitățile, te limitezi sever. Pe de o parte, nu sunt soluții optime care vor necesita un hardware mai puternic, pe de altă parte, un cod ilizibil care este greu de întreținut. În opinia mea, lizibilitatea și mentenabilitatea codului este unul dintre cele mai importante locuri și îmi este dificil să-mi imaginez cum se poate realiza acest lucru fără a folosi toate capacitățile limbajului C.

Mulți începători disprețuiesc să învețe limba, așa că dacă nu ești ca toți ceilalți, vei deveni imediat cu doi pași deasupra celorlalți începători. De asemenea, nu contează unde să studiezi limba. După părerea mea, un microcontroler nu este foarte potrivit pentru asta. Este mult mai ușor să instalezi un fel de Visual Studio sau Qt Creator și să rezolvi problemele pe linia de comandă.

De asemenea, va fi de mare ajutor să studiezi orice teste de limbă care sunt susținute în timpul interviurilor. Dacă săpați, puteți învăța o mulțime de lucruri noi.

5. Învăț asamblare? Nu trebuie să-ți fie frică de el, nici să-l idolatrizezi. Nu ar trebui să credeți că, dacă știți să scrieți un program în limbaj de asamblare, veți deveni imediat un guru al microcontrolerelor, din anumite motive aceasta este o concepție greșită comună. În primul rând, este un instrument. Chiar dacă nu intenționați să-l utilizați, aș recomanda cu tărie să scrieți cel puțin câteva programe. Acest lucru vă va simplifica foarte mult înțelegerea funcționării microcontrolerului și a structurii interne a programelor.

6. Citiți fișa tehnică. Mulți dezvoltatori neglijează acest lucru. Studiind fișa de date veți fi cu doi pași mai sus decât acei dezvoltatori. A face acest lucru este extrem de util, în primul rând, aceasta este sursa primară, indiferent de site-urile pe care le citiți, în cele mai multe cazuri ele repetă informații din fișa de date, adesea cu erori și omisiuni. S-ar putea să existe și informații acolo la care nu te gândești acum, dar care pot fi utile în viitor. Se poate întâmpla să apară un fel de eroare și să vă amintiți că da, s-a spus despre asta în fișa de date. Dacă scopul tău este să devii un dezvoltator bun, atunci această etapă nu poate fi evitată, cu cât vei începe să faci asta mai devreme, cu atât mai rapid va merge.

7. Oamenii cer adesea să trimită fișe de date în rusă. O fișă de date este ceva care ar trebui perceput ca fiind adevărul, cea mai exactă informație. Chiar și acolo, greșelile sunt posibile. Dacă la aceasta se adaugă și greșelile traducătorului, el este și o ființă umană, poate nici măcar intenționat, doar scris greșit. Sau are propria sa viziune, poate să-și scape ceva care, în opinia lui, nu este important, dar poate extrem de important pentru tine. Situația devine deosebit de amuzantă atunci când trebuie să găsiți documentație pentru componente nu foarte populare.

În opinia mea, este mult mai ușor să excludeți întregul strat al acestor probleme în avans decât să le prindeți mai târziu. Prin urmare, sunt categoric împotriva traducerilor, singurul sfat adevărat este să studiezi limba engleză pentru a citi fișele tehnice și manualele în original. Puteți înțelege semnificația unei fraze cu ajutorul programelor de traducător, chiar dacă nivelul dvs. de limbă este complet zero.

Am făcut un experiment: am avut un student, o fișă de date și un traducător Google. Experimentul nr. 1: elevului i s-a dat o fișă de date și i s-a dat sarcina de a găsi în mod independent valorile cerute, rezultatul este „cum pot”, „nu știu engleza”, „nu am găsit nimic/nu am găsit „nu înțeleg” sunt expresii tipice care indică faptul că nici nu a încercat. Experimentul nr. 2: aceluiași elev a primit aceeași fișă de date și aceeași sarcină, cu diferența că am stat lângă el. Rezultatul este că după 5 minute a găsit el însuși toate valorile necesare, absolut fără participarea mea, fără să cunoască engleza.

8. Reinventează roata. De exemplu, dacă studiați ceva nou, să spunem un tranzistor, unchiul Horowitz declară cu autoritate din paginile cărții sale că tranzistorul amplifică, spuneți întotdeauna - NU CRED. Luăm tranzistorul în mâini, îl conectăm la circuit și ne asigurăm că acesta este într-adevăr cazul. Există un întreg strat de probleme și subtilități care nu sunt descrise în cărți. Le poți simți doar când le ridici și încerci să le asamblați. În același timp, obținem o mulțime de cunoștințe aferente și învățăm subtilitățile. În plus, orice teorie fără practică va fi uitată mult mai repede.

La etapa inițială, o metodă m-a ajutat foarte mult - mai întâi asamblați un circuit și vedeți cum funcționează, apoi încercați să găsiți o justificare într-o carte. Același lucru este și cu partea de software, când există un program gata făcut, este mai ușor de înțeles și de a corela bucățile de cod care sunt responsabile pentru ce.

De asemenea, este important să depășiți ceea ce este permis, să aplicați mai mult/mai puțină tensiune, să faceți rezistențe mai mari/mai mici și să monitorizați modificările în funcționarea circuitului. Toate acestea rămân în creier și vor fi utile în viitor. Da, acest lucru este plin de consum de componente, dar consider acest lucru inevitabil. La început, am stat și am tras totul, dar acum, înainte de a paria cutare sau cutare denominație, îmi amintesc mereu de acele vremuri distractive și de consecințele greșirii unei denominațiuni.

9. Cum aș face asta dacă aș fi dezvoltatorii? Pot să fac mai bine? Pune-ți aceste întrebări de fiecare dată, te ajută cu adevărat să progresezi în învățare. De exemplu, studiați interfețele 1wire, i2c, spi, uart și apoi gândiți-vă la modul în care diferă, dacă ar fi putut fi făcut mai bine, acest lucru vă va ajuta să înțelegeți de ce totul este așa și nu altfel. De asemenea, vei fi conștient de când și care este mai bine să folosești.

10. Nu fi limitat de tehnologie. Este important ca acest sfat să aibă o linie foarte fină. A existat o etapă în viață în care de la fiecare ușă se auzea „ar trebui să știi FPGA”, „dar poți face ceva cu FPGA”. Formal, nu aveam obiective să studiez PLISins, dar nu aveam cum să-l ignor. A fost alocat puțin timp pentru familiarizarea cu această problemă. Timpul nu a fost pierdut, am avut o serie de întrebări cu privire la structura internă a microcontrolerelor și, după ce am comunicat cu Plisins, am primit răspunsuri la acestea. Există multe exemple similare, toate cunoștințele pe care le-am dobândit într-o formă sau alta mi-au fost utile mai devreme sau mai târziu. Nu am un singur exemplu inutil.

Dar, după cum s-a spus, problema tehnologiei are o linie fină. Nu este nevoie să apuci totul. Există multe domenii în electronică. Poate îți place analogul, poate digital, poate ești un specialist în surse de alimentare. Dacă nu este clar, atunci încearcă-te peste tot, dar practica arată că la început este mai bine să te concentrezi pe ceva anume. Chiar dacă trebuie să apăsați în mai multe direcții, este mai bine să o faceți în pași, mai întâi împingând un singur lucru.

11. Dacă întrebi un radioamator începător ce îi place mai mult: programarea sau proiectarea circuitelor, atunci cu o probabilitate de 99% răspunsul va fi programarea. În același timp, acești programatori își petrec cea mai mare parte a timpului realizând plăci cu LUT/photorezist. Motivele sunt în general clare, dar destul de des acest lucru se transformă într-un fel de nebunie, care constă în a face scânduri de dragul de a face scânduri.

Pe Internet, aproape singura modalitate reală de programare este să devii un Jedi al producției de plăci de circuite imprimate. Si eu am trecut pe aceasta cale, dar de fiecare data imi pun intrebarea de ce? De când mi-am cumpărat câteva scânduri, pentru toate ocaziile, de fiecare dată mă gândesc că aș putea trăi cu ușurință tot acest timp fără scânduri de casă. Sfatul meu este că, dacă există măcar o picătură de îndoială, este mai bine să nu vă deranjați și să luați o placă de depanare gata făcută și ar fi mai bine să cheltuiți timp și bani pe programare.

12. Următorul sfat este deosebit de dureros. Chiar nu vreau să-l discut, dar trebuie.Îmi scriu adesea, spunând că xxx ruble sunt prea scumpe, de unde le pot cumpăra mai ieftin. Pare o întrebare obișnuită, dar de obicei mă încordez imediat de ea, deoarece adesea se transformă în nenumărate plângeri despre lipsa banilor. Am mereu o întrebare: de ce să nu rup fundul și să merg la treabă? Chiar și în același timp, chiar și pentru construcție, trebuie să așteptați o lună, dar apoi puteți cumpăra câteva scânduri care vor rezista pentru anul următor. Da, știu că este greu să găsești de lucru în orașe și sate mici, să te muți într-un oraș mare. Lucrați de la distanță, în general trebuie să rotiți. Pur și simplu nu are rost să te plângi, există o cale de ieșire din situație, cine o caută o găsește.

13. Voi adăuga la aceeași colecție problema foarte dureroasă a instrumentului. Instrumentul ar trebui să vă permită să dezvoltați dispozitive cât mai repede posibil. Din anumite motive, mulți dezvoltatori nu își prețuiesc timpul. Un exemplu tipic este o sertizare ieftină pentru terminale, pe care mulți angajatori le place să economisească. Problema este că nici măcar nu se sertează corect, provocând căderea firelor. Trebuie să efectuați o grămadă de manipulări suplimentare, pierzând timpul în consecință. Dar, după cum știți, un prost plătește de trei ori, așa că prețul mic al unei sertizate va crește de multe ori, din cauza timpului petrecut și a calității proaste a sertării.

Nu spun că ieftin = rău, nu - totul depinde de situație. Permiteți-mi să mă întorc la exemplul șlefuitorului a fost o perioadă în care am sertizat-o cu orice, așa că apăreau adesea probleme. Este deosebit de neplăcut când porniți o placă și nu funcționează, după o lungă căutare a unei erori vă dați seama că din cauza unui fir sertizat prost, este păcat. De când a apărut sertizarea normală, nu au existat astfel de probleme. Da, broasca dinăuntru râpănea și sufoca de costul ei, dar nu am regretat niciodată această decizie. Tot ce vreau să spun este că, după ce ai lucrat cu un instrument normal, nu vrei să te întorci la cel rău, nici măcar nu vrei să discuti despre asta. După cum arată practica, este mai bine să nu vă zgâriți cu instrumente, dacă aveți îndoieli, testați-l de la cineva, citiți recenzii, recenzii.

14. Începeți un site web, puteți scrie orice doriți pe el, la fel ca notele. Practica arată că angajatorii încă nu o citesc, dar faptul în sine are un efect mare.

15. O întrebare delicată: studii superioare de specialitate, este necesar? Cunosc mai mult de un caz în care oamenii au lucrat fără nicio educație și, pe baza experienței și cunoștințelor lor, au putut să dea lumină oricărui specialist atestat. De fapt, nu am o educație specializată, simt disconfort din cauza asta? Într-o anumită măsură, da.

La început, când microcontrolerele erau un hobby pentru mine, am ajutat foarte mult la cursuri și diplome de la diferite universități, doar pentru a-mi evalua nivelul. Pot spune cu încredere că nivelul este în general scăzut, indiferent de numele universității. Nu este necesar să studiezi câțiva ani pentru a scrie o astfel de diplomă. Puteți realiza acest lucru singur într-o perioadă foarte scurtă de timp. Și totuși, au fost deseori momente în care elevii știau o materie pe care o luau în anul 2-3, dar eu nu o știam. Deși toate aceste cunoștințe au fost compensate de autoeducație, ar fi totuși mai bine să nu pierdem timpul cu asta.

Universitatea de dragul unei bucăți de hârtie. Pot spune că au fost și situații în care li s-a oferit un loc de muncă care necesita studii obligatorii și era păcat că în acel moment nu exista nici o foaie de hârtie. Dar, în general, istoria arată că majoritatea angajatorilor nu le pasă de documentele tale.

Următorul punct nu este adesea luat în considerare, acesta este mediul. Nu uita că oamenii cu care studiezi sunt generația ta și este posibil să lucrezi cu ei. Numărul de firme care operează într-o singură industrie este foarte limitat. Practica arată că, chiar și în orașele mari, toată lumea se cunoaște unii despre alții, până la detalii intime.

Un alt punct sunt oportunitățile. Adesea, universitățile au propriile capacități - echipamente, poate unele secțiuni, poate niște programe de lucru în străinătate, acest lucru ar trebui folosit dacă există chiar și cea mai mică oportunitate. Dacă nu vezi nicio perspectivă la o universitate, mergi la alta, lumea nu se termină doar la una.

Pentru a rezuma, sfatul este acesta: dacă există chiar și cea mai mică oportunitate, trebuie să mergi să studiezi, cu siguranță după profilul tău, dacă există măcar o șansă, apoi să te urci peste tot și să nu stai pe bancheta din spate; Faceți cunoștințe, în același timp exersați și dezvoltați-vă acasă.

16. Este prea târziu pentru a începe programarea la 20, 30, 40, 50 de ani? Practica altor oameni arată că vârsta nu este deloc o piedică. Din anumite motive, mulți nu țin cont de faptul că există un întreg strat de muncă pe care tinerii, din cauza ambițiilor lor, nu vor să o facă. Prin urmare, angajatorii preferă să-i angajeze pe cei care îl vor duce. Aceasta este șansa ta de a te captiva și apoi totul depinde doar de tine.

Și un ultim sfat. Mulți radioamatori sunt lipsiți de comunicare, furioși și iritabili - considerați acest lucru o specificitate a muncii. Radiază bunătate și pozitivitate, fii o persoană bună.

Salutare tuturor. După cum am promis, de astăzi începem să studiem programarea microcontrolerelor AVR (folosind Atmega8 ca exemplu). Pentru acei cititori care sunt interesați de programarea unei plăci Arduino, nu vă faceți griji, articolele pe acest subiect vor continua :) .

Se poate pune o întrebare logică de ce, dintr-un număr de alte microcontrolere (denumite în continuare MK), a fost aleasă ca cea experimentală. MK AVR. Există mai multe motive pentru aceasta:

  • MK AVR disponibil universal;
  • Au un preț destul de mic;
  • Puteți găsi multe programe gratuite pe Internet care vă vor ajuta când lucrați cu date MK.
  • În plus, există o mulțime de articole scrise și forumuri unde puteți adresa întrebări despre date. MK AVR.

După cum am spus mai devreme, vom folosi MK ca subiect de testare. Atmega8. Dece el?

Acest microcontroler are 3 porturi I/O. Pe langa asta, este destul de ieftin.

Prin porturi înțelegem magistralele de date care pot funcționa în două direcții opuse (adică de ieșire și de intrare).

U Atmega8 3 porturi. Portul B este format din 8 pini (numerotate 0,1,2,3,4,5,6,7). Portul C este format din 7 pini (numerotate 0,1,2,3,4,5,6). Portul D este format din 8 pini (numerotate 0,1,2,3,4,5,6,7).

Microcontrolerul poate fi alimentat de la 3,3 și 5 V. Cu o tensiune de alimentare de 5 V, frecvența maximă de ceas este de 16 MHz, iar cu o tensiune de alimentare de 3,3 V, frecvența maximă de ceas este de 8 MHz. Deocamdată, să nu ne deranjam cu frecvențele de ceas.

Alimentarea este furnizată la pinul 7, iar împământarea este furnizată la pinul 8.

Descarcă gratis. Descărcat, instalat, lansat :)

Primul loc pentru a începe să vă familiarizați cu Atmel Studio este crearea unui proiect.

Selectați Fișier -> nou -> proiect.

Se va deschide o fereastră de selecție. Selectați folderul „Browse” în care vom salva proiectele scrise. Am creat un folder pentru proiecte în avans.

Atribuim un nume proiectului, în cazul meu lesson_avr_1

Acordați atenție casetei de selectare „creați directorul pentru soluție”. Dacă caseta de selectare este bifată, atunci în folderul pe care l-am ales pentru a salva proiectele, va fi creat un folder separat pentru proiectul curent.

Asta e tot - proiectul a fost creat.

Să începem configurarea proiectului pe care l-am creat. Faceți clic pe Projest -> proprietăți lesson_avr_1 sau (alt+F7)

Accesați fila Instrument. Alegem - simulator. Acțiunile pe care le întreprindem vor face posibilă depanarea codului scris. Salvați modificările. Puteți salva modificările într-un fișier (actual) sau în toate fișierele de proiect simultan. Închideți setările.

Oamenii care lucrează cu partea software a microcontrolerelor sunt rareori considerați dezvoltatori de software clasici. Chestia este că, pe lângă cunoștințele de software, au nevoie și de câteva informații despre hardware-ul folosit. Mulți programatori nu sunt deloc afectați de astfel de cunoștințe.

În plus, un dezvoltator de aplicații sau de site-uri web se străduiește întotdeauna în subconștient pentru triumf. Crearea unui produs unic și popular este marca care împarte o carieră în normală și de succes. Și când creați un program pentru un microcontroler, este puțin probabil să vă gândiți la evaluarea publică a contribuției dvs. Totuși, să o luăm în ordine.

Vârstă

Să începem cu principalul lucru: când (încă) poți începe să-ți faci loc în profesie? Răspunsul este previzibil: cu cât mai devreme, cu atât mai bine. Și abundența de seturi speciale pentru copii încurajează acest lucru. Nici măcar odată cu vârsta îți va fi mai dificil să te adaptezi și să înveți această disciplină. Doar că experiența, ca și în multe alte profesii IT, joacă un rol decisiv aici.

Dar nu este chiar atât de rău. Cu toate acestea, în Rusia această piață nu este foarte dezvoltată. Începând calea unui dezvoltator de software pentru MK după 30 de ani, puteți face o carieră bună într-un anumit domeniu sau loc specific de activitate. Dacă, desigur, nu încercați să deveniți un „operator cu mai multe mașini”. Există întotdeauna excepții, dar multe depind de performanțele tale din trecut. Probabil merită luat în considerare faptul că nici 10 ani în această profesie nu impresionează un angajator.

Cunoştinţe

Să trecem de la cuvintele goale la cerințe reale. „MustKnow” în programarea microcontrolerelor este limbajul C/C++. Da, tendințele globale indică acum o tranziție către limbaje mai avansate sau cel puțin mai simple (Arduino sau D). Dar acest viitor este destul de îndepărtat doar elevii de azi din școala elementară pot deschide calea către el.

În plus, cunoștințele de asamblare vor fi foarte utile. Acest lucru este necesar pentru urmărirea pas cu pas a execuției codului pentru a evita erorile flotante și pierderile nejustificate de performanță.

Restul este informatică destul de generală: protocoale de transmisie, cunoștințe de bază de electronică și circuite (cel puțin principiile funcționării ADC/DAC, lucrul cu comutatoare, sursa de alimentare etc.), capacitatea de a citi (și înțelege) documentația tehnică în Engleză. Dar principalul lucru este să nu funcționeze conform principiului „poke științific”, altfel microcontrolerele tale riscă să se transforme în „roci”.

Un alt sfat: trebuie să câștigi toate aceste cunoștințe în practică. Poți începe cu plăci gata făcute ieftine, dar eficiente, cu tot hardware-ul necesar, precum Arduino sau Raspberry Pi, care cu siguranță vor deveni buni ajutoare pentru tine în viitor. Și abia atunci, dacă apare dorința, joacă-te cu perifericele.

Literatură

Săptămâna trecută, la sugestia unuia dintre utilizatorii GeekBrains, m-am gândit serios la întrebarea „Unde pot urma cursuri de programare a microcontrolerelor?” și, în general, la literatura de specialitate în general (și asta în ciuda unei studii superioare de specialitate și a vreo 10). ani de experiență în muncă). Nu este că acestea nu există (există cursuri și cărți), ci doar că principalul instrument pentru un dezvoltator de software pentru MK este documentația tehnică furnizată cu platforma.

Toate cărțile universale pot descrie diferențele, avantajele și dezavantajele anumitor microcontrolere, la ce să acordați atenție atunci când scrieți cod și să învețe „frumusețea” și principiile de bază. Dar un plus imens și, de asemenea, principalul dezavantaj al acestei profesii sunt instrucțiuni individuale detaliate pentru a lucra cu fiecare controler mai mult sau mai puțin serios.

Aceasta înseamnă că absolut oricine îl poate lua, îl poate citi și în câteva momente poate organiza clipirea standard a „LED-urilor”. Dar chiar și cu 50 de ani de experiență, nu veți putea să vă așezați la un microcontroler necunoscut și, fără să citiți documentația, să faceți ceva util cu el (va trebui să vă uitați măcar la locația contactelor și la scopul lor implicit ).

IDE

La fel ca zonele de programare populare, au și propriile lor IDE-uri. Fiecare companie majoră își lansează propriul mediu de dezvoltare pentru produsele sale. Există și soluții universale. Merită să acordați atenție Keil uVision - este un instrument atât de universal și, poate, cel mai popular (deși nu cel mai bun) pentru toate ocaziile. Puteți găsi lista completă.

Loc de munca

Dacă vă place foarte mult ideea de a programa microcontrolere, de a crea gadget-uri moderne unice, atunci nu va fi dificil să găsiți locuri de muncă pe placul dvs. Oamenii de această meserie sunt căutați, atât în ​​startup-uri, cât și în marile structuri pro-statale, inclusiv în armată.

Va fi dificil din punct de vedere financiar pentru începători (până la 1 an de experiență): salariul este de aproximativ 20 de mii de ruble pe lună pentru un programator MK. Aceasta este o cifră foarte reală în regiuni. Dar dacă locuiți în capitală, aveți experiență de lucru cu un tip popular de MK (cel puțin 3 ani de muncă activă) și aveți capul pe umeri, atunci puteți conta cu ușurință pe 150 de mii de ruble pe lună. În general, nu se poate spune că competiția pentru locuri între acești dezvoltatori este mare, dar în timp crește inevitabil.

Din nou, pentru persoanele cu experiență există o opțiune de a căuta fericirea în străinătate. Mai ales dacă ai deja experiență de lucru cu normă întreagă. Cert este că în Rusia ideea IoT nu se dezvoltă încă foarte mult. Și, în general, automatizarea nu afectează încă sistemele mici. Și în SUA, Japonia și alte țări dezvoltate, un dezvoltator de software bun pentru MK își merită greutatea în aur. Adevărat, va trebui să ținem cont de un nivel diferit de concurență și de cerințe serioase pentru productivitatea muncii.

Și apropo

În orice caz, înainte de a te îmbarca în mod conștient pe aceste șine, adoptă programarea MK ca un hobby. Fă-ți camera sau casa „inteligentă”, repetă mai multe experimente, publică-ți propriile realizări, dedică-ți creierul și sufletul acestei probleme. Și dacă nu există sentimentul unei „ferme colective”, atunci... bun venit în club!

Bună ziua, dragi radioamatori!
Bine ați venit pe site-ul „“

Ce este un microcontroler și pentru ce este folosit? Să ne uităm la definiția sa:

– un microcircuit conceput pentru a controla dispozitive electronice, sau cu alte cuvinte – un simplu computer (micro-computer) capabil să îndeplinească sarcini simple.

Adică, în esență, un microcontroler este un dispozitiv care ne permite să ne aducem ideile (chiar și pe cele nebunești) la viață, dar, firesc, în limitele capacităților sale. Și cel mai important, aducerea la viață a unei idei se realizează nu prin crearea unor structuri electronice sofisticate, ci doar, practic, prin puterea gândurilor noastre (vrei să devii vrăjitor?).
Cele mai populare printre radioamatorii sunt două tipuri de microcontrolere:
PIC– Tehnologia Microcipului
AVR- Atmel

Aș dori să fac imediat o mică digresiune și să clarific una dintre pozițiile mele. Nu am de gând, nici acum, nici mai târziu, să vorbesc despre meritele cutare sau cutare tip de microcontroler, cutare sau cutare software și, în general, tot ce ține de microcontrolere, să sfătuiesc ceva și cu atât mai mult să-l impun cititorilor. Totul este o chestiune de gust, preferințe personale și obiectivele finale în studierea microcontrolerelor. Ei bine, din moment ce „immensul nu poate fi înțeles”, îmi voi conduce toată povestea ulterioară în legătură cu microcontrolerele AVR și cu programul nu foarte comun, dar preferatul meu, „Algorithm Builder”. Diferite tipuri de microcontrolere și programe, desigur, au diferențe, dar au și multe în comun. Și vom explora lumea microcontrolerelor în așa fel încât ulterior cunoștințele acumulate să poată fi aplicate cu ușurință la PIC-uri și orice software. Și permiteți-mi să vă reamintesc încă o dată că această serie de articole este încercarea mea de a-i ajuta pe cei care au auzit pentru prima dată despre existența microcontrolerelor și vor să învețe cum să lucreze cu ele.

Ce trebuie să înveți să lucrezi cu microcontrolere? Aș evidenția câteva, în opinia mea, condiții principale:
1. Dorinta si persistenta .
Totul este foarte simplu aici: dacă ai o dorință, totul se va rezolva. Și dorința cu perseverență este în general un lucru super.
2. Cunoașterea designului microcontrolerului.
Cunoașterea profundă nu este importantă aici (și poate nu este deloc necesară), dar este necesar să știți ce este „la bord” microcontrolerului. Știind doar în ce constă un microcontroler, ce dispozitive conține, capacitățile lor, cum funcționează - abia atunci vom putea folosi capacitățile microcontrolerului la maximum.
3. Cunoașterea limbajului de programare și a comenzilor de control al microcontrollerului.
Modul în care va funcționa microcontrolerul, ce sarcini îi atribuiți și modul în care le va îndeplini, este determinat de programul încorporat în el - un program pe care dvs. îl creați pentru microcontroler. Și în acest moment ne vom opri în detaliu pentru a lua în considerare problemele care pot apărea în viitor.

Program(tradus acest cuvânt înseamnă „prescripție”) - o descriere preliminară a evenimentelor sau acțiunilor viitoare.

De exemplu, dorim ca microcontrolerul să clipească un LED. O sarcină simplă, dar cu toate acestea, pentru ca microcontrolerul să finalizeze această sarcină, trebuie mai întâi, pas cu pas, să descriem toate acțiunile microcontrolerului, să scriem un program pe care trebuie să-l execute pentru a obține rezultatul de care avem nevoie - un LED care clipește . Ceva de genul:
♦ Aprinde LED-ul:
- configurați ieșirea la care este conectat LED-ul să funcționeze ca ieșire de informații
- aplicați un nivel logic acestui pin, care va aprinde LED-ul
♦ Așteptați puțin:
- mergeți la subrutina care formează pauza (care trebuie și „mestecată”)
- după finalizarea subrutinei de pauză, reveniți la programul principal
♦ Opriți LED-ul:
- aplicați un nivel logic la ieșire, stingând LED-ul
și așa mai departe.
Cu termenul Program un alt termen este indisolubil legat - Algoritm(ca Lupul și Iepurele, Tom și Jerry).

Algoritm- un set de instrucțiuni care descriu procedura pentru a obține rezultatul dorit.

Daca in program detaliem prescrie acțiuni microcontroler, apoi în algoritmul noi determina cursul acțiunii microcontroler, pe baza căruia vom crea apoi un program. Similar cu exemplul de mai sus:
♦ Aprinde LED-ul
♦ Așteptați puțin
♦ Opriți LED-ul
și așa mai departe.
Prin urmare, un algoritm este un predecesor al unui program. Și cu cât algoritmul este creat mai atent și atent, cu atât va fi mai ușor să creați un program.

În total, un program pentru un microcontroler este o secvență de acțiuni ale microcontrolerului sub forma unui set de comenzi și instrucțiuni pe care trebuie să le execute pentru a ne atinge obiectivele.

Comenzile pentru microcontroler arată ca un set de unu și zero:
00110101 011000100
așa-zisul - coduri de comanda, iar codurile de comandă sunt limbajul pe care microcontrolerul îl înțelege. Și pentru a traduce algoritmul nostru din rusă în limba microcontrolerului - chiar în aceste seturi de zerouri și unități, există programe speciale.
Aceste programe vă permit să descrieți procedura de operare pentru microcontroler într-un limbaj mai mult sau mai puțin înțeles pentru noi, iar apoi să traduceți această ordine într-un limbaj pe care microcontrolerul poate înțelege, rezultând așa-numitul Codul mașinii– o secvență de comenzi și instrucțiuni (aceleași zerouri și unități) pe care doar microcontrolerul le înțelege. Este apelat textul programului scris de programator cod sursa. Programul este tradus din limbajul de programare (codul sursă) în limbajul microcontrolerului (codul mașină) radiodifuzorii. Traducătorul transformă textul programului în coduri de mașină, care sunt apoi scrise în memoria microcontrolerului.
În astfel de programe, procedura de operare a microcontrolerului este descrisă într-un limbaj special - un limbaj de programare. Un limbaj de programare este diferit de limbajul nostru uman. Dacă limbajul nostru de comunicare servește în principal la schimbul de informații, atunci:

Limbaj de programare - aceasta este o modalitate de transmitere a comenzilor, instrucțiunilor, instrucțiunilor clare de acțiune pentru microcontroler.

Există multe limbaje de programare și pot fi împărțite în două tipuri:
limbaje de programare de nivel scăzut
limbaje de programare de nivel înalt
Care este diferența. Și diferă prin apropierea de microcontroler.
În zorii tehnologiei microprocesoarelor, programele erau scrise în codul mașinii, adică întreg algoritmul de operare a fost scris secvențial sub formă de zerouri și unu. Cam asa a aratat programul:

01000110
10010011
01010010

Este puțin probabil ca cineva să poată da seama de un astfel de set de combinații de două cifre, iar munca primilor programatori a fost foarte laborioasă. Pentru a le ușura viața, programatorii au început să creeze primele limbaje de programare. Deci, cu cât un limbaj de programare este mai aproape de un astfel de set de zerouri și unu, cu atât este mai „nivel scăzut” și cu cât este mai departe de ele, cu atât este mai „nivel înalt”.
Cele mai comune limbaje de programare pentru microcontrolere:
- limbaj de nivel scăzut - Asamblator
– limbaj de nivel înalt – C (Si)
Să ne uităm la un exemplu al diferențelor lor (aceste exemple sunt abstracte).
Să presupunem că trebuie să adunăm două numere: 25 și 35.
În codul mașinii, această comandă ar putea arăta astfel:
00000101 1101001
În limbaj de nivel scăzut:
ADD Rd, Rr
În limbaj de nivel înalt:
25+35
Diferențele dintre limbile de nivel scăzut și înalt sunt vizibile cu ochiul liber, după cum se spune, comentariile sunt inutile.
Dar să pătrundem mai adânc în aceste exemple. Nu vom analiza exemplul de cod mașină, deoarece este identic cu exemplul din Asamblare. În esență, instrucțiunile de asamblare sunt aceleași coduri de mașină (comenzi) cărora li se atribuie abrevieri alfabetice, pentru a nu se pierde în zerouri și unu. Cu comanda de asamblare ADD Rd, Rr, setăm microcontrolerului sarcina de a adăuga două numere care se găsesc (și pentru aceasta trebuie mai întâi să le scriem acolo) - primul în Rd, al doilea în Rr și plasăm rezultatul adaos în Rd. După cum puteți vedea, am stabilit o sarcină foarte specifică pentru microcontroler: de unde să-l obțineți, ce să faceți cu el și unde să puneți rezultatul. În acest caz, lucrăm direct cu microcontrolerul.
Comandă într-un limbaj de nivel înalt: 25+35, o notație matematică familiară nouă, plăcută ochilor noștri. Dar în acest caz, nu lucrăm direct cu microcontrolerul, pur și simplu îi dăm sarcina de a adăuga două numere. Rezultatul și succesiunea acțiunilor în acest caz vor fi aceleași ca la executarea unei comenzi de asamblare: mai întâi, aceste două numere vor fi scrise undeva, apoi adăugate și rezultatul va fi plasat undeva.
Și aici constă principala diferență dintre limbile de nivel înalt și de nivel scăzut. Dacă în Assembly controlăm întregul proces (fie că ne place sau nu): știm unde sunt scrise aceste două numere și știm unde va fi rezultatul, atunci într-un limbaj de nivel înalt nu controlăm procesul. Programul însuși decide unde să scrie în prealabil numerele și unde să plaseze rezultatul. În cele mai multe cazuri, nu trebuie să știm acest lucru, deoarece pentru noi rezultatul principal este numărul 60 la ieșire. Drept urmare, programele în limbaje de nivel înalt sunt mai lizibile, plăcute ochiului și de dimensiuni mai mici - pentru că nu trebuie să „intrim în toate găurile” și să scriem fiecare pas al microcontrolerului; apoi face asta pentru noi când îl compilează - îl traduce în coduri de mașină. Dar există și un minus. Doi algoritmi identici scrisi in Assembly si C, dupa convertirea lor in coduri de masina, vor avea dimensiuni diferite: un program scris in Assembly va fi cu 20-40% mai scurt decat un program scris in C - cine stie ce cale o parcurge C pentru a obtine rezultatul avem nevoie . Și există cazuri când nu există încredere în limbajul de nivel înalt și codul scris în Assembly este inserat într-un program C.
Programatorii profesioniști, de regulă, cunosc mai multe limbaje de programare (sau lucrează într-o echipă care include specialiști în diferite limbi), combinând creativ capacitățile și avantajele lor într-un singur program. Ei bine, noi, amatorii, trebuie să cunoaștem cel puțin o limbă (în primul rând), și trebuie să începem (și sunt ferm convins de asta, și nimeni nu mă va convinge de contrariu) cu un limbaj de nivel scăzut - Adunarea.

Ei bine, cred, și aici totul este clar pentru noi - trebuie să învățăm un limbaj de programare, nu există altă cale.

Comenzi și instrucțiuni pentru controlul microcontrolerului.
Microcontrolerele AVR au peste 130 de comenzi diferite care îi permit să realizeze toate capabilitățile inerente. Dar voi spune imediat că puțini amatori le știu pe toate, cu atât mai puțin le folosesc pe toate. De obicei, în practica amatorilor, cunoașterea a jumătate din comenzi, sau chiar mai puțin, este suficientă. Dar trebuie să studiezi comenzile. Cu cât cunoști mai multe comenzi, cu atât vei obține programe mai sofisticate (în sensul bun al cuvântului) și mai elegante.

Unitate aritmetico-logică și organizare a memoriei - memorie de programe, memorie de date, memorie nevolatilă