AVR. Obuka. Arhitektura. AVR programiranje. Programiranje AVR mikrokontrolera za početnike Parametri mikrokontrolera porodice avr

Mikrokontroleri sa jednim čipom imaju široku primenu u raznim oblastima: od mernih instrumenata, kamera i video kamera, štampača, skenera i kopir uređaja do proizvoda za elektronsku zabavu i svih vrsta kućnih aparata.

Od uvođenja prvih mikroprocesora 1970-ih, njihova složenost se stalno povećavala uvođenjem novih hardverskih rješenja i dodavanjem novih instrukcija dizajniranih za rješavanje novih problema. Tako se postepeno razvijala arhitektura, koja je kasnije dobila naziv CISC (Complete Instruction Set Computers - računari sa složenim skupom instrukcija). Nakon toga se pojavio još jedan pravac koji je pronašao aktivan razvoj: RISC arhitektura (Računari sa smanjenim skupom instrukcija - računari sa smanjenim skupom instrukcija). Upravo ova arhitektura uključuje AVR mikrokontrolere iz Atmela i PIC iz Microchipa, kojima je posvećena ova knjiga.

Glavna prednost RISC procesora je u tome što su jednostavni, izvršavaju ograničen skup instrukcija i, kao rezultat, vrlo su brzi. Ovo smanjuje troškove i složenost njihovog programiranja.

Loša strana RISC arhitekture je bila potreba za kreiranjem dodatnih instrukcija u asemblerskom jeziku, koje su implementirane u hardver za CISC uređaje. Na primjer, umjesto jednostavnog pozivanja instrukcije dijeljenja, što je tipično za CISC uređaje, dizajner koji se bavi RISC procesorom mora koristiti nekoliko uzastopnih instrukcija za oduzimanje. Međutim, ovaj nedostatak je više nego nadoknađen cijenom i brzinom RISC uređaja. Osim toga, ako kreirate programe u C-u, tada takvi problemi uopće prestaju imati bilo kakav značaj za programera, jer ih rješava kompajler, koji automatski generiše sav nedostajući asemblerski kod.

U zoru mikroprocesora, razvoj softver odvijala isključivo na jednom ili drugom asemblerskom jeziku koji je fokusiran na određeni uređaj. U suštini, takvi jezici su bili simbolički mnemonici odgovarajućih mašinskih kodova, a prevod mnemonike u mašinski kod vršio je prevodilac. Međutim, glavni nedostatak asemblerskih jezika je to što je svaki od njih vezan za određenu vrstu uređaja i logiku njegovog rada. Osim toga, asembler je teško naučiti, što zahtijeva dosta truda da se nauči, što se, osim toga, ispostavi da je uzaludno ako se kasnije trebate prebaciti na korištenje mikrokontrolera drugih proizvođača.

Jezik C, kao jezik visokog nivoa, lišen je takvih nedostataka i može se koristiti za programiranje bilo kog mikroprocesora za koji postoji kompajler C. U jeziku C sve operacije niskog nivoa koje izvode računari su predstavljene u obliku apstraktnih konstrukcija, omogućavajući programerima da se koncentrišu na programiranje samo jedne logike bez brige o mašinskom kodu. Jednom kada naučite C, lako možete preći iz jedne porodice mikrokontrolera u drugu, trošeći mnogo manje vremena na razvoj.


Arhitektura AVR i PIC mikrokontrolera

Općenito, svi mikrokontroleri su izgrađeni prema istoj shemi. Upravljački sistem, koji se sastoji od programskog brojača i kola za dekodiranje, vrši čitanje i dekodiranje instrukcija iz programske memorije, a operativna jedinica je odgovorna za izvršavanje aritmetike i logičke operacije; I/O sučelje vam omogućava razmjenu podataka sa perifernim uređajima; i konačno, morate imati uređaj za pohranu programa i podataka (slika 1.1).

Rice. 1.1. Generalizirana struktura mikrokontrolera

Mi ćemo razmotriti mikrokontrolere uopšteno, bez vezivanja za bilo koju specifičnu vrstu AVR mikrokontrolera, tako da ćemo u nastavku razmotriti samo karakteristike memorijske arhitekture zajedničke većini mikrokontrolera, probleme ulaza/izlaza, rukovanje prekidima, resetovanje itd.

Memorija AVR mikrokontrolera

U AVR mikrokontrolerima, memorija je implementirana prema harvardskoj arhitekturi, koja podrazumijeva razdvajanje memorije instrukcija i podataka. To znači da se komandama pristupa nezavisno od pristupa podacima. Prednost ove organizacije je povećanje brzine pristupa memoriji.

Memorija podataka

Memorija podataka je dizajnirana za pisanje/čitanje podataka koje koriste programi. Nestabilan je, odnosno ako se napajanje mikrokontrolera isključi, svi podaci koji su u njemu pohranjeni bit će izgubljeni. U AVR mikrokontrolerima, memorija podataka ima razvijeniju strukturu u odnosu na PIC mikrokontrolere, kao što je prikazano na sl. 2.1.


Rice. 2.1. Struktura memorije podataka u AVR i PIC mikrokontrolerima

Područje SRAM (Static Random Access Memory) je prikazano na Sl. 2.1 je tačkasta, jer ga ne koriste svi AVR mikrokontroleri (ovo se odnosi i na interni i na eksterni SRAM). Njegova početna adresa je 0x060, a glavna adresa varira od uređaja do uređaja.

U nekim AVR mikrokontrolerima možete povećati SRAM memorijski prostor povezivanjem eksternih memorijskih blokova do 64 KB, ali to zahtijeva žrtvovanje portova A i C, koji se u ovom slučaju koriste za prijenos podataka i adresa.

Registri opšte namene

Područje registra opće namjene(radni registri) namijenjen je za privremeno skladištenje varijabli i pokazivača koje procesor koristi za izvršavanje programa. U AVR mikrokontrolerima se sastoji od 32 osmobitna registra (raspon adresa 0x000 - 0x01F). U PIC mikrokontrolerima, registri opšte namene su takođe osmobitni, ali njihov broj i opseg adresa zavise od specifičnog tipa uređaja.

U programima napisanim u C, direktan pristup registrima opšte namene obično nije neophodan osim ako se ne koristi kod asemblerskog jezika.

Registri posebnih funkcija PIC mikrokontrolera

Registri posebnih funkcija koriste se u PIC mikrokontrolerima za kontrolu različitih operacija. Kao i kod registara opće namjene, njihov broj i adresiranje se razlikuju od uređaja do uređaja. U programima napisanim u C-u, direktan pristup registrima posebnih funkcija obično nije potreban osim ako se ne koriste fragmenti asemblerskog jezika.

I/O područje AVR mikrokontrolera

I/O područje AVR mikrokontrolera sadrži 64 registra koji se koriste za kontrolu ili pohranjivanje podataka s perifernih uređaja. Svakom od ovih registara može se pristupiti preko I/O adrese (počevši od 0x000) ili preko SRAM adrese (u tom slučaju 0x020 treba dodati I/O adresi). C programi obično koriste konvencionalna imena I/O registara, a adrese su značajne samo za programe asemblerskog jezika.

Imena, I/O i SRAM adrese, i Kratki opis registri iz ulazno/izlazne oblasti AVR mikrokontrolera prikazani su u tabeli. 2.1. Treba napomenuti da u razni modeli mikrokontrolera, neki od navedenih registara se ne koriste, a adrese nisu navedene u tabeli. 2.1 su rezervisani od strane Atmel-a za buduću upotrebu.

Tabela 2.1. Opis registara iz I/O područja

Registrirajte ime I/O adresa SRAM adresa Opis
ACSR 0x08 0x28 Upravljanje analognim komparatorom i registar statusa
UBRR 0x09 0x29 UART registar brzine prijenosa
UCR 0x0A 0x2A Kontrolni registar UART primopredajnika
USR 0x0V 0x2V UART statusni registar primopredajnika
UDR 0h0S 0x2S UART registar podataka primopredajnika
SPCR 0x0D 0x2D Kontrolni registar SPI interfejsa
SPSR 0x0E 0x2E Registar statusa SPI interfejsa
SPDR 0x0F 0x2F SPI Data I/O registar
PIND 0x10 0x30 Pin D porta
DDRD 0x11 0x31 Port D Registar smjera podataka
PORTD 0x12 0x32 Registar podataka porta D
PINC 0x13 0x33 Pin C porta
DDRC 0x14 0x34 Port C Registar smjera podataka
PORTC 0x15 0x35 Registar podataka porta C
PINB 0x16 0x36 Pin B porta
DDRB 0x17 0x37 Registar smjera podataka porta B
PORTB 0x18 0x38 Registar podataka porta B
PINA 0x19 0x39 Pinovi priključka A
DDRA 0x1A 0x3A Port A Registar smjera podataka
PORTA 0x1V 0x3V Registar podataka porta A
EECR 0x1S 0x3S EEPROM registar kontrole memorije
EEDR 0x1D 0x3D EEPROM registar podataka
EEARL 0x1E 0x3E EEPROM memorijski adresni registar (niski bajt)
EEARH 0x1F 0x3F EEPROM memorijski adresni registar (visoki bajt)
WDTCR 0x21 0x41 Watchdog Timer Control Register
ICR1L 0x24 0x44
ICR1H 0x25 0x45 Registar hvatanja tajmera/brojača T/C1 (niski bajt)
OCR1BL 0x28 0x48 Registar poređenja B tajmera T/C1 (niski bajt)
OCR1BH 0x29 0x49 Registar poređenja B tajmera T/C1 (visoki bajt)
OCR1AL 0x2A 0x4A Registar poređenja A tajmera T/C1 (niski bajt)
OCR1AH 0x2V 0x4V Registar poređenja A tajmera T/C1 (visoki bajt)
TCNT1L 0x2S 0h4S Registar brojanja tajmera/brojala T/C1 (niski bajt)
TCNT1H 0x2D 0x4D Registar brojanja tajmera/brojala T/C1 (visoki bajt)
TCCR1B 0x2E 0x4E Kontrolni registar B tajmera/brojača T/C1
TCCR1A 0x2F 0x4F Kontrolni registar A tajmera/brojača T/C1
TCNT0 0x32 0x52 Registar brojanja tajmera/brojala T/C0
TCCR0 0x33 0x53 Upravljački registar tajmera/brojača T/C0
MCUCR 0x35 0x55 Upravljački registar mikrokontrolera
TIFR 0x38 0x58 Registar zastavice prekida tajmera/brojača
TIMSK 0x39 0x59 Registar maskiranja prekida tajmera
GIFR 0x3A 0x5A Opšti registar zastavice prekida
GIMSK 0x3V 0x5V Opšti registar maskiranja prekida
SPL 0x3D 0x5D Pokazivač steka (niski bajt)
SPH 0x3E 0x5E Pokazivač steka (visoki bajt)
SREG 0x3F 0x5F Statusni registar

SREG statusni registar AVR mikrokontrolera

Statusni registar sadrži zastavice stanja AVR mikrokontrolera i nalazi se u I/O oblasti na adresi $3F (SRAM adresa je $5F). Nakon što je dat signal za resetiranje, on se inicijalizira na nule.

Mikrokontroleri (u daljem tekstu MK) čvrsto su ušli u naše živote, na Internetu možete pronaći mnogo zanimljivih kola koja se izvode na MK. Šta ne možete sastaviti na MK: razni indikatori, voltmetri, kućni aparati (zaštitni uređaji, prekidači, termometri...), detektori metala, razne igračke, roboti itd. Lista bi mogla potrajati jako dugo. Video sam prvo kolo na mikrokontroleru prije 5-6 godina u jednom radijskom časopisu i skoro odmah okrenuo stranicu, misleći u sebi “Još uvijek neću moći da ga sastavim”. Zaista, u to vrijeme MK-ovi su za mene bili vrlo složen i neshvaćen uređaj; nisam imao pojma kako funkcioniraju, kako da ih flešujem i šta da radim s njima u slučaju neispravnog firmvera. Ali prije otprilike godinu dana, prvi put sam sastavio svoje prvo kolo na MK-u, bilo je to kolo digitalni voltmetar na 7 segmentnih indikatora i ATmega8 mikrokontroler. Desilo se da sam slučajno kupio mikrokontroler, dok sam stajao u odeljenju radio komponenti, momak ispred mene je kupovao MK, i ja sam takođe odlučio da ga kupim i pokušam nešto da sastavim. U svojim člancima ću vam pričati o tome AVR mikrokontroleri, naučit ću vas kako raditi s njima, pogledat ćemo programe za firmver, napravit ćemo jednostavan i pouzdan programator, pogledat ćemo proces firmvera i, što je najvažnije, probleme koji se mogu pojaviti ne samo za početnike.

Osnovni parametri nekih mikrokontrolera iz porodice AVR:

Mikrokontroler

Fleš memorija

RAM memorija

EEPROM memorija

I/O portovi

U power

Dodatni parametri AVR mega MK:

Radna temperatura: -55…+125*S
Temperatura skladištenja: -65…+150*S
Napon na RESET pinu u odnosu na GND: max 13V
Maksimalni napon napajanja: 6.0V
Maksimalna struja I/O linije: 40mA
Maksimalna struja napajanja VCC i GND: 200mA

Pinout modela ATmega 8X

Pinoutovi za ATmega48x, 88x, 168x modele

Raspored pinova za ATmega8515x modele

Raspored pinova za ATmega8535x modele

Raspored pinova za ATmega16, 32x modele

Raspored pinova za ATtiny2313 modele

Arhiva sa podacima za neke mikrokontrolere nalazi se u prilogu na kraju članka.

MK AVR instalacijski FUSE bitovi

Zapamtite, programirani osigurač je 0, neprogramirani je 1. Trebali biste biti oprezni kada postavljate osigurače, pogrešno programirani osigurač može blokirati mikrokontroler. Ako niste sigurni koji osigurač trebate programirati, bolje je prvi put bljesnuti MK bez osigurača.

Najpopularniji mikrokontroleri među radio-amaterima su ATmega8, zatim ATmega48, 16, 32, ATtiny2313 i drugi. Mikrokontroleri se prodaju u TQFP i DIP paketima, a za početnike preporučujem kupovinu u DIP-u. Ako kupite TQFP, bit će problematičnije flešovati ih; morat ćete kupiti ili lemiti ploču jer noge su im smještene vrlo blizu jedna drugoj. Savjetujem vam da instalirate mikrokontrolere u DIP paketima na posebnim utičnicama, zgodno je i praktično, ne morate odlemiti MK ako želite da ga reflashujete, ili ga koristite za neki drugi dizajn.

Gotovo svi moderni MK-ovi imaju mogućnost programiranja ISP-a u krugu, tj. Ako je vaš mikrokontroler zalemljen na ploču, onda da bismo promijenili firmver nećemo morati da ga odlemimo sa ploče.

Za programiranje se koristi 6 pinova:
RESETOVATI- Prijava MK
VCC- Plus napajanje, 3-5V, zavisi od MK
GND- Zajednička žica, minus snaga.
MOSI- MK ulaz (informacijski signal u MK)
MISO- MK izlaz (informacijski signal sa MK)
SCK- MK ulaz (signal sata u MK)

Ponekad koriste i pinove XTAL 1 i XTAL2; kvarc je vezan za ove pinove ako se MK napaja eksternim oscilatorom; u ATmega 64 i 128, MOSI i MISO pinovi se ne koriste za ISP programiranje; umjesto toga, MOSI pinovi su spojen na pin PE0, a MISO na pin PE1. Prilikom povezivanja mikrokontrolera sa programatorom, žice za povezivanje treba da budu što kraće, a kabl koji ide od programatora do LPT porta takođe ne bi trebalo da bude predugačak.

Oznaka mikrokontrolera može sadržavati čudna slova sa brojevima, na primjer Atmega 8L 16PU, 8 16AU, 8A PU, itd. Slovo L znači da MK radi na nižem naponu od MK bez slova L, obično 2,7V. Brojevi iza crtice ili razmaka 16PU ili 8AU označavaju internu frekvenciju generatora koji se nalazi u MK. Ako su osigurači podešeni da rade od vanjskog kvarca, kvarc bi trebao biti podešen na frekvenciju koja ne prelazi maksimum prema podacima, to je 20 MHz za ATmega48/88/168, i 16 MHz za druge atmega.

AVR mikrokontroleri. Osnove programiranja

Struktura i glavne karakteristike AVR mikrokontrolera

U ovom članku pokušaćemo da iznesemo u opštim crtama, glavne karakteristike, šta je „unutar njega“, šta je potrebno za početak rada sa AVR mikrokontrolerima itd.

Šta je Tiny, Mega?

Kompanija Atmel proizvodi opsežnu liniju osmobitnih mikrokontrolera baziranih na AVR jezgri, podijeljenih u nekoliko podfamilija, koje se razlikuju po tehničke specifikacije, područja primjene, cijena:

  • ATtiny– porodica AVR mikrokontroleri optimizovan za aplikacije koje zahtevaju relativno visoke performanse (do 1,0 MIPS i sposobne da rade na frekvencijama do 20,0 MHz), energetsku efikasnost (ATtiny je jedina porodica koja može da radi od napona napajanja od 0,7 V!) i kompaktnost (postoje mikrokontroleri!) u SOT23-6 paketu - samo 6 pinova, a svaki pin ima nekoliko funkcija, na primjer: I/O port, ADC ulaz, PWM izlaz, itd.). Tu se pojavljuje njihov opseg primjene: uređaji koji su kritični za cijenu, potrošnju energije, veličinu itd.
  • ATmega– AVR familija mikrokontrolera dizajniranih za upotrebu u raznim oblastima, zahvaljujući veoma veliki set periferni uređaji, velika količina programske memorije, ulazno/izlazni portovi, itd. Jednom riječju, ima prostora za proširenje.
  • ATxmega– nova porodica AVR mikrokontrolera sa više veliki set periferni uređaji od ATmega (dodati uređaj za direktni pristup memoriji, DAC, CRC modul, pun USB interfejs, brži ADC, itd.), sa radnim frekvencijama do 32,0 MHz.

Vrijedi napomenuti glavna karakteristika svi gore navedeni uređaji: svi imaju jedinstvenu arhitekturu, a to olakšava prijenos koda s jednog mikrokontrolera na drugi.
Mikrokontroleri su dostupni u DIP i SMD paketima (svaki sa svojim prednostima i nedostacima).

Najpopularnije kutije za pakovanje su:

  • DIP (Dual Inline Package) - kućište sa dva reda kontakata
  • QFP (Quad Flat Package) - ravni paket sa četiri reda kontakata
  • SOIC (Small-Outline Integrated Circuit) – integrisana kola male veličine (male površine)

Što se tiče radioamaterske prakse, za mikrokontrolere je, naravno, najveći interes DIP paket, budući da je s njima najlakše raditi - imaju prilično veliki razmak između pinova, a osim toga, za njih možete koristiti utičnice (ovo je poseban konektor u koji možete instalirati mikro krugove bez lemljenja).
Općenito, utičnica je izuzetno zgodan izum - igle su uvijek netaknute i možete više puta uklanjati i umetati mikrokolo, a mnogo je lakše napraviti prototipove budućih uređaja.

Napajanje i taktiranje AVR mikrokontrolera

AVR mikrokontroleri izgrađen pomoću CMOS tehnologije, koja osigurava vrlo nisku potrošnju energije. U praksi je potrošnja energije linearno i direktno proporcionalna radnoj frekvenciji (što je frekvencija veća, to je veća potrošnja energije).



Napon napajanja za AVR mikrokontrolere kreće se od 2,7 do 5,5 V(6.0V je maksimum, iako je moj AVR nekako radio na 7V - i ništa, i dan danas je živ). To znači da AVR može direktno kontrolirati, razmjenjivati ​​podatke, itd. With razni uređaji(i 3,3V-tolerantni i 5V-tolerantni) bez potrebe za korištenjem bilo kakvih pretvarača logičkog nivoa. Za precizniju obradu analognih signala, AVR obezbeđuje odvojene pinove za napajanje analognog dela mikrokontrolera, koji uključuje uređaje kao što su ADC, DAC i analogni komparator. Osim toga, AVR mikrokontroleri imaju nekoliko “režima mirovanja” kako bi osigurali najbolju moguću uštedu energije.

Također, svaki pin mikrokontrolera (u zavisnosti od radne frekvencije i napona napajanja) može napajati eksternih uređaja struja do 40,0 mA(maksimalno!), ali sve se može “skinuti/skinuti” iz mikrokontrolera do 200,0 mA(maksimalno!).

Frekvencijski opseg taktnih signala se razlikuje u zavisnosti od „porodičnog staža“ (ATtiny je najmlađa porodica AVR mikrokontrolera, a ATxMega najstarija). Za neke predstavnike, posebno porodicu ATtiny, radna frekvencija može doseći 20,0 MHz, za ATmega je to ne prelazi 16.0 MHz, dok ATxMega ne prelazi 32.0 MHz.Takođe, svaki AVR mikrokontroler ima interni RC oscilator do 8.0 MHz, što vam omogućava da bez eksterni izvor vremenski signal.

Atmel proizvodi mikrokontrolere sa maksimalnim radnim frekvencijama koje su upola niže od standarda (za povećanje uštede energije), tako da prilikom kupovine obratite pažnju na kodiranje mikrokontrolera. Detaljne informacije o tome koji mikrokontroler radi na kojim frekvencijama i naponima napajanja, koji tipovi kodiranja i pakovanja su dostupni za ovaj mikrokontroler, itd. možete pronaći u odjeljku “Informacije o narudžbi” svakog lista sa podacima.

Ispod je primjer tabele iz tablice podataka za mikrokontroler ATtiny13. U koloni "Šifra za narudžbu" možete vidjeti razlike između kodiranja i nije teško pogoditi s čime su povezani.



Šta se nalazi unutar AVR mikrokontrolera?

Kao što je već rečeno u predgovoru, AVR mikrokontroleri imaju harvardsku arhitekturu ( glavna karakteristika Ova arhitektura je da su programska memorija i RAM, kao i njihove pristupne magistrale, razdvojene kako bi se povećala brzina izvršavanja instrukcija: dok se jedna instrukcija izvršava, sljedeća se preuzima iz programske memorije) sa RISC procesorom, brzinom od 1,0 MIPS. Svi mikrokontroleri, bez obzira na njihov model i raspored, imaju istu centralnu procesorsku jedinicu (procesor/jezgro). Jedno jezgro čini program napisan na bilo kojem jeziku univerzalnijim i, po želji, može se zamijeniti u bilo kojem projektu, recimo, skupljim kontrolerom s drugim jeftinijim, uz minimalne promjene u kodu.

RISC(Reduced Instruction Set Computer) – procesor sa skupom jednostavnih instrukcija za sklapanje (dodavanje, oduzimanje, pomicanje lijevo/desno, „logičko I” itd.), sve instrukcije imaju fiksnu dužinu, procesor sadrži veliki broj općih registri namjene, itd. Da bi, na primjer, izračunao neku vrstu prosječne matematičke jednačine, procesor će morati izvršiti nekoliko jednostavnih instrukcija za sklapanje, za razliku od CISC procesora koji ima instrukcije "za sve prilike". Ali AVR nije baš RISC -procesor,s obzirom da nemaju sve instrukcije asemblera fiksni format.Većina ima 16-bitni format,ostale su 32-bitni.To znači da svaka instrukcija zauzima 16 ili 32 bita u programskoj memoriji.Usput,nefiksni Dužina instrukcija za sklapanje je ono što ga čini procesorom: Napredni virtuelni RISC procesor (AVR).

MIPS(Milion instrukcija u sekundi) - AVR mikrokontroleri su sposobni da izvrše (približno) milion instrukcija na 1,0 MHz, ili jednostavno rečeno, većina instrukcija za sklapanje se izvršava u jednom ciklusu takta.



Mozak AVR mikrokontrolera je njegova centralna procesorska jedinica (CPU/jezgro).

Neke komponente procesora:

Aritmetičko-logička jedinica

Brojač programa

Stack Pointer

  • Status Register
  • Flash programska memorija
  • Memorija podataka

Registri opšte namjene

Periferni registri (I/O registri)

RAM memorija

Clock System. Ovaj sistem može se uporediti sa kardiovaskularnim sistemom

Interrupt Unit

Periferni uređaji, navest ću neke od njih:

I/O portovi

EEPROM memorija

USB (samo xMega), USART, I2C, SPI, JTAG interfejsi

Watchdog, tajmer/brojač (sa PWM oscilatorom, hvatanje/upoređivanje, itd.)

ADC, DAC (samo xMega), analogni komparator

Eksterni moduli prekida

Skup perifernih uređaja u različitim porodicama (Tiny, Mega i xMega) i različitih mikrokontrolera ovih familija je različit. Postoje mikrokontroleri prepuni raznih perifernih uređaja, ali takođe, za razvoj koji je kritičan po pitanju troškova, postoje mikrokontroleri sa malim (neophodnim) skupom perifernih uređaja.

Jedna od prednosti AVR mikrokontrolera je mogućnost korištenja perifernih uređaja u različitim zajedničkim načinima rada, što vrlo često pojednostavljuje zadatak programera. AVR takođe ima ugrađen sistem za resetovanje i praćenje nivoa napona napajanja (System Control and Reset), koji obezbeđuje normalno pokretanje mikrokontrolera i po potrebi pouzdano gašenje.

Kontrolni/statusni registri periferije nalaze se u području memorije podataka, između registara opće namjene i RAM, koji osigurava visoke performanse pri radu sa perifernim uređajima. Programer, naravno, ima pun pristup ovim registrima (I/O Registrs).

Šta je potrebno da bi mikrokontroler radio?

  • napisati program (program). Da biste napisali program/algoritam za koji će mikrokontroler raditi, trebat će vam integrirano razvojno okruženje za AVR mikrokontrolere, koje uključuje uređivač koda/teksta, kompajler, linker i druge uslužne programe.
  • dizajn kola. Program sam po sebi nije dovoljan da mikrokontroler radi, on takođe zahteva minimalni body kit (skup eksternih elektronskih uređaja), da mikrokontroleru obezbedi napon napajanja i takt signal tako da barem jezgro mikrokontrolera radi.
Sljedeća slika prikazuje "klasični" komplet mikrokontrolera potreban za normalan rad.


Slika prikazuje minimalne zahtjeve kruga za ATmega16 mikrokontroler. Sa ovom shemom prebacivanja, jezgro AVR mikrokontrolera počinje raditi, možete koristiti sve ulazne/izlazne portove itd. periferije. Ukratko, mikrokontroler je u punoj borbenoj gotovosti. Da biste, na primjer, počeli koristiti ADC ili analogni komparator, trebali biste najprije programski konfigurirati periferni uređaj koristeći njegove registre za kontrolu/nadgledanje kako biste podesili način rada koji vam je potreban, itd., a zatim primijeniti signale koji se proučavaju na ulaze uređaja. odgovarajući periferni uređaj.

- Kvarc i kondenzatori C1, C2 (22 pF svaki) daju mikrokontroleru i svim njegovim perifernim uređajima visokokvalitetan takt signal (maksimalna frekvencija - 16,0 MHz).

Otpornik R1(10K), obezbeđuje visok nivo na RESET ulazu, neophodan za stabilan rad mikrokontrolera. Ako tokom rada mikrokontrolera napon na ovom pinu padne ispod određenog nivoa, mikrokontroler će se resetovati i rad predviđenog algoritma može biti poremećen.

- ISP konektor koristi se za programiranje u krugu, odnosno potrebno je upisati program koji ste upisali u memoriju mikrokontrolera direktno na ploču (bez skidanja mikrokontrolera iz uređaja).

- Gas L1 i kondenzatori C3, C4 daju napon napajanja analognim perifernim uređajima, kao i neke registre I/O portova. Ako mikrokontroler nema analogni dio, onda nema analognih pinova za napajanje, kao rezultat toga, ove komponente nisu potrebne. Pojednostavljeno ožičenje mikrokontrolera je sljedeće: prvo, budući da je mikrokontroler bio lišen eksternog takta, trebalo bi naznačiti da će taktiranje dolaziti od internog RC oscilatora postavljanjem odgovarajućih bitova osigurača (neka vrsta ograničavajućih radnih parametara mikrokontrolera ).
Maksimalna frekvencija internog oscilatora je 8,0 MHz, što znači da mikrokontroler neće moći da radi na svojoj maksimalnoj frekvenciji (performansi).
Drugo, analogni dio mikrokontrolera (kao i neki registri ulazno/izlaznih portova) nemaju izvor napajanja, što onemogućuje njihovu upotrebu.
Treće, nema konektora za programiranje u krugu, pa da biste upisali firmver u memoriju mikrokontrolera, morate ga ukloniti iz uređaja, zapisati negdje, a zatim vratiti na svoje mjesto. Kao što i sami razumijete, ovo nije baš zgodno (uklanjanje/umetanje, lemljenje/odlemljenje) i može dovesti do oštećenja kako samog mikrokontrolera (noge se mogu slomiti, pregrijati od lemljenja, itd.), tako i obližnjih uređaja - konektora, staza na brodu itd.

Mikrokontroler ovo je, moglo bi se reći, mali kompjuter. koji ima svoje CPU (registri, upravljačka jedinica i aritmetičko-logička jedinica), memorija, kao i razne periferiji, like I/O portovi, tajmeri, kontroleri prekida, razni generatori impulsa, pa čak i analogni pretvarači. Ne možete sve nabrojati. Nemoguće je nabrojati sve primjene mikrokontrolera.

Ali, ako sve uvelike pojednostavimo, onda je glavna funkcija mikrokontrolera „skakanje nogu“. One. ima nekoliko pinova (od 6 do nekoliko desetina u zavisnosti od modela) i na te pinove može postaviti ili 1 (visoki nivo napona, npr. +5 volti) ili 0 (niskonaponski nivo, oko 0,1 volti) u zavisnosti od softvera algoritam ugrađen u njegovu memoriju. Mikrokontroler takođe može odrediti stanje signala na svojim nogama (za to moraju biti konfigurisani kao ulaz) - da li je napon tamo visok ili nizak (nula ili jedan). Moderni mikrokontroleri također gotovo univerzalno imaju analogno-digitalni pretvarač na ploči - ovo je nešto slično voltmetru, omogućava vam ne samo praćenje 0 ili 1 na ulazu, već i potpuno mjerenje napona od 0 do referentnog (obično je referenca jednaka naponu napajanja) i predstavite ga kao broj od 0 do 1024 (ili 255, ovisno o veličini ADC bita)

Od njega možete napraviti smart House, i mozak za kućnog robota, inteligentni sistem upravljanja akvarijumom ili samo prekrasan LED ekran s tekućim tekstom. Među MK elektronskim komponentama, ovo je jedan od najsvestranijih uređaja. Na primjer, kada razvijam sljedeći uređaj, više volim da se ne zamaram raznim vrstama izopačenosti u dizajnu kola, već da povežem sve ulaze i izlaze na mikrokontroler, i obavim svu operativnu logiku u softveru. To dramatično štedi i vrijeme i novac, što znači novac na kvadrat.

Postoji jako, jako puno mikrokontrolera. Gotovo svaka kompanija koja poštuje sebe koja proizvodi radio komponente proizvodi vlastiti kontroler. Međutim, u ovoj raznolikosti ima reda. MK-ovi su podijeljeni u porodice; neću ih sve nabrajati, ali ću opisati samo najosnovnije osmobitne porodice.

MSC-51
Najobimniji i najrazvijeniji je MSC-51, najstariji od svih, dolazi iz intel 8051 i sada ga proizvodi mnogo kompanija. Ponekad se zove kratko C51. Ovo je 8-bitna arhitektura, po tome se razlikuje od većine ostalih osmobitnih arhitektura CISC arhitektura. One. Jedna naredba ponekad može izvesti prilično složenu radnju, ali naredbe se izvršavaju u velikom broju ciklusa takta (obično 12 ili 24 takta, ovisno o vrsti komande), imaju različite dužine i ima ih mnogo, za sve prilike . Među kontrolerima arhitekture MSC-51 sresti kao dinosaurusi AT89C51, koji ima minimum perifernih uređaja, sićušnu memoriju i nevažne performanse, te proizvode poput čudovišta Silicon Laboratories imajući u sebi vrlo mesnato meso različitih veličina perifernih uređaja, ogromne spremnike RAM-a i trajne memorije, moćna sučelja od jednostavnih UART‘a prije USB I CAN, i takođe brutalno brzo jezgro, isporučujući do 100 miliona operacija u sekundi. Što se mene lično tiče, obožavam C51 arhitekturu zbog njenog prokleto lijepog asemblera, o čemu je jednostavno pisati. Gigabajti koda su već napisani za ovu arhitekturu, kreirani su svi zamislivi i nezamislivi algoritmi.

Atmel AVR
Moja druga omiljena porodica je AVR iz kompanije Atmel. Uopšte Atmel proizvodi i MSC-51 kontrolera, ali se ipak fokusiraju na AVR. Ovi kontroleri već imaju 8-bitne RISC arhitekture i izvršavaju jednu naredbu u jednom taktu, ali za razliku od klasičnog RISC jezgre imaju veoma opsežan sistem komandovanja, iako ne tako zgodan kao kod C51, zbog čega mi se ne sviđaju. Ali AVR uvijek opremljen kao za rat i jednostavno punjen raznim periferijama, posebno kontrolorima potfamilije ATMega. Takođe ih je vrlo lako flešovati; za to nisu potrebni specijalizovani programeri ili bilo koja druga složena oprema. Sve što vam treba je pet žica i kompjuter sa njim LPT luka. Lakoća učenja omogućila je ovom kontroleru da čvrsto padne u srca mnogih, mnogih radio amatera širom svijeta.

Microchip PIC.
Još jedan 8-bitni RISC Mikrokontroler se odlikuje veoma izopačenim komandnim sistemom, koji se sastoji od svega nekoliko desetina komandi. Svaka naredba se izvršava u četiri takta. postoji niz prednosti, prvenstveno niska potrošnja energije, i brz start. Prosjek PIC kontroler nema toliko periferije kao u AVR-u, već same modifikacije PIC Toliko je kontrolera da uvijek možete odabrati kristal sa periferijama koje odgovaraju zadatku, ni više ni manje. On PIC'axe tradicionalno ugrađeni kompjuteri za automobile, kao i brojni kućni alarmi.

Koju porodicu izabrati? Oh, to je teško pitanje. Na brojnim forumima i konferencijama i dalje se vode žestoke borbe na temu koja je porodica bolja, fanovi AVR svađa sa sljedbenicima MSC-51, usput, ne zaboravljajući udariti bubrege PIC'ovce, na koje odgovaraju narav.

Ovdje je situacija kao u Starcraftu :) Ko je kul? Ljudi? Zerg? Protoss? Sve je u vezi sa aplikacijom, skalom zadataka i nizom drugih parametara. Svaka porodica ima svoje prednosti i mane. Ali lično, izabrao bih AVR i to iz ovih razloga:

  • 1. Dostupnost u Rusiji. Ovi kontrolori su zasluženo popularni i voljeni u narodu, što znači da su naši trgovci voljni da ih nose. Međutim, kao i PIC. Sa MSC-51 situacija je gora. Nije problem nabaviti zastarjeli AT89C51, ali kome su potrebni? Ali moderni silabi su već ekskluzivni.
  • 2. Niska cijena. Općenito, PIC je poznat po svojoj niskoj cijeni u svijetu, ali ironija je u tome što besplatno počinje samo ako ga kupite u kolima. Zapravo, na pravom brojaču, AVR će biti 30-40 posto jeftiniji od PIC-a sa nešto više funkcionalnosti. Sa MSC-51 situacija je jasna u prvoj tački. Ekskluzivnost nije samo rijetka, već je i skupa.
  • 3. Mnogo perifernih uređaja odjednom. Za serijski uređaj to je prilično nedostatak. Mnogo je bolje imati samo ono što je potrebno za trenutni zadatak, a ostalo neka vam ne smeta i ne troši energiju. Po tome je PIC poznat svojim širenjem raspon modela, gdje možete pronaći kontroler koji će imati ono što vam treba, a ne ono što vam ne treba. Ali mi ćemo učiti i raditi to za sebe! Zato nam je bolje da imamo sve odjednom iu rezervi. A ovdje je AVR glava i ramena iznad PIC-a, iznova i iznova izbacuje sve više i više punjenih kontrolera. Kupio sam sebi AtMega16A i to je to, možeš učiti cijelu porodicu.
  • 4. Jedno jezgro. Činjenica je da svi moderni AVR uređaji imaju istu jezgru sa unificirani sistem komande Postoje samo neke razlike na perifernom nivou (i one su male). One. kod sa nekog malog ATTiny13 može se lako kopirati i zalijepiti u ATMega64 i radi gotovo bez modifikacija. I obrnuto, gotovo bez ograničenja. Istina, stariji AVR modeli (sve vrste AT90S1200) imaju ograničenu kompatibilnost odozgo prema dolje - imaju malo manji komandni sistem. Ali sve je na vrhuncu. Microchip ima čitavu gomilu porodica. PIC12/16/18 sa različitim komandnim sistemima. 12. familija je obično sitnica (kao Tiny u AVR-u), a 18 je već ozbiljniji kontroleri (analogno Mega AVR-u) I ako se kod od 12 može prevući na 18, onda nazad fig.
  • 5. Opsežan sistem komandi za AVR kontrolere. AVR ima oko 130 komandi, dok Microchip PIC ima samo 35. Čini se da je PIC pobjednik - manje komandi, lakši za učenje. Pa, da, upravo tako zvuči slogan mikročipa, nešto poput "Samo 35 timova!" Samo što je ovo sranje. Uostalom, šta je komanda procesora? To je alat! Zamislite samo dva kalkulatora - običan, računovodstveni i inženjerski. Računovodstvo je mnogo lakše naučiti nego inženjerstvo. Ali pokušati izračunati sinus na njemu? Ili logaritam? Ne, možete, ne raspravljam se, ali koliko će pritisaka na dugme i međukalkulacija biti potrebno? Ista stvar! Mnogo je praktičnije raditi kada imate gomilu različitih radnji pri ruci. Dakle, što je veći komandni sistem, to bolje.
  • 6. Dostupnost besplatnih cross-platform C kompajlera. Naravno, uvijek možete pronaći pukotinu. Gde gde, ali kod nas to nikada nije bio problem. Ali zašto krasti nešto ako imate nešto besplatno? ;)
  • 7. Pa, posljednji argument je obično najsnažniji. Prisustvo nekoga ko bi podučavao i savjetovao. Pomogao savjetima i uputio me na pravi put. Odabrao sam AVR za sebe i na ovoj stranici (od najmanje za sada) ova porodica će biti potpuno shvaćena, što znači da nemate mnogo izbora :))))))

Oh, ali postoji čitava gomila ovih istih AVR-a. Koju da uzmem???
Interest Ask. Općenito, bolje je odabrati MK za zadatak. Ali da biste to proučili, bolje je zgrabiti nešto punjeno.

Prvo, pogledajmo oznake kako biste odmah iz cjenovnika shvatili kakva je životinja ispred vas. Evo primjera za vas

ATmega16A - 16PI

  • AT- proizvedeno u Atmelu
  • Mega- tip porodice. Tu su i Tiny i Xmega (nova je užasna stvar, kompletan helikopter). Općenito, smatralo se da je Tiny, kao, niskobudžetan sa malom količinom mljevenog mesa i općenito manjkav, a Mega je, naprotiv, sve odjednom. U stvarnosti, razlika između familija Tini i Mega u pogledu mljevenog mesa je sada minimalna, ali Tini ima manje memorije i dolazi sa brojem iglica od 6 do 20.
  • 16 — količina fleš memorije u kilobajtima. Zapravo, nije sve tako jednostavno. Broj memorije je stepen dva. Dakle, Mega162 nije kontroler sa 162KB flash memorije, već neka vrsta Mega16 modifikacije2 sa 16KB memorije. Ili Mega88 nije 88kb, već 8kb flash, a drugi 8 je neka vrsta nagoveštaja da je ovo dalji razvoj Mega8. Isto tako Mega48 ili Mega168. Isto važi i za Tinijevu porodicu. Na primjer, Tini2313 - 2 kilobajta flash memorije. Šta je 313? Ko dođavola zna šta su mislili :) Ili Tiny12 - 1kb Flash. Općenito, čip je očišćen.
  • A— prefiks potrošnje energije (obično). Ovo pismo možda ne postoji, ali u novoj seriji je prisutno skoro svuda. Na primjer, V i L serije su niskonaponske i mogu raditi od 2,7 volti. Istina, za niski napon morate platiti manje frekvencije. Ali i ovdje je overclocking moguć, ništa ljudsko nije nam strano :) A i P imaju novu AVR seriju sa PicoPower tehnologijom tj. ultra-ekonomičan. Nema razlike u punjenju i unutrašnjoj strukturi sa njihovim neindeksnim modelima, jedina razlika je u radu svih režima mirovanja i potrošnji energije. One. Mega16A se lako može promijeniti u Mega16 bez A. I ništa drugo ne treba mijenjati.
  • 16 — Limit frekvencija sata u megahercima. U stvarnosti, možete ga overklokovati na 20 ;)
  • P- tip školjke. Važna karakteristika. Činjenica je da se ne može svaki slučaj zalemiti kod kuće bez hemoroida. Za sada preporučujem da obratite pažnju na P-DIP kućište. Ovo je glomazno čudovište, ali ga je lako lemiti i, što je najvažnije, lako se zalijepi u posebnu utičnicu i ponovo se iz nje izvlači. Bolje je za sada ostaviti SOIC (indeks S) ili TQFP (indeks A) kućišta. Bez dobrog iskustva u lemljenju i mogućnosti kvalitetnog jetkanja štampana ploča Bolje je ne petljati se u njih.
  • I— Vrsta kalajisanja elektroda. I - olovni lem. U - bez olova. Za vas nema apsolutno nikakve razlike. Uzmi onaj koji je jeftiniji.

Preporucujem sledece modele:

  • ATMega16A-16PU - jeftin (oko 100-150 rubalja), mnogo pinova, puno perifernih uređaja. Dostupan u različitim kućištima. Jednostavno je, moj kurs obuke i svi daljnji primjeri su prilagođeni tome.
  • ATTiny2313-20SU je idealna opcija za izradu svih vrsta satova/budilnika i druge male kućne automatizacije. Jeftino (40 rubalja), kompaktno. Loša strana je što nema ADC-a.
  • ATmega48/88/168 bilo koji od ovih kontrolera. Kompaktan (u tqfp slučaju to je najtanji i najmanji AVR), jeftin (100-150 rubalja), punjen do vrha.
  • ATmega128 za iskusne. Veliki, moćni, puno memorije. Skupo (oko 400r)

Pretpostavimo da vam je dat zadatak - da LED lampica treperi.
Razgovarajmo o tome kako riješiti ovaj problem:

Opcija 1 je najjednostavnija, uzmite prekidač/dugme, postavite slavea pored njega, koji će uključiti/isključiti LED pomoću prekidača. Obično se u Rusiji većina problema rješava na ovaj način. A šta treperi?)))
Opcija 2 - sastavite multivibrator. Već zanimljivije. Za treptanje sasvim je dovoljna jedna LED dioda dobra odluka. Štaviše, jednostavan je, jeftin i pouzdan.
Opcija 3 - sastaviti na mikrokontroleru. Skuplje od sklapanja multivibratora, ali po mom mišljenju lakše. Napisao sam program, pokrenuo ga i dobio rezultat. Nema podešavanja. Naravno, ovo je idealan slučaj.

Sada zakomplikujmo zadatak. Na primjer, 5 LED dioda i 5 opcija za njihovo treptanje (brzina i redoslijed njihovog treptanja se mijenja). Prva opcija odmah nestaje; metoda 2 se može učiniti, ali veličina uređaja će se naglo povećati. Opcija 3 će ostati približno iste veličine, samo dodajte nekoliko linija koda. Dakle, postoje različiti slučajevi u kojima je nemoguće bez mikrokontrolera, a gdje je on suvišan. Stoga uvijek procijenite troškove rada, vremena i finansijske troškove.

Dakle, mikrokontroler nam omogućava fleksibilno upravljanje sistemima, procesima itd., malih je dimenzija, a po funkcionalnosti je miniračunar. Mikrokontrolere proizvode različite kompanije. Jedna od varijanti AVR mikrokontrolera iz Atmela. Zašto oni? Lako ih je pronaći u trgovini, primjere je lako pronaći spreman kod, ugrađena funkcionalnost omogućava rješavanje čak i složenih problema.

Da bi mikrokontroler shvatio šta želimo od njega, moramo u njega učitati firmver - niz radnji koje treba da izvrši. Firmware je niz jedinica i nula. Da bi bilo praktičnije, izmišljeni su programski jezici. Na primjer, pišemo uključiti, a sam kompajler to pretvara u niz jedinica i nula koji je razumljiv mikrokontroleru. Slika prikazuje HEX firmver ako ga otvorite pomoću notepada.

Mikrokontroleri su obično programirani u C ili asemblerskom jeziku. Uglavnom, nema razlike u tome na čemu pisati. Zbog velikog broja gotovih primjera, odlučio sam se u korist C. Osim toga, postoji nekoliko programa koji vam omogućavaju pisanje na C. Na primjer, besplatni, vlasnički AVR Studio, CodeVision, WinAVR, itd. Iako pišem u CodeVision-u, vrlo aktivno koristim AVR Studio kao debugger.

Nadam se da vam je barem nešto od ovoga postalo jasno. Po mom mišljenju, najteže je napraviti prvi korak. Onaj ko to uradi, pobedi svoj strah i svoju lenjost, sigurno će postići rezultate. Sretno u učenju mikrokontrolera.