Ce este un microcontroler? Cum funcționează un microcontroler? Un exemplu de utilizare a unui microcontroler Arduino

Microcontrolerele au umplut aproape complet lumea modernă a electronicii. Prin urmare, fiecare începător sau inginer electronic cu experiență întâlnește mai devreme sau mai târziu aceste dispozitive aparent misterioase. În esență, un microcontroler este doar o bucată de siliciu în interior carcasă din plastic cu terminale metalice, care în mod independent nu îndeplinește nicio funcție. Cu toate acestea, este capabil să rezolve multe probleme complexe la o viteză destul de mare dacă există un program înregistrat („conectat”). Prin urmare, sarcina noastră este să învățăm cum să scriem programe pentru un microcontroler, transformându-l astfel dintr-o bucată de siliciu într-o bucată de „aur”.

Desigur, apar întrebări: ce este un microcontroler, de unde să începi să-l studiezi și ce tip vei alege? Vom găsi răspunsuri la aceste întrebări și la alte întrebări mai jos. Deocamdată, să vedem cum ar putea arăta și să analizăm pe scurt domeniul de aplicare și unele dintre capacitățile microcontrolerelor.

Tipuri de carcase pentru microcontroler

În exterior, microcontrolerele nu sunt diferite de alte microcircuite. Cristalele MK sunt plasate în carcase standard care au un număr strict definit de pini. Microcontrolerele sunt fabricate în trei moduri principale: diferite tipuri cladiri.

Pachetul DIP

Primul tip include DIP cadru. Scurt pentru engleză D ual eu nL ine P ackage– carcasă cu două rânduri de terminale. Distanța dintre pini este de 0,1 inchi, ceea ce este egal cu 2,54 mm. De asemenea, sunt desemnate și cazuri similare PDIP. Prima literă „P” indică faptul că carcasa este din plastic P lastic. Vom folosi, de asemenea, microcontrolere într-un astfel de pachet, deoarece astfel de microcontrolere sunt ușor de instalat panou, ceea ce face depanarea mult mai ușoară.

Fig. 1 – MicrocontrolerATmega8 inDIPcorp

Pachetul SOIC

În continuare, în ordinea dimensiunilor descrescătoare, va fi SOIC cadru. Abrevierea sa înseamnă: S mallO utline eu integrat C ircuit. Este folosit pentru lipirea cu montare pe suprafață, adică pinii microcircuitului sunt lipiți pe plăcuțe situate pe suprafața plăcii, mai degrabă decât introduse în găuri ca un pachet DIP. Distanța dintre SOIC carcasele au știfturi care sunt la jumătate mai mari decât cele din DIP și au 1,27 mm.

Orez. 2 – MicrocontrolerLA89 C2051 în pachet SOIC

Pachete QFP și TQFP

Tipul de carcasă are dimensiuni și mai mici QFP (Q uad F lat P ackage) sau TQFP (T hin Q uad F lat P ackage) (orez. 3). Caracteristica sa distinctivă este amplasarea știfturilor pe toate cele patru laturi, iar corpul în sine are o formă pătrată. Ca SOIC, TQFP este proiectat pentru montare la suprafață. Distanța dintre pini este de 3 ori mai mică decât în ​​pachetele DIP.

Orez. 3 – MicrocontrolerATmega328 PVTQFPcorp

Carcasa QFN

Cel mai exotic din punct de vedere al practicii amatorilor este corpul QFN (Q uad F lat N oconduce) . Acest caz are cele mai mici dimensiuni dintre toate cazurile luate în considerare. Pinii folosiți aici sunt contacte, distanța dintre care este de 6 ori mai mică decât în ​​pachetele DIP. Din acest motiv, ele sunt rareori folosite de radioamatorii. În industrie, astfel de cazuri sunt utilizate pe scară largă, deoarece dimensiunile dispozitivului electronic finit pot fi reduse de zeci de ori. Pe Fig.4 puteți vedea clar diferențele de dimensiuni ale aceluiași microcontroler (ATmega8) în DIPŞi QFN cladiri.

Orez. 4 – MicrocontrolerATmega8 inDIPŞiQFNcladiri

Pentru comparație, sunt prezentate microcontrolere în diferite tipuri de pachete orez. 5. Vom folosi microcontrolere exclusiv în pachete PID, cel puțin în fazele inițiale de programare.

Orez. 5 – Microcontrolere în diferite tipuri de carcase

Microcontrolerele ne înconjoară peste tot

Domeniul de aplicare al MK se extinde din ce în ce mai mult în fiecare zi. Sunt folosite în majoritatea diverse dispozitive ah: din carduri muzicale la trenuri electrice de mare viteză, avioane și rachete. MK-urile sunt utilizate pe scară largă în aparatele de uz casnic: prăjitoare de pâine, cuptoare cu microunde, aparate de cafea, frigidere, masini de spalat rufe. Sunt utilizate pe scară largă în telefoane mobile, tablete, ceas electronic, mașini, adică în aproape toate dispozitive electronice. Și acest lucru nu este surprinzător, deoarece datorită microcontrolerelor, dispozitivele devin mai compacte, mai ușoare, mai fiabile și mai ieftine; consumul lor de energie este redus.

Separat, trebuie remarcat faptul că microcontrolerele găsesc totul aplicare mai mareîn robotică, și anume în sistemele de control al roboților, atât cele mai simple, cât și destul de complexe.

Caracteristicile de bază ale microcontrolerelor

Microcontrolerele sunt capabile să primească semnale, de exemplu de la diverși senzori, butoane sau tastatură, procesează-le și emit semnale de control, de exemplu, pentru a afișa informații pe ecrane cu cristale lichide.

Folosind MK, puteți crea intervale de timp foarte precise datorită prezenței temporizatoarelor-contoare încorporate. Acest lucru vă permite să creați ceasuri, cronometre, cronometre și alte dispozitive în care este necesar să țineți cont de perioadele de timp.

MK-urile sunt, de asemenea, folosite pentru a număra impulsurile, ceea ce face posibilă numărarea numărului de operații ale unui dispozitiv. De exemplu, puteți număra de câte ori funcționează un releu pentru a controla sau automatiza un anumit proces.

Prezența unui dispozitiv de modulare a lățimii impulsului (PWM) încorporat vă permite să controlați viteza arborelui motorului.

Multe microcontrolere au convertoare analog-digitale pe cip, care pot fi folosite pentru a crea diverse dispozitive de măsurare, cum ar fi voltmetre, ampermetre, ohmmetre, contoare de capacitate etc.

De asemenea, microcontrolerele pot face schimb de date între un computer și un alt microcontroler. Pentru a face acest lucru, aproape orice MK are încorporat una sau mai multe interfețe de transfer de date: USART, SPI, CAN, USB etc.

De asemenea, în MK sunt încorporate și alte unități funcționale, cum ar fi diverse întreruperi, cronometre de supraveghere și așa mai departe. Cu toate acestea, sper că până și funcțiile și capacitățile enumerate ale microcontrolerelor vă vor interesa și vă vor inspira să le studiați în continuare.

Care este diferența dintre un microcontroler și un microprocesor?

Un microcontroler este adesea numit microprocesor, cu toate acestea, acest lucru nu este în întregime adevărat. Microprocesorul efectuează doar o serie de aritmetice și operatii logice. Microcontrolerul conține un microprocesor și alte unități funcționale, cum ar fi porturi de intrare-ieșire, memorie, convertoare analog-digitale, PWM etc. În general, un microcontroler este analog cu placa de baza computer pe care se află toate dispozitivele, inclusiv CPU. Un microprocesor este doar un element separat cu putere mare de calcul.

Ce tip de microcontroler ar trebui să aleg pentru studiul inițial?

Pentru a stăpâni programarea microcontrolerelor este suficient nivel bun, mai întâi trebuie să învățați cum să programați un tip de microcontroler și să studiați toate capacitățile acestuia. Atunci va fi mult mai ușor să stăpânești alte tipuri de MK.

Principalele criterii pentru selectarea MK includ:

— accesibilitate, adică MK poate fi achiziționat cu ușurință de la orice magazin radio;

- cost scăzut. Totul este clar aici;

— disponibilitatea documentației tehnice detaliate;

- software gratuit;

— disponibilitatea literaturii și a unui număr suficient de exemple privind tipul de microcontroler selectat.

Subliniez ultimul punct ca fiind cel mai important. Din moment ce numai dacă sunt multe vizuale și exemple interesante Puteți stăpâni bine programarea microcontrolerelor fără a pierde interesul pentru această activitate, care este foarte importantă atunci când studiați microcontrolere pentru o lungă perioadă de timp.

După părerea mea, și experiență personală Microcontrolerul ATmega8 de la Atmel îndeplinește toate aceste criterii. Vom lua asta ca bază.

Să ne uităm la arhitectura internă a microcontrolerelor AVR, să încercăm să ne dăm seama din ce blocuri constă cipul de microcircuit și de ce funcții este responsabil fiecare bloc, cum interacționează între ele. Vor exista, de asemenea, comparații și exemple utile, note valoroase care vor ajuta la clarificarea principiilor de funcționare a microcontrolerului cu dispozitive externe si periferia.

Microcontroler AVR din interior

Un microcontroler din interior este un computer cu propriul dispozitiv de calcul, memorie permanentă și dinamică, porturi I/O și diverse periferice.

Orez. 1. Structura microcontrolerului AVR. Desen de pe digikey.com

În interiorul microcontrolerului conține:

  • Procesor de mare viteză cu arhitectură RISC;
  • memorie FLASH;
  • memorie EEPROM;
  • memorie RAM;
  • porturi I/O;
  • Module periferice și de interfață.

RISC (Reduced Instruction Set Computer) este o arhitectură cu un set atent selectat de instrucțiuni care sunt de obicei executate într-un singur ciclu de procesor. Microcontrolerele AVR moderne conțin aproximativ 130 de comenzi, care sunt executate foarte rapid și nu necesită cheltuieli mari atât în ​​ceea ce privește resursele intra-procesor, cât și consumul de energie.

Schema bloc a microcontrolerului AVR

Să ne uităm la figura de mai jos și să ne dăm seama din ce blocuri constă microcontrolerul și cum sunt conectate între ele:

Orez. 2. Schema bloc a microcontrolerului AVR.

Să aruncăm o scurtă privire la ceea ce este arătat pe blocurile din diagramă:

  • Interfață JTAG(Joint Test Action Group Interface) - interfață de depanare în circuit (4 fire);
  • FLASH- memorie reprogramabila pentru salvarea programului;
  • Interfață periferică serială, SPI- interfata periferica seriala (3 fire);
  • EEPROM(Electrically Erasable Programmable Read-Only Memory) - ROM reprogramabilă, memorie nevolatilă;
  • CPU(CPU) - procesor de control central, inima microcontrolerului, nucleu de microprocesor pe 8 biți;
  • ALU(ALU) - unitate aritmetico-logică, baza unității CPU;
  • RAM(Random Access Memory) - RAM procesor;
  • Contor de programe- contor de comenzi;
  • 32 Registre cu scop general- 32 de registre scop general;
  • Registrul de instrucțiuni- registru de comenzi, instructiuni;
  • Decodor de instrucțiuni- decodor de comenzi;
  • TOC(On-Chip Debugger) - unitate internă de depanare;
  • Comparator analogic- comparator analogic, unitate de comparare a semnalului analogic;
  • Convertor A/D(Analog/Digital converter) - convertor analog-digital;
  • Interfață LCD(Liquid-Crystal Display Interface) - interfata pentru conectarea unui display cu cristale lichide, indicator;
  • USART(Universal Asynchronous Receiver-Transmitter), UART - transceiver asincron universal;
  • TWI(Two-Wire serial Interface) - interfață serială cu o conexiune cu două fire;
  • Timer Watchdog- timer de supraveghere sau control;
  • Porturi I/O- porturi apă/ieșire;
  • Întreruperi- unitate de control și răspuns la întreruperi;
  • Temporizatoare/Contoare- module cronometru si contor.

Citiți mai multe despre blocurile interne ale microcontrolerului

Acum să aruncăm o privire mai atentă la toate blocurile de microcontroler, să ne dăm seama ce este necesar și de ce, voi da exemple simple limbaj accesibil.

Interfață JTAG- o interfață importantă care permite depanarea internă direct în cip folosind blocul intern de depanare ( TOC), fără a utiliza emulatori. Putem spune că JTAG este o interfață pentru depanarea „hardware” a unui microcontroler. Printr-un adaptor JTAG, cipul este conectat direct la pachet software pentru programare și depanare.

Folosind această interfață puteți modul pas cu pas executați programul direct în microcontroler, urmăriți cum se modifică conținutul registrelor, cum clipesc indicatoarele și LED-urile care sunt conectate la microcontroler după fiecare pas etc. Pentru a se conecta la interfața JTAG, sunt suficiente 4 conductori: TDI (Test Data In), TDO (Test Data Out), TCK (Test Clock), TMS (Test Mode Select).

Interfața JTAG nu este disponibilă în toate microcontrolerele AVR, de regulă, cipurile cu 40 sau mai mulți pini și o capacitate de memorie de cel puțin 16 KB au un plus atât de gustos. Pentru sarcini serioase - materiale și unelte serioase.)

FLASH- memorie de program, ROM nevolatilă (memorie numai pentru citire) realizată folosind tehnologia FLASH. Programul care va fi executat de unitatea ALU a microcontrolerului este stocat aici. Memoria flash a cipului poate fi rescrisă de mai multe ori, modificând sau adăugând astfel codul programului pentru execuție. Acest tip de memorie poate reține datele scrise pe el timp de 40 de ani, iar numărul posibilelor cicluri de ștergere/scriere poate ajunge la 10.000.

În funcție de modelul de microcontroler, dimensiunea memoriei FLASH poate ajunge la 256 KB.

Interfață periferică serială, SPI - Interfață periferică serială (SPI), care este adesea folosită pentru a face schimb de date între mai multe microcontrolere la viteze de până la câțiva MHz (câteva milioane de ceasuri pe secundă).

Pentru a face schimb de date prin interfața SPI între două dispozitive, sunt suficiente 3 conductori:

  1. MOSI (Master Output Slave Input) - Date de la master la slave;
  2. MISO (Master Input Slave Output) - Date de la slave la master;
  3. CLK (Clock) - semnal de ceas.

Dispozitivele cu interfață SPI sunt împărțite în două tipuri: Master și Slave. Dacă la interfață sunt conectate mai multe dispozitive, atunci sunt necesare linii de comunicație suplimentare (conductoare) pentru a face schimb de date între ele, astfel încât masterul să poată selecta un dispozitiv slave și să îi facă o cerere.

Interfața SPI este, de asemenea, utilizată pentru programarea SPI în circuit, un programator este conectat la microcontroler prin această interfață.

EEPROM - memorie nevolatilă de date în care datele vor fi stocate chiar și atunci când microcontrolerul este oprit. În această memorie puteți stoca setările de execuție a programului, datele colectate pentru statisticile de funcționare a dispozitivului și altele informatii utile. De exemplu, după ce ați asamblat o stație meteo mică pe un microcontroler, puteți stoca date despre temperatura aerului, presiunea, forța vântului în EEPROM pentru fiecare zi, apoi citiți în orice moment aceste date colectate și efectuați studii statistice.

EEPROM are un spațiu de adrese separat care diferă de spațiul de adrese RAM și FLASH. Memoria EEPROM a unui microcontroler este o resursă foarte valoroasă, deoarece este de obicei foarte mică - de la 0,5 la câțiva kiloocteți per cip. Numărul de rescrieri pentru de acest tip memoria este despre 100000, care este de 10 ori mai mult decât resursa de memorie FLASH.

ALU- O unitate logică aritmetică care este sincronă cu semnalul ceasului și se bazează pe starea contorului programului ( Contor de programe) selectează din memoria programului ( FLASH) următoarea comandă și o execută.

Semnalul de ceas pentru microcontroler este generat de un generator de ceas și poate fi furnizat din mai multe surse disponibile din care să alegeți:

  • oscilator RC intern care poate fi calibrat la frecvența dorită;
  • ceramică sau rezonator cu cuarț cu condensatori (nu pentru toate modelele);
  • semnal de ceas extern.

Sursa ceasului este setată folosind biții FUSE.

SIGURANȚE(din engleză: melting, plug, fuse) - 4 octeți speciali (4 * 8 = 32 biți) de date care configurează unii parametri globali ai microcontrolerului în timpul procesului de firmware. După clipire, acești biți nu pot fi modificați prin program intern care este înregistrat în MK.

Cu această configurație de biți îi spunem microcontrolerului:

  • ce oscilator master să folosească (extern sau intern);
  • împărțiți frecvența generatorului cu un factor sau nu;
  • utilizați pinul de resetare (RESET) pentru resetare sau ca pin suplimentar I/O;
  • cantitatea de memorie pentru bootloader;
  • alte setări depind de microcontrolerul utilizat.

CPU- acesta este creierul microcontrolerului, care conține ALU, registre și RAM.

Un bloc de 32 de registre de uz general este conectat la ALU ( 32 Registre cu scop general- memorie de registre), fiecare dintre acestea reprezintă 1 octet de memorie (8 biți). Spațiul de adrese al registrelor de uz general este plasat la început RAM(RAM), dar nu face parte din acesta. Cu datele care sunt plasate în registre, puteți efectua o varietate de operații aritmetice, logice și pe biți. Efectuarea unor astfel de operațiuni în RAM nu este posibilă. Pentru a lucra cu date din RAM, trebuie să le scrieți în registre, să efectuați operațiunile necesare în registre și apoi să scrieți datele rezultate din registre în memorie sau în alte registre pentru a efectua unele acțiuni.

RAM- RAM. Puteți scrie date din registre în el , citirea datelor în registre; toate operațiunile și calculele de date sunt efectuate în registre. Pentru diferite familii de cipuri AVR, dimensiunea RAM este limitată:

  • ATxmega - până la 32 KB;
  • ATmega - 16 KB;
  • ATtiny - 1 KB.

Comparator analogic- acest bloc compară între ele două niveluri de semnal și stochează rezultatul comparației într-un anumit registru, după care rezultatul transmis poate fi analizat și executat acțiunile necesare. De exemplu: puteți utiliza acest bloc ca ADC (Convertor analog-digital) și puteți măsura tensiunea bateriei dacă tensiunea bateriei atinge nivel scăzut- efectuați unele acțiuni, clipește LED-ul roșu etc. Acest modul poate fi folosit și pentru a măsura durata semnalelor analogice, citite moduri stabilite funcționarea dispozitivului cu ajutorul unui potențiometru etc.

Convertor A/D- acest bloc transformă valoarea tensiunii analogice într-o valoare digitală, cu care se poate lucra în program și pe baza căreia pot fi efectuate anumite acțiuni. De regulă, domeniul de tensiune care este furnizat la intrarea ADC din microcontrolerul AVR este în intervalul 0-5,5 volți. Pentru această unitate, este foarte important ca microcontrolerul să fie alimentat de la o sursă de alimentare stabilă și de înaltă calitate. Multe microcontrolere AVR au un pin special separat pentru a furniza energie stabilă circuitului ADC.

Interfață LCD- interfata pentru conectarea unui indicator sau afisaj cu cristale lichide. Acestea sunt folosite pentru a afișa informații, starea dispozitivului și componentele acestuia.

USART- interfață serială asincronă pentru schimbul de date cu alte dispozitive. Există suport pentru protocolul RS-232, datorită căruia microcontrolerul poate fi conectat pentru a face schimb de date cu un computer.

Pentru o astfel de conexiune între MK și portul COM al computerului, aveți nevoie de un convertor logic de nivel de tensiune (+12V pentru COM la +5V pentru microcontroler) sau pur și simplu RS232-TTL. În scopuri similare, se folosesc microcircuite MAX232 și altele asemenea.

Pentru a conecta microcontrolerul la un computer prin USB folosind interfața UART, puteți utiliza un microcircuit specializat FT232RL. Astfel, pe computere și laptopuri noi, fără a avea un port COM fizic, puteți lega un microcontroler folosind un port USB prin interfața USART.

TWI- interfață pentru schimbul de date printr-o magistrală cu două fire. La o astfel de magistrală de date pot fi conectate până la 128 de dispozitive diferite folosind două linii de date: un semnal de ceas (SCL) și un semnal de date (SDA). Interfața TWI este analogică versiunea de bază Interfață I2C.

Spre deosebire de Interfață SPI(un master și unul/mai mulți sclavi) Interfața TWI este bidirecțională, vă permite să organizați o mică rețea internă între mai multe microcontrolere.

Timer Watchdog este un sistem pentru monitorizarea înghețului dispozitivului și apoi repornirea acestuia. Este ca un buton RESET automat pentru un computer vechi cu un sistem de operare cu erori.))

Porturi I/O, GPIO- acesta este un set de blocuri de porturi de intrare/ieșire la pinii cărora puteți conecta o varietate de senzori, dispozitive de execuție și circuite. Numărul de pini de intrare/ieșire care provin de la porturile din microcontroler poate fi de la 3 la 86.

Driverele de ieșire din porturile microcontrolerului AVR vă permit să conectați direct o sarcină cu un consum de curent de 20 mA (maximum 40 mA) la o tensiune de alimentare de 5V. Curentul total de sarcină pentru un port nu trebuie să depășească 80 mA (de exemplu, agățați un LED cu un curent de 15-20 mA pe 4 pini pentru unul dintre porturi).

Întreruperi- acesta este un bloc care este responsabil pentru reacția și lansarea anumitor funcții atunci când un semnal ajunge la anumite intrări ale microcontrolerului sau din cauza unui eveniment intern (de exemplu, bifarea unui cronometru). Pentru fiecare întrerupere, o subrutină separată este dezvoltată și înregistrată în memorie.

De ce acest bloc este numit bloc de întrerupere? - deoarece atunci când apare un eveniment specific întreruperii, execuția programului principal întreruptăși are loc execuția prioritară a subrutinei care a fost scrisă pentru întreruperea curentă. La finalizarea subrutinei, execuția programului principal revine din momentul în care a fost întrerupt.

Temporizatoare/Contoare- un set de cronometre și contoare. Un microcontroler conține de obicei de la unul până la patru temporizatoare și contoare. Acestea pot fi folosite pentru a număra numărul de evenimente externe, a genera semnale de o anumită durată, a genera cereri de întrerupere etc. Lățimea temporizatoarelor și contoarelor este de 8 și 16 biți (căutați cip în fișa de date).

Concluzie

Acesta este practic tot ceea ce este util inițial de știut despre structura microcontrolerului AVR. În plus, în procesul de lucru și programare, veți avea ocazia să studiați fișele de date pentru diferite modele de cipuri AVR în practică, să aflați mai detaliat principiile de funcționare ale fiecăruia dintre cuburile structurale MK și să studiați modul în care funcționează, să vă jucați cu depanarea. , etc.

În următorul articol, vom încerca să înțelegem etichetarea microcontrolerelor și să ne gândim la cele mai accesibile și potrivite cipuri pentru studiul inițial.

Să presupunem că vi se dă o sarcină - să faceți să clipească un LED.
Să discutăm cum să rezolvăm această problemă:

Opțiunea 1 este cea mai simplă, luați un comutator/buton, plasați un sclav lângă el, care va aprinde/opri LED-ul folosind comutatorul. De obicei, în Rusia majoritatea problemelor sunt rezolvate astfel. Și ce clipește?)))
Opțiunea 2 - asamblați un multivibrator. Deja mai interesant. Pentru a clipi, un LED este suficient buna decizie. În plus, este simplu, ieftin și de încredere.
Opțiunea 3 - asamblați pe un microcontroler. Mai scump decât asamblarea unui multivibrator, dar după părerea mea mai ușor. Am scris un program, l-am rulat și am obținut rezultatul. Fără configurare. Desigur, acesta este un caz ideal.

Acum să complicăm sarcina. De exemplu, 5 LED-uri și 5 opțiuni pentru clipirea lor (viteza și ordinea clipirii lor se modifică). Prima opțiune dispare imediat; metoda 2 poate fi făcută, dar dimensiunea dispozitivului va crește brusc. Opțiunea 3 va rămâne aproximativ aceeași dimensiune, doar adăugați câteva rânduri de cod. Prin urmare, există cazuri diferite, în care este imposibil fără un microcontroler și în care este de prisos. Prin urmare, estimați întotdeauna costurile cu forța de muncă, timpul și costurile financiare.

Așadar, un microcontroler ne permite gestionarea flexibilă a sistemelor, proceselor etc., are dimensiuni reduse, iar din punct de vedere al funcționalității este un minicomputer. Microcontrolerele sunt produse de diferite companii. Una dintre varietățile de microcontrolere AVR de la Atmel. De ce ei? Sunt destul de ușor de găsit în magazin, este ușor să găsiți exemple de cod gata făcut, funcționalitatea încorporată vă permite să rezolvați chiar și probleme complexe.

Pentru ca microcontrolerul să înțeleagă ce dorim de la el, trebuie să încărcăm firmware-ul în el - o secvență de acțiuni pe care trebuie să le efectueze. Firmware-ul este o secvență de unu și zero. Pentru a-l face mai convenabil, au fost inventate limbaje de programare. De exemplu, scriem pornire, iar compilatorul însuși îl convertește într-o secvență de unu și zero, care este de înțeles de microcontroler. Figura arată firmware-ul HEX dacă îl deschideți folosind notepad.

Microcontrolerele sunt de obicei programate în limbaj C sau de asamblare. În general, nu există nicio diferență în ce să scrieți. Datorită numărului mare exemple gata făcute, am făcut alegerea în favoarea lui C. În plus, există mai multe programe care vă permit să scrieți în C. De exemplu, gratuit, proprietar AVR Studio, CodeVision, WinAVR etc. În ciuda faptului că scriu în CodeVision, folosesc foarte activ AVR Studio ca depanator.

Sper că măcar unele dintre acestea ți-au fost clare. După părerea mea, cel mai greu este să faci primul pas. Cel care o face, își învinge frica și lenea, cu siguranță va obține rezultate. Succes la invatarea microcontrolerelor.

AVR este numele unei familii populare de microcontrolere produse de companie Atmel. Pe lângă AVR, sub acest brand sunt produse și alte arhitecturi, de exemplu, ARM și i8051.

Ce tipuri de microcontrolere AVR există?

Există trei tipuri de microcontrolere:

Familia de microcontrolere pe 8 biți este cea mai populară de mai bine de un deceniu. Mulți radioamatori au început să studieze microcontrolere de la el. Aproape toți au explorat lumea controlerelor programabile făcându-și propriile meșteșuguri simple, cum ar fi luminițele LED, termometrele, ceasurile, precum și automatizările simple, cum ar fi controlul dispozitivelor de iluminat și încălzire.

Microcontrolere AVR 8 biți, la rândul lor, sunt împărțiți în două familii populare:

    Attiny- din nume reiese clar ca cei mai mici (micuti - tineri, tineri, mai tineri) au de obicei 8 ace sau mai mult. Capacitatea și funcționalitatea lor de memorie sunt de obicei mai modeste decât următoarele;

    Atmega- microcontrolerele mai avansate au mai multa memorie, pini si diverse unitati functionale;

Cea mai puternică subfamilie de microcontrolere este xMega - aceste microcontrolere sunt disponibile în pachete cu un număr mare de pini, de la 44 la 100. Acest lucru este necesar pentru proiectele cu un număr mare de senzori și actuatoare. În plus, capacitatea crescută de memorie și viteza de operare permit o performanță ridicată.

Explicaţie: Pin (în engleză pin - ac, pin) este ieșirea unui microcontroler sau, după cum spun oamenii, un picior. De aici și cuvântul „pinout” - i.e. informații despre scopul fiecăruia dintre picioare.

Pentru ce sunt necesare microcontrolerele și de ce sunt capabile?

Microcontrolerele sunt folosite aproape peste tot! Aproape fiecare dispozitiv din secolul 21 rulează pe un microcontroler: instrumente de măsurare, unelte, aparate electrocasnice, ceasuri, jucării, cutii muzicaleși cărți poștale, precum și multe altele; Numai listarea ar lua mai multe pagini de text.

Dezvoltatorul poate folosi un semnal analogic pentru a-l alimenta la intrarea microcontrolerului și pentru a manipula date despre valoarea acestuia. Această activitate este efectuată de un convertor analog-digital (ADC). Această funcție permite utilizatorului să comunice cu microcontrolerul, precum și să perceapă diferiți parametri ai lumii înconjurătoare folosind senzori.

În microcontrolerele AVR obișnuite, de exemplu, Atmega328, care în 2017 este inima multor consilii Arduino, dar mai multe despre ele mai târziu. Se folosesc 8 canale ADC, cu adâncime de biți 10 biți. Aceasta înseamnă că puteți număra valoarea de la 8 senzori analogici. Și senzorii digitali sunt conectați la pinii digitali, ceea ce poate fi evident. Cu toate acestea, un semnal digital poate fi doar 1 (unul) sau 0 (zero), în timp ce un semnal analogic poate lua un număr infinit de valori.

Explicaţie:

Adâncime de biți este o valoare care caracterizează calitatea, acuratețea și sensibilitatea intrării analogice. Nu sună complet clar. Puțină practică: ADC de 10 biți, scrieți informații analogice din port în 10 biți de memorie, cu alte cuvinte, un semnal digital care variază ușor este recunoscut de microcontroler ca o valoare numerică de la 0 la 1024.

Un ADC pe 12 biți vede același semnal, dar cu o precizie mai mare - sub formă de la 0 la 4096, ceea ce înseamnă că valorile măsurate ale semnalului de intrare vor fi de 4 ori mai precise. Pentru a înțelege de unde provin 1024 și 4096, pur și simplu ridicați 2 la puterea egală cu dimensiunea biților ADC (2 la puterea lui 10, pentru 10 biți etc.)

Pentru a controla puterea de sarcină, aveți la dispoziție canale PWM, acestea pot fi utilizate, de exemplu, pentru a regla luminozitatea, temperatura sau turația motorului. În același controler 328 există 6 dintre ele.

În general, structura microcontrolerului AVR este prezentată în diagramă:

Toate nodurile sunt semnate, dar unele nume pot să nu fie atât de evidente. Să ne uităm la denumirile lor.

    ALU- dispozitiv aritmetico-logic. Necesar pentru a efectua calculul.

    registre de uz general (RON)- registrele care pot primi date și le pot stoca în timp ce microcontrolerul este conectat la alimentare sunt șterse după o repornire. Serviți ca celule temporare pentru operațiunile de date.

    întreruperi- ceva de genul unui eveniment care are loc din cauza interne sau influente externe la microcontroler - overflow timer, întrerupere externă de la pinul MK etc.

    JTAG- interfata pentru programare in circuit fara a scoate microcontrolerul de pe placa.

    Flash, RAM, EEPROM- tipuri de memorie - programe, date temporare de lucru, stocare pe termen lung independent de alimentarea microcontrolerului, conform ordinii din denumiri.

    Cronometre și contoare- cele mai importante componente din microcontroler, la unele modele numărul acestora poate fi de până la zece. Sunt necesare pentru a raporta numărul de cicluri de ceas, respectiv intervale de timp, iar contoarele își măresc valoarea în funcție de oricare dintre evenimente. Funcționarea lor și modul acestuia depind de program, dar aceste acțiuni sunt efectuate în hardware, adică. paralel cu textul principal al programului, ele pot provoca o întrerupere (din cauza depășirii temporizatorului, opțional) în orice stadiu de execuție a codului, pe orice linie.

    A/D (analogic/digital)- ADC, am descris deja scopul său mai devreme.

    WatchDogTime- un generator RC independent de microcontroler și chiar de generatorul de ceas al acestuia, care numără o anumită perioadă de timp și generează un semnal de resetare pentru MK dacă funcționa și un semnal de trezire dacă era în modul de repaus (economisire energie) . Funcționarea acestuia poate fi dezactivată setând bitul WDTE la 0.

Ieșirile microcontrolerului sunt destul de slabe, ceea ce înseamnă că curentul prin ele este de obicei de până la 20-40 miliamperi, ceea ce este suficient pentru a aprinde LED-urile și indicatoarele LED. Pentru o sarcină mai puternică, sunt necesare amplificatoare de curent sau de tensiune, de exemplu, aceleași tranzistoare.

De ce ai nevoie pentru a începe să înveți microcontrolere?

Mai întâi trebuie să achiziționați microcontrolerul în sine. Primul microcontroler poate fi orice Attiny2313, Attiny85, Atmega328 și altele. Este mai bine să alegeți modelul care este descris în lecțiile pe care le veți studia.

Următorul lucru de care aveți nevoie este programator. Este necesar să încărcați firmware-ul în memoria MK, este considerat cel mai ieftin și mai popular USBASP.

Un programator puțin mai scump, dar nu mai puțin obișnuit AVRISP MKII, pe care o puteți face cu propriile mâini - din tabla obisnuita Arduino

O altă opțiune este să le dezvăluiți USB-UART adaptor, care este de obicei realizat pe unul dintre convertoare: FT232RL, CH340, PL2303 și CP2102.

În unele cazuri, microcontrolerele AVR cu suport hardware pentru USB sunt folosite pentru un astfel de convertor, nu există prea multe astfel de modele. Iată câteva:

Există un singur „dar” - mai întâi trebuie să încărcați bootloader-ul UART în memoria microcontrolerului. Desigur, mai aveți nevoie de un programator pentru microcontrolere AVR pentru asta.

Interesant: Bootloader- acesta este un program obișnuit pentru un microcontroler, doar cu o sarcină neobișnuită - după ce este pornit (conectat la alimentare), așteaptă ceva timp până când firmware-ul să fie încărcat în el. Avantajul acestei metode este că o poți flash cu orice adaptor USB-UART și sunt foarte ieftine. Dezavantajul este că firmware-ul durează mult să se încarce.

Pentru muncă UART(RS-232) în microcontrolerele AVR, este alocat un întreg registru UDR (registru de date UART). UCSRA (setări de biți transceiver RX, TX), UCSRB și UCSRC - un set de registre responsabile pentru setările interfeței în ansamblu.

În ce poți scrie programe?

Pe lângă programator, pentru a scrie și descărca un program aveți nevoie de un IDE - un mediu de dezvoltare. Puteți, desigur, să scrieți codul în Notepad, să îl rulați prin compilatoare etc. De ce este necesar acest lucru când există excelente opțiuni gata făcute. Poate că unul dintre cele mai puternice este IAR, dar este plătit.

IDE-ul oficial de la Atmel este AVR Studio, care în versiunea 6 a fost redenumit Atmel studio. Acceptă toate microcontrolerele AVR (8, 32, xMega), detectează automat comenzile și vă ajută să le introduceți, evidențiază sintaxa corectă și multe altele. Cu ajutorul acestuia puteți flash MK.

Cel mai comun este C AVR, așa că găsiți un tutorial despre el, există o mulțime de opțiuni în limba rusă, iar una dintre ele este V.Ya. „Microcontrolere AVR. Atelier pentru începători.”

Vezi, de asemenea, cursuri video detaliate de instruire despre programarea microcontrolerelor pentru începători de către Maxim Selivanov:.

Cel mai simplu mod de a învăța AVR

Cumpără-l sau fă-l singur. Proiectul Arduino este conceput special pentru scopuri educaționale. Are zeci de plăci de diferite forme și numere de contacte. Cel mai important lucru despre Arduino este că cumpărați nu doar un microcontroler, ci și o placă de depanare cu drepturi depline, lipită pe textolit de înaltă calitate. placa de circuit imprimat, acoperit cu masca si montate componente SMD.

Cele mai comune sunt Arduino Nano și Arduino UNO, ele sunt în esență identice, cu excepția faptului că „Nano” este de aproximativ 3 ori mai mic decât „Uno”.

Câteva fapte:

    Arduino poate fi programat într-un limbaj standard - „C AVR”;

    propriul tău - cablare;

    mediu de dezvoltare standard - Arduino IDE;

    Pentru a vă conecta la un computer, trebuie doar să conectați cablul USB la mufa micro-USB de pe placa Arduino nano, să instalați driverele (cel mai probabil acest lucru se va întâmpla automat, cu excepția cazului în care convertorul este pe CH340, nu am avut drivere pe Win 8.1, a trebuit să-l descarc, dar asta nu a durat mult timp.) după care vă puteți încărca „schițele”;

    „Schițe” este numele programelor pentru Arduino.

Concluzii

Microcontrolerele vă vor fi un ajutor excelent în practica dumneavoastră de radio amator, ceea ce vă va permite să descoperiți lumea electronicii digitale și să vă proiectați propriile instrumente de măsurare și echipamente de automatizare casnice.  

Microcontrolerele sunt o parte integrantă a sistemelor încorporate. Un microcontroler este un computer mic și ieftin pe un singur cip care conține un procesor, o cantitate mică de RAM și periferice I/O programabile. Acestea sunt destinate utilizării în produse și dispozitive controlate automat pentru a efectua sarcini predefinite și programate. Pentru a vă face o idee mai bună despre ce este de fapt un microcontroler, să ne uităm la un exemplu de produs care utilizează un microcontroler. Un termometru digital care afișează temperatura ambientală folosește un microcontroler la care sunt conectate un senzor de temperatură și o unitate de indicare (cum ar fi un LCD). Microcontrolerul primește aici datele de intrare de la senzorul de temperatură în formă brută, le procesează și le afișează pe un mic afișaj LCD într-o formă care poate fi citită de om. În mod similar, unul sau mai multe microcontrolere sunt utilizate în multe dispozitive electronice, conform cerințelor și complexității aplicațiilor.

Unde se folosesc microcontrolerele?

Microcontrolerele sunt utilizate în sistemele încorporate, în principal diverse produse și dispozitive care sunt o combinație de hardware și software, și sunt concepute pentru a îndeplini funcții specifice. Câteva exemple de sisteme implementate care folosesc microcontrolere, poate mașini de spălat, automate, cuptoare cu microunde, camere digitale, mașini, echipamente medicale, smartphone-uri, ceas inteligent, roboți și diverse aparate electrocasnice.

De ce folosim microcontrolere?

Microcontrolerele sunt folosite pentru automatizare în aplicațiile încorporate. Principalul motiv pentru popularitatea enormă a microcontrolerelor este capacitatea lor de a reduce dimensiunea și costul unui produs sau design, în comparație cu un design care trebuie construit folosind un microprocesor, memorie și dispozitive I/O separate.

Microcontrolerele au, de asemenea, funcții precum un microprocesor încorporat, RAM, ROM, interfețe seriale, interfețe paralele, convertor analog-digital (ADC), convertor digital-analogic (DAC) etc., acest lucru îl face ușor de construit aplicații în jurul acestuia. În plus, mediul de programare al microcontrolerului oferă oportunități ample de a controla diferite tipuri de aplicații conform cerințelor acestora.

Diverse tipuri de microcontrolere.

Există o gamă largă de microcontrolere disponibile pe piață. Diverse companii precum Atmel, ARM, Microchip, Texas Instruments, Renesas, Freescale, NXP Semiconductors etc. etc.producerea diverselor tipuri de microcontrolere cu diverse tipuri funcții. Privind diferiți parametri, cum ar fi memoria programabilă, dimensiunea memoriei flash, tensiunea de alimentare, I/O, viteza etc., se poate selecta microcontrolerul potrivit pentru aplicarea lor.

Să ne uităm la acești parametri și diferite tipuri de microcontrolere conform acestor parametri.

Bus de date (capacitate de biți):

Când sunt clasificate după dimensiunea de biți, majoritatea microcontrolerelor sunt între 8 și 32 de biți (microcontrolerele de biți mai mari sunt, de asemenea, disponibile). Un microcontroler de 8 biți are magistrala de date constând din 8 linii de date, iar un microcontroler de 16 biți are magistrala de date constând din 16 linii de date și așa mai departe pentru microcontrolere de 32 de biți și mai mari.

Memorie:

Microcontrolerele au nevoie de memorie (RAM, ROM, EPROM, EEPROM, memorie Flash etc.) pentru a stoca programe și date. În timp ce unele microcontrolere au cipuri de memorie încorporate, altele necesită memorie externăîntr-un mănunchi. Ele sunt numite memorie microcontroler pe cip și, respectiv, memorie externă a microcontrolerului. Memoria încorporată variază, de asemenea diverse tipuri microcontrolere și, în general, ați găsi microcontrolere cu 4B până la 4MB de memorie.

Numărul de contacte de intrare/ieșire:

Microcontrolerele variază ca număr de dimensiuni I/O. Se poate selecta un microcontroler specific conform cerințelor aplicației.

Set de comenzi:

Există două tipuri de seturi de instrucțiuni - RISC și cisc. Microcontrolerul poate utiliza un procesor RISC (Reduced Instruction Set Computer) sau CISC (Computer Instruction Set). După cum sugerează și numele, RISC reduce timpul de funcționare care definește ciclul de ceas al unei instrucțiuni; iar CISC permite aplicarea unei singure instrucțiuni ca alternativă la mai multe instrucțiuni.

Arhitectura memoriei:

Există două tipuri de microcontrolere - arhitectura de memorie a microcontrollerului Harvard și arhitectura de memorie a microcontrollerului Princeton.

Iată câteva microcontrolere populare printre studenți și pasionați.

Microcontrolere din seria 8051 (8 biți)

Microcontrolere AVR de la Atmel (ATtiny, seria atmega)

Microcip este o serie de microcontrolere pic

Texas Instruments, microcontrolere msp430

Microcontrolere ARM

Caracteristicile microcontrolerelor

Microcontrolerele sunt utilizate în sistemele încorporate pe lor diverse caracteristici. După cum se arată în schema bloc a microcontrolerului de mai jos, acesta constă dintr-un procesor, I/O, porturi seriale, temporizatoare, ADC, DAC și control chopper.

Procesor sau unitate centrală de procesare

Procesorul este creierul microcontrolerului. Având un semnal de intrare prin pinii de intrare și instrucțiuni prin programe, procesați datele și furnizați-le la pinii de ieșire în consecință.

În memorie

Cipurile de memorie sunt integrate în microcontroler pentru a stoca toate programele și datele. Poate exista diferite tipuri memorie integrată în microcontrolere precum RAM, ROM, EPROM, EEPROM, memorie flash etc.

Porturi I/O

Fiecare microcontroler are porturi de intrare ieșire. În funcție de tipurile de microcontrolere, numărul de pini de intrare poate varia. Sunt folosite pentru a conecta dispozitive externe de intrare și ieșire, cum ar fi senzori, unități de afișare etc.

Porturi seriale

Ele facilitează comunicarea microcontrolerului printr-o interfață serială cu dispozitive periferice. Un port serial este o interfață de comunicație serială prin care informațiile sunt transferate de intrare sau de ieșire, câte un bit.

ADC și DAC

Uneori, sistemele încorporate utilizează conversia datelor din digital în analog și invers. Prin urmare, majoritatea microcontrolerelor sunt combinate cu un ADC (convertor analog-digital) și un DAC (convertor digital-analogic) încorporat pentru a efectua conversia necesară.

Cronometre

Temporizatoarele și contoarele sunt componente importante ale sistemelor încorporate. Sunt necesare pentru diverse operatii, cum ar fi formarea impulsurilor, numărarea impulsurilor externe, modulația, oscilația etc.

Controlul întreruperii

Controlul întreruperilor este una dintre caracteristicile puternice ale microcontrolerelor. Este un fel de notificare care întrerupe procesul curent și îl instruiește să execute sarcini definite de controlul întreruperii.

Pentru a rezuma totul, microcontrolerele sunt un fel de minicalculatoare compacte care sunt concepute pentru a îndeplini sarcini specifice în domeniul sistemelor încorporate. Cu o gamă largă de funcții, importanța și beneficiile lor sunt enorme și pot fi găsite în produse și aparate pentru toate industriile.