Aplicarea schemelor MK AVR și a algoritmilor programului. Unde și cum să studiez? Parametri suplimentari ai mega microcontrolerului AVR

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 reprezintă 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 pe 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 sunt la începutul spațiului de adrese memorie cu acces aleator, dar nu fac parte fizic din ea. 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 computerelor moderne. El a propus o arhitectură care și-a primit numele (arhitectura von Neumann) și a implicat stocarea de programe și date memorie 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 o interfață 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. (Documentația tehnică oficială a Atmel Corp. indică o valoare 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 situate î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 execuției 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 de ieșire), suport pentru întreruperi externe, contoare cronometru, timer watchdog, comparatoare analogice, ADC pe 10 biți și 8 canale, interfețe UART, JTAG și SPI, dispozitiv de resetare cu putere redusă, 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, conectarea directă a LED-urilor și tranzistoare bipolare. 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 prezența zgomotului 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, este dezvoltat un program separat, care se numește subrutină de procesare a cererii de întrerupere (pe scurt, subrutină de întrerupere) ș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 programe 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ă. În caz contrar, procesorul central va începe procesarea unui nou eveniment numai după ce a terminat procesarea celui precedent.

Temporizatoare/contoare (TIMER/COUNTERS)

Microcontrolere AVR conțin de la 1 la 4 temporizatoare/contoare cu o lățime de 8 sau 16 biți, care pot funcționa și ca temporizatoare dintr-o 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 folosirii unui timer watchdog este extrem de simplă și constă în resetarea lui 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 valoare numerică tensiunea aplicată la intrarea sa. Acest rezultat este stocat în registrul de date ADC. Care dintre pinii microcontrolerului vor fi Intrare ADC, este determinată de numărul înscris în registrul corespunzător.

Transceiver serial universal (UART sau USART)

Transmițător-receptor universal asincron sau universal sincron/asincron (receptor și emițător universal sincron/asincron - UART sau USART) - convenabil și simplu Interfață serială pentru organizare canal de informare schimbul microcontrolerului cu lumea exterioară. Capabil să funcționeze în modul duplex (transmisia și recepția simultană a datelor). 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țiometrele 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 de dispozitive diferite să fie conectate împreună 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 testarea PCB-ului, depanarea în circuit și programarea microcontrolerului.
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 în mod programatic conectat fie la sursa principală de ceas, fie la o sursă suplimentară de frecvență de referință asincronă (cuarț sau semnal de ceas 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 se primește un semnal extern de întrerupere sau resetare hardware. 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, 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 (denumite în continuare MK) au intrat ferm în viața noastră pe Internet puteți găsi o mulțime de circuite interesante care sunt executate pe MK. Ce nu poți asambla pe un MK: diverse indicatoare, voltmetre, electrocasnice (dispozitive de protecție, dispozitive de comutare, termometre...), detectoare de metale, diverse jucării, roboți etc. Lista ar putea dura foarte mult. Am văzut primul circuit pe un microcontroler în urmă cu 5-6 ani într-o revistă de radio și aproape imediat am întors pagina, gândindu-mă „Totuși nu voi putea să-l asamblam”. Într-adevăr, la vremea aceea, MK-urile erau un dispozitiv foarte complex și neînțeles pentru mine, nu aveam idee cum funcționează, cum să le flash și ce să fac cu ele în cazul unui firmware incorect. Dar acum aproximativ un an, mi-am asamblat primul circuit pe MK pentru prima dată, era un circuit voltmetru digital pe indicatoare cu 7 segmente și un microcontroler ATmega8. S-a întâmplat că mi-am cumpărat un microcontroler din întâmplare, când stăteam în departamentul de componente radio, tipul din fața mea cumpăra un MK și, de asemenea, am decis să-l cumpăr și să încerc să asamblez ceva. În articolele mele vă voi spune despre Microcontrolere AVR, vă voi învăța cum să lucrați cu ele, ne vom uita la programe pentru firmware, vom face un programator simplu și de încredere, vom analiza procesul de firmware și, cel mai important, problemele care pot apărea nu numai pentru incepatori.

Parametrii de bază ai unor microcontrolere din familia AVR:

Microcontroler

Memorie flash

memorie RAM

memorie EEPROM

Porturi I/O

puterea U

Parametri MK suplimentari AVR mega:

Temperatura de funcționare: -55…+125*С
Temperatura de depozitare: -65…+150*С
Tensiune la pinul RESET față de GND: max 13V
Tensiune maximă de alimentare: 6.0V
Curent maxim de linie I/O: 40mA
Curent maxim de alimentare VCC și GND: 200mA

Pinouts model ATmega 8X

Pinouts pentru modelele ATmega48x, 88x, 168x

Dispunerea pinului pentru modelele ATmega8515x

Dispunerea pinului pentru modelele ATmega8535x

Dispunerea pinului pentru modelele ATmega16, 32x

Dispunerea pinului pentru modelele ATtiny2313

O arhivă cu fișe de date pentru unele microcontrolere este atașată la sfârșitul articolului.

Biți FUSE de instalare MK AVR

Amintiți-vă, o siguranță programată este 0, una neprogramată este 1. Ar trebui să aveți grijă când setați siguranțe programate incorect poate bloca microcontrolerul. Dacă nu sunteți sigur ce siguranță trebuie să programați, este mai bine să flashați MK fără siguranțe pentru prima dată.

Cele mai populare microcontrolere printre radioamatorii sunt ATmega8, urmate de ATmega48, 16, 32, ATtiny2313 și altele. Microcontrolerele sunt vândute în pachete TQFP și DIP pentru începători, recomand cumpărarea în DIP. Dacă cumpărați TQFP, va fi mai problematic să le flashați, va trebui să cumpărați sau să lipiți placa; picioarele lor sunt situate foarte aproape unul de celălalt. Vă sfătuiesc să instalați microcontrolere în pachete DIP pe prize speciale, este convenabil și practic, nu trebuie să dezlipiți MK-ul dacă doriți să-l reflashați sau să îl utilizați pentru un alt design.

Aproape toate MK-urile moderne au capacitatea de a programa ISP în circuit, de exemplu. Dacă microcontrolerul dvs. este lipit pe placă, atunci pentru a schimba firmware-ul nu va trebui să-l deslipim de pe placă.

Pentru programare se folosesc 6 pini:
RESET- Conectați-vă MK
VCC- Plus alimentare, 3-5V, depinde de MK
GND- Cablu comun, minus putere.
MOSI- Intrare MK ( semnal informativîn MK)
MISO- Ieșire MK (semnal de informații de la MK)
SCK- Intrare MK (semnal de ceas în MK)

Uneori, ei folosesc, de asemenea, pinii XTAL 1 și XTAL2, dacă MK este alimentat de un oscilator extern în ATmega 64 și 128, pinii MOSI și MISO nu sunt folosiți pentru programarea ISP; conectat la pinul PE0 și MISO la pinul PE1. Când conectați microcontrolerul la programator, firele de conectare ar trebui să fie cât mai scurte posibil, iar cablul să treacă de la programator la Port LPT de asemenea, nu ar trebui să fie prea lung.

Marcajul microcontrolerului poate conține litere ciudate cu cifre, de exemplu Atmega 8L 16PU, 8 16AU, 8A PU etc. Litera L înseamnă că MK funcționează la o tensiune mai mică decât MK fără litera L, de obicei 2,7V. Numerele de după cratima sau spațiul 16PU sau 8AU indică frecvența internă a generatorului care se află în MK. Dacă siguranțele sunt setate să funcționeze dintr-un cuarț extern, cuarțul trebuie setat la o frecvență care să nu depășească maximul conform fișei de date, acesta este 20 MHz pentru ATmega48/88/168 și 16 MHz pentru alte atmegas.

Microcontrolerele sunt dispozitive mici, dar în același timp foarte convenabile pentru cei care doresc să creeze diverse lucruri robotice sau automatizate uimitoare acasă. Acest articol va discuta despre programarea AVR pentru începători, diverse aspecte și nuanțe ale acestui proces.

Informații generale

Microcontrolerele pot fi găsite peste tot. Se găsesc în frigidere, mașini de spălat, telefoane, mașini industriale, case inteligenteși în multe dispozitive tehnice diferite. Utilizarea lor pe scară largă se datorează posibilității de a înlocui mai complexe și la scară largă circuite analogice dispozitive. Programarea AVR MK permite controlul autonom al dispozitivelor electronice. Aceste microcontrolere pot fi considerate ca calculator simplu, care poate interacționa cu echipamente externe. Deci, ei pot deschide/închide tranzistori, pot primi date de la senzori și le pot afișa pe ecrane. De asemenea, microcontrolerele pot efectua diverse procesări ale informațiilor de intrare, similare unui computer personal. Dacă stăpânești programarea AVR de la zero și ajungi la nivelul unui profesionist, aproape că vei ajunge posibilități nelimitate pentru a controla diferite dispozitive folosind porturi I/O, precum și pentru a le schimba codul.

Câteva despre AVR

Articolul va lua în considerare o familie de microcontrolere produse de Atmel. Au performanțe destul de bune, ceea ce le permite să fie folosite în multe dispozitive de amatori. Folosit pe scară largă în industrie. Pot fi găsite în această tehnică:

  1. Intern. Mașini de spălat, frigidere, cuptoare cu microunde etc.
  2. Mobil. Roboți, comunicații și așa mai departe.
  3. Tehnica de calcul. Sisteme de control al dispozitivelor periferice, plăci de bază.
  4. Distractiv. Bijuterii și jucării pentru copii.
  5. Transport. Siguranta auto si sisteme de control al motorului.
  6. Echipament industrial. Sisteme de control al mașinii.

Acest lucru, desigur, nu acoperă toate domeniile. Sunt folosite acolo unde este avantajos să se folosească nu un set de cipuri de control, ci un microcontroler. Acest lucru este posibil datorită consumului redus de energie, iar limbajele C și Assembler sunt folosite pentru a scrie programe, ușor modificate pentru familia de microcontrolere. Astfel de modificări sunt necesare din cauza capacităților de calcul slabe, care sunt de obicei calculate în zeci de kiloocteți. Programarea AVR fără a învăța aceste limbi nu este posibilă.

Cum să obțineți primul microcontroler?

Programarea AVR necesită:

  1. Disponibilitatea mediului de dezvoltare necesar.
  2. De fapt, microcontrolerele în sine.

Să luăm în considerare al doilea punct mai detaliat. Există trei opțiuni pentru a achiziționa dispozitivul necesar:

  1. Cumpărați direct microcontrolerul.
  2. Obțineți un dispozitiv ca parte a designerului (de exemplu, Arduino).
  3. Asamblați singur microcontrolerul.

Nu este nimic complicat în primul punct, așa că să trecem la al doilea și al treilea.

Obțineți un dispozitiv ca parte a designerului

Ca exemplu va fi ales binecunoscutul Arduino. Aceasta este, de asemenea, o platformă convenabilă pentru dezvoltarea rapidă și de înaltă calitate a diferitelor dispozitive electronice. Placa Arduino include un anumit set componente pentru a funcționa (diverse configurații disponibile). Trebuie să includă un controler AVR. Această abordare vă permite să începeți rapid dezvoltarea unui dispozitiv, nu necesită abilități speciale, are capacități semnificative în ceea ce privește conectarea plăcilor suplimentare și puteți găsi, de asemenea, o mulțime de informații pe Internet cu privire la întrebări de interes. Dar au existat unele dezavantaje. Cumpărând un Arduino, o persoană se lipsește de posibilitatea de a se plonja mai profund în programarea AVR, pentru a înțelege mai bine microcontrolerul și specificul funcționării acestuia. De asemenea, la negativ se adaugă și gama relativ restrânsă de modele, motiv pentru care de multe ori trebuie să cumpărați plăci pentru sarcini specifice. O altă particularitate este că programarea în „SI” aici diferă destul de mult de forma standard. În ciuda tuturor deficiențelor sale, Arduino este potrivit pentru începători să învețe. Dar nu ar trebui să abuzezi de el.

Auto-asamblare

Trebuie remarcat faptul că microcontrolerele AVR sunt destul de prietenoase cu începătorii. Le puteți asambla singur folosind componente disponibile, simple și ieftine. Dacă vorbim despre avantaje, atunci această abordare vă permite să vă familiarizați mai bine cu dispozitivul, să selectați în mod independent componentele necesare, ajustând rezultatul final la cerințe, utilizarea limbajelor de programare standard și costuri reduse. Singurul dezavantaj este complexitatea auto-asamblare atunci când este efectuat pentru prima dată și nu există cunoștințe și abilități necesare.

Cum să lucrezi?

Deci, să presupunem că problema cu microcontrolerul a fost rezolvată. În plus, se va considera că a fost achiziționat sau achiziționat independent. De ce mai ai nevoie pentru a stăpâni programarea AVR? În acest scop, aveți nevoie de un mediu de dezvoltare (un notepad obișnuit va face ca bază, dar vă recomand să utilizați Notepad++). Deși există și alte programe pentru Programare AVR, software-ul furnizat poate face față tuturor cerințelor. De asemenea, este necesar un programator. Îl puteți cumpăra de la magazinul local, îl puteți comanda online sau îl puteți asambla singur. Nici nu va strica placă de circuit imprimat. Nu este obligatoriu, dar folosirea lui vă permite să vă economisiți nervii și timpul. De asemenea, cumpărat/creat independent. Și ultimul lucru este sursa de energie. Pentru AVR este necesar să se asigure o alimentare cu tensiune de 5V.

Unde și cum să studiez?

Nu poți crea capodopere de la zero. Acest lucru necesită cunoștințe, experiență și practică. Dar de unde le pot lua? Există mai multe moduri. Inițial, puteți căuta în mod independent informațiile necesare pe World Wide Web. Te poți înscrie la cursuri de programare (la distanță sau față în față) pentru a dobândi abilități de lucru de bază. Fiecare abordare are avantajele sale. Deci, cursurile de programare la distanță vor fi mai ieftine și poate chiar gratuite. Dar dacă ceva nu funcționează, atunci cu cursuri față în față, un dezvoltator experimentat va putea găsi rapid cauza problemei. De asemenea, ar fi o idee bună să vă familiarizați cu literatura disponibilă gratuit. Desigur, nu te vei putea descurca singur cu cărțile, dar poți să te descurci cunostinte de baza despre dispozitiv, programare în „SI”, „Asamblator” și alte aspecte de lucru.

Porturi I/O

Acesta este un subiect extrem de important. Fără a înțelege cum funcționează porturile I/O, programarea în circuit a AVR nu este deloc posibilă. La urma urmei, interacțiunea microcontrolerului cu dispozitivele externe se realizează tocmai prin medierea acestora. La prima vedere, unui începător i se poate părea că portul este un mecanism destul de confuz. Pentru a evita o astfel de impresie, nu vom analiza în detaliu schema de funcționare a acesteia, ci doar ne vom face o idee generală despre aceasta. Sa luam in considerare implementare software. Ca exemplu de dispozitiv, a fost ales microcontrolerul AtMega8 - unul dintre cele mai populare din întreaga familie AVR. Portul I/O este format din trei registre care sunt responsabile pentru funcționarea acestuia. Pe nivel fizic sunt realizate ca picioare. Fiecare dintre ele corespunde unui anumit bit din registrul de control. Fiecare picior poate funcționa atât pentru a introduce informații, cât și pentru a le ieși. De exemplu, puteți atașa o funcție pentru aprinderea unui LED sau procesarea unei apăsări de buton pe acesta. Apropo, cele trei registre care au fost menționate sunt: ​​PORTx, PINx și DDRx. Fiecare dintre ele este de opt biți (rețineți că ne uităm la AtMega8). Adică, un bit este ocupat de un anumit picior.

Înregistrați operațiunea

Cel mai semnificativ din punct de vedere al orientării este controlul DDRx. De asemenea, este de opt biți. Valorile pentru acesta pot fi scrise 0 sau 1. Cum se schimbă funcționarea controlerului atunci când se utilizează zerouri și unități? Dacă un anumit bit este setat la 0, atunci piciorul corespunzător va fi comutat în modul de intrare. Și din ea se vor putea citi datele care vin cu dispozitive externe. Dacă este setat la 1, microcontrolerul va putea controla ceva (de exemplu, instruiți un tranzistor să treacă tensiune și să aprindă un LED). Al doilea ca important este PORTx. El gestionează starea piciorului. Să ne uităm la un exemplu. Să presupunem că avem un port de ieșire. Dacă setăm unul logic în PORTx, atunci un semnal este trimis de la microcontroler la dispozitivul de control pentru a începe să funcționeze. De exemplu, porniți LED-ul. Când este setat zero, acesta va fi stins. Adică, nu este nevoie să lucrați în mod constant cu registrul de control DDRx. Și, în sfârșit, să vorbim despre PINx. Acest registru este responsabil pentru afișarea stării pinului controlerului atunci când este setat la starea de intrare. Trebuie remarcat faptul că PINx poate funcționa numai în modul citire. Nu vei putea scrie nimic în ea. Dar citirea stării actuale a piciorului nu este o problemă.

Lucrul cu analogi

AVR-urile nu sunt singurele microcontrolere. Această piață este împărțită între mai multe marii producatori, precum și între numeroasele dispozitive de imitație chinezești și produse de casă. În multe privințe, sunt asemănătoare. De exemplu, programarea unui PIC/AVR nu este mult diferită. Și dacă înțelegeți un lucru, atunci înțelegeți orice altceva va fi ușor. Dar vă recomandăm totuși să începeți călătoria cu AVR datorită structurii sale competente, prieteniei dezvoltatorilor și disponibilității cantitate mare materiale auxiliare, datorită cărora procesul de dezvoltare poate fi accelerat semnificativ.

Măsuri de siguranță

Când programați microcontrolere AVR în „SI” sau „Assembler”, trebuie să lucrați cu mare atenție. Faptul este că, prin setarea unei anumite combinații de registre și modificarea setărilor interne, puteți bloca în siguranță microcontrolerul. Acest lucru este valabil mai ales pentru siguranțe. Dacă nu aveți încredere în corectitudinea acțiunilor dvs., atunci este mai bine să refuzați să le folosiți. Același lucru este valabil și pentru programatori. Dacă cumpărați echipament din fabrică, va flash microcontrolere fără probleme. Când îl asamblați singur, poate apărea o situație tristă în care programatorul blochează dispozitivul. Acest lucru se poate întâmpla din cauza unei erori în codul programului, și prin probleme din interiorul său. Apropo, despre un alt punct (de data aceasta pozitiv), care a fost menționat anterior în treacăt, dar nu a fost niciodată dezvăluit pe deplin. În zilele noastre, aproape toate microcontrolerele moderne au funcționalitate de programare în circuit. Ce înseamnă? Să presupunem că dispozitivul a fost lipit pe placă. Și pentru a-și schimba firmware-ul, acum nu trebuie să-l deslipiți, deoarece o astfel de intervenție poate deteriora microcontrolerul în sine. Este suficient să vă conectați la pinii corespunzători și să-l reprogramați prin ei.

Ce model ar trebui să alegi?

Ca parte a articolului, AtMega8 a fost revizuit. Acesta este un microcontroler destul de mediocru în ceea ce privește caracteristicile sale, care, totuși, este suficient pentru majoritatea meseriilor. Dacă doriți să creați ceva la scară largă, atunci puteți lua monștri originali precum Atmega128. Dar sunt concepute pentru dezvoltatori mai experimentați. Prin urmare, dacă nu există suficientă experiență, atunci este mai bine să începeți cu mici și dispozitive simple. În plus, sunt mult mai ieftine. De acord, un lucru este să blochezi accidental un microcontroler pentru o sută de ruble, dar cu totul altceva este să-l blochezi pentru o jumătate de mie. Este mai bine să intri în leagănul lucrurilor și să înțelegi diferitele aspecte ale operațiunii, astfel încât să nu pierzi sume semnificative în viitor. Inițial, puteți începe cu AtMega8 și apoi vă puteți concentra pe nevoile dvs.

Concluzie

Deci tema programării AVR a fost luată în considerare în termeni cei mai generali. Desigur, se pot spune multe altele. Deci, de exemplu, marcarea microcontrolerelor nu a fost luată în considerare. Și poate spune multe. Deci, microcontrolerele funcționează în general la o tensiune de 5V. În timp ce prezența, de exemplu, a literei L poate indica faptul că doar 2,7 V este suficient pentru ca dispozitivul să funcționeze, după cum puteți vedea, uneori cunoștințele despre marcaje pot juca un rol foarte important în ceea ce privește funcționarea corectă și durabilă a dispozitivelor. . Timpul de funcționare al microcontrolerelor este de asemenea subiect interesant. Fiecare dispozitiv este proiectat pentru anumită perioadă. Deci, unii pot lucra o mie de ore. Alții au o rezervă de garanție de 10.000!

Microcontrolerele cu un singur cip sunt utilizate pe scară largă într-o mare varietate de domenii: de la instrumente de măsură, camere și camere video, imprimante, scanere și copiatoare până la produse electronice de divertisment și tot felul de aparate 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 comenzi suplimentareîn 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 succesive. 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 probleme similareîn general, încetează să aibă vreo semnificație pentru dezvoltator, deoarece sunt rezolvate de compilator, care generează automat tot codul de asamblare lipsă.

În zorii microprocesoarelor, dezvoltarea software a avut loc exclusiv într-unul sau altul limbaj de asamblare, orientat către un 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 limbajul 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 de efectuarea aritmeticii şi operatii 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 microcontrolere î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 caracteristicile arhitecturii de memorie comune majorității microcontrolerelor, problemele de intrare/ieșire, manipularea întreruperilor, resetarea 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ă de la dispozitiv la dispozitiv.

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 lor de adrese depind de tip specific dispozitive.

În programele scrise în C, accesul direct la registrele de uz general nu este de obicei necesar, cu excepția cazului în care se folosește codul în 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 utilizate 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 portul 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 Registrul de date Port A
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 al temporizatorului/contorului T/C0
TCCR0 0x33 0x53 Registrul de control cronometru/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.

Familia AVR - include microcontrolere pe 8 biți pentru o gamă largă de sarcini. Pentru proiecte complexe cu o cantitate mare intrări/ieșiri, vi se oferă microcontrolerele AVR Mega și AVR xmega, care sunt disponibile în pachete de la 44 la 100 de pini și au până la 1024 kB de memorie Flash, iar viteza lor de operare este de până la 32 de milioane de operații pe secundă. Aproape toate modelele au capacitatea de a genera PWM, ADC și DAC încorporat.

Milioane de radioamatori dezvoltă proiecte interesante pe AVR - aceasta este cea mai populară familie de MK, multe cărți au fost scrise despre ei în rusă și în alte limbi ale lumii.

Interesant: pentru firmware aveți nevoie de un programator, unul dintre cele mai comune este AVRISP MKII, pe care îl puteți realiza cu ușurință din Arduino.

Popularitatea familiei AVR este susținută de nivel inalt de mulți ani, în ultimii 10 ani interesul pentru ele a fost alimentat Proiectul Arduino– o placă pentru intrarea ușoară în lumea electronicii digitale.

Este imposibil să descriem în mod clar domeniul de aplicare al microcontrolerului, deoarece este nelimitat, dar poate fi clasificat după cum urmează:

  1. Tiny AVR este cel mai simplu din punct de vedere tehnici. Au memorie mică și pini pentru conectarea semnalelor, iar prețul este pe măsură. Cu toate acestea, aceasta solutie perfecta pentru cele mai simple proiecte, de la controlul automat al iluminatului interior al mașinii până la sonde de osciloscop pentru reparații electronice de tip „do-it-yourself”. Ele sunt folosite și în proiectul compatibil cu Arduino – Digispark. Aceasta este cea mai mică versiune a unui Arduino terță parte; realizat în format de unitate flash USB.
  2. Familia MEGA a rămas mult timp principala printre radioamatorii avansați, sunt mai puternice și au o capacitate de memorie și un număr de pini mai mare decât în ​​Tiny. Acest lucru permite proiecte complexe, dar familia este prea largă pentru a fi descrisă pe scurt. Ei au fost cei care au fost folosiți în primul Placi Arduino, plăcile actuale sunt echipate în principal cu ATMEGA

Ieșirea oricărui MK fără amplificatoare suplimentare va trage LED-uri sau matrice LED ca indicatori, de exemplu.

AVR xMega sau microcontrolere mai vechi

Dezvoltatorii Atmel au creat AVR xMega ca un MK mai puternic, încă aparținând familiei AVR. Acest lucru a fost necesar pentru a ușura munca dezvoltatorului atunci când se mută într-o familie mai puternică.

AVR xMega are două direcții:

  • MK-urile cu o tensiune de alimentare de 1,8-2,7 volți funcționează cu o frecvență de până la 12 MHz, intrările lor sunt rezistente la o tensiune de 3,3 V;
  • MK-urile cu o tensiune de alimentare de 2,7-3,6 volți pot funcționa deja la mai mult frecvente inalte– până la 32 MHz, iar intrarea este rezistentă la 5 volți.

De asemenea, merită remarcat: AVR xMega funcționează excelent în sisteme autonome deoarece au un consum redus de energie. De exemplu: când cronometrele și ceasurile în timp real funcționează, RTC-urile consumă 2 mA de curent și sunt gata de funcționare din cauza întreruperilor externe sau a depășirilor temporizatorului, precum și din timp. O varietate de temporizatoare pe 16 biți sunt utilizate pentru a îndeplini o varietate de funcții.

Lucrează cu un port USB

Să începem cu faptul că pentru a programa microcontrolerul trebuie să îl utilizați port serial, cu toate acestea, pe computerele moderne un port COM lipsește adesea. Cum se conectează un microcontroler la un astfel de computer? Dacă utilizați convertoare USB-UART, această problemă poate fi rezolvată foarte ușor. Puteți asambla cel mai simplu convertor folosind microcircuite FT232 și CH340, iar diagrama acestuia este prezentată mai jos.

Un astfel de convertor este situat pe plăci Arduino UNOși Aduino Nano.

Unele microcontrolere AVR au USB (hardware) încorporat:

  • ATmega8U2;
  • ATmega16U2;
  • ATmega32U2.

Această soluție este folosită pentru a implementa comunicarea între un computer și Arduino mega2560 prin USB, în care microcontrolerul „înțelege” doar UART.

Scopul DAC și ADC al microcontrolerelor AVR

Convertoarele digital-analogic (DAC) sunt dispozitive care convertesc semnalele unu și zero (digitale) în analog (variabile ușor). Principalele caracteristici sunt adâncimea de biți și frecvența de eșantionare. Se convertește în ADC semnal analogîn formă digitală.

Sunt necesare porturi cu suport ADC pentru a conecta senzori analogici, de exemplu, de tip rezistiv, la microcontroler.

DAC-ul și-a găsit aplicația în filtrele digitale, unde trece semnalul de intrare procesare softwareși ieșire prin DAC în formă analogică, mai jos veți vedea oscilograme vizuale. Graficul de jos este semnalul de intrare, cel din mijloc este același semnal, dar procesat de un filtru analogic, iar cel de sus este filtru digital pe un microcontroler Tiny45. Este necesar un filtru pentru a forma intervalul de frecvență necesar al semnalului, precum și pentru a forma un semnal de o anumită formă.


Un exemplu de utilizare a unui ADC este un osciloscop pe un microcontroler. Din păcate, frecvențele operatori de telefonie mobilă iar procesorul PC-ului nu va putea fi urmărit, dar frecvențele de ordinul a 1 MHz sunt ușoare. Va fi un asistent excelent atunci când lucrați cu blocuri de puls nutriție.

Și aici se află video detaliat acest proiect, instrucțiuni de asamblare și sfaturi de la autor:

Ce literatură ar trebui să citesc despre microcontrolerele AVR pentru începători?

S-au scris munți de literatură pentru a forma tineri profesioniști, să ne uităm la câțiva dintre ei:

  1. Evstifeev A.V. „Microcontrolere AVR din familia Mega”. Cartea discută în detaliu arhitectura microcontrolerului. Este descris scopul tuturor registrelor și cronometrelor, precum și modurile lor de funcționare. Funcționarea interfețelor de comunicare cu lumea exterioară, SPI etc., a fost studiată. Sistemul de comandă este dezvăluit pentru înțelegere de către un radioamator de nivel mediu. Materialul din cartea „AVR Microcontrollers of the Mega Family: User Guide” vă va ajuta să studiați structura cipului și scopul fiecăruia dintre nodurile sale, ceea ce este cu siguranță important pentru orice programator de microcontrolere.
  2. Belov A.V. – „Microcontrolere AVR în practica radioamatorilor.” După cum sugerează și titlul, această carte este în mare parte dedicată latura practica lucrul cu microcontrolere. Microcontrolerul ATiny2313, devenit un clasic, este examinat în detaliu, precum și multe circuite pentru asamblare.
  3. Hartov V.Ya. „Microcontrolere AVR. Atelier pentru începători.” Vă va ajuta să înțelegeți AVR studio 4, precum și trusa de pornire STK Veți învăța să lucrați cu interfețe seriale și paralele precum UART, I2C și SPI. Cartea „Microcontrolere AVR. Atelier pentru începători” scris de un profesor la MSTU. N.E Bauman și este folosit acolo pentru a studia acest subiect.

Studierea acestei familii de microcontrolere i-a ajutat pe mulți pasionați de electronică să înceapă să lucreze și să dezvolte proiecte. Merită să începeți cu o familie populară pentru a avea întotdeauna acces la o mare de informații.

Printre radioamatorii nivel de intrare Există un singur concurent pentru microcontrolerele AVR - PIC.

Cel mai bun cursuri de programare– IT College DevEducation