ATmega mikrovaldikliai yra plačiai naudojami įterptinėse sistemose, nes jie sujungia apdorojimo galimybes, atmintį ir aparatinės įrangos periferinius įrenginius viename luste. Dėl paprastos architektūros, patikimo našumo ir stiprios kūrimo ekosistemos jie idealiai tinka mokytis ir kurti elektronines sistemas. Šiame straipsnyje paaiškinama jų architektūra, vidiniai moduliai, programavimo procesas ir įprastos šiuolaikinio įterptojo dizaino programos.

Kas yra ATmega mikrovaldikliai?
ATmega mikrovaldikliai yra 8 bitų AVR mikrovaldiklių lustai (iš pradžių iš Atmel, dabar pagal Microchip technologiją), skirti įterptinėms sistemoms. Jie naudoja RISC komandų rinkinį ir Harvardo architektūrą, sujungia programos atmintį (Flash), darbinę atmintį (SRAM), nepastovią atmintį (EEPROM) ir įprastus periferinius įrenginius; pvz., laikmačiai, skaitmeniniai įvesties / išvesties, ADC ir nuosekliosios sąsajos viename įrenginyje.
ATmega mikrovaldiklių savybės
| Funkcija | Aprašymas |
|---|---|
| 8 bitų AVR RISC architektūra | Naudoja sumažinto instrukcijų rinkinio skaičiavimo (RISC) dizainą, kuris leidžia daugumą instrukcijų vykdyti per vieną laikrodžio ciklą, todėl galima greitai ir efektyviai apdoroti. |
| Harvardo architektūra | Programos atmintis ir duomenų atmintis saugomos atskirai, todėl procesorius gali gauti instrukcijas ir pasiekti duomenis tuo pačiu metu, o tai pagerina našumą. |
| Lusto "Flash" programos atmintis | Nepastovi "Flash" atmintis saugo programos kodą ir išlaiko jį net atjungus maitinimą. Priklausomai nuo modelio, jis paprastai svyruoja nuo 4 KB iki 256 KB. |
| SRAM (statinė RAM) | Naudojamas laikinam duomenų saugojimui vykdant programą, įskaitant kintamuosius, buferius ir rietuvės operacijas. |
| EEPROM | Elektra ištrinama programuojama tik skaitoma atmintis, naudojama nepastoviems duomenims, pvz., konfigūracijos nustatymams, kurie turi būti išsaugoti nutrūkus maitinimui, saugoti. |
| Integruoti laikmačiai ir PWM | Aparatūros laikmačiai ir impulsų pločio moduliacijos moduliai naudojami laiko operacijoms, signalo generavimui ir variklio arba LED ryškumo valdymui. |
| 10 bitų ADC | Integruotas analoginis-skaitmeninis keitiklis leidžia mikrovaldikliui nuskaityti analoginius signalus iš jutiklių ir konvertuoti juos į skaitmenines vertes apdorojimui. |
| Programuojami skaitmeniniai įvesties / išvesties kaiščiai | Keli įvesties / išvesties kaiščiai gali būti sukonfigūruoti kaip įėjimai arba išėjimai, kad būtų galima susieti su išoriniais įrenginiais, tokiais kaip šviesos diodai, mygtukai ir jutikliai. |
| Ryšio sąsajos | Palaiko įprastus nuosekliojo ryšio protokolus, įskaitant USART, SPI ir I²C, skirtus prijungti prie kitų mikrovaldiklių, jutiklių ir modulių. |
| Stipri vystymosi ekosistema | Plačiai palaikomi kūrimo įrankiai, dokumentacija ir platformos, tokios kaip "Arduino", todėl lengviau programuoti, kurti prototipus ir derinti. |
ATmega architektūra ir vidiniai moduliai

"ATmega" MCU naudoja 8 bitų AVR procesorių su Harvardo architektūra: "Flash" talpina instrukcijas, o SRAM – vykdymo laiko duomenis. Šerdyje yra 32 darbiniai registrai ir paprastas vamzdynas, todėl daug instrukcijų užpildomos viename laikrodyje. Viduje trys atminties tipai palaiko tipinius programinės įrangos poreikius: "Flash" programų saugojimui (ir pasirenkamai įkrovos programai), SRAM kintamiesiems ir rietuvei ir EEPROM nepastoviems nustatymams.
Periferiniai įrenginiai jungiasi prie procesoriaus per atminties susietus įvesties / išvesties registrus. GPIO prievadai valdomi per DDRx (kryptis), PORTx (išvestis arba ištraukimas) ir PINx (skaitymas). Lanksti laikrodžio sistema (vidinis RC arba išorinis kristalas) nustato procesoriaus greitį ir laikmačio laiką. Laikmačiai / skaitikliai (8 bitų ir (arba) 16 bitų, priklausomai nuo modelio) užtikrina vėlavimą, įvykių skaičiavimą ir PWM generavimą. Daugelyje dalių yra daugiakanalis 10 bitų ADC jutiklių įėjimams. Nuosekliosios sąsajos paprastai apima USART, SPI ir TWI (suderinamas su I²C), skirtas ryšiui su kompiuteriais, jutikliais ir kitais valdikliais.
Pertraukimo valdiklis su vektorine lentele leidžia periferiniams įrenginiams ir išoriniams kaiščiams suaktyvinti įvykiais pagrįstą programinę-aparatinę įrangą.
ATmega kaiščio konfigūracija

| Smeigtuko kategorija | PIN pavadinimas / prievadas | Aprašymas / Funkcija |
|---|---|---|
| Maitinimo kaiščiai | VCC | Pagrindinė mikrovaldiklio maitinimo įtampa. |
| GND | Grandinės įžeminimo nuoroda. | |
| AVCC | Analoginės grandinės ir ADC maitinimas. | |
| AREF | Etaloninė įtampa, naudojama analoginio-skaitmeninio keitiklio (ADC). | |
| Skaitmeniniai įvesties / išvesties kaiščiai | A prievadas (PA0–PA7) | Skaitmeniniai įvesties / išvesties kaiščiai, kurie taip pat gali veikti kaip analoginiai ADC įėjimai. |
| B prievadas (PB0–PB7) | Skaitmeniniai įvesties / išvesties kaiščiai dažniausiai naudojami SPI ryšiui ir laikmačio funkcijoms. | |
| C prievadas (PC0–PC7) | Bendrosios paskirties skaitmeniniai įvesties / išvesties kaiščiai dažnai naudojami valdymo signalams. | |
| D prievadas (PD0–PD7) | Skaitmeniniai įvesties / išvesties kaiščiai dažnai naudojami USART ryšiui ir išoriniams pertraukimams. | |
| Laikrodžio kaiščiai | XTAL1 | Išorinio osciliatoriaus arba laikrodžio signalo įvesties kaištis. |
| XTAL2 | Išvesties kaištis iš vidinio osciliatoriaus stiprintuvas. | |
| Atstatyti kaištį | ATSTATYTI | Aktyvus-žemas atstatymo kaištis, naudojamas mikrovaldikliui paleisti iš naujo. |
| Komunikacijos smeigtukai – USART | RXD | Gauna serijinius duomenis iš išorinių įrenginių. |
| TXD | Perduoda nuosekliuosius duomenis į išorinius įrenginius. | |
| Ryšio kaiščiai – SPI | MOSI | Master Out Slave In – duomenų linija iš pagrindinio į pagalbinį įrenginį. |
| MISO | Master In Slave Out – duomenų linija nuo vergo iki pagrindinio įrenginio. | |
| SCK | Nuosekliojo laikrodžio signalas, naudojamas SPI ryšiui. | |
| SS | Slave Select kaištis, naudojamas SPI pagalbiniam įrenginiui pasirinkti. | |
| Ryšio kaiščiai – TWI (I²C) | SDA | Serijinė duomenų linija, naudojama dviejų laidų ryšiui. |
| SCL | Serijinio laikrodžio linija, naudojama dviejų laidų ryšiui. |
Pinout skiriasi priklausomai nuo modelio; šioje lentelėje kaip pavyzdys naudojamas ATmega16/32.
ATmega mikrovaldiklių maitinimo režimai

"ATmega" mikrovaldikliai palaiko kelis energijos taupymo režimus, kurie sumažina energijos sąnaudas, kai procesoriui nereikia nuolat veikti. Šie režimai ypač naudingi baterijomis maitinamose įterptosiose sistemose, tokiose kaip nešiojamieji įrenginiai ir daiktų interneto jutikliai.
Tuščiosios eigos režimas
Tuščiosios eigos režimu procesorius nustoja vykdyti instrukcijas, o periferiniai moduliai, tokie kaip laikmačiai, nuosekliojo ryšio sąsajos ir pertraukimai, toliau veikia. Tai leidžia mikrovaldikliui greitai pabusti, kai įvyksta pertrauka.
Išjungimo režimas
Išjungimo režimas išjungia procesorių ir daugumą vidinių išorinių įrenginių, kad būtų pasiektas labai mažas energijos suvartojimas. Tik išoriniai pertraukimai arba stebėjimo laikmačio įvykiai gali pažadinti įrenginį. Šis režimas dažniausiai naudojamas ilgalaikio budėjimo programose.
Budėjimo režimas
Budėjimo režimas yra panašus į išjungimo režimą, tačiau palaiko osciliatorių veikiantį. Kadangi laikrodžio šaltinis išlieka aktyvus, mikrovaldiklis gali greičiau atnaujinti darbą.
Nutraukite ATmega mikrovaldiklių tvarkymą
Pertraukimai leidžia ATmega mikrovaldikliui nedelsiant reaguoti į svarbius įvykius, nuolat jų netikrinant pagrindiniame programos cikle.
Kai įvyksta pertraukimas, mikrovaldiklis laikinai pristabdo dabartinį programos vykdymą ir pereina prie specialios rutinos, vadinamos pertraukimo paslaugų rutina (ISR). Pasibaigus ISR, programa tęsiama nuo tos vietos, kur ji buvo nutraukta.
Įprasti "ATmega" įrenginių pertraukimo šaltiniai yra šie:
• Išoriniai pertraukimo kaiščiai
• Laikmačio perpildymas arba įvykių palyginimas
• Serijinės komunikacijos įvykiai (USART, SPI, TWI)
• ADC konversijos užbaigimas
• Watchdog laikmačio įvykiai
Pertraukų naudojimas pagerina sistemos efektyvumą, nes procesoriui nereikia nuolat apklausti aparatūros įrenginių. Vietoj to, procesorius atlieka kitas užduotis ir reaguoja tik tada, kai sukuriamas pertraukimo signalas.
ATmega mikrovaldiklių programavimas
ATmega mikrovaldikliai paprastai programuojami įterptoje C naudojant avr-gcc (AVR-GCC) ir avr-libc. AVR asamblėja vis dar naudinga keliais atvejais, pvz., ciklo tikslumo rutinoms, itin mažam kodui ar tiesioginiam konkrečių instrukcijų valdymui, tačiau dauguma projektų naudoja C greitesniam kūrimui ir lengvesnei priežiūrai.
Programinė įranga valdo aparatinę įrangą per atmintyje susietus įvesties / išvesties registrus. Kiekvienas periferinis įrenginys (GPIO, laikmačiai, ADC, USART, SPI, TWI) turi valdymo registrus, kuriuos rašote arba skaitote kodu. GPIO bendras modelis yra toks:
• DDRx nustato kaiščio kryptį (0 = įvestis, 1 = išvestis)
• PORTx įrašo išvesties lygį (arba įjungia prisitraukimą, kai sukonfigūruota kaip įvestis)
• PINx nuskaito esamą PIN būseną
Pavyzdys: nustatykite PB0 kaip išvestį ir įjunkite šviesos diodą

Praktiškai, jūs kompiliuojate projektą į .hex failą ir programuojate lustą naudodami IPT (SPI pagrindu) su tokiais įrankiais kaip USBasp / AVRISP / Atmel-ICE arba per įkrovos įkroviklį kai kuriose plokštėse. Įrenginio parinktys, pvz., laikrodžio šaltinis ir įkrovos nustatymai, valdomos saugiklių bitais, todėl jos turi atitikti aparatūros laikrodį ir paleidimo poreikius.
ATmega kūrimo darbo eiga ir programavimo įrankiai

Įrankių grandinė (kūrimo išvestis)
• Rašykite kodą į Embedded C (arba AVR rinkinį, jei reikia) naudodami IDE / redaktorių, pvz., Microchip Studio arba VS Code.
• Sukurkite naudodami AVR-GCC (kompiliuoti + nuorodą), kad sukurtumėte ELF failą, tada sugeneruokite .hex vaizdą "Flash" programavimui.
• Išlaikykite projekto nustatymus nuoseklius (įrenginys, laikrodis, optimizavimas, bibliotekos), kad komponavimo versijas būtų galima pakartoti.
Programavimo metodai (kaip programinė įranga patenka į lustą)
• IPT (SPI pagrindu) yra labiausiai paplitęs plikų ATmega lustų metodas. Tipiški programuotojai yra USBasp, AVRISP ir Atmel-ICE.
• Kai kuriose plokštėse galima naudoti įkrovos įkroviklį, leidžiantį įkelti programinę-aparatinę įrangą per UART/USB be išorinio IPT įrankio.
• Naudokite tokius įrankius kaip avrdude (arba IDE integruoti programuotojai), kad parašytumėte HEX failą ir paleistumėte patikrinimo veiksmą po programavimo.
• Įrenginio parinktys, pvz., laikrodžio šaltinis ir įkrovos nustatymai, valdomos saugiklių bitais, todėl saugiklių nustatymai turi atitikti tikrąją aparatinę įrangą.
Derinkite ir išbandykite
• Funkciniam testavimui pradėkite nuo UART žurnalų, GPIO "širdies plakimo" kaiščių ir paprastos testavimo programinės įrangos.
• Aparatūros derinimas priklauso nuo konkretaus ATmega modelio ir plokštės palaikymo (pvz., debugWIRE arba JTAG palaikomose dalyse). Tokie įrankiai kaip "Atmel-ICE" gali būti naudojami, kai taikinys palaiko lusto derinimą.
• Modeliavimo įrankiai (Proteus, SimulIDE, Tinkercad) gali padėti anksti patvirtinti, tačiau periferinis elgesys ir laikas gali nevisiškai atitikti realią aparatinę įrangą, todėl galutiniai patikrinimai turėtų būti atliekami fizinėje plokštėje.
Paprastas LED projektas naudojant ATmega16

Paprastas pradedančiųjų projektas, naudojant ATmega16, parodo, kaip mikrovaldiklis nuskaito mygtuko įvestį ir valdo LED išvestį.
Projekto tikslas
Įjunkite šviesos diodą, kai paspaudžiamas mygtukas, ir išjunkite, kai mygtukas atleidžiamas.
Ryšių pavyzdžiai
• Mygtukas → PA0
• LED → PB0 per srovę ribojantį rezistorių
Kodo pavyzdys

Kaip veikia projektas
Programa pirmiausia sukonfigūruoja PA0 kaip įvesties kaištį, o PB0 - kaip išvesties kaištį. Begalinės kilpos viduje mikrovaldiklis nuolat nuskaito prie PA0 prijungto mygtuko loginę būseną.
Paspaudus mygtuką, PA0 tampa HIGH. Programa aptinka šią įvestį ir nustato PB0 HIGH, kuris įjungia šviesos diodą. Atleidus mygtuką, PA0 tampa LOW, todėl programa išvalo PB0 ir šviesos diodas išsijungia.
Įprasti ATmega mikrovaldiklių modeliai

• ATmega8 – apima 8 KB "Flash" atminties ir puikiai tinka paprastoms įterptųjų valdymo programoms, pagrindiniams jutiklių sąsajoms ir mažiems mokymosi projektams, kur svarbu maža kaina ir paprastumas.

• ATmega16 – suteikia 16 KB "Flash" atminties, daugiau skaitmeninių įvesties / išvesties parinkčių ir įmontuotų periferinių įrenginių, todėl tai yra įprastas pasirinkimas vidutinio sunkumo įterptiesiems projektams, tokiems kaip ekrano valdymas, variklio sąsaja ir mažos automatikos sistemos.

• ATmega32 – siūlo 32 KB "Flash" atmintį su papildomais periferiniais įrenginiais ir didesne programų erdve, todėl ji plačiai naudojama robotikoje, valdymo grandinėse ir automatikos sistemose, kurioms reikia daugiau lankstumo ir funkcionalumo.

• ATmega328P – turi 32 KB "Flash" atminties, kelis analoginius įvesties kanalus ir kelias ryšio sąsajas. Jis geriausiai žinomas kaip pagrindinis mikrovaldiklis, naudojamas Arduino Uno, todėl jis ypač populiarus švietimui, prototipų kūrimui ir pomėgių elektronikai.

• ATmega2560 – yra su 256 KB "Flash" atmintimi ir daugybe įvesties / išvesties kontaktų, leidžiančių valdyti sudėtingesnes įterptąsias sistemas. Jis naudojamas "Arduino Mega" ir tinka projektams, kuriems reikia daug jutiklių, modulių ir didesnės programų saugyklos.
ATmega mikrovaldiklių taikymas

• Variklių valdymo sistemos – nuolatinės srovės variklių, servo variklių ir žingsninių variklių valdymas naudojant PWM signalus greičio ir padėties valdymui (pvz., mažos konvejerių pavaros, ventiliatorių valdikliai, siurblių valdikliai).
• Jutiklių duomenų registravimas – jutiklių, tokių kaip temperatūros, drėgmės, šviesos, dujų ar slėgio jutikliai, nuskaitymas ir matavimų išsaugojimas EEPROM, SD kortelių moduliuose arba duomenų siuntimas į kompiuterį nuosekliuoju ryšiu.
• Namų automatikos valdikliai – perjungimo žibintai, relės ir buitinė technika; stebėti durų jutiklius arba judesio detektorius; ir temperatūros ar aliarmų valdymas naudojant paprastą valdymo logiką.
• Mažos robotikos platformos – linijos sekimo robotų, kliūčių vengimo robotų ir paprastų robotų rankų valdymas, apdorojant jutiklių įvestis ir valdant variklius bei pavaras.
• Pramoninis stebėjimas ir valdymas – pagrindinis procesų stebėjimas, signalizacijos sistemos ir automatizuotas mažų mašinų valdymas, kur reikalingas vidutinis greitis ir patikimas I/O.
• IoT ir belaidžiai jutiklių mazgai – mažos galios jutikliai, suporuoti su belaidžiais moduliais (pvz., RF, Bluetooth ar Wi-Fi moduliais), skirti periodiniam stebėjimui ir ataskaitų teikimui.
• Buitinė ir automobilių elektronika – paprastas įterptas valdymas įrenginiuose, tokiuose kaip nuotolinio valdymo pultai, smulkūs prietaisai, prietaisų skydeliai ar indikatorių sistemos.
• Medicinos ir matavimo prietaisai – pagrindinės signalų stebėjimo ir valdymo užduotys nešiojamuosiuose įrenginiuose, kur svarbi maža galia ir stabilus veikimas.
ATmega prieš kitus mikrovaldiklius

| Funkcija | ATmega (AVR) | PIC mikrovaldikliai | ARM pagrindu veikiantys mikrovaldikliai |
|---|---|---|---|
| Architektūra | AVR RISC | PIC RISC | ARM Cortex-M |
| Apdorojimo galia | Vidutinis | Vidutinis | Labai didelis |
| Atminties talpa | Mažas ir vidutinis | Mažas ir vidutinis | Didelis |
| Programavimo paprastumas | Labai lengva | Vidutinis | Sudėtingesnis |
| Taikymas | Arduino, švietimas, įterptasis valdymas | Pramoninė kontrolė | Daiktų internetas, pažangios sistemos |
| Ekosistema | Stiprus Arduino palaikymas | MPLAB ekosistema | Didelė profesionali ekosistema |
Išvada
ATmega mikrovaldikliai išlieka svarbia įterptosios plėtros platforma dėl subalansuoto našumo, mažo energijos suvartojimo ir paprasto programavimo. Integruoti periferiniai įrenginiai, lanksčios įvesties / išvesties galimybės ir stiprus įrankių palaikymas leidžia efektyviai projektuoti sistemą daugeliui programų. Jų architektūros ir kūrimo darbo eigos supratimas padeda sukurti patikimus įterptuosius sprendimus ir praktiškus elektroninius projektus.
Dažnai užduodami klausimai [DUK]
Ar "ATmega" mikrovaldikliai palaiko "Arduino" kūrimą?
Taip. Daugelis "ATmega" mikrovaldiklių yra visiškai suderinami su "Arduino" ekosistema. Pavyzdžiui, ATmega328P yra pagrindinis procesorius, naudojamas "Arduino Uno" plokštėje. Šiuos lustus galite programuoti naudodami Arduino IDE, kuris supaprastina kodavimą, programinės įrangos įkėlimą ir jutiklių ar modulių integravimą.
Kokias programavimo kalbas galima naudoti "ATmega" mikrovaldikliams?
ATmega mikrovaldikliai paprastai programuojami naudojant Embedded C ir AVR Assembly kalbą. Įterptasis C yra plačiai pageidaujamas, nes jis pagerina skaitomumą, supaprastina aparatūros valdymą ir pagreitina kūrimą, o asamblėjos kalba suteikia žemo lygio valdymą našumui svarbioms programoms.
Kokia yra tipinė ATmega mikrovaldiklių darbinė įtampa?
Dauguma ATmega mikrovaldiklių veikia nuo 1,8 V iki 5,5 V, priklausomai nuo konkretaus įrenginio modelio ir laikrodžio dažnio. Daugelis įprastų plokščių, tokių kaip "Arduino" pagrįstos sistemos, veikia 5 V įtampa, o mažos galios programos gali naudoti 3,3 V veikimą, kad sumažintų energijos sąnaudas.
Kaip galima užprogramuoti arba mirksėti ATmega mikrovaldiklius?
ATmega mikrovaldikliai paprastai programuojami naudojant sistemos programavimą (ISP). Aparatūros programuotojas; pvz., USBasp, AVRISP arba USBtinyISP jungiasi prie lusto SPI kaiščių ir įkelia sukompiliuotą HEX failą tiesiai į "Flash" atmintį, neišimdamas mikrovaldiklio iš grandinės.
Ar "ATmega" mikrovaldikliai tinka pradedantiesiems įterptųjų sistemų srityje?
Taip. ATmega mikrovaldikliai yra plačiai rekomenduojami pradedantiesiems, nes jie turi paprastą architektūrą, aiškią dokumentaciją ir stiprų bendruomenės palaikymą. Kartu su tokiais įrankiais kaip "Arduino" ir "Microchip Studio" jie leidžia greitai kurti projektus ir suprasti įterptojo programavimo pagrindus.