Procedura de programare a microcontrolerelor avr. Programarea microcontrolerelor AVR este primul pas. De ce aveți nevoie pentru a începe să învățați microcontrolere

Acest capitol va analiza o caracteristică atât de interesantă a AVR-ului precum auto-programarea (disponibilă în multe modele ATtiny și în toate modelele ATmega). Esența sa constă în capacitatea de a schimba conținutul memoriei FLASH direct din programul utilizatorului. Microcontrolerele Atmel au fost printre primele din lume care au prezentat această inovație. Secțiunea oferă un exemplu de bootloader care utilizează interfața hardware USART și un program de control la nivel înalt în Delphi.

Zona de aplicare

Ce beneficii oferă capacitatea de auto-programare? La început poate părea că această caracteristică oferă AVR-ului aceleași avantaje pe care, de exemplu, le are orice procesor cu arhitectura Princeton. Aceasta este, în primul rând, capacitatea de a-și schimba propriii algoritmi de operare și, în al doilea rând, capacitatea de a depana aplicația fără a recurge la hardware suplimentar. Dar, în practică, resursele unui microcontroler pe 8 biți sunt complet insuficiente pentru a construi sisteme inteligente de „auto-învățare”. În ceea ce privește depanarea, însăși structura memoriei FLASH de aici anulează toate avantajele autoprogramării (AVR nu are capacitatea de a plasa coduri de program în memoria SRAM rapidă). În plus, rescrierea din mers a unei secțiuni de cod de lucru, care anterior se făcea doar cu ajutorul programatorilor, este o afacere destul de riscantă. Orice inexactitate aici va duce imediat la eșec. Și chiar și prezența unității hardware în sine, care este responsabilă pentru schimbarea „firmware-ului”, poate reduce fiabilitatea dispozitivului. Dacă un program de aplicație poate schimba memoria FLASH, acest lucru se poate întâmpla și involuntar, ca urmare a unei erori.

Cu toate acestea, de-a lungul timpului s-a dovedit că totul nu a fost atât de rău. Auto-programarea vă permite să utilizați cu succes memoria FLASH ca alternativă la EEPROM. Durata de viață a FLASH, produsă folosind tehnologia modernă, este de ≈10.000 de cicluri de ștergere/scriere. Această cifră, deși cu un ordin de mărime mai mică decât cea a EEPROM, este încă foarte mare. Datorită acesteia, în memoria FLASH pot fi stocate tabele, liste, factori de corecție, precum și orice alte informații care necesită actualizare periodică, nu prea frecventă.

Dar, probabil, cel mai important avantaj al autoprogramării este capacitatea de a crea aproape orice interfață pentru actualizarea software-ului. Computer COM și USB sunt de cea mai mare importanță practică. Ultimul dintre ele într-o formă simplificată poate fi implementat în software. Procesul de programare pe partea AVR trebuie controlat de un program special de încărcare de pornire. Multe microcontrolere moderne (precum și noile modele AVR) vin cu un bootloader cablat din fabrică, ceea ce face posibilă utilizarea programatoarelor foarte simple, cu doar o ușoară pierdere a vitezei de programare.

Treci la următoarea parte:

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 multe alte dispozitive tehnice. Utilizarea lor pe scară largă se datorează capacității de a înlocui circuite de dispozitiv analogice mai complexe și la scară largă. Programarea AVR MK permite controlul autonom al dispozitivelor electronice. Aceste microcontrolere pot fi considerate ca un simplu computer 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, similar cu un computer personal. Dacă stăpânești de la zero programarea AVR și ajungi la nivel profesional, vei avea posibilități aproape nelimitate de a controla diverse dispozitive folosind porturile I/O, precum și de 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. Siguranța vehiculelor și sistemele de management al motorului.
  6. Echipament industrial. Sisteme de control al mașinii.

Acest lucru, desigur, nu acoperă toate domeniile. Ele sunt utilizate acolo unde este avantajos să se folosească nu un set de cipuri de control, ci un singur 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

Cunoscutul Arduino va fi ales ca exemplu. Aceasta este, de asemenea, o platformă convenabilă pentru dezvoltarea rapidă și de înaltă calitate a diferitelor dispozitive electronice. Placa Arduino include un set specific de componente pentru funcționare (există diverse configurații). 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 adânc î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. Singurele dezavantaje care pot fi remarcate sunt dificultatea auto-asamblarii atunci când este efectuată pentru prima dată și lipsa cunoștințelor și abilităților 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 disponibile pentru programarea AVR-urilor, acest software va putea face față tuturor cerințelor. Este necesar și un programator. Îl puteți cumpăra de la magazinul local, îl puteți comanda online sau îl puteți asambla singur. Nici o placă de circuit imprimat nu ar strica. 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 vei putea 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 vă veți putea descurca singur cu cărțile, dar puteți obține cunoștințe de bază despre dispozitiv, programare în „SI”, „Assembler” ș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 lua în considerare în detaliu schema de funcționare a acesteia, ci ne vom face doar o idee generală despre aceasta. Să luăm în considerare implementarea software-ului. 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. La nivel fizic, ele 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 acesta se vor putea citi date care provin de la 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 câțiva producători mari, precum și printre numeroși imitatori chinezi și dispozitive de casă. În multe privințe, ele 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. Însă recomandăm totuși să începeți călătoria cu AVR datorită structurii sale competente, ușurinței pentru dezvoltatori și prezenței unui număr mare de materiale suport, motiv pentru care 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 fie din cauza unei erori în codul programului, fie din cauza unor probleme în codul în sine. 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. Acum aproape toate microcontrolerele moderne au o funcție 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 aveți suficientă experiență, este mai bine să începeți cu dispozitive mici și 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ă intrați în leagănul lucrurilor și să înțelegeți diferitele aspecte ale operațiunii, astfel încât să nu pierdeți 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, un subiect interesant. Fiecare dispozitiv este proiectat pentru o anumită perioadă. Deci, unii pot lucra o mie de ore. Alții au o rezervă de garanție de 10.000!

programele și datele sunt separate (spre deosebire de arhitectura clasică
von Neumann în computerele obișnuite unde memoria este partajată). Anvelope separate pentru
aceste zone de memorie accelerează semnificativ execuția programului: date și
echipele pot fi selectate simultan.

32 registre de uz general (RON). Atmel a fost prima companie, de departe
plecat de la modelul clasic al nucleului de calcul, în care
transmisia comenzii asigură schimbul de date între ALU și stocare
celule din memoria partajată. Introducerea leului în astfel de cantități (rețineți că în
arhitectură X 86 există doar patru astfel de registre, iar în X 51 conceptul de lei, ca atare,
absent) în unele cazuri face posibilă abandonarea completă a locației globalului
minge și variabile locale în RAM și din utilizarea stivei, operațiuni cu
care complică și aglomera programul. Ca urmare, structura ac-
Un exemplu de program este mai aproape de programele din limbaje de nivel înalt.
Adevărat, acest lucru a dus la unele complicații ale sistemului de comandă, nomenclatura
dintre care există mai multe pentru AVR decât în ​​alte familii RISC (deși un semnificativ
unele instrucțiuni sunt aliasuri).

Memoria programului flash(10.000 de cicluri de ștergere/scriere) cu capacitatea
reprogramare în sistem și descărcare prin serial
canal direct în circuitul finit. Despre avantajele acestei abordări, care a devenit acum
general acceptată, descrisă în detaliu în administrate.

Zonă separată de memorie nevolatilă(EEPROM, 100.000 de cicluri
ștergere/scriere) pentru stocarea datelor, cu posibilitatea de a scrie prin software
prin, sau descărcare externă prin interfața SPI.

Procesare de semnal analogică încorporată: analogic
comparator și ADC multicanal pe 10 biți.

Cronometru pentru câine de pază, permițând repornirea automată
controler la anumite intervale (de exemplu, pentru a ieși
"modul de somn).

Interfețe seriale SPI, TWI (eu

C) Și UART (USART), Permit-

capabil să comunice cu majoritatea senzorilor standard și
alte dispozitive externe (inclusiv computere personale)
hardware.

Cronometre-contoare cu presetare și capacitatea de a selecta sursa de numărare -
impulsuri finale: de obicei unul sau două de 8 biți și cel puțin unul
16 biți, inclusiv cei care pot funcționa în multi-canal 8-, 9-,
Modulație de lățime a impulsurilor pe 10, 16 biți (PWM).

Abilitatea de a opera la viteza ceasului de la 0 Hz la 16–20 MHz.

Gama de tensiune de alimentare de la 2,7 la 5,5 V(în unele cazuri de la 1.8 sau
până la 6,0 V).

numeroși moduri de economisire a energiei, care diferă în numărul de noduri,
ramanand conectat. Ieșirea din modurile „sleep” folosind watchdog
temporizator sau întreruperi externe.

Monitor de putere încorporat- detector de cădere de tensiune (Brown-out
Detectare).

Nu toate caracteristicile caracteristice diferitelor modele sunt enumerate aici.
AVR. Vom cunoaște pe alții în viitor, precum și în practică.
Să ne uităm la cele de mai sus mai detaliat. Dar mai întâi să facem o descriere generală
diverse familii AVR în ceea ce privește scopul lor principal.

Familiile AVR

În 2002, Atmel a început să lanseze noi subfamilii de MK-uri pe 8 biți bazate pe
Miezuri AVR. De atunci, toți membrii membri ai acestei familii sunt împărțiți în trei grupuri (subfamilie
va): Clasic, Tiny și Mega. MK din familia Classic (AT90S xxxx) nu mai sunt produse;
Cel care a stat cel mai mult în producție a fost unul de mare succes (simplu, compact și
model de mare viteză) AT90S2313, dar a fost înlocuit și în 2005 de
ATtiny2313. Toate AVR-urile „clasice” cu primele numere 2 și 8 în nume
modelele (ceea ce înseamnă cantitatea de memorie de program în kiloocteți) au analogi în
familiile Tiny și Mega. Pentru Mega, în timpul programării este posibil să se instaleze special
Bit de compatibilitate cial, care permite utilizarea fără modificări
utilizați programe create pentru familia Classic. Prin urmare, o serie de exemple în
Pentru a simplifica prezentarea, această carte este prezentată într-o versiune pentru familie
Clasic.
Exemple de diferite tipuri de cazuri în care sunt produse cipuri AVR,
sunt prezentate în Fig. 1.1. Mai multe informații despre acest subiect pot fi găsite în
Anexa 1(Tabelul A1.2), precum și în documentația tehnică a aparatelor.
Rețineți că pentru nevoile radioamatorilor și pentru prototipuri, este cel mai convenabil să utilizați micro-
circuite în pachete PDIP, dar nu toate modelele MK sunt produse în astfel de pachete.
Toate familiile pot avea două modificări: litera „L” din denumire spune
despre domeniul extins de putere 2,7–5,5 V, absența unei astfel de litere înseamnă
interval de putere 4,5–5,5 V. Când alegeți un anumit tip de microcircuit, trebuie să fiți
Atenție, deoarece versiunile L au, de asemenea, o acțiune mai puțin rapidă,
Cele mai multe dintre ele au o viteză maximă de ceas de 8 MHz.
Pentru versiunile „obișnuite” frecvența maximă este de 16 sau 20 MHz. Deși, cum
De regulă, la pornirea cipurilor L cu o tensiune de alimentare de 5 V la frecvențe de până la 10–
Probleme de 12 MHz nu ar trebui să fie de așteptat (similar cu versiunea fără litera L, destul
poate funcționa la o tensiune de alimentare de aproximativ 3 V, desigur, nu la extrem
valorile frecvenței), totuși, atunci când proiectați dispozitive extrem de fiabile
companiile ar trebui să țină cont de această cerință.
Cipurile mici au Flash ROM de programe cu o capacitate de 1–8 kbytes și sunt localizate în
în principal în pachete cu 8–20 de pini (cu excepția ATtiny28), adică sunt destinate în general
sunt destinate dispozitivelor mai simple și mai ieftine. Asta nu înseamnă că sunt posibile -
Proprietățile sunt în toate cazurile mai limitate decât cele ale familiei Mega. De exemplu,
La sub 2 USD, ATtiny26 conține un temporizator PWM de mare viteză
mod (alte modele nu au acest lucru), precum și un ADC cu 11 canale cu posibilitate
Posibilitate de functionare in regim diferential, cu amplificator de intrare reglabil

Partea I. Principii generale de proiectare și funcționare a Atmel AVR

și o sursă de tensiune de referință încorporată, care este tipică pentru putere mare
acțiune. Cipul ATtiny2313, așa cum am menționat deja, este îmbunătățit
noua versiune a unuia dintre cele mai versatile și convenabile AVR-uri „clasice”.
AT90S2313.

Orez. 1.1. Exemple de diferite tipuri de carcase pentru MCU-uri AVR

Subfamilia Mega este echipată cu Flash ROM de programe cu o capacitate de 8–256 KB și o carcasă
ei înșiși cu 28–100 de ace. În general, deputații din acest grup sunt mai sofisticați decât
Minuscule, au un sistem mai extins de dispozitive încorporate cu mai avansate
funcţionalitate.
Tabele cu principalele caracteristici ale unor modele Tiny și Mega din rând
cele mai populare sunt enumerate în Anexa 1. Acolo sunt date și câteva tehnici generale.
caracteristicile tehnice ale familiei AVR. Informații mai detaliate pot fi obținute de la
din și documentația tehnică proprietară, care este disponibilă pe site
Atmel pentru fiecare model.
Pe lângă aceste trei familii, sunt produse și altele specializate pe baza nucleului AVR
microcircuite pentru lucrul cu o interfață USB (AT90USB xxxx), in-
Interfață CAN (AT90CAN xxx), pentru controlul afișajelor LCD (ATmega329, etc.),
cu interfață wireless IEEE 802.15.4 (ZigBee) pentru comerț și
unele altele. Recent, unele microcontrolere de la Tiny și
Mega a început să fie produs în versiuni cu consum ultra-scăzut (tehnologie
picoPower cu o tensiune de alimentare de 1,8 V, la sfârșitul numelui MK din această serie
litera „P” adăugată) și temperatură ridicată pentru uz auto
industrie (versiuni pentru automobile). Familia XMega a apărut cu tensiune
alimentare 1,8–3,6 V, viteză crescută (frecvență de ceas până la 32 MHz),

Capitolul 1. Prezentare generală a microcontrolerelor Atmel AVR

ADC pe 12 biți, 16 canale și DAC cu 2-4 canale (încă în structură
AVR lipseau), mai multe canale UART și alte seriale
porturi (și cu capacitatea de a lucra în modul offline, atunci când este oprit
kernel), suport de criptare încorporat, mod avansat
picoPower si alte clopote si fluiere. Există, de asemenea, o familie separată de 32 de ori
MK AVR32 în linie, conceput pentru aplicații de mare viteză, cum ar fi
precum procesarea fluxului video sau recunoașterea imaginilor în timp real.

Particularități
utilizarea practică a MK AVR

Când utilizați AVR, apar o serie de probleme practice, ignorând
corectarea cărora poate duce uneori la inoperabilitatea sau defectarea dispozitivului.
roiuri (și în unele cazuri - chiar și imposibilitatea programării lui).
De exemplu, una dintre aceste probleme este posibilitatea de a pierde conținutul EEPROM
la oprirea alimentării. Vom analiza aceasta și probleme similare în detaliu în
capitole relevante. Aici ne vom opri asupra unor probleme generale
pornirea AVR MK.

Despre consum

MCU-urile AVR consumă în medie 5–15 mA (excluzând consumul dispozitivelor externe).
roy prin concluziile MK). Consumul curent depinde nu numai de gradul de „navo-
„termenul” modelului, dar și pe frecvența ceasului și tensiunea de alimentare.În Fig. 1.2
prezintă o diagramă tipică a dependenței consumului de curent de tensiunea de alimentare
frecvența ceasului pentru modelele mai tinere din familia Mega.
Din fig. 1.2, în special, rezultă că consumul poate fi redus semnificativ cu
reducerea frecvenței ceasului în cazurile în care timpul de execuție a programului nu este
critic. Acest lucru vă permite să simplificați programul prin eliminarea modurilor de energie
economii: de exemplu, la instalarea unui cuarț „ceas” de 32.768 Hz ca un
consumul de MK tirant poate fi de ordinul 200–300 μA.

Z

NOTE PE MARGE

O valoare a consumului de curent de 1–2 mA sau mai puțin poate fi considerată condiționat acceptabilă pentru
dispozitive cu baterii care sunt proiectate pentru funcționare continuă pe termen lung
muncă. Elementele de dimensiune AA (tip alcalin, adică alcaline) au o capacitate de
încărcând aproximativ 2000 mAh, adică un dispozitiv cu consumul specificat din aceste elemente
funcționează cel puțin 1000 de ore (de fapt chiar puțin mai mult) sau mai mult de 40 de zile. Timp
funcționarea cu baterii de dimensiune D cu o capacitate de energie de aproximativ 15–18.000 mAh
durează aproximativ un an, ceea ce este suficient pentru majoritatea aplicațiilor practice.
Alegeți să alimentați astfel de dispozitive (în special cele care pornesc periodic)
pentru o perioadă scurtă de timp) sunt elementele alcaline care ar trebui folosite, deoarece au grozave
capacitate, nu se scurg atunci când sunt supradescărcate și, cel mai important, au o durată de viață semnificativ mai lungă
depozitare (aproximativ 7 ani) comparativ cu alte tipuri de elemente.

Dar o analiză atentă a problemei arată că tocmai aceasta simplifică
program - în marea majoritate a cazurilor, beneficiile sunt mai multe

Partea I. Principii generale de proiectare și funcționare a Atmel AVR

viteză scăzută a ceasului și sunt limitate. Graficele din fig. 1.2 sunt liniare, deci
rezultă că proporţional cu scăderea frecvenţei de ceas, timpul de execuţie creşte
comenzi. Astfel, o procedură a cărei execuție la o frecvență de ceas
4 MHz va dura 100 µs, la o viteză de ceas de 32.768 Hz va dura mai mult de 12 ms.
Este ușor de calculat că în ambele cazuri cantitatea de energie consumată per
efectuarea acestei proceduri va fi aceeași.

Orez. 1.2. Diagrama consumului de curent în funcție de tensiunea de alimentare

și frecvența ceasului pentru modelele mai tinere din familia Mega

Prin urmare, putem trage următoarea concluzie generală: dacă nu doriți să aprofundați
subtilități ale modurilor de economisire a energiei și nu le implementați în program, apoi pentru general
Pentru a reduce consumul, trebuie să alegeți o frecvență de ceas cât mai mică posibil (la
În practică, este de obicei suficient să se limiteze valoarea la 1 MHz, deoarece mai departe
reducerea cel mai probabil nu va avea efect din cauza consumului suplimentar de extern
aceste circuite, prezente inevitabil în toate circuitele). Dacă aveți un avertisment
Ne-am uitat la unul dintre modurile „profunde” de economisire a energiei (vezi. capitolul 4), apoi ceasul
Frecvența din punct de vedere al consumului total este practic irelevantă.
Un alt lucru este alegerea tensiunii de alimentare, pe care este indicat să o faceți cât mai mult posibil
mai puțin dacă dispozitivele externe permit acest lucru. Dependenţa consumului de curent de
tensiunea de alimentare, așa cum poate fi ușor de înțeles din graficele din Fig. 1.2, neliniar: cu creștere
Pe măsură ce tensiunea crește, consumul de curent crește rapid. Prin urmare, reduceți
tensiunea de alimentare chiar și ținând cont de limitarea frecvenței de ceas pentru majoritatea
Modelele VA AVR (nu mai mult de 8 MHz cu o sursă de 2,7 V) sunt încă profitabile. De exemplu,
dispozitiv cu alimentare de 3 V la o frecvență de ceas de 8 MHz, conform Fig. 1.2, va fi
consumă aproximativ 3 mA sau, în ceea ce privește unitățile de putere, 9 mW; pentru procedura-

Capitolul 1. Prezentare generală a microcontrolerelor Atmel AVR

ru cu o durată de 100 μs va necesita o energie de 0,9 μJ. La o frecvență de 16 MHz, același pro-
Procedura va dura 50 µs, dar consumul la tensiunea de alimentare necesară de 5 V
va fi de aproximativ 14 mA, adică 70 mW; în total va fi nevoie de energie pentru a finaliza procedura
3,5 µJ, de aproape 4 ori mai mult.
Pentru toate dispozitivele digitale externe, cu foarte puține excepții, puteți
obțineți un analog modern proiectat să funcționeze la tensiuni de 2,7–
3,0 V (și chiar mai mic dacă modelul de controler o permite), deci pe această parte
fara restrictii; pe care se concentrează majoritatea exemplelor din această carte
Tensiunea de alimentare este de 5 V, există doar un tribut adus tradiției. Mai mult, aceste exemple sunt ca
De regulă, ele implică alimentarea cu energie din rețea, unde consumul nu este foarte semnificativ.
lecturi. Indicatoarele LED pot limita scăderea tensiunii de alimentare
tori (datorită faptului că scăderea de tensiune continuă pe LED-uri în sine este
este de aproximativ 2 V, iar pentru indicatoare mari chiar 5 V pentru a controla sub-
exact), dar în astfel de dispozitive consumul controlerului nu mai joacă un rol important
roluri: patru cifre cu șapte segmente vor consuma în sine un curent de ordinul lui
100 mA sau mai mult. Un alt caz este reprezentat de circuitele analogice, unde crește
tensiunea de alimentare este benefică din punctul de vedere al creșterii raportului semnal-zgomot.
Rețineți că pinii AVR pot produce semnificativ pe termen lung
curent (până la 20-40 mA), dar nu uitați de limitarea totală generală
pentru consumul de putere de ieșire (vezi . masa P1.3). De asemenea, trebuie remarcat faptul că
atunci când se aplică tensiuni analogice la intrările ADC, CMOS-ul digital de intrare
elementul (intrarea portului corespunzător) nu este dezactivat și cu valoarea acestuia
tensiune aproape de pragul de răspuns al elementului, aceasta poate duce la creșterea
consum datorat fluxului de curent prin treptele de ieșire
CMOS (inclusiv uneori când microcircuitul este în modul de repaus,
cm. capitolul 14). Microcircuitele cu tehnologie picoPower nu au acest dezavantaj.

Unele caracteristici ale utilizării AVR în circuite

Majoritatea pinii MK au un plug-in „pull-up” încorporat
(adică conectat la magistrala de alimentare) rezistență, care ar părea să rezolve una dintre
probleme comune de circuit atunci când este necesară prezența unui astfel de rezistor
pentru conectarea butoanelor cu doi pini sau ieșirilor „colector deschis”.
Cu toate acestea, în cazuri critice, un rezistor extern cu o rezistență de 2–
5 kOhm (în cazuri critice de consum până la 10–30 kOhm).
Rezistorul de tragere ar trebui instalat nu numai la pinul /RESET
(care va fi discutat în capitolul 2), dar și în cazul în care pinii SCK, MOSI și MISO
porturile corespunzătoare sunt utilizate pentru programare și sunt conectate la
Conector de programare ISP (vezi capitolul 5), precum și de la ieșirile întreruperilor externe
vaniya, dacă sunt implicați. Dacă aceste concluzii nu sunt „trase” la tensiune
alimentare cu rezistențe suplimentare (deși acest lucru nu este specificat în tehnica
documentație), atunci declanșarea falsă a întreruperilor externe nu poate fi exclusă,
repornirea sistemului și cu interferențe foarte puternice - chiar și deteriorarea programului din memorie -
aceste programe. Pe de altă parte, la programare, ieșirile servesc și ca

Partea I. Principii generale de proiectare și funcționare a Atmel AVR

Cele mai multe dintre porturile obișnuite sunt configurate pentru ieșire, iar dispozitivul le utilizează
moduri de economisire a energiei, prezența rezistențelor „pull-up” poate duce la
la consumul de curent inutil (când setați ieșirea la zero logic prin rezistor
partea, curentul va curge de la sursa de alimentare la intrarea MK). Dacă unul dintre re-
moduri de economisire a energiei, trebuie să analizați cu atenție circuitul pentru a utiliza
includ situații în care curentul trece prin aceste rezistențe.
De asemenea, ar trebui să instalați întotdeauna rezistențe externe atunci când utilizați pinii MK
magistrală comună, ca în interfața I

C (sau pur și simplu conectând intrarea MK la

ieșirea unui alt dispozitiv cu colector deschis, cum ar fi monitoare de alimentare
evoluții descrise în capitolul 3), la conectarea la butoane cu doi pini (în special
dacă există o întrerupere externă, vezi capitolul 4Și 5 ). Rezistenta incorporata
rezistor (de fapt, desigur, un tranzistor cu efect de câmp)
în astfel de cazuri este prea mare pentru interferența electromagnetică („on-
vodcă") ei efectiv "s-au așezat" pe ea.
Cipurile AVR, ca orice logică CMOS, datorită pragului lor ridicat
legăturile sunt protejate eficient de interferența magistralei de masă. Oricum se comportă
mult mai rău cu interferența pe magistrala de alimentare. Prin urmare, nu uitați de dezlegare
condensatoare de putere, care trebuie instalate direct la pinii sursei de alimentare
tania (ceramică 0,1–0,5 μF), precum și despre calitatea redresoarelor de rețea și
stabilizatori.

C H A P T E R

Dispozitiv general
organizarea memoriei,
ceas, resetare

Structura generală a structurii interne a AVR MK este prezentată în Fig. 2.1. In acest
diagrama prezintă toate componentele principale ale AVR (cu excepția modulului JTAG);
la unele modele, unele componente pot lipsi sau diferite -
caracteristici, doar procesorul comun de 8 biți rămâne neschimbat
nucleu nou (GPU, Unitate generală de procesare). Să descriem pe scurt cele mai importante componente
nente, dintre care majoritatea le vom analiza în detaliu mai târziu.
Să începem cu memoria. Există trei tipuri de memorie în structura AVR: flash-
memorie de program, RAM (SRAM) pentru date temporare și memorie nevolatilă
memorie (EEPROM) pentru stocarea pe termen lung a constantelor și datelor. Să ne uităm la ele
separat.

Memoria programului

Volumul memoriei flash încorporate a programelor din controlerele AVR variază de la
1 KB pentru ATtiny11 până la 256 KB pentru ATmega2560. Primul număr din nume poate-
Împărțirea corespunde valorii acestei memorii din seria: 1, 2, 4, 8, 16, 32, 64, 128 și
256 kbytes. Memoria programului, ca orice altă memorie flash, are o pagină
organizare (dimensiunea paginii, în funcție de model, variază de la 64 la
256 de octeți). Pagina poate fi programată numai ca întreg. Numărul de cicluri
reprogramarea ajunge la 10 mii.
Din punctul de vedere al unui programator, memoria programului poate fi considerată construită din
celule separate - cuvinte a câte doi octeți fiecare. Dispozitivul de memorie a programului (și numai
această memorie) prin cuvinte pe două octeți - un punct foarte important care trebuie să fie
apucați cu fermitate. Această organizare se datorează faptului că orice echipă din AVR
are exact doi octeți. Excepția sunt echipele

si ceva

alții (de exemplu,

), care funcționează cu 16 biți și mai mult

adrese, lungimea acestor comenzi este de patru octeți și sunt utilizate numai
în modelele cu memorie de program mai mare de 8 kbytes (pentru mai multe detalii, vezi capitolul 5). În
În toate celelalte cazuri, contorul de comenzi este deplasat atunci când este executat următorul.

Partea I. Principii generale de proiectare și funcționare a Atmel AVR

comenzile în doi octeți (un cuvânt), astfel încât capacitatea de memorie necesară este ușoară
numără, cunoscând numărul de comenzi folosite. Adrese absolute în memorie
grame (indicate, de exemplu, în tabelele de vectori de întrerupere în tehnică
descrierea MK) sunt, de asemenea, numărate în cuvinte.

Orez. 2.1. Schema bloc generală a microcontrolerelor AVR

Z

NOTE PE MARGE

Să dăm un exemplu de caz interesant de adresare care reprezintă
comandă pentru citirea constantelor din memoria LPM (precum și ELPM în MK cu memorie de program
128

kbytes sau mai mult). Această comandă implică citirea din octet adresa indicata -

nomu în cei mai mari doi RON (formând așa-numitul registru Z, vezi mai jos). Cu toate acestea, pentru a nu
încalcă „puritatea” conceptului de organizare a memoriei programului, potrivit dezvoltatorilor
a încurcat această întrebare simplă indicând în descriere că la apelarea comenzii LPM, vechea
Următorii 15 biți ai adresei registrului Z cuvântîn memorie, iar cifra cea mai puțin semnificativă selectează
octet mic sau înalt (dacă bitul este egal cu 0 sau, respectiv, 1) din acesta

cuvinte. Este ușor, totuși, de observat că organizarea de octeți și cuvinte a memoriei când
abordarea com sunt echivalente.

Ultima adresă a memoriei programului existent pentru un anumit model
notată printr-o constantă

În mod implicit, toate controlerele AVR sunt întotdeauna

începe execuția programului la adresa $0000. Dacă nu există nicio întrerupere în program
ny, atunci programul de aplicație poate porni de la această adresă. In caz contrar

ceaiul la această adresă este așa-numitul. masa vectori de întrerupere, Detalii
despre care vom vorbi în capitolele 4Și 5 . Aici subliniem doar că primul
acest tabel (la aceeași adresă $0000) conține întotdeauna un vector de resetare

care indică procedura efectuată la resetarea MK (inclusiv
la pornirea alimentării).

P

NOTĂ

În asamblatorul AVR puteți reprezenta numere hexazecimale în „Pascal”
stil, precedat de un semn $, în timp ce stilul limbajului C (0x00) este valabil și el, dar
Metoda „Intel” (00h) nu funcționează. Citiți mai multe despre denumirile diferitelor numere
Sistemele numerice din asamblatorul AVR, vezi capitolul 5.

Ultimele adrese de memorie de program ale controlerelor din familia Mega pot conține
minciuna asa zisa încărcător- un program special care gestionează încărcarea și
descărcarea programelor de aplicație din memoria principală. În acest caz,
locația vectorului de resetare și a întregului tabel de vectori de întrerupere (adică, de fapt,
adresa de pornire de la care începe execuția programului) poate fi schimbată
nu este posibil prin instalarea celulelor de configurare speciale (vezi. capitolul 5).

Memorie de date (RAM, SRAM)

Spre deosebire de memoria programului, spațiul de adrese din memoria de date este adresat
octet cu octet (nu cuvânt cu cuvânt). Adresarea este complet liniară, fără nicio diviziune
în pagini, segmente sau borcane, așa cum este obișnuit în alte sisteme.
Deputați juniori din familia Tiny (inclusiv Tiny1 Xși Tiny28) memorie de date, cum ar fi
urlă, nu, limitându-se doar la fișierul de registru (RON) și registrele de intrare
da-ieșire (RVV). În alte modele, cantitatea de SRAM încorporată variază de la
128 de octeți în membrii familiei Tiny (de exemplu, ATtiny2313) până la 4–8 kbytes
pentru modelele Mega mai vechi.
Spațiul de adrese al memoriei de date statice (SRAM) este împărțit în mod convențional în
mai multe zone prezentate în fig. 2.2. Partea din
legate de SRAM-ul încorporat în sine, înainte ca acesta să fie localizat în ordinea adreselor
dar spațiul de adresă al registrelor (primii 32 de octeți sunt ocupați de RON, alți 64 -
RVV). Pentru modelele Mega mai vechi cu o structură complexă (de exemplu, ATmega128)
64 de registre I/O ar putea să nu fie suficiente, deci pentru suplimentare
RVV-urilor suplimentare li se alocă un spațiu de adrese separat (de la 60 USD la max.
valoarea maximă posibilă $FF în adresare octet, un total de astfel de registre poate
poate doar 160).

Z

NOTE PE MARGE

În arhitectura AVR MK, conceptul de „input-output” este folosit în două sensuri: în primul rând

În primul rând, există „porturi de intrare/ieșire” (porturi I/O), pe care le vom analiza capitolul 3.
În al doilea rând, „registrele de intrare-ieșire” (IO) din structura AVR sunt registrele
care oferă acces la componente suplimentare externe

conexiunea la GPU, cu excepția RAM (inclusiv porturile I/O). Un astfel de sub-
separarea aduce structura AVR MK mai aproape de configurația familiară a unui personal
computer, unde acces la orice extern la procesorul central
alte componente decât memoria sunt accesate prin porturile I/O.

Partea I. Principii generale de proiectare și funcționare a Atmel AVR

Pentru unele modele Mega (ATmega8515, ATmega162, ATmega128, ATmega2560
etc.) este posibilă conectarea memoriei externe până la
64 kB, care poate fi orice static
varietate (SRAM, Flash sau EEPROM) cu pa-
interfata paralela.
Rețineți că adresele RON și RVV nu iau din
spațiul RAM de date (cu excepția memoriei conectate
memorie externă așteptată pentru modelele Mega mai vechi,
a cărui adresă maximă este limitată de valoare
$FFFF): deci, dacă un anumit model MK are
512 octeți de SRAM și spațiul de înregistrare este ocupat de
primii 96 de octeți (până la adresa 60 USD), apoi adresele SRAM
va ocupa spațiu de adresă de la $0060 la $025F
(adică de la celula 96 până la celula 607 inclusiv). Sfârşit
memoria de date încorporată este indicată printr-o constantă

Orez. 2.2. Spațiu de adrese

memorie statică de date (SRAM)

Microcontrolere AVR

Operațiile de citire/scriere în memorie funcționează la fel cu orice adrese din
spatiu contondent, iar cand lucrezi cu SRAM trebuie sa fii atent: in loc de
scriind în memorie, puteți „intra” cu ușurință într-un registru. De exemplu,
comanda de încărcare a valorii de înregistrare

la registru

) este echivalent

scrie pe SRAM la adresa zero (

). Adresă în memorie pentru RON sov-

cade cu numarul lui. Totodată, pentru intrarea directă în RVV conform lui
adresa din memorie ar trebui adăugată $20 la numărul de registru: astfel, registrul de steag

care pentru majoritatea modelelor se află la capătul mesei RVV la
$3F, are adresa $5F în memorie. Instalați RON și RVV prin adresare directă a paginilor
Este incomod de reținut: o astfel de înregistrare durează întotdeauna două bare în loc de una, de obicei
alegeți majoritatea celorlalte comenzi, deși uneori acest lucru poate ocoli restricțiile
pentru a manipula unele RVV-uri. Dar dacă există un program gata făcut, lucrez -
cu SRAM, atunci când înlocuiți modelele de procesoare cu altele mai vechi trebuie să fiți
atenție datorită faptului că adresele SRAM scăzute din ele se pot suprapune
RVV suplimentar.

Capitolul 2. Structura generală, organizarea memoriei, tactarea, resetarea

Memorie de date nevolatilă (EEPROM)

Toate modelele AVR MK (cu excepția ATtiny11 întreruptă) au încorporat
EEPROM pentru stocarea constantelor și a datelor atunci când alimentarea este oprită.
În diferite modele, volumul său variază de la 64 de octeți (ATtiny1x) la 4 kbyți (mai mare
Mega modele). Sfârșitul EEPROM-ului este indicat printr-o constantă

(aceasta denotă

Acest lucru este introdus numai pentru modelele AVR ulterioare, prin urmare atunci când se utilizează
uneori va trebui să determinați singuri această constantă). Numărul de cicluri de repornire
Programarea EEPROM poate ajunge la 100 de mii.
Să ne amintim că EEPROM diferă de Flash prin posibilitatea de pro-
programare octet cu octet (în principiu, chiar și bit cu bit, dar această metodă nu este disponibilă
utilizator). Cu toate acestea, în modelele mai vechi ale familiei EEPROM, cum ar fi memoria flash
programe, are o organizare a paginii, cu toate acestea, aceste pagini sunt mici - până la
4 octeți fiecare. În practică, ca la programarea EEPROM în serie
canalul corpului (adică prin interfața de programare SPI) și la înregistrare și
atunci când citiți EEPROM dintr-un program, această caracteristică nu contează și accesul este
este afișat octet cu octet.
Citirea din EEPROM se realizează în cadrul unui ciclu de mașină (deși
În practică, se întinde pe patru cicluri, dar programatorul trebuie să țină evidența acestui lucru.
nu este necesar). Dar scrierea pe EEPROM este mult mai lentă,
și, în plus, la o viteză precis nedefinită: un ciclu de scriere de un octet poate
dura de la 2 la ~4 ms sau mai mult. Procesul de înregistrare este reglementat de sistemul încorporat R.C.-
un generator a cărui frecvență este instabilă (la o tensiune de alimentare mai mică
vă puteți aștepta ca timpul de înregistrare să fie mai lung). Pentru o asemenea perioadă, în condiții normale,
La frecvențe înalte, MK reușește să execute câteva mii de comenzi, deci programul
Procedura de înregistrare necesită atenție: de exemplu, trebuie să vă asigurați că
astfel încât în ​​momentul înregistrării întreruperea să nu se „blocheze” (pentru mai multe informații despre aceasta, vezi gla-
tu 4
Și 9 ).
Principala dificultate atunci când lucrați cu EEPROM este posibilitatea deteriorării componentelor sale.
ținut atunci când tensiunea de alimentare nu scade suficient de repede în acest moment
închide Acest lucru se datorează faptului că atunci când tensiunea de alimentare este redusă la
un anumit prag (sub pragul de funcționare stabilă, dar nu suficient pentru maxim
opriți) din cauza fluctuațiilor de tensiune, MK începe să funcționeze arbitrar
diverse comenzi, inclusiv capacitatea de a efectua procedura de scriere pe EEPROM. Dacă
luați în considerare faptul că o comandă tipică AVR MK este executată în zecimi de microsecundă,
atunci este clar că nicio sursă de energie reală nu poate oferi o reducere
tensiune la zero în timpul necesar. Conform experienței autorului, atunci când este alimentat de obișnuit
stabilizator tip LM7805 cu valorile recomandate ale capacității
la intrare și la ieșire, conținutul EEPROM-ului va fi inevitabil deteriorat din cauza
cam jumătate din timp.
Această problemă nu ar trebui să existe dacă constantele sunt scrise în EEPROM
când programați MK, dar nu există nicio procedură de înregistrare în program (aproximativ
cum se generează un fișier de date pentru EEPROM, vezi secțiunea „Directive și funcții”
ție” din capitolul 5
). O mai mare securitate a datelor în astfel de cazuri este confirmată de

Partea I. Principii generale de proiectare și funcționare a Atmel AVR

observații pirice și faptul că permisiunea de a scrie pe EEPROM este procedurală
ra în două etape (vezi. capitolul 9). În toate celelalte cazuri (și există, evident,
majoritatea absolută - setările utilizatorului sunt cel mai adesea stocate în EEPROM
configurația nouă și actuală la oprirea alimentării) trebuie să fie acceptată
masuri speciale. Cel mai cardinal și universal dintre ele este statutul
Nou monitor de alimentare extern care menține MK în starea de resetare când
tensiunea de alimentare scade sub o valoare de prag. Servește același scop
detector de cădere de tensiune încorporat (Brown-out Detection, BOD), disponibil
în aproape toate modelele Tiny și Mega, dar documentația tehnică nu exclude
În același timp, este necesar să se asigure fiabilitatea duplicării acestuia cu un monitor de putere extern.
Pentru mai multe informații despre circuitul BOD și modurile de resetare MK, consultați mai târziu în acest capitol, și despre program
Pentru instalarea EEPROM și măsurile de precauție atunci când o utilizați, consultați capitolul 9.

Metode de ceas

Metoda canonică de sincronizare a unui MK este conectarea unui rezonator de cuarț la
concluziile corespunzătoare (Fig. 2.3, A). Capacitatea condensatoarelor C1 și C2 într-un mod tipic
cazul ar trebui să fie de 15-22 pF (poate fi crescut la 33-47 pF de la unul
creştere temporară a consumului). Cele mai multe modele Tiny și Mega au
Există un bit de configurare special

care vă permite să ajustați

consum. Când acest bit este setat la 1 (stare neprogramată)
intervalul de oscilații al generatorului scade, dar în același timp posibil
intervalul de frecvență și imunitatea generală la zgomot, deci utilizați acest mod
Nu se recomandă. De asemenea, poate fi selectat rezonator cu cuarț de joasă frecvență
(de exemplu, „la oră” 32.768 Hz), în timp ce condensatorii C1 și C2 pot fi absenți -
cuva, deoarece în timpul instalării

valoarea 0 include pe cele incluse în

Condensatoare interne MK cu o capacitate de 36 pF.
Rezonatorul de cuarț poate fi înlocuit cu unul ceramic. Autorul acestor rânduri a reușit
rulați MK la frecvențe non-standard, folosind în loc de cuarț în același sub-
inclusiv o inductanță în miniatură (cu valoarea sa de 4,7 μH și capacitățile
Condensatoare de 91 pF, frecvența este de aproximativ 10 MHz), ceea ce permite în același timp puțin
reduce dimensiunile circuitului.
Desigur, MC poate fi tactat și de la un generator extern (Fig. 2.3, b). Oso-
Acest lucru este convenabil mai ales atunci când trebuie să sincronizați MK-ul cu componente externe
sau obțineți o frecvență de ceas foarte precisă selectând cea corespunzătoare
generator de suflare (de exemplu, seria Epson SG-8002).
Dimpotrivă, atunci când nu este necesară precizia, puteți conecta un extern R.C.-lanţ
(Fig. 2.3, V). În acest circuit, capacitatea C1 trebuie să fie de cel puțin 22 pF și rezistența R1
selectabil din intervalul 3,3–100 kOhm. Frecvența este determinată de formulă
F= 2/3 R.C.. Nu trebuie să instalați deloc C1 dacă notați jurnalul. 0 în config-
celula de țiune

Conectând astfel condensatorul intern de 36 pF.

În cele din urmă, puteți abandona complet componentele externe și vă puteți descurca cu încorporarea
nom R.C.-un generator care este capabil să funcționeze la aproximativ patru

Capitolul 2. Structura generală, organizarea memoriei, tactarea, resetarea

valori de frecvență (1, 2, 4 și 8 MHz). Unele modele oferă capacitatea
reglarea frecvenței acestui generator (pentru mai multe detalii, consultați descrierea tehnică
modele specifice). Această oportunitate este cel mai bine folosită în
modele Tiny mai tinere, produse într-un pachet cu 8 pini - apoi concluziile
conceput pentru a conecta un rezonator sau un generator extern, puteți
utilizați în alte scopuri, cum ar fi porturile I/O obișnuite.

Orez. 2.3. Metode de sincronizare a unui microcontroler AVR folosind: A- rezonator cu cuarț;

b- generator extern; V - R.C.-lanţuri

Familia clasică încorporată R.C.-nu are generator, ci configuratie speciala-

Aceste MK au semnificativ mai puține celule de țiune și, în general, nu pot fi utilizate

a fi atent. Nu este cazul altor familii. Familii MK implicite

Tiny și Mega sunt setate să funcționeze cu generatorul încorporat pornit
frecventa 1 MHz (

0001), deci pentru alte moduri aveți nevoie de cea corespunzătoare

instalați corect celulele de configurare

(vezi tabelul 2.1). în care

Trebuie avut în vedere faptul că starea celulelor

0000 (oglindit în raport cu

cea mai frecvent utilizată valoare pentru un rezonator cu cuarț 1111) este re-

pune MK în modul ceas de la un generator extern și, în același timp, nu poate

chiar program fără a furniza o frecvență externă. Despre setările recomandate

pentru celulele de configurare și caracteristicile programării lor, vezi și

capitolul 5.

Tabelul 2.1. Instalarea celulelor de configurare CKSEL

în funcție de modurile ceasului

CKSEL3...0

Sursa ceasului

Frecvență

Frecvența externă

Incorporat R.C.-generator

Incorporat R.C.-generator

Incorporat R.C.-generator

Incorporat R.C.-generator

Extern R.C.-lanţ

Partea I. Principii generale de proiectare și funcționare a Atmel AVR

Tabelul 2.1(final)

CKSEL3...0

Sursa ceasului

Frecvență

Extern R.C.-lanţ

0,9... 3,0 MHz

Extern R.C.-lanţ

3,0... 8,0 MHz

Extern R.C.-lanţ

8,0... 12 MHz

Rezonator de joasă frecvență

Rezonator cu cuarț

0,4... 0,9 MHz

Rezonator cu cuarț

0,9... 3,0 MHz

Rezonator cu cuarț

3,0... 8,0 MHz

1xxx (CKPOT=0)

Rezonator cu cuarț

Resetați

Resetarea (RESET) este setarea modului de funcționare inițial al MK. în care
toate RVV-urile sunt setate la starea implicită - de regulă, acestea sunt zerouri în
toate categoriile, cu câteva excepții (dar RON poate accepta producție
valori gratuite, deci, dacă este necesar, începeți cu una anume
Valorile variabilelor trebuie setate forțat la începutul programului).
După o resetare, programul începe să se execute de la adresa de pornire (în mod implicit
aceasta este adresa $0000).
Resetarea are loc întotdeauna când alimentarea este pornită. În plus, sursele de resetare-
Pot apărea următoarele evenimente: resetare hardware, adică alimentare de nivel scăzut
tensiune la intrarea RESET (este mai corect să o desemnați cu inversare: /RESET, deoarece
nivelul activ aici este scăzut și ne vom respecta această regulă); terminat
numărătoarea inversă a intervalului de cronometru setat pentru watchdog; declanșarea circuitului
BOD. Semnificația celor mai puțin semnificativi patru biți ai registrului de stare

trebuie să semnalizeze

informații despre sursa din care a fost efectuată resetarea data anterioară (instalată
nou la 1 bit 0 - resetare la pornire, bit 1 - resetare hardware, bit 2 - de la
circuite BOD, bit 3 - de la timer-ul watchdog). În practică, conform experienței autorului, conform
Statele din acest registru diferă în mod sigur de toate celelalte numai în state
resetarea temporizatorului (alte steaguri pot fi toate setate în același timp)
temporar). Cu toate acestea, aceste informații pot fi utile, de exemplu, atunci când se analizează
analiza motivelor întreruperilor în funcționarea dispozitivelor care funcționează non-stop (vezi. capitolul 12).
MK juniori din familia Tiny (cu excepția ATtiny28) nu au un „pull-up” încorporat
Rezistorul de la pinul /RESET, prin urmare, pentru o funcționare fiabilă, trebuie luate măsuri de precauție
vezi conectarea unui rezistor extern de 2–5 kOhm de la acest pin la
Tensiunea de alimentare. De asemenea, autorul recomandă insistent instalarea
rezistență potrivită pentru orice model AVR, deoarece rezistența încorporată are un mare
valoare nominală ridicată (100–500 kOhm) și zgomot poate fi indus pe aceasta, ceea ce poate provoca
ty la o resetare imprevizibilă. De asemenea (deși în descrierile tehnice de genul

Capitolul 2. Structura generală, organizarea memoriei, tactarea, resetarea

repararea și nu este conținut) nu ar strica să instalați un condensator de 0,1–0,5 µF de la
/RESET ieșire la masă - acest lucru netezește inevitabilul salt de tensiune și
marginea de creștere a tensiunii la pinul /RESET este puțin mai lungă decât
cu creșterea tensiunii de alimentare: când se atinge pragul de răspuns al circuitului
resetat, tensiunea de alimentare a întregului MK va fi deja stabilită.
În modelele Tiny, produse într-un pachet cu 8 pini (ATtiny11–ATtiny15),
Dacă nu este necesară o resetare externă, pinul /RESET poate îndeplini funcțiile în mod normal
port I/O. Cu o singură avertizare: când configurați acest lucru
contact cu ieșirea, funcționează ca o ieșire cu colector deschis și nu ca o ieșire convențională
element logic final (pentru configurarea pinilor portului, vezi capitolul 3).
Cea mai preferată modalitate de a organiza o resetare la pornire este următoarea:
deja menționat mai devreme - instalarea unui monitor de alimentare extern. De exemplu, când
Pentru o sursă de alimentare de 5 volți, popularul microcircuit MC34064 cu un prag de declanșare este potrivit.
4,6 V și consum tipic de aproximativ 300 µA sau mai modern
analog (de exemplu, MAX803L cu un consum de 12 μA). Pentru alimentare de trei volți
circuit adecvat MAX803R (2,6 V) sau o versiune adecvată a DS1816 cu
tensiune curentă. Toate microcircuitele enumerate sunt cu trei pini (alimentare, masă
la", resetează pinul de control) și au o ieșire de colector deschis, adică
prevede instalarea unui rezistor de tragere. Timp de răspuns tipic
Durata acestor microcircuite atunci când tensiunea scade este de microsecunde, ceea ce asigură
siguranța datelor în EEPROM. Când tensiunea crește, ele furnizează
întârziere mare (de ordinul fracțiilor de secundă), ceea ce permite fiabil
resetați MK fără să zdrăngănească.
Circuitul BOD încorporat oferă timpi de răspuns de ordinul microsecundelor
întârziere pentru revenirea la starea de funcționare după restabilirea tensiunii, op-
determinat de aceleași setări ca și întârzierea de resetare (celule

frecvența de ceas de 4 MHz) și chiar și valoarea sa maximă posibilă de ~68 ms poate
se dovedesc a fi insuficiente pentru a ocoli vibrația care apare atunci când tensiunea scade
tensiunea de alimentare a unei surse autonome. Pentru a selecta modul de operare BOD, utilizați
apăsați trei celule de configurare

având următoarele stări:

111 (setare implicită) - circuitul BOD dezactivat;

101 - pornește BOD la un prag de funcționare de 2,7 V;

100 - corespunde unui prag de 4,0 V.

Rețineți că, din punct de vedere al fiabilității operaționale, cu atât diferența dintre ele este mai mică
tensiunea de alimentare și pragul monitorului de putere (extern sau
circuit BOD încorporat, nu contează), cu atât mai bine - cu mici supratensiuni de putere,
insensibil la monitor pot apărea tot felul de inconveniente.
placute precum aparitia spontana a unei intreruperi externe. Unu-
Cu toate acestea, această diferență trebuie luată în considerare atunci când alimentați dispozitivul de la baterii: de exemplu,
pentru patru baterii alcaline AA și un monitor de putere, calculați
tannoy la 4,7 V, tensiune reziduală pe elemente după declanșarea monitorului


Radio amator modern nu poate fi imaginat fără microcontrolere, iar acest lucru este evident. În ultimele decenii, microcontrolerele de la diverși producători s-au răspândit în diverse domenii ale activității umane. Ele pot fi adesea găsite în cele mai neașteptate dispozitive și modele. Tu și cu mine asistăm la informatizarea și automatizarea proceselor din jurul nostru. Adevărul este că, fără cunoștințele de bază ale programării, a devenit aproape imposibil să se creeze dispozitive moderne competitive...

Dacă citiți acest articol, probabil că aveți dorința de a înțelege cum funcționează microcontrolerele și cel mai probabil aveți întrebări:

4. Ce literatură ar trebui să studiez?

Să încercăm să răspundem la aceste întrebări.

1. Ce microcontroler ar trebui să aleg pentru job?

Microcontrolerele pe 8 biți sunt foarte populare printre amatorii de radio. PIC Tehnologia Microcipului și AVR Atmel, pe 16 biți MSP430 de la TI, precum și microcontrolere pe 32 de biți, arhitecturi BRAŢ.

În industrie, oarecum diferit, primul loc cu o marjă mare este ocupat de Renesas Electronics pe a doua Freescale, pe a treia Samsung, atunci dute MicrocipȘi T.I., apoi toate celelalte.
Popularitatea este determinată de preț și disponibilitate; disponibilitatea informațiilor tehnice și costul suportului software joacă un rol semnificativ.

Vom studia microcontrolere AVR pe 8 biți, familii Seria ATMEGA 8 și 16. Alegerea a fost determinată, din nou, de accesibilitate, prezența multor dezvoltări de amatori și o cantitate imensă de material educațional. Prezența unei varietăți de componente încorporate și funcționalitatea acestei familii.

2. Ce mediu de dezvoltare ar trebui să folosesc pentru a programa microcontrolerul selectat?

Pentru AVR au fost create diverse medii de dezvoltare integrate (IDE, mediu de dezvoltare integrat).
IDE este un sistem software folosit de programatori pentru a dezvolta software, care include:
editor de text,
compilator și/sau interpret,
instrumente de automatizare a asamblarii,
depanator

Cele mai comune AVRStudio, ATmelStudio, WINAVR, CodeVision, IAR Embedded Workbench.
Pentru a scrie programe, vom folosi gratuit IDE ATmelStudio versiunea 6și mai sus.
Puteți descărca Atmel Studio de pe site-ul oficial după înregistrare (înregistrarea este absolut gratuită și nu vă obligă la nimic!)

ATmelStudio vă permite să creați proiecte și să scrieți programe atât în ​​asamblator, cât și în SI.

Inițial, întrebarea este întotdeauna: ce limbaj de programare ar trebui să aleg pentru a scrie programe eficiente?

Răspunsul meu este simplu: trebuie să poți scrie în cel puțin două limbi: asamblare și SI. Limbajul de asamblare este pur și simplu necesar atunci când trebuie să scrieți subrutine și macrocomenzi rapide și compacte și diverse drivere de dispozitiv. Dar, atunci când trebuie să creați un proiect mare construit pe algoritmi complecși, fără cunoștințe de SI, se poate cheltui mult timp, mai ales în procesul de depanare, și dacă există dorința de a-l transfera pe o altă platformă, de exemplu PIC18 , sau STM, poate deveni o problemă insolubilă.
În plus, au apărut acum platformele hardware de calcul Arduino, lucru cu care necesită cunoașterea limbajului SI++.
Prin urmare, vom scrie programe atât în ​​asamblator, cât și în SI.

Pentru a vedea clar rezultatul muncii tale, fără a utiliza un fier de lipit sau o placă, trebuie doar să instalezi programul Proteus.

3. Cum să flashezi controlerul și ce dispozitive și accesorii suplimentare sunt necesare pentru a lucra convenabil cu ele?

Folosim Datagorian. În plus, va trebui să achiziționați panouri și o sursă de alimentare cu o tensiune de ieșire de 5 volți. Îl puteți folosi ca sursă de alimentare cu ondulație redusă folosind o diodă zener de 5 volți.
Poate că, în timp, Igor și cu mine vom propune un proiect pentru asamblarea unei plăci de depanare.

4. Ce literatură ar trebui să studiez?

Dar, de exemplu:
Programare practică a AVR în asamblator. Revich, 2011
1000 și un circuit de microcontroler Vol. 1-2. Ryumik, 2010-2011
10 dispozitive practice pe AVR MK Book 1-2. Kravchenko, 2008-2009
Un tutorial pentru un dezvoltator de dispozitive care utilizează AVR MK. Belov, 2008
Familiile MK AVR Tiny și Atmega. Efstifeev, 2008
CodeVisionAVR. Un ghid pentru începători. Lebedev, 2008
Controlul cu microprocesor al dispozitivelor, tiristoarelor, releelor. Belov, 2008
Interfețe analogice MK. Steward, Ball, 2007
Creăm dispozitive pe AVR MK. Belov, 2007
MK AVR în practica radioamatorilor. Analiză completă a ATTINY2313. Belov, 2007
Schimb de date în rețea și rețea cu MK. Du-te, 2007
MK AVR. atelier pentru incepatori. Hartov, 2007
Aplicarea schemelor AVR, algoritmi, programe. Baranov, 2006
Microcontrolere AVR. Curs introductiv. Morton, 2006
Măsurare, control și reglare folosind AVR. Trumpert, 2006
Programare în limbaj C pentru AVR și PIC MK. Shpak, 2006
Proiectarea dispozitivelor pe MK. Belov, 2005
MK - este simplu, volumele 1-3. Frunze, 2002-2003
Limbajul de programare C, ediția a 2-a. Kernighan, Ritchie, 2009
Programarea microcontrolerelor ATMEL în limbajul S. Prokopenko, 2012

5. Unde pe internet puteți pune întrebări și obține răspunsuri specifice?

Puteți pune întrebări pe forumul nostru sau pe orice alt forum, unde subiectele despre microcontrolere sunt atinse într-un fel sau altul. Principalul lucru pe forumuri este să formulezi întrebări corect pentru a primi clar răspunsuri. Întrebările abstracte nu sunt binevenite și, cel mai probabil, veți primi critici dure în loc de răspuns, sau întrebarea dvs. va rămâne fără răspuns!

Acum să aruncăm o privire mai atentă la preferatul nostru, microcontrolerul ATMEGA 8

Microcontroler AVR pe 8 biți, de înaltă performanță, de putere redusă
Arhitectură RISC progresivă
130 de instrucțiuni de înaltă performanță, majoritatea instrucțiunilor executate într-un singur ciclu de ceas
32 de registre de lucru de uz general pe 8 biți
Funcționare complet statică
Performanță se apropie de 16 MIPS (la viteză de ceas de 16 MHz)
Multiplicator încorporat în 2 cicluri

Program nevolatil și memorie de date
8 KB de memorie flash autoprogramabilă în sistem
Oferă 1000 de cicluri de ștergere/scriere
Sector suplimentar de cod de pornire cu biți de blocare independenți
Oferă modul simultan de citire/scriere (Read-While-Write)
512 octeți EEPROM
Oferă 100.000 de cicluri de ștergere/scriere
1 KB SRAM pe cip
Blocare programabilă pentru a proteja software-ul utilizatorului

Periferice încorporate
Două temporizatoare/contoare de 8 biți cu prescaler separat, unul cu modul de comparare
Un temporizator/contor pe 16 biți cu prescaler separat și moduri de capturare și comparare
Contor în timp real cu generator separat
Trei canale PWM
Convertor A/D cu 8 canale (TQFP și MLF)
6 canale cu precizie de 10 biți
Convertor analog-digital cu 6 canale (în pachet PDIP)
4 canale cu precizie de 10 biți
2 canale cu precizie de 8 biți
Interfață serială cu 2 fire orientată pe octeți
Serial programabil USART
Interfață serială SPI (master/slave)
Cronometru programabil watchdog cu oscilator separat încorporat
Comparator analogic încorporat

Funcții speciale ale microcontrolerului
Resetare la pornire și detectare programabilă de întrerupere
Oscilator RC calibrat încorporat
Surse de întrerupere interne și externe
Cinci moduri de consum redus: Inactiv, Economisire energie, Oprire, Standby și Reducere zgomot ADC

Pini și carcase I/O
23 de linii I/O programabile
Pachet PDIP cu 28 de pini, pachet TQFP cu 32 de pini și pachet MLF cu 32 de pini

Tensiuni de operare
2,7 - 5,5 V (ATmega8L)
4,5 - 5,5 V (ATmega8)

Frecventa de operare
0 - 8 MHz (ATmega8L)
0 - 16 MHz (ATmega8)

diferențe între ATMEGA16 și 8
16 KB de memorie flash autoprogramabilă în sistem

Interfață JTAG (compatibilă cu IEEE 1149.1)
Capacitate de scanare periferică compatibilă cu standardul JTAG
Suport extins pentru depanarea încorporată
Programare prin interfața JTAG: Flash, memorie EEPROM, jumperi și biți de blocare

Patru canale PWM/PWM

Convertor analog-digital cu 8 canale pe 10 biți
8 canale dezechilibrate
7 canale diferențiale (numai pachetul TQFP)
2 canale diferențiale cu câștig programabil de 1x, 10x sau 200x (numai pachetul TQFP)

Șase moduri de consum redus: Inactiv, Economisire energie, Oprire, Standby, Standby extins și Reducere zgomot ADC

32 de linii I/O programabile

Pachet PDIP cu 40 de pini și pachet TQFP cu 44 de pini

AtmelStudio

Dacă abia sunteți la început, atunci trebuie să descărcați și să instalați programul AtmelStudio de pe pagina oficială atmel.com
După instalarea programului AtmelStudio, puteți începe să creați un proiect.
Proiect- acesta este programul tău pe care îl vei scrie, depana și flash, după compilare, în memoria microcontrolerului.

Pentru a crea un proiect, trebuie să deschideți programul, va apărea următorul screensaver,

iar pagina de creare a proiectului se va deschide

Pentru a crea un proiect nou, trebuie să faceți clic pe "Proiect nou..."
În acest caz, se va deschide o nouă fereastră în care puteți selecta limbajul de programare, numele proiectului, locația acestuia, numele pachetului cu fișierele de proiect și posibilitatea de a crea un director pentru utilizare ulterioară în alte proiecte încrucișate. . Pentru a crea un proiect în care vom programa în assembler, trebuie să selectăm - Asamblator, după aceea schimbăm numele proiectului, locația acestuia și selectăm BINE.

Va apărea următoarea fereastră

Alege „megaAVR, 8 biți”și găsim microcontrolerul de care avem nevoie, am ales ATmega8.În partea dreaptă a economizorului de ecran apare o listă de dispozitive care funcționează cu acest microcontroler, dintre care unul ne putem conecta. Alege BINE.

Apare pagina editorului de text, care vă permite să editați și să depanați programul. În timp ce pagina este goală, sunt indicate ora și data creării și numele fișierului de proiect, numele de utilizator. Există o fereastră suplimentară pentru dispozitive I/O și o fereastră de rapoarte de compilare a programelor. acum noi


Putem programa in assembler.
Un proiect de programare în limbaj SI este creat în același mod.

Acum că suntem deja familiarizați cu unele dintre capacitățile și funcțiile microcontrolerelor, apare în mod natural o întrebare logică: ce este necesar pentru a programa microcontrolere? Ce programe și dispozitive sunt necesare și de unde le pot obține?


Pentru ca un microcontroler să rezolve probleme și să îndeplinească anumite funcții, acesta trebuie programat, adică trebuie să fie scris în el un program sau un cod de program.

Structura și ordinea scrierii unui program

În primul rând, înainte de a începe să scrieți orice program, sau mai degrabă cod de program, ar trebui să înțelegeți clar ce funcții va îndeplini microcontrolerul. Prin urmare, mai întâi trebuie să determinați scopul final al programului. Când este definit și complet înțeles, atunci se elaborează un algoritm pentru program. Un algoritm este o secvență de execuție a comenzii. Utilizarea algoritmilor vă permite să structurați mai clar procesul de scriere a codului, iar atunci când scrieți programe complexe, vă permite adesea să reduceți timpul petrecut cu dezvoltarea și depanarea acestora.

Următorul pas după compilarea algoritmului este scrierea directă a codului programului. Programele pentru microcontrolere sunt scrise în limbaj Si sau asamblator . Only Assembly este mai mult un set de instrucțiuni decât un limbaj de programare și este un limbaj de nivel scăzut.


Vom scrie programe în C, care este un limbaj de nivel înalt. Programele în C sunt scrise mult mai rapid în comparație cu cele similare din Assembly. În plus, toate programele complexe sunt scrise în principal în C.

Aici nu vom compara avantajele și dezavantajele scrierii programelor în Assembly și C. De-a lungul timpului, după ce ai acumulat ceva experiență în programarea MK, vei trage concluzii utile pentru tine.

Codul programului în sine poate fi scris în orice editor de text standard, de exemplu, Notepad. Cu toate acestea, în practică, ei folosesc editori mai convenabil, despre care vor fi discutate mai jos.

Compilarea unui program

Codul C pe care l-am scris nu este încă de înțeles de către microcontroler, deoarece MK înțelege comenzile numai în sistemul binar (sau hexazecimal), care este un set de zerouri și unu. Prin urmare, codul C trebuie convertit în zerouri și unu. În acest scop, se folosește un program special, numit compilator, și procesul în sine transformarea codului se numește compilare.

Pentru a flash firmware-ul MK, un dispozitiv a sunat programator. În funcție de tipul de programator, intrarea acestuia este conectată la un port COM sau USB, iar ieșirea sa este conectată la anumiți pini ai microcontrolerului.


Există o selecție largă de programatori și plăci de dezvoltare, dar suntem destul de mulțumiți de cel mai simplu programator, care în China nu costă mai mult de 3 USD.


După ce microcontrolerul este flash, programul este depanat și testat pe un dispozitiv real sau, după cum se spune, pe hardware.

Acum să rezumăm pașii de programare a microcontrolerelor.


Când scrieți programe simple, puteți face fără al doilea punct, adică fără a întocmi un algoritm pe hârtie; este suficient să-l păstrați în cap.

Trebuie remarcat faptul că depanarea și testarea programului se efectuează și înainte de a flashiza firmware-ul MK.

Setul necesar de programe

Există multe programe utile și convenabile pentru programarea MK. Ambele sunt plătite și gratuite. Printre acestea se numără trei principale:

1) Atmel Studio

2) CodeVisionAVR

3) WinAVR

Toate aceste programe sunt legate de IDEeu integrat D dezvoltare E nmediu – mediu de dezvoltare integrat. Puteți scrie cod în ele, îl puteți compila și depana.

Ar trebui să acordați atenție Code Vision AVR. Acest IDE face scrierea codului mai ușoară și mai rapidă. Totuși, programul este plătit.

În etapa inițială a programării, este mai bine să scrieți toate programele manual, fără simplificări. Acest lucru vă va ajuta să obțineți rapid abilitățile necesare, iar în viitor puteți înțelege și edita coduri scrise de altcineva pentru a se potrivi nevoilor dvs. Prin urmare, recomand să utilizați Atmel Studio. În primul rând, este absolut gratuit și actualizat în mod constant, iar în al doilea rând, a fost dezvoltat de o companie care produce microcontrolere pe care vom învăța să programăm.

Depanare firmware și programe

Vom flash microcontrolere folosind un program suplimentar.

Dacă un microcontroler nu este disponibil, atunci funcționarea acestuia poate fi emulată folosind programul. Simplifică foarte mult procesul de depanare a unui program chiar dacă aveți un microcontroler, deci nu trebuie să-l refacăți des, deoarece orice microcontroler are un număr finit de rescrieri, deși acest număr este destul de mare.

Când intermiteți și depanați MK, este convenabil să îl plasați pe o placă de breadboard, dar acest lucru nu este deloc necesar. Prin urmare, pentru o mai mare comoditate, o placă de breadboard este, de asemenea, utilă. Există o selecție mare de plăci, dar vă recomand să o luați pe cea care are cât mai multe găuri. Odată ce începem să conectăm afișaje cu șapte segmente, veți începe să apreciați beneficiile plăcilor de breadboard mai mari.

Un alt element important care ne va fi de folos este documentația tehnică pentru MK, numită fișa cu date. În general, trebuie să descărcați fișă de date pentru microcontrolerul ATmega8.