Arhitectura microcontrolerelor AVR, în ce constă microcontrolerul. AVR. Curs de pregatire. Arhitectură

Dificultățile cu care se confruntă un dezvoltator atunci când își proiectează al cincilea sau al zecelea controler palesc în comparație cu provocările cu care se confruntă un începător. Întrebări despre primirea prin Rețea de internet Primul capitol al cărții este dedicat setului minim de programe și documentație suficientă pentru a funcționa cu microcontrolere AVR. Anexa 1 oferă recomandări pentru găsirea informațiilor necesare.

Scopul principal al celui de-al doilea capitol este de a preda aptitudini munca eficientaîn mediul de dezvoltare și depanare a programelor pentru microcontrolere AVR Studio 4.12. Acest capitol discută în detaliu capacitățile AVR Studio. Mastering AVR Studio are loc folosind un exemplu specific ciclu complet dezvoltarea unui dispozitiv de alarmă. Recomandări pentru detectarea și corectarea erorilor din program sunt, de asemenea, date aici.
Structura capitolelor rămase ale cărții este aproximativ aceeași. Fiecare dintre ele oferă circuite electrice pentru controlere bazate pe microcontrolere AVR, precum și câteva diverse programe, care determină funcționarea controlorilor. Unitățile funcționale ale microcontrolerelor sunt descrise într-un volum suficient pentru a înțelege programele în care se găsește descrierea completă; descriere tehnica microcontrolere.
Toate programele de microcontroler descrise în carte au fost depanate în AVR Studio versiunea 4.12. Software-ul computerului este scris în Delphi.

Capitolul 1. De ce aveți nevoie pentru a lucra cu un microcontroler
1.1. Unde găsiți setul minim software si documentatie
pentru microcontrolere AVR
1.2. Despre alegerea unui programator
1.3. Alimentare electrică
1.4. Informații suplimentare

Capitolul 2. Primul proiect: controler de alarmă
2.1. Formularea problemei
2.1.1. Dispozitivele conectate la controler și parametrii semnalelor de intrare și ieșire
2.1.2. Logica de funcționare a controlerului
2.1.3. Circuit de alarma
2.1.4. Descrierea verbală a algoritmului de funcționare a controlerului
2.2. Noțiuni introductive cu AVR Studio
2.2.1. Crearea primului program în limbaj asamblare
2.2.2. Program pentru controler de alarmă folosind întreruperi
2.3. Recomandări

Capitolul 3. Lucrul cu RAM statică externă
3.1. Interfață pentru microcontroler ATmega8515 pentru conectare memorie externa
3.2. Un exemplu de diagramă pentru conectarea RAM externă la un microcontroler ATmega8515
3.2.1. Sistem
3.2.2. Setarea adresei
3.2.3. Despre alegerea unui cip de înregistrare
3.2.4. Citirea datelor din memoria externă
3.2.5. Scrierea datelor în memoria externă
3.3. Acces programat la memorie cu acces aleator
3.3.1. Un program simplu pentru accesarea memoriei RAM
3.3.2. Depanarea programului
3.3.3. Salvarea conținutului RAM pe disc
3.3.4. Scrierea datelor în zona de memorie inițială a datelor
3.4. Accesarea bufferelor de stocare a datelor ca celule de memorie externe
3.4.1. Schema electrica tampoane de conectare
3.4.2. Program de întreținere a tamponului
3.4.3. Depanarea programului de serviciu tampon
3.5. Conectarea memoriei externe de 512 KB la microcontrolerul ATmega8535
3.6. Diagrama pentru conectarea RAM la microcontrolerul ATmega8535
3.6.1. Descrierea circuitului
3.6.2. Scrierea unei celule
3.6.3. Citirea dintr-o celulă
3.7. Program pentru scrierea datelor pe 512 KB RAM
3.7.1. Depanarea programului
3.7.2. Subrutina de setare a adresei SetAddr
3.7.3. Rutină pentru copierea unui octet din memoria RAM internă DataSt
3.7.4. Rutină pentru copierea datelor din memoria externă în memoria RAM internă Datalld

Capitolul 4. Dispozitiv de afișare dinamică pe indicatoare LED cu 7 segmente
4.1. Principiul de afișare dinamică
4.2. Dispozitiv de afișare digitală pe opt biți
4.2.1. Circuit de control al indicatorului cu opt cifre
4.2.2. Program de linie târâtoare
4.2.3. Descrierea programului
4.3. Dispozitiv de control pentru două cuptoare
4.3.1. Funcționarea dispozitivului
4.3.2. Program de control pentru două cuptoare
4.3.3. Lucrul cu un dispozitiv de control pentru două cuptoare
4.3.4. Particularități Operare EEPROM microcontroler

Capitolul 5. Comunicarea dintre microcontroler și computer
5.1. Circuitul controlerului care asigură comunicarea cu un port COM al computerului
5.2. Software de comunicare RS-232
5.2.1. Un program simplu de microcontroler pentru un port COM
5.3. Software de comunicare RS-232
5.3.1. Protocol de schimb
5.3.2. Dispoziții generale
5.3.3. Structura mesajului
5.3.4. Mesaje transmise(comenzile computerului și răspunsurile controlerului)
5.3.5. Program pentru microcontroler
5.3.6. Depanare USART BAVRStudio
5.4. Canal RS-232: software pentru computer
5.4.1. Informații minime despre Delphi
5.4.2. Program de schimb de date cu microcontroler
5.4.3. Descrierea programului
5.4.4. Salvarea, lansarea, utilizarea programului
5.4.5. Utilizarea programului Funcții Windows API
5.4.6. Descrierea programului

Capitolul 6. Organizarea iesirilor analogice pentru microcontroler
6.1. Conversia codului în lățimea impulsului
6.1.1. DAC și generator de rampă cu PWM
6.1.2. Microcontroler Timer T1 în modul PWM
6.1.3. Program pentru generator PWM
6.2. Conversia codului în amplitudinea pulsului
6.2.1. Generator de tensiune în rampă
6.2.2. Programul generator de tensiune în rampă
6.2.3. Generator de unde sinusoidale
6.2.4. Program pentru un generator de undă sinusoidală
6.3. Determinarea modulului spațial al unui semnal
6.3.1. Algoritmul programului
6.3.2. Listarea programului de calcul al modulului
6.4. Filtru digital
6.4.1. Lista de programe C filtru digital Filtrul.c

Anexa 1. Cum se ajunge materialele necesare de pe internet
Anexa 2. Dispozitive care facilitează depanarea controlerului ca parte a sistemului
Anexa 3. Programator
Anexa 4. Funcționarea programatorului în Windows XP/2000/NT
Anexa 5. Octeți de siguranță: selectarea modului de funcționare al microcontrolerului
Anexa 6. Microcontrolere RISC pe 8 biți de la Atmel

Titlu: Aplicarea microcontrolerelor AVR. Scheme, algoritmi, programe (ed. a III-a)
Autor: Baranov V.N.
Seria: World Electronics
Editura: Dodeka-XXI
Anul: 2010
Pagini: 288
Limba rusă
Format: PDF
Calitate: excelenta
Dimensiune: 11 Mb
Descărcați: Baranov V.N. Aplicarea microcontrolerelor AVR. Scheme, algoritmi, programe (ed. a III-a)

CISC și RISC
În funcție de numărul de instrucțiuni, microprocesoarele sunt împărțite în CISC (Complex Instruction Set Computer) și RISC (Reduced Instruction Set Computer). Termenul CISC înseamnă sistem complex comenzi, RISC - prescurtat.
Ideea din spatele RISC este de a selecta cu atenție instrucțiunile care pot fi executate într-un singur ciclu de ceas. Acea. Implementarea hardware a procesorului este simplificată, numărul de tranzistori este redus, consumul de energie și prețul sunt reduse.
Evident, în cazul general, o comandă CISC trebuie să corespundă mai multor comenzi RISC. Cu toate acestea, de obicei, câștigurile de performanță ale RISC depășesc pierderile. Da, cel mai mult comanda rapidă pentru 8051 este nevoie de 12 cicluri de ceas. Chiar dacă pentru fiecare instrucțiune CISC este necesară executarea a trei instrucțiuni RISC, atunci în final arhitectura RISC va fi de 4 ori mai productivă.
În zilele noastre, linia dintre RISC și CISC se estompează. De exemplu, AVR-urile au 133 de instrucțiuni, care este CISC, dar cele mai multe dintre ele se execută într-un singur ciclu de ceas, care este o caracteristică a RISC. Prin urmare, principala caracteristică a RISC a devenit considerată a fi executarea instrucțiunilor într-un singur ciclu de ceas.


Inima microcontrolerelor AVR este un nucleu de microprocesor de 8 biți sau o unitate centrală de procesare (CPU), construită pe principiile arhitecturii RISC. Baza acestui bloc este o unitate aritmetică logică (ALU). Pe baza semnalului de ceas al sistemului din memoria programului în conformitate cu conținutul contorului de programe (Program Counter - PC), se selectează următoarea instrucțiune și se execută ALU. Atunci când o comandă este selectată din memoria programului, comanda selectată anterior este executată, ceea ce îi permite să atingă o viteză de 1 MIPS la 1 MHz.
ALU conectat la registre scop general RON (Registre cu scop general - GPR). Există doar 32 de registre de uz general, acestea sunt în format octet, adică fiecare dintre ele este format din opt biți. RON-urile sunt situate la începutul spațiului de adrese RAM, dar nu fac parte fizic din acesta. Prin urmare, ele pot fi accesate în două moduri (ca registre și ca memorie). Această soluție este o caracteristică a AVR și crește eficiența și performanța microcontrolerului.
Diferența dintre registre și RAM este că orice operație (aritmetică, logică, pe biți) poate fi efectuată cu registre, dar datele din registre pot fi scrise doar în RAM.
Memorie

Fonneumann și arhitectura Harvard
În 1945, matematicianul american John von Neumann a formulat principiile de bază ale calculatoare moderne. El a propus o arhitectură care a primit numele său (arhitectura von Neumann) și a implicat stocarea de programe și date în memoria partajată (1946). Astăzi, această arhitectură este cea mai tipică pentru microprocesoarele destinate utilizării în computere. Un exemplu este familia x86 de microprocesoare.
O arhitectură care implică utilizarea separată a memoriei de programe și de date se numește arhitectură Harvard. Arhitectura Harvard permite procesorului central să lucreze simultan atât cu memoria programului, cât și cu memoria de date, ceea ce crește semnificativ performanța.


Microcontrolerele AVR implementează arhitectura Harvard, conform căreia nu sunt separate doar spațiile de adrese ale memoriei programului și ale memoriei de date, ci și magistralele de acces la acestea. Fiecare dintre zonele de memorie de date (RAM și EEPROM) se află, de asemenea, în propriul spațiu de adrese.

Memoria programului ( Flash ROM sau Flash ROM)

Memoria programului este concepută pentru a stoca o secvență de comenzi care controlează funcționarea microcontrolerului și are o organizare pe 16 biți. Toate AVR-urile au memorie de program Flash, care poate fi diferite dimensiuni- de la 1 la 256 KB. Principalul său avantaj este că este construit pe principiul reprogramabilității electrice, adică permite ștergerea și înregistrarea repetată a informațiilor. Programul este introdus în memoria Flash AVR atât folosind un programator convențional, cât și folosind interfața SPI, inclusiv direct pe placa asamblată. Posibilitatea de programare în circuit (funcția ISP) prin comunicare Interfață SPI Toate microcontrolerele AVR, cu excepția Tiny11 și Tiny28, le au.
Toate microcontrolerele din familia Mega au capacitatea de a se autoprograma, adică de a schimba în mod independent conținutul memoriei programului lor. Această caracteristică vă permite să creați sisteme foarte flexibile pe baza acestora, algoritmul de operare al cărora va fi schimbat de microcontroler însuși în funcție de orice condiții interne sau evenimente externe.
Numărul garantat de cicluri de rescriere a memoriei flash pentru microcontrolerele AVR de a doua generație este de cel puțin 10 mii de cicluri cu o valoare tipică de 100 de mii de cicluri. (În oficial documentatie tehnica Atmel Corp. valoarea indicată este de 10 mii de cicluri.)

Memoria de date

Memoria de date este împărțită în trei părți: memorie de registru, memorie cu acces aleatoriu (RAM - memorie cu acces aleatoriu sau RAM) și memorie nevolatilă (EEPROM sau EEPROM).

Memorie de înregistrare (RON și RVV)

Memoria de registre include 32 de registre de uz general (RON sau GPR), combinate într-un fișier și registre de intrare/ieșire de serviciu (registruri I/O). Ambele sunt localizate în spațiul de adrese RAM, dar nu fac parte din acesta.
În zona registrelor de intrare/ieșire există diverse registre de serviciu (registre de control al microcontrolerului, registre de stare etc.), precum și registre pentru controlul dispozitivelor periferice incluse în microcontroler. În esență, controlul unui microcontroler înseamnă gestionarea acestor registre.

Memorie de date nevolatilă (EEPROM)

Pentru depozitare pe termen lung Memoria EEPROM este folosită pentru a stoca diverse informații care se pot modifica în timpul funcționării sistemului de microcontroler. Toate AVR-urile au o unitate de memorie de date EEPROM nevolatilă reinscriptabilă electric de la 64 de octeți la 4 KB. Acest tip de memorie disponibil programului microcontroler direct în timpul executării sale, convenabil pentru stocarea datelor intermediare, diverse constante, coeficienți, numere de serie, chei etc. EEPROM poate fi încărcat extern fie prin interfața SPI, fie folosind un programator convențional. Numărul de cicluri de ștergere/scriere este de cel puțin 100 de mii.

memorie cu acces aleatoriu (RAM sau RAM)

RAM statică internă (SRAM) are un format de octeți și este utilizată pentru depozitare operațională date.
Dimensiunea RAM poate varia între diferite cipuri de la 64 de octeți la 4 KB. Numărul de cicluri de citire și scriere din RAM nu este limitat, dar atunci când tensiunea de alimentare este oprită, toate informațiile se pierd.
Pentru unele microcontrolere, este posibil să se conecteze RAM statică externă de până la 64K.

Periferie

Perifericele microcontrolerului AVR includ: porturi (de la 3 la 48 de linii de intrare și ieșire), suport extern pentru întreruperi, contoare de temporizator, timer watchdog, comparatoare analogice, interfețe ADC pe 10 biți, 8 canale, UART, JTAG și SPI, resetare în jos a puterii dispozitivului consumabile, modulatoare de lățime a impulsurilor.

Porturi de intrare/ieșire (I/O)

Porturile AVR I/O au un număr de linii independente de intrare/ieșire de la 3 la 53. Fiecare linie de port poate fi programată ca intrare sau ieșire. Driverele puternice de ieșire oferă o capacitate de transport de curent de 20 mA pe linie de port (curent de absorbție) cu o valoare maximă de 40 mA, permițând, de exemplu, LED-urilor și tranzistoarelor bipolare să fie conectate direct la microcontroler. Sarcina totală de curent pe toate liniile unui port nu trebuie să depășească 80 mA (toate valorile sunt date pentru o tensiune de alimentare de 5 V).
O caracteristică arhitecturală a construcției porturilor de intrare/ieșire pe AVR este aceea că pentru fiecare ieșire fizică (pin) există 3 biți de control/control, și nu 2, ca în microcontrolerele comune de 8 biți (Intel, Microcip, Motorola etc. . Acest lucru evită necesitatea de a avea o copie a conținutului portului în memorie pentru securitate și îmbunătățește viteza microcontrolerului atunci când lucrează cu dispozitive externe, în special în medii cu zgomot electric extern.

Întreruperi (INTERRUPȚI)

Sistemul de întrerupere este unul dintre cele mai importante părți microcontroler. Toate microcontrolerele AVR au un sistem de întrerupere pe mai multe niveluri. O întrerupere întrerupe fluxul normal al unui program pentru a îndeplini o sarcină prioritară determinată de un eveniment intern sau extern.
Pentru fiecare astfel de eveniment, a program separat, care se numește rutina de solicitare de întrerupere (rutina de întrerupere pe scurt) și este localizată în memoria programului.
Când are loc un eveniment care provoacă o întrerupere, microcontrolerul salvează conținutul contorului programului și întrerupe execuția procesorului central. programul curentși continuă să execute rutina de întrerupere.
După executarea rutinei de întrerupere, contorul de program stocat anterior este restaurat și procesorul revine la executarea programului întrerupt.
Fiecărui eveniment i se poate atribui o prioritate. Conceptul de prioritate înseamnă că o rutină de întrerupere care rulează poate fi întreruptă de un alt eveniment numai dacă are o prioritate mai mare decât cea curentă. In caz contrar CPU va trece la procesarea unui nou eveniment numai după terminarea procesării celui precedent.

Temporizatoare/contoare (TIMER/COUNTERS)

Microcontrolerele AVR includ de la 1 la 4 temporizatoare/contoare cu o lățime de 8 sau 16 biți, care pot funcționa și ca temporizatoare de la sursă internă frecvența ceasului, și ca contoare de evenimente externe.
Ele pot fi utilizate pentru formarea precisă a intervalelor de timp, numărarea impulsurilor la pinii unui microcontroler, generarea unei secvențe de impulsuri și tactarea unui transceiver cu canal de comunicație serial. În modul PWM, temporizatorul/contorul poate fi un modulator de lățime a impulsului și este utilizat pentru a genera un semnal cu frecvență programabilă și ciclu de lucru. Temporizatoarele/contoarele sunt capabile să genereze cereri de întrerupere, comutând procesorul pentru a le deservi pe baza evenimentelor și eliberându-l de necesitatea de a interoga periodic starea temporizatoarelor. Deoarece microcontrolerele sunt utilizate în principal în sistemele în timp real, temporizatoarele/contoarele sunt unul dintre cele mai importante elemente.

Timer Watchdog (WDT)

Timer-ul WatchDog este conceput pentru a preveni consecințele catastrofale ale eșecurilor aleatorii ale programului. Are propriul oscilator RC care funcționează la 1 MHz. Ca și în cazul oscilatorului RC intern principal, valoarea de 1 MHz este aproximativă și depinde în primul rând de tensiunea și temperatura de alimentare a microcontrolerului.
Ideea de a folosi un timer watchdog este extrem de simplă și constă în resetarea lui în mod regulat sub controlul unui program sau influență externăînainte ca timpul de expirare să expire și procesorul să fie resetat. Dacă programul rulează normal, comanda de resetare watchdog ar trebui să fie executată în mod regulat pentru a preveni resetarea procesorului. Dacă microprocesorul a depășit accidental limitele programului (de exemplu, de la interferență puternică de-a lungul circuitului de alimentare) sau este blocat într-o parte a programului, comanda de resetare a temporizatorului watchdog nu va fi, cel mai probabil, executată într-un timp suficient și va avea loc o resetare completă a procesorului, inițialând toate registrele și aducând sistemul în stare de funcționare.

Comparator analogic (AC)

Un comparator analog compară tensiunile la doi pini ai microcontrolerului. Rezultatul comparației va fi o valoare booleană care poate fi citită din program.
Ieșirea comparatorului analogic poate fi conectată la o întrerupere a comparatorului analogic. Utilizatorul poate seta întreruperea să se declanșeze pe o margine ascendentă sau descendentă sau pe un comutator.
Prezent în toate AVR-urile moderne, cu excepția Mega8515

Convertor analog-digital (CONVERTOR A/D)

Un convertor analog-digital (ADC) este utilizat pentru a obține o valoare numerică a tensiunii aplicate la intrarea sa. Acest rezultat este stocat în registrul de date ADC. Care dintre pinii microcontrolerului va fi intrarea ADC este determinat de numărul introdus în registrul corespunzător.

Transceiver serial universal (UART sau USART)

Transceiver universal asincron sau universal sincron/asincron (Receptor și transmițător universal sincron/asynchron - UART sau USART) - o interfață serială convenabilă și simplă pentru organizare canal de informare schimb microcontroler cu lumea de afara. Capabil să funcționeze în modul duplex (transmisia și recepția simultană a datelor). Acesta acceptă protocolul standard RS-232, care oferă posibilitatea de a comunica cu un computer personal. (Pentru a conecta MK și un computer, veți avea nevoie cu siguranță de un circuit pentru împerecherea nivelurilor de semnal. Există microcircuite speciale pentru aceasta, de exemplu MAX232.)

Interfață periferică serială SPI

Interfața periferică serială cu trei fire SPI (Serial Peripheral Interface) este proiectată pentru a organiza schimbul de date între două dispozitive. Poate fi folosit pentru a face schimb de date între microcontroler și diverse dispozitive, cum ar fi potențiometre digitale, DAC/ADC, FLASH ROM etc. Folosind această interfață, este convenabil să faceți schimb de date între mai multe microcontrolere AVR.
În plus, microcontrolerul poate fi programat prin interfața SPI.

Interfață serială cu două fire TWI

Interfața serială cu două fire TWI (Two-wire Serial Interface) este complet analogă versiunea de bază Interfață I2C (magistrală bidirecțională cu două fire) de la Philips. Această interfață permite până la 128 diverse dispozitive folosind o magistrală bidirecțională constând dintr-o linie de ceas (SCL) și o linie de date (SDA).

Interfață JTAG

Interfața JTAG a fost dezvoltată de un grup de experți de top în testarea componentelor electronice (Joint Test Action Group) și a fost înregistrată ca standard industrial IEEE Std 1149.1-1990. Interfața JTAG cu patru fire este utilizată pentru testare plăci de circuite imprimate, depanare în circuit, programare microcontroler.
Multe microcontrolere din familia Mega au o interfață JTAG sau debugWIRE compatibilă cu IEEE Std 1149.1 pentru depanarea pe cip. În plus, toate microcontrolerele Mega cu memorie flash de 16 KB sau mai mare pot fi programate prin interfața JTAG.

Generator de ceas

Generatorul de ceas generează impulsuri pentru a sincroniza funcționarea tuturor nodurilor microcontrolerului. Ceasul intern al AVR poate fi comandat din mai multe surse de referință (oscilator extern, cristal extern, RC intern sau extern). Frecvența minimă admisă nu este limitată în niciun fel (până la modul pas cu pas). Frecvența maximă de funcționare este determinată de tipul specific de microcontroler și este indicată de Atmel în caracteristicile sale, deși aproape orice microcontroler AVR cu valoarea declarată frecventa de operare, de exemplu, 10 MHz la temperatura camerei poate fi ușor „overclockat” la 12 MHz și mai mult.

Sistem în timp real (RTC)

RTC este implementat în toate microcontrolerele Mega și în două cristale „clasice” - AT90(L)S8535. Temporizatorul/contorul RTC are un prescaler separat care poate fi conectat în software fie la sursa principală de ceas, fie la o sursă de referință asincronă suplimentară (ceas cu cristal sau extern). În acest scop sunt rezervați doi pini ai microcircuitului. Oscilatorul intern este optimizat pentru a funcționa cu un ceas extern de cuarț de 32,768 kHz.

Nutriție

AVR-urile funcționează la tensiuni de alimentare de la 1,8 la 6,0 volți. Consumul de curent în modul activ depinde de tensiunea de alimentare și de frecvența la care funcționează microcontrolerul și este mai mic de 1 mA pentru 500 kHz, 5 ... 6 mA pentru 5 MHz și 8 ... 9 mA pentru 12 MHz.
AVR-urile pot fi transferate în mod programaticîntr-unul dintre cele trei moduri de consum redus.
Modul inactiv (IDLE). Doar procesorul nu mai funcționează și conținutul memoriei de date este înghețat, în timp ce generatorul intern de ceas, temporizatoarele, sistemul de întrerupere și temporizatorul watchdog continuă să funcționeze. Consumul de curent nu depășește 2,5 mA la o frecvență de 12 MHz.
Modul de oprire (POWER DOWN). Conținutul fișierului de registru este păstrat, dar generatorul intern de ceas este oprit și, prin urmare, toate funcțiile sunt oprite până când este primit un semnal de întrerupere extern sau hard reset. Când timer-ul watchdog este pornit, consumul de curent în acest mod este de aproximativ 80 μA, iar când este oprit, este mai mic de 1 μA. (Toate valorile date se bazează pe o tensiune de alimentare de 5V.)
Mod economic (ECONOMIREA ENERGIE). Doar generatorul de cronometru continuă să funcționeze, ceea ce asigură siguranța bazei de timp. Toate celelalte funcții sunt dezactivate.

Resetare sub tensiune (BOD)

Circuitul BOD (Brown-Out Detection$WinAVR = ($_GET["avr"]); if($WinAVR) include($WinAVR);?>) monitorizează tensiunea de alimentare. Dacă circuitul este pornit, atunci când puterea scade sub o anumită valoare, acesta pune microcontrolerul într-o stare de resetare. Când tensiunea de alimentare crește din nou la valoarea de prag, pornește temporizatorul de resetare. După ce se formează întârzierea, semnalul intern de resetare este eliminat și microcontrolerul pornește.

Microcontrolerele cu un singur cip sunt utilizate pe scară largă într-o mare varietate de domenii: de la instrumente de masura, camere și camere video, imprimante, scanere și mașini de copiat la produse electronice de divertisment și tot felul de electrocasnice.

De la introducerea primelor microprocesoare în anii 1970, complexitatea acestora a crescut continuu odată cu introducerea de noi soluții hardware și adăugarea de noi instrucțiuni menite să rezolve noi probleme. Așa s-a dezvoltat treptat arhitectura, care a primit ulterior denumirea de CISC (Complete Instruction Set Computers - calculatoare cu un set complex de instrucțiuni). Ulterior, o altă direcție a apărut și a găsit o dezvoltare activă: arhitectura RISC (Reduced Instruction Set Computers - computers with a reduced set of instructions). Această arhitectură include microcontrolerele AVR de la Atmel și PIC de la Microchip, cărora le este dedicată această carte.

Principalul avantaj al procesoarelor RISC este că sunt simple, execută un set limitat de instrucțiuni și, ca urmare, sunt foarte rapide. Acest lucru reduce costul și complexitatea programării lor.

Dezavantajul arhitecturii RISC a fost nevoia de a crea instrucțiuni suplimentare în limbaj de asamblare, care sunt implementate în hardware pentru dispozitivele CISC. De exemplu, în loc să apeleze pur și simplu o instrucțiune de divizare, ceea ce este tipic pentru dispozitivele CISC, un proiectant care se ocupă de un procesor RISC trebuie să folosească mai multe instrucțiuni de scădere secvențială. Cu toate acestea, acest dezavantaj este mai mult decât compensat de prețul și viteza dispozitivelor RISC. În plus, dacă creați programe în C, atunci astfel de probleme nu mai au nicio semnificație pentru dezvoltator, deoarece sunt rezolvate de compilator, care generează automat tot codul de asamblare lipsă.

În zorii microprocesoarelor, dezvoltarea software-ului avea loc exclusiv într-unul sau altul limbaj de asamblare concentrat dispozitiv specific. În esență, astfel de limbi erau mnemonice simbolice ale codurilor de mașină corespunzătoare, iar traducerea mnemotecilor în codul mașinii a fost efectuată de un traducător. in orice caz dezavantajul principal limbaje de asamblare este că fiecare dintre ele este legat de un anumit tip de dispozitiv și de logica funcționării acestuia. În plus, asamblatorul este greu de învățat, ceea ce necesită destul de mult efort pentru a învăța, ceea ce, în plus, se dovedește a fi irosit dacă mai târziu trebuie să treceți la utilizarea microcontrolerelor de la alți producători.

Limbajul C, fiind un limbaj de nivel înalt, este lipsit de astfel de neajunsuri și poate fi folosit pentru a programa orice microprocesor pentru care există un compilator C În limbajul C, toate operațiunile de nivel scăzut efectuate de computere sunt prezentate sub formă de constructe abstracte, permițând dezvoltatorilor să se concentreze pe programarea unei singure logici fără a-și face griji Codul mașinii. Odată ce înveți C, poți trece cu ușurință de la o familie de microcontrolere la alta, petrecând mult mai puțin timp pe dezvoltare.


Arhitectura microcontrollerului AVR și PIC

În general, toate microcontrolerele sunt construite după aceeași schemă. Sistemul de control, constând dintr-un contor de programe și un circuit de decodare, citește și decodifică instrucțiuni din memoria programului și dispozitiv de operare este responsabil cu efectuarea operațiilor aritmetice și logice; Interfața I/O vă permite să faceți schimb de date cu dispozitive periferice; și în sfârșit, trebuie să aveți un dispozitiv de stocare pentru a stoca programe și date (Fig. 1.1).

Orez. 1.1. Structura generalizată a microcontrolerului

Vom lua în considerare microcontrolerele în general, fără a fi legați de vreun tip specific de microcontrolere AVR, așa că mai jos vom lua în considerare doar caracteristici ale arhitecturii de memorie comune majorității microcontrolerelor, probleme de intrare/ieșire, manipulare întreruperi, resetare etc.

Memoria microcontrolerului AVR

În microcontrolerele AVR, memoria este implementată conform arhitecturii Harvard, ceea ce implică separarea memoriei de instrucțiuni și de date. Aceasta înseamnă că comenzile sunt accesate independent de accesul la date. Avantajul acestei organizații este creșterea vitezei de acces la memorie.

Memoria de date

Memoria de date este concepută pentru scrierea/citirea datelor utilizate de programe. Este volatil, adică dacă alimentarea microcontrolerului este oprită, toate datele stocate în acesta se vor pierde. În microcontrolerele AVR, memoria de date are o structură mai dezvoltată în comparație cu microcontrolerele PIC, așa cum se arată în Fig. 2.1.


Orez. 2.1. Structura memoriei de date în microcontrolere AVR și PIC

Regiune memorie statică SRAM (Memorie statică cu acces aleatoriu) este indicată în Fig. 2.1 este punctat, deoarece nu este folosit de toate microcontrolerele AVR (acest lucru se aplică atât SRAM-ului intern, cât și extern). Adresa sa de pornire este 0x060, iar adresa sa de top variază în funcție de dispozitive.

La unele microcontrolere AVR, puteți crește spațiul de memorie SRAM conectând blocuri de memorie externe de până la 64 KB, dar acest lucru necesită sacrificarea porturilor A și C, care în acest caz sunt folosite pentru a transfera date și adrese.

Registre de uz general

Zona de registru de uz general (registre de lucru) este destinată stocării temporare a variabilelor și pointerilor utilizați de procesor pentru a executa programe. În microcontrolerele AVR este format din 32 de registre de opt biți (interval de adrese 0x000 - 0x01F). În microcontrolerele PIC, registrele de uz general sunt, de asemenea, pe opt biți, dar numărul și domeniul de adrese depind de tipul specific de dispozitiv.

În programele scrise în C, accesul direct la registrele de uz general nu este de obicei necesar decât dacă sunt folosite fragmente de limbaj de asamblare.

Registre cu funcții speciale ale microcontrolerului PIC

Registrele funcții speciale utilizat în microcontrolerele PIC pentru a controla diverse operațiuni. Ca și în cazul registrelor de uz general, numărul și adresa lor diferă de la dispozitiv la dispozitiv. În programele scrise în C, accesul direct la registrele de funcții speciale nu este de obicei necesar decât dacă sunt folosite fragmente de limbaj de asamblare.

Zona I/O a microcontrolerelor AVR

Zona I/O a microcontrolerelor AVR conține 64 de registre folosite pentru a controla sau stoca date de la dispozitivele periferice. Fiecare dintre aceste registre poate fi accesat printr-o adresă I/O (începând cu 0x000) sau printr-o adresă SRAM (caz în care 0x020 ar trebui adăugat la adresa I/O). Programele C folosesc de obicei nume convenționale de registru I/O, iar adresele sunt semnificative doar pentru programele în limbaj de asamblare.

Numele, adresele I/O și SRAM, precum și o scurtă descriere a registrelor din zona I/O a microcontrolerelor AVR sunt prezentate în tabel. 2.1. Trebuie remarcat faptul că în diverse modele microcontrolere, unele dintre registrele enumerate nu sunt utilizate și adresele nu sunt enumerate în tabel. 2.1 sunt rezervate de către Atmel pentru utilizare ulterioară.

Tabelul 2.1. Descrierea registrelor din zona I/O

Înregistrați numele adresa I/O adresa SRAM Descriere
ACSR 0x08 0x28 Controlul comparatorului analogic și registrul de stare
UBRR 0x09 0x29 Registrul UART Baud Rate
UCR 0x0A 0x2A Registrul de control al transceiver UART
USR 0x0V 0x2V Registrul de stare UART transceiver
UDR 0х0С 0x2С Registrul de date UART transceiver
SPCR 0x0D 0x2D Registrul de control al interfeței SPI
SPSR 0x0E 0x2E Registrul de stare a interfeței SPI
SPDR 0x0F 0x2F SPI Data I/O Register
PIND 0x10 0x30 Pini portului D
DDRD 0x11 0x31 Port D Registrul de direcție a datelor
PORTD 0x12 0x32 Registrul de date Port D
PINC 0x13 0x33 Pini portului C
DDRC 0x14 0x34 Port C Registrul de direcție a datelor
PORTC 0x15 0x35 Registrul de date portului C
PINB 0x16 0x36 Pini portului B
DDRB 0x17 0x37 Portul B Registrul de direcție a datelor
PORTB 0x18 0x38 Registrul de date portul B
PINA 0x19 0x39 Portul A pini
DDRA 0x1A 0x3A Port A Registrul de direcție a datelor
PORTA 0x1V 0x3V Port A Registrul de date
EECR 0x1С 0x3С Registrul de control al memoriei EEPROM
EEDR 0x1D 0x3D Registrul de date EEPROM
EEARL 0x1E 0x3E Registrul de adrese de memorie EEPROM (octet scăzut)
EEARH 0x1F 0x3F Registrul adresei memoriei EEPROM (octet mare)
WDTCR 0x21 0x41 Watchdog Timer Control Register
ICR1L 0x24 0x44
ICR1H 0x25 0x45 Timer/Counter Capture Register T/C1 (octet mic)
OCR1BL 0x28 0x48 Registrul de comparație B al temporizatorului T/C1 (octet scăzut)
OCR1BH 0x29 0x49 Registrul de comparație B al temporizatorului T/C1 (octet înalt)
OCR1AL 0x2A 0x4A Registrul de comparație A al temporizatorului T/C1 (octet scăzut)
OCR1AH 0x2V 0x4V Registrul de comparație A al temporizatorului T/C1 (octet înalt)
TCNT1L 0x2С 0x4С Registrul de numărare al temporizatorului/contorului T/C1 (octet scăzut)
TCNT1H 0x2D 0x4D Registrul de numărare al temporizatorului/contorului T/C1 (octet înalt)
TCCR1B 0x2E 0x4E Registrul de control B al temporizatorului/contorului T/C1
TCCR1A 0x2F 0x4F Registrul de control A al temporizatorului/contorului T/C1
TCNT0 0x32 0x52 Registrul de numărare a temporizatorului/contorului T/C0
TCCR0 0x33 0x53 Registrul de control temporizator/contor T/C0
MCUCR 0x35 0x55 Registrul de control al microcontrolerului
TIFR 0x38 0x58 Timer/Counter Interrupt Flag Register
TIMSK 0x39 0x59 Timer Interrupt Masking Register
GIFR 0x3A 0x5A Registrul general de pavilion de întrerupere
GIMSK 0x3V 0x5V Registrul general de mascare a întreruperii
SPL 0x3D 0x5D Indicator de stivă (octet mic)
SPH 0x3E 0x5E Indicator de stivă (octet mare)
SREG 0x3F 0x5F Registrul de stare

Registrul de stare SREG al microcontrolerelor AVR

Registrul de stare conține steagurile de stare ale microcontrolerelor AVR și este situat în zona I/O la adresa $3F (adresa SRAM este $5F). După ce este dat semnalul de resetare, acesta este inițializat la zerouri.

AVR MK-urile au câștigat o popularitate imensă în comunitatea de radio amatori, atrăgând ingineri electronici cu indicatori precum prețul, eficiența energetică și performanța. În plus, un avantaj uriaș îl reprezintă modurile de programare convenabile, accesibilitatea gratuită software sprijin și larg alege MK. Această serie Atmel este utilizată în industria auto și electronice de consum, plăci de rețea și plăci de bază ale computerelor și laptopurilor, în smartphone-uri și tablete.


În conformitate cu o singură arhitectură de bază, aceste MCU-uri sunt împărțite în trei familii mari:


Tiny AVR - ieftin și destul de simplu în design microcontrolere într-un pachet cu 8 pini
Clasic – linia de bază principală a microcontrolerului;
Mega AVR este un microcontroler pentru sarcini complexe care necesită o cantitate semnificativă de memorie de programe și date.

AVR Classic– cea mai populară linie printre alte Flash-MK-uri de la Atmel Corporation. Acesta din urmă a introdus primul Flash MK pe 8 biți în 1993 și a îmbunătățit tehnologia doar de atunci. Compania lucrează constant pentru a-și îmbunătăți linia de producție în următoarele domenii principale: reducerea consumului specific de energie; creșterea gamei tensiunilor și vitezei de alimentare; capacitatea de a integra cu ușurință dispozitive de depanare în timp real în produse; implementarea funcției de autoprogramare; extinderea numărului și modernizarea modulelor periferice; integrarea diverselor dispozitive specializate (transmițătoare, controlere USB, drivere LCD etc.

Succesul microcontrolerelor AVR constă în simplitatea efectuării sarcinii și a obținerii rezultatului dorit, care este facilitat de disponibilitatea unui număr mare. unelte, ambele dezvoltate de Atmel Corporation și producători de software terți. Multe companii terțe produc o gamă completă de compilatoare, programatori, depanatoare, asamblatoare, adaptoare și conectori necesare. Trăsătură distinctivă Avantajul software-ului AVR este costul redus.

Sunt necesare pentru schimbul de date cu diferite dispozitive conectate la acesta, de exemplu, relee, indicatoare de lumină și sunet, senzori etc. Cu ajutorul porturilor AVR, se realizează nu numai schimbul de date, ci și sincronizarea circuitului în ansamblu. Numărul de porturi AVR depinde de modelul MK. În medie, există (1-7) porturi. De obicei, porturile AVR sunt pe opt biți, dacă adâncimea de biți nu este limitată de numărul de pini de pe carcasa MK.

Să încercăm să scriem un program simplu pentru „LED intermitent”. Pentru ușurință de înțelegere, vom scrie programul în limbajul C pentru asta vom avea nevoie utilitate specială CodeVisionAVR.

Pentru citiri precise ale timpului, microcontrolerul are nevoie de un fel de contor extern care să conteze intervalul de timp necesar, indiferent de funcționarea procesorului, iar acesta din urmă ar putea primi date de timp în orice moment. Și microcontrolerul are un astfel de contor - temporizatoare periferice. Pot fi chiar mai multe dintre ele într-un AVR, așa că în ATmega16 sunt trei, în ATmega128 sunt până la patru.

Veți învăța cum să controlați un afișaj LCD folosind comenzile disponibile în compilatorul CodeVisionAVR, folosind exemplul unui MK din familia ATmega8 și un ecran LCD alfanumeric cu un cip HD44780 încorporat

Orice microcontroler este capabil doar să „percepe”. semnale digitale– zero sau unu logic. De exemplu, pentru ATmega8 MK, cu o tensiune de alimentare de 5 V, un zero logic este o tensiune situată în intervalul de la 0 la 1,3 V, iar o unitate este de la 1,8 la 5 V. Destul de des în practica radioamatorilor există necesitatea de a măsura tensiunea care poate fi primită orice valoare în intervalul de la zero până la nivelul tensiunii de alimentare. Pentru aceste sarcini, toate microcontrolerele AVR includ convertor analog-digital.


Software-ul este utilizat pentru un mediu de dezvoltare software integrat pentru microcontrolere de acest tip. Principalele caracteristici ale CodeVisionAVR sunt că este foarte ușor de utilizat auto-studiuși, de asemenea, sprijină toți membrii parlamentarii existenți ai acestei familii.

Informații despre structura, sistemul de comandă al microcontrolerelor și dispozitiv periferic. Publicarea vă va ajuta să alegeți MK-ul potrivit de tipul necesar, să dezvoltați diagrama functionala dispozitive și program de operare MK în limbaj de asamblare AVR

Particularitatea acestui circuit contor de frecvență pe un microcontroler este că funcționează împreună cu un computer și este conectat la acesta placa de baza prin conector IRDA. Structura primește energie de la același conector

Mulți oameni cred că dispozitivele pe 8 biți au fost deja strânse la maximum și singura cale pentru a îmbunătăți și mai mult performanța microcontrolerului înseamnă a trece la dispozitive mai puternice, cum ar fi microcontrolerele pe 32 de biți. Cu toate acestea, trecerea la 32 de biți poate fi oarecum dureroasă în perspectiva tehnica. De exemplu, consumul de energie și complexitatea utilizării circuitului pot crește considerabil. Indiferent de eficiența mai mare a unui dispozitiv pe 32 de biți, un microcontroler pe 8 biți consumă mult mai puțină energie.

Îmbunătățirea performanței unui microcontroler pe 8 biți poate fi realizată cu câteva soluții simple. În primul rând, utilizați pe deplin compilatorul și setul complet funcţionalitate furnizate de ei. În prezent, compilatoarele sunt foarte avansate, iar multe dintre ele au o optimizare foarte bună. În funcţie de sarcină şi memorie disponibilă compilatoarele sunt capabile să optimizeze atât dimensiunea codului, cât și viteza. Asigurați-vă că știți bine pentru ce utilizați MK și utilizați compilatorul în conformitate cu datele sursă furnizate.

În al doilea rând, nu disprețuiți optimizarea manuală codul programului. Deși compilatoarele actuale sunt funcționale, ele nu pot face toată munca pentru tine. Prin urmare, un programator de microcontrolere trebuie să fie atent când scrie cod. Lucrul important aici este să structurați codul și să separați porțiunea din stiva de comunicații a codului de restul programului. Acest lucru vă va permite să schimbați semnificativ rapid piesele necesare și să monitorizați timpul de execuție a acestora.

Pe lângă structurare, utilizați cele mai eficiente tipuri de date. Da, diferit solutii arhitecturale au dimensiuni diferite de baze de date. Adică, într-un microcontroler pe 8 biți, dacă este posibil, nu ar trebui să utilizați variabile int pe 32 de biți. Este mai bine să le înlocuiți cu variabile de tip octet, dacă desigur acest lucru este posibil. De asemenea, nu utilizați variabile în virgulă mobilă atunci când programați microcontrolere.

În articolul despre porturile PC I/O au fost menționate dispozitive precum microcontrolerele AVR. Poate că mulți cititori ar dori să știe mai detaliat despre ce este vorba.

În primul rând, să înțelegem însuși conceptul de „microcontroller”. Un microcontroler poate fi definit ca un computer în miniatură bazat pe un singur cip, care, pe lângă procesor, include o serie de elemente auxiliare, cum ar fi RAM, EPROM, cronometru etc. Microcontrolerul este proiectat pentru a îndeplini orice sarcini predefinite.

Cel mai simplu mod este să compari un microcontroler cu un computer personal. La fel ca un PC, un microcontroler are un procesor, RAM și memorie permanentă. Cu toate acestea, spre deosebire de un PC, toate aceste elemente sunt situate pe un singur cip.

Dar asta înseamnă că microcontrolerul este echivalent calculator personal? Desigur nu. Un PC este proiectat pentru a îndeplini sarcini de uz general. De exemplu, puteți folosi un computer pentru a tasta text, a stoca și a rula fișiere multimedia, a naviga pe internet etc. Microcontrolerele sunt concepute pentru a îndeplini sarcini speciale, de exemplu, oprirea aparatului de aer condiționat atunci când temperatura din cameră scade sub o anumită valoare sau invers, pornirea acestuia când temperatura crește.

Există mai multe familii populare de microcontrolere care sunt utilizate în scopuri diferite. Cele mai comune dintre acestea sunt familiile de microcontrolere 8051, PIC și AVR. Și vă vom spune mai multe despre ultima familie.

Istorie de familie

Familia de microcontrolere AVR a fost creată în 1996 de către Atmel Corporation, iar dezvoltatorii arhitecturii microcontrolerelor sunt Alf-Egil Bogen și Vegard Wollan. De aici provine numele familiei - de la primele litere ale numelor dezvoltatorilor - A și V, iar prima literă a abrevierei RISC - tipul de arhitectură pe care se bazează arhitectura microcontrolerului. Această abreviere este adesea descifrată ca RISC virtual avansat (RISC eficient actualizat).

Primul microcontroler din serie a fost AT90S8515, dar primul microcontroler lansat pe piață a fost AT90S1200. Acest lucru s-a întâmplat în 1997.

Astăzi există 3 linii de microcontrolere disponibile:

  • TinyAVR – cantitate mică de memorie, dimensiune mică, potrivită pentru cele mai simple sarcini.

Aspectul microcontrolerului TinyAVR

  • MegaAVR este cea mai comună linie, având o cantitate mare de memorie încorporată (până la 256 KB), multe dispozitive suplimentare și concepute pentru sarcini de complexitate medie și mare.

Aspectul microcontrolerului MegaAVR

  • XmegaAVR - utilizat în aplicații comerciale complexe care necesită cantități mari de memorie și viteză mare.

Exemplu de microcontroler XmegaAVR

Caracteristici comparative ale diferitelor linii:

Caracteristici de familie

În primul rând, microcontrolerele din această serie sunt rapide. Procesorul microcontrolerului execută majoritatea instrucțiunilor într-un singur ciclu. Microcontrolerele AVR sunt de aproximativ 4 ori mai rapide decât PIC-urile. În plus, consumă puțină energie și pot funcționa în 4 moduri de economisire a energiei.

Majoritatea controlerelor AVR sunt pe 8 biți, deși acum există o varietate pe 32 de biți, AVR32. În plus, așa cum sa menționat mai sus, AVR-urile aparțin tipului de microcontrolere RISC. Arhitectura RISC (Complex Instruction Set Computers) înseamnă că setul de instrucțiuni pe care procesorul unui dispozitiv le poate executa este limitat, dar, în același timp, o astfel de arhitectură oferă un avantaj de viteză. Opusul arhitecturii RISC este Arhitectura CISC(Complex Instruction Set Computers).

Varietate de controlere AVR32 pe 32 de biți

Un controler pe 8 biți înseamnă că este capabil să transmită și să primească date pe 8 biți. Registrele I/O disponibile sunt, de asemenea, pe 8 biți.

Arhitectura controlerului este bazată pe registre. Aceasta înseamnă că registrele sunt folosite în controler pentru a stoca datele inițiale ale operațiunii și rezultatul acesteia.

Procesorul controlerului preia date din două registre de intrare și execută operatie logicași stochează rezultatul în registrul de ieșire. Toate acestea necesită 1 ciclu executabil.

Arhitectura controlerului

În total, controlerul AVR are 32 de registre de uz general pe 8 biți. În timpul unui ciclu, procesorul preia date din două registre și le plasează într-o unitate logică aritmetică (ALU), care operează asupra datelor și le plasează într-un registru arbitrar. ALU poate efectua atât operații aritmetice, cât și logice asupra operanzilor săi. ALU poate efectua și acțiuni cu un singur operand (registru). Mai mult, controlerul nu are un registru de acumulator, spre deosebire de controlerele din familia 8051 - orice registre poate fi folosit pentru operatii, iar rezultatul operatiei poate fi plasat si in orice registru.

Controlerul respectă normele Harvard arhitectura de calcul, conform căreia computerul are memorie separată pentru programe și date. Prin urmare, în timp ce o instrucțiune este în curs de executare, următoarea instrucțiune este predată din memorie.

Controlerul este capabil să execute o instrucțiune pe ciclu. Rezultă că, dacă frecvența ceasului controlerului este de 1 MHz, atunci performanța sa va fi de 1 milion op./s. Cu cât frecvența de ceas a controlerului este mai mare, cu atât viteza acestuia va fi mai mare. Cu toate acestea, atunci când alegeți frecvența de ceas al controlerului, trebuie respectat un compromis rezonabil între viteza acestuia și consumul de energie.

În plus față de memoria flash și procesor, controlerul are dispozitive precum un convertor analog-digital, cronometre, interfețe de comunicare - I2C, SPI și port serial UART. Toate aceste dispozitive pot fi controlate prin software.

Arhitectura tipică a microcontrolerelor AVR

Programe pentru microcontroler

După cum am menționat mai sus, un microcontroler este ca un PC, ceea ce înseamnă că, la fel ca un PC, AVR poate rula și un program, deși doar unul câte unul.

Programul microcontrolerului poate fi stocat în memoria încorporată a controlerului și este o serie de foarte comenzi simple, care selectează datele și efectuează operațiuni asupra acestora. În cele mai multe cazuri, aceasta înseamnă citirea datelor primite, verificarea stării acestora și producerea rezultatului corespunzător. Uneori poate fi necesar să schimbați datele și să efectuați anumite operațiuni cu acestea, precum și să transferați date către oricare dispozitiv extern, de exemplu, un indicator sau un port serial.

Pentru astfel de sarcini elementare, se folosesc seturi de instrucțiuni binare, fiecare dintre ele având un analog în limbajul de asamblare, care este mai accesibil percepției umane. Prin urmare, cel mai comun mod de a scrie programe de controler este să le scrieți în limbaj de asamblare.

Avantajul assemblerului este un cod foarte rapid, compact și eficient, dar crearea unor astfel de programe în același timp necesită cunoaștere profundă a funcționării procesorului controlerului, gestionarea manuală a memoriei și controlul structurii programului. Prin urmare, limbaje de nivel înalt precum C, Basic și Java sunt adesea folosite pentru a scrie programe. În acest caz, compilatorul își asumă sarcina de a controla structura programului și gestionarea memoriei. În plus, funcțiile utilizate frecvent pot fi plasate în biblioteci și preluate din ele după cum este necesar.

Concluzie

Microcontrolerele din familia AVR sunt astăzi utilizate pe scară largă în computere pentru a automatiza controlul echipamentelor electronice, diverse dispozitiveși mecanisme utilizate în scopuri industriale, comerciale și casnice. Costul scăzut, gama largă și capabilitățile bogate ale microcontrolerelor din această serie au contribuit la marea lor popularitate.