Atmega8 programiranje. Programiranje AVR mikrokontrolera. MK interfejs u režimu programiranja

Za prijenos sa računara na mikrokontroler potrebni su nam USBasp i program AVRDUDE.Danas postoji širok izbor programera dizajniranih za programiranje AVR mikrokontroleri. Među njima možete pronaći mnogo domaćih, koji se teško mogu nazvati programerima, jer su direktno povezani na COM port pomoću samo nekoliko otpornika. kako god savremenih kompjutera a laptopi praktički više nisu opremljeni COM portovima, pa je jedan od glavnih kriterija pri odabiru programatora mogućnost povezivanja na njega. USB port. Najjeftiniji, najjednostavniji i najčešći je USBasp programator. Može se kupiti u skoro svakoj radio prodavnici pristupačna cijena. Njegova cijena je Kineski internet Trgovina se kreće od 1,5 do 3 dolara.

Programer USBasp

Računar komunicira sa mikrokontrolerom pomoću USBasp programatora preko USB porta, a podaci se prenose preko interfejsa SPI S erial P eripheral I interfejs(serijski periferni interfejs). Za komunikaciju MK-a sa programatorom koriste se posebni pinovi: MOSI, MISO, SCK, RESET, VCC, GND. Iako SPI pretpostavlja upotrebu samo tri pina MOSI, MISO i SCK, ali ćemo koristiti svih šest pinova.

Prilikom razmjene podataka putem interfejsa SPI Mikrokontroler može istovremeno ili primati (MISO pin) ili prenositi podatke (MOSI pin). Podešavanje načina prijema ili slanja podataka vrši se primjenom određenog impulsa na SCK pin.

Konektor programatora, u pravilu, ima 10 pinova i povezan je s mikrokontrolerom pomoću 10-žičnog kabela. Međutim, prikladnije je koristiti kablove koji imaju 6-pinski adapter, jer su u ovom slučaju svi pinovi zauzeti. Za desetopinski konektor, jedan pin ostaje nezauzet, a četiri pina su spojena na zajedničku žicu (GND).

Da bi računar otkrio programator, morate instalirati USBasp drajver.

Fotografija programatora spojenog na ATmega8 mikrokontroler je prikazana ispod.

Jedina mana ili, tačnije, manja neugodnost ovog programera je što ga Atmel Studio ne podržava (bez raznih trikova) pa morate koristiti program treće strane. Najdokazaniji je AVRDUDE.

Postavke

Sada samo treba da završimo poslednji korak. Pokrenite program AVRDUDE. Podrazumevano se otvara kartica Program. Na dnu prozora u meniju Postavke izaberite tip programatora usbasp. Sljedeći u kategoriji Mikrokontroler odaberite naš ATmega8 mikrokontroler. Ispod u kategoriji Flash kliknite na ikonu elipse i u meniju koji se otvori odredite putanju do kompajlirane datoteke sa ekstenzijom hex. Putanja do datoteke i sama datoteka bit će ista kao što smo prethodno naveli u .

Da biste bili sigurni da je operativni sistem detektovao programator (drajver programatora je ispravno instaliran) i da je ispravno povezan sa mikrokontrolerom, kliknite na dugme Čitanje. Ako nema grešaka, pojaviće se prozor sa unosom „ Ćelije za kalibraciju generatora su očitane!” I heksadecimalni broj će biti prikazan u gornjem prozoru. Svaki MK ima svoj broj.

Prije snimanja novi program Preporučuje se brisanje memorije mikrokontrolera. To se može učiniti klikom na dugme Obriši sve. Kao rezultat, pojavit će se prozor koji pokazuje da je kristal čist.

Sada kliknite na dugme Program u kategoriji Flash. Kada je program uspješno snimljen u MK, pojavljuje se prozor sa unosom ispod.

Rezultat snimljenog, ili kako još kažu, firmware programa je upaljena LED dioda povezana na PC0 pin našeg mikrokontrolera.

Dobar dan. Hajde da nastavimo. Nakon što smo se upoznali sa procesom debagovanja programa koji smo napisali u “atmel studiju” i virtuelno sklopili kolo sa jednom LED diodom u “proteusu”, došlo je vreme da sklopimo sklop u hardveru i flešujemo mikrokontroler.

Za programiranje prototipa ( atmega 8) koristićemo USBASP programator. izgleda ovako:

Kabel će biti spojen na konektor u koji su spojeni džamperi, koji će zauzvrat biti spojeni na utičnice matične ploče na kojoj je instaliran mikrokontroler:

Prvi pin je na konektoru označen strelicom.


Nakon što smo otkrili programer. Pređimo na sklapanje sklopa u hardveru. Mikrokontroler montiramo na matičnu ploču. Da vas podsjetim da je prva etapa na MK označena malim krugom.

Zadatak je da povežete pinove programatora sa "kamenim" pinama.

Spajamo kratkospojnike na 10-pinski konektor. Koristimo sljedeće pinove MOSI, RST, SCK, MISO, VTG (VCC), GND.

Nadam se da ste već preuzeli datasheet na atmega8. Ako ne, možete ga preuzeti. Gledamo pinout pinova mikrokontrolera.

Spajamo džampere na sljedeće pinove:

  • VCC na pin 7 MK;
  • SCK na pin 19 MK;
  • MISO na pin 18 MK;
  • MOSI na pin 17 MK;
  • GND (pin programera 10) na pin 8 MK;
  • RST na 1 pin MK;

Za dalji uspješan rad, operativni sistem će prilikom prvog pokretanja shaitan mašine (programatora) ponuditi instaliranje drajvera neophodnih za rad uređaja.

Ne bi trebalo biti nikakvih problema pri radu sa ekspeditorom. Skinuti. Kreirajte fasciklu u koju ćemo raspakovati preuzetu arhivu. Zatim u čarobnjaku za instalaciju hardvera navodimo putanju do fascikle sa raspakiranim drajverom.

Ako koristite Windows 7 ili noviji, možda ćete naići na neke manje poteškoće. Drajveri za programator su prilično stari, tako da nemaju digitalni potpis. Kada pokušate da instalirate takav drajver, operativni sistem će prikazati nešto poput ovoga *

„Digitalni potpis vozača potreban za ovog uređaja. At poslednja promena oprema ili softver neispravno potpisan ili oštećen fajl ili malware nepoznato porijeklo. (Šifra 52)."

Da biste ispravili situaciju, morate onemogućiti verifikaciju digitalnog potpisa vozača. Neću opisivati ​​kako to onemogućiti (svako ima svoj operativni sistem), mogu se naći na internetu.

Nakon što onemogućite verifikaciju potpisa, u čarobnjaku za instalaciju hardvera navedite putanju do fascikle sa raspakovanim drajverom.

Nadam se da vam je sve uspjelo i da je programer spreman za rad.

Pređimo na sastavljanje kola sa LED diodom.

Za flešovanje firmvera mikrokontrolera koristićemo program “avrdudeprog”. Nalazi se u opštoj arhivi.

Odaberite atmega8 sa liste mikrokontrolera. Nakon odabira MK-a, pojavit će se prozor koji vas obavještava da su osigurač i Lock bitovi podešeni prema zadanim postavkama.

Zatim otvorite karticu Osigurači. Jednostavnim riječima Osigurači su postavke MK konfiguracije s kojima se najbolje ne igrati. Za slučaj kada ste kupili isti kontroler kao ja i nemate eksterni kvarcni rezonator (koristite interni oscilator frekvencija sata), označite potpuno ista polja kao što je prikazano na slici. Mora postojati kvačica pored „obrnute“ stavke.

Konfigurisane postavke „naređuju“ Atmega8A da obavlja svoj rad podložan taktiranju internog oscilatora (frekvencija takta 8 MHz). Da bi postavke stupile na snagu, potrebno je da kliknete na dugme „Programiranje“. Ali prije pritiska, provjerite je li sve ispravno postavljeno.

Povratak na stranicu “Program”.

Nakon što smo već rekli programu koji mikrokontroler ćemo flešovati, biramo fajl firmvera koji smo napisali u prošloj lekciji. Ima HEX ekstenziju. Nalazi se u folderu "Debug".

Prije bljeskanja „šljunka“, kliknite na dugme „Obriši sve“. Ovo će vas zaštititi od neshvatljivih grešaka (šta ako je kamen već sašiven):

Uživamo u rezultatu našeg rada :) Dalje se nastavlja...

Više od jednom ili dva puta sam rekao da učenje MK-a treba početi sa asemblerom. Tome je bio posvećen čitav kurs na web stranici (iako nije baš konzistentan, ali postepeno ga češljam do adekvatnog izgleda). Da, teško je, rezultat neće biti prvog dana, ali naučićete da razumete šta se dešava u vašem kontroleru. Znat ćete kako to funkcionira, a ne kao majmun kopirati tuđe izvore i pokušati razumjeti zašto je odjednom prestao raditi. Osim toga, C-u je mnogo lakše napraviti redneck kod koji će izaći s vilama u najnepovoljnijem trenutku.

Nažalost, svi žele rezultate odmah. Pa sam odlučio da krenem drugim putem - napravim tutorijal o C, ali sa pokazivanjem njegovog donjeg rublja. Dobar programer za ugradnju uvijek čvrsto drži svoj komad hardvera za vijak, ne dozvoljavajući mu da napravi nijedan korak bez dozvole. Dakle, prvo će biti C kod, zatim šta je kompajler proizveo i kako sve to zapravo radi :)

S druge strane, Xi jaka tačka Ovo je prenosivost koda. Ako, naravno, sve ispravno napišete. Razdvajanje radnih algoritama i njihovih hardverskih implementacija u različite dijelove projekta. Zatim, da bi se algoritam prebacio na drugi mikrokontroler, biće dovoljno da se prepiše samo sloj interfejsa, u koji se upisuju svi pozivi hardveru, i ostavi sav radni kod kakav jeste. I, naravno, čitljivost. Izvorni kod C je lakši za razumevanje na prvi pogled (iako... na primer, nije me briga na šta da pokažem - bilo C ili ASM :)), ali, opet, ako je sve ispravno napisano. Takođe ću obratiti pažnju na ove tačke.

Lavovski dio svih primjera bit će moj kao probni komad na koji će biti instaliran lavovski dio svih primjera. razvojni odbor.

Prvi C program za AVR

Odabir kompajlera i podešavanje okruženja
Postoji mnogo različitih C kompajlera za AVR:
Prije svega ovo IAR AVR C- je gotovo definitivno prepoznat kao najbolji kompajler za AVR, jer sam kontroler je kreiran u bliskoj saradnji između Atmela i stručnjaka iz IAR-a. Ali morate platiti za sve. A ovaj kompajler nije samo skup komercijalni softver, već ima toliku tonu postavki da je potrebno mnogo truda da se jednostavno prevede u njega. Zaista nisam razvio prijateljstvo s njim; projekat je trunuo zbog čudnih grešaka u fazi povezivanja (kasnije sam saznao da je to bila kriva pukotina).

Drugi dolazi WinAVR GCC- moćan kompajler za optimizaciju. Potpuno otvoren izvor, cross-platforma, općenito, sve radosti života. Takođe se savršeno uklapa u AVR Studio omogućavajući vam da otklanjate greške upravo tamo, što je prokleto zgodno. Generalno, izabrao sam ga.

Tu je i CodeVision AVR C je veoma popularan kompajler. Postala je popularna zbog svoje jednostavnosti. Program rada Možete ga dobiti za samo nekoliko minuta - čarobnjak za startni kod uvelike pomaže u tome, pečateći standarde za inicijalizaciju svih vrsta uartova. Da budem iskren, pomalo sam sumnjičav prema tome - kada sam morao da demontiram program koji je napisao ovaj kompajler, ispostavilo se da je to neka vrsta nereda, a ne koda. Užasna količina nepotrebnih pokreta i operacija, što je rezultiralo značajnom količinom koda i sporim performansama. Međutim, možda je došlo do greške u DNK osobe koja je napisala originalni firmver. Plus on želi novac. Ne toliko kao IAR, ali primjetno. A u demo modu vam omogućava da napišete ne više od 2 kb koda.
Naravno da postoji pukotina, ali ako ćeš krasti, to je milion, u IAR smislu :)

Tu je i Image Craft AVR C I MicroC iz mikroelektronike. Nisam morao da koristim ni jedno ni drugo, ali S.W.G. veoma pohvalno MicroPascal, kažu, užasno zgodno programsko okruženje i biblioteke. Mislim da MicroC neće biti ništa lošiji, ali je i plaćen.

Kao što sam rekao, izabrao sam WinAVR iz tri razloga: besplatan je, integriše se u AVR Studio i za njega je napisan. spreman kod za sve prilike.

Stoga preuzmite instalaciju WinAVR-a sa AVR Studio-om. Zatim se prvo instalira studio, zatim se WinAVR namota na vrh i prikači na studio u obliku dodatka. Toplo preporučujem instalaciju WinAVR-a na kratkom putu, nešto poput C:\WinAVR, na ovaj način ćete izbjeći mnogo problema sa putanjama.

Kreiranje projekta
Dakle, studio je instaliran, C je sjeban, vrijeme je da pokušamo nešto programirati. Počnimo s jednostavnim, najjednostavnijim. Pokrenite studio, izaberite tamo novi projekat, kao AVR GCC kompajler i unesite naziv projekta.

Otvara se radno polje sa praznim *.c fajlom.

Sada neće škoditi da konfigurišete prikaz putanja u studijskim obeleživačima. Da biste to učinili, idite na:
Meni Alati - Opcije - Općenito - Kartice datoteka i odaberite “Samo naziv datoteke” sa padajuće liste. U suprotnom će biti nemoguće raditi - kartica će sadržavati punu putanju datoteke i neće biti više od dvije ili tri kartice na ekranu.

Postavljanje projekta
Uopšteno govoreći, smatra se klasičnim kreiranje make datoteke u kojoj su opisane sve zavisnosti. I to je vjerovatno tačno. Ali za mene, koji sam odrastao sa potpuno integrisanim IDE-ovima kao što su uVision ili AVR Studio ovaj pristup je duboko stran. Zato ću to uraditi na svoj način, sve koristeći studijski način.

Gurnite dugme sa zupčanikom.


Ovo su postavke za vaš projekat, odnosno postavke za automatsko generiranje make datoteke. Na prvoj stranici samo trebate unijeti frekvenciju na kojoj će vaš MK raditi. Ovo ovisi o bitovima osigurača, tako da pretpostavljamo da je naša frekvencija 8000000Hz.
Također obratite pažnju na liniju optimizacije. Sada postoji -Os - ovo je optimizacija veličine. Ostavite kako je za sada, onda možete pokušati igrati s ovim parametrom. -O0 uopće nije optimizacija.

Sljedeći korak je konfiguracija staza. Prije svega, dodajte svoj projektni direktorij tamo - tamo ćete dodati biblioteke trećih strana. Putanja “.\” će se pojaviti na listi.

Make fajl je generisan, možete ga pogledati u podrazumevanoj fascikli u vašem projektu, samo pogledajte i vidite šta se tamo nalazi.


To je sve za sada. Kliknite OK svuda i idite na izvor.

Formulacija problema
Prazan list papira primamljiv je za implementaciju neke lukave ideje, jer banalno treptanje diode više ne funkcionira. Hajdemo odmah uhvatiti bika za rogove i uspostaviti vezu sa kompjuterom - ovo je prva stvar koju radim.

Radit će ovako:
Kada jedinica (kod 0x31) stigne na COM port, mi ćemo uključiti diodu, a kada stigne nula (kod 0x30) ona se gasi. Štaviše, sve će se raditi na prekidima, a pozadinski zadatak će biti treptanje druge diode. Jednostavno i smisleno.

Sastavljanje kola
Moramo spojiti USB-USART konvertorski modul na USART pinove mikrokontrolera. Da biste to učinili, uzmite kratkospojnik od dvije žice i postavite ga na igle poprečno. Odnosno, povezujemo Rx kontrolera sa Tx pretvarača, a Tx pretvarača sa Rx regulatorom.

Na kraju, ovo je dijagram:


Ne razmišljam o povezivanju preostalih pinova, napajanja ili resetiranja, to je standardno.

Pisanje koda

Odmah da rezervišem da se neću posebno upuštati u opis samog C jezika. Jednostavno postoji kolosalna količina materijala za ovo, u rasponu od klasičnog “C programskog jezika” od K&R-a do raznih priručnika.

Pronašao sam jednu takvu metodu u svojoj zalihi; jednom sam je koristio za proučavanje ovog jezika. Tamo je sve kratko, jasno i precizno. Postepeno ga sastavljam i prevlačim na svoju web stranicu.

Tačno je da još nisu sva poglavlja prebačena, ali mislim da neće još dugo.

Malo je vjerovatno da to mogu bolje opisati, pa iz obuka, umjesto detaljnog objašnjenja suptilnosti, jednostavno ću dati direktne veze do pojedinačnih stranica ovog priručnika.

Dodavanje biblioteka.
Prije svega, dodajemo potrebne biblioteke i zaglavlja s definicijama. Na kraju krajeva, C je univerzalni jezik i moramo mu objasniti da radimo posebno sa AVR-om, pa napišite red u izvornom kodu:

1 #include

#include

Ova datoteka se nalazi u folderu WinAVR i sadrži opis svih registara i portova kontrolera. Štaviše, sve je tu lukavo, sa vezivanjem za određeni kontroler, koji kompajler prenosi preko napraviti fajl u parametru MCU i na osnovu ove varijable, datoteka zaglavlja je povezana sa vašim projektom sa opisom adresa svih portova i registara za ovaj određeni kontroler. Vau! Bez toga je također moguće, ali tada nećete moći koristiti simbolička imena registara kao što su SREG ili UDR i morat ćete zapamtiti adresu svakog kao što je "0xC1", što će biti glavobolja.

Sam tim #include<имя файла> omogućava vam da svom projektu dodate sadržaj bilo koje vrste tekstualnu datoteku, na primjer, datoteka s opisom funkcija ili dio drugog koda. I da bi direktiva mogla pronaći ovu datoteku, odredili smo putanju do našeg projekta (WinAVR direktorij je tamo već registriran po defaultu).

Glavna funkcija.
C program se u potpunosti sastoji od funkcija. Mogu biti ugniježđene i pozvane jedna od druge bilo kojim redoslijedom i Različiti putevi. Svaka funkcija ima tri potrebna parametra:

  • Povratna vrijednost je npr. sin(x) vraća vrijednost sinusa od x. Kao u matematici, ukratko.
  • Preneseni parametri su isti X.
  • Tijelo funkcije.

Sve vrijednosti koje se prenose i vraćaju moraju biti nekog tipa, ovisno o podacima.

Svaki C program mora sadržavati funkciju main kao ulazna tačka u glavni program, inače uopšte nije C :). Po prisutnosti main u tuđem izvornom kodu iz milion datoteka, možete shvatiti da je ovo glavni dio programa, gdje sve počinje. Pa da pitamo:

1 2 3 4 5 int main(void) (vrat 0 ;)

int main(void) (vrat 0;)

To je to, prvo najjednostavniji program napisano, nema veze što ništa ne radi, tek smo počeli.

Hajde da shvatimo šta smo uradili.
int Ovo je tip podataka koji vraća glavna funkcija.

Naravno, u mikrokontroleru main u principu se ništa ne može vratiti i u teoriji bi trebalo void main(void), ali GCC je prvobitno dizajniran za PC i tamo program može vratiti vrijednost operativni sistem po završetku. Stoga je GCC uključen void main(void) kune se upozorenjem.

Ovo nije greška, radit će, ali ne volim upozorenja.

void ovo je tip podataka koji prosljeđujemo funkciji, u ovom slučaju main takođe ne može prihvatiti ništa izvana, dakle void- lutka. Stub se koristi kada nema potrebe da se bilo šta prenosi ili vraća.

Evo ih { } vitičaste zagrade su programski blok, u ovom slučaju tijelo funkcije main, kod će se tamo nalaziti.

povratak- ovo je povratna vrijednost koju će glavna funkcija vratiti po završetku, pošto imamo int, odnosno broj, onda moramo vratiti broj. Iako ovo i dalje nema smisla, jer... na mikrokontroleru, ne možemo ići nigdje od glavnog. Vraćam nulu. Jer nije bitno. Ali kompajler je obično pametan i ne generiše kod za ovaj slučaj.
Iako, ako je izopačeno, onda iz main Možete otići na MK - na primjer, upasti u odjeljak pokretačkog programa i izvršiti ga, ali to će zahtijevati petljanje na niskom nivou sa firmverom kako bi se ispravile adrese tranzicije. U nastavku ćete se sami uvjeriti i razumjeti kako to učiniti. Za što? Ovo je drugo pitanje, u 99.999% slučajeva to nije potrebno :)

Uradili smo to i krenuli dalje. Hajde da dodamo varijablu, nije nam baš potrebna i nema smisla uvoditi varijable bez nje, ali učimo. Ako se varijable dodaju unutar tijela funkcije, one su lokalne i postoje samo u ovoj funkciji. Kada izađete iz funkcije, ove varijable se brišu, a RAM memorija se dodjeljuje za važnije potrebe. .

1 2 3 4 5 6 int main(void) (nepotpisani char i; povratak 0;)

int main(void) (nepotpisani char i; povratak 0; )

nepotpisan znači nepotpisano. Činjenica je da se u binarnoj predstavi najznačajniji bit dodjeljuje znaku, što znači da se broj +127/-128 uklapa u jedan bajt (char), ali ako se znak odbaci, on će stati od 0 do 255. Obično znak nije potreban. Dakle nepotpisan.
i je samo ime varijable. Dosta.

Sada moramo inicijalizirati portove i UART. Naravno, možete uzeti i povezati biblioteku i pozvati neku vrstu UartInit(9600); ali tada nećete znati šta se zaista dogodilo.

radimo ovo:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 int main(void) (nepotpisani char i; #define XTAL 8000000L #define baudrate 9600L #define bauddivider (XTAL/(16*baudrate)-1)#define HI(x) ((x)>>8) #define LO(x) ((x)& 0xFF) UBRRL = LO(bauddivider) ; UBRH = HI (razdjelnik prijenosa) ; UCSRA = 0; UCSRB = 1<< RXEN| 1 << TXEN| 1 << RXCIE| 0 << TXCIE; UCSRC = 1 << URSEL| 1 << UCSZ0| 1 << UCSZ1; }

int main(void) ( unsigned char i; #define XTAL 8000000L #define baudrate 9600L #define bauddivider (XTAL/(16*baudrate)-1) #define HI(x) ((x)>>8) #define LO( x) ((x)& 0xFF) UBRRL = LO (razdjelnik prijenosa); UBRRH = HI (razdjelnik prijenosa); UCSRA = 0; UCSRB = 1<

Strašno? U stvari, postoji samo pet poslednjih linija pravog koda. Sve, to #define to je preprocesorski makro jezik. Gotovo iste stvari kao u Assembly, ali je sintaksa malo drugačija.

Oni će vam olakšati rutinske operacije izračunavanja potrebnih koeficijenata. U prvom redu kažemo to umjesto toga XTAL možete sigurno zamijeniti 8000000, i L- indikacija tipa, govoreći long je frekvencija takta procesora. Isto baudrate— frekvencija prenosa podataka preko UART-a.

bauddivider već složeniji, umjesto njega će biti zamijenjen izraz izračunat po formuli iz prethodna dva.
Pa i L.O. I HI niski i visoki bajtovi će biti uzeti iz ovog rezultata, jer Očigledno ne može stati u jedan bajt. IN HI X (makro ulazni parametar) je pomaknut osam puta udesno, što rezultira samo najznačajnijim preostalim bajtom. I unutra L.O. radimo po bitu I sa brojem 00FF, kao rezultat će ostati samo niži bajt.

Dakle, sve što je urađeno je kao #define možete ga sigurno baciti i izračunati potrebne brojeve na kalkulatoru i odmah ih unijeti u redove UBBRL = …. i UBBRH = …..

Može. Ali! Uradi ovo APSOLUTNO NEMOGUĆE!

Radiće ovako ili onako, ali ćete imati tzv magični brojevi- vrijednosti ​​preuzete niotkuda i iz nepoznatih razloga, a ako za par godina otvorite takav projekat, biće vraški teško shvatiti koje su to vrijednosti. Čak i sada, ako želite da promenite brzinu, ili promenite kvarcnu frekvenciju, sve će morati ponovo da se preračunava, ali ste promenili par brojeva u kodu i to je to. Općenito, ako ne želite da budete označeni kao koder, onda napravite svoj kod tako da bude lak za čitanje, razumljiv i lak za mijenjanje.

Onda je sve jednostavno:
Svi ovi “UBRRL and Co” su konfiguracijski registri UART predajnika uz pomoć kojih ćemo komunicirati sa svijetom. I sada smo im dodijelili tražene vrijednosti, postavljajući ih na željenu brzinu i način rada.

Vrsta snimanja 1< Znači sljedeće: uzmite 1 i stavite ga na mjesto RXEN u bajtu. RXEN ovo je 4. bit registra UCSRB, Dakle 1< formira binarni broj 00010000, TXEN- ovo je 3. bit, i 1<će dati 00001000. Jednostruko "|" to je po bitovima ILI, tako 00010000 | 00001000 = 00011000. Na isti način, preostali potrebni konfiguracijski bitovi se postavljaju i dodaju u opću hrpu. Kao rezultat toga, prikupljeni broj se bilježi u UCSRB. Više detalja opisano je u podatkovnoj tablici na MK u odjeljku USART. Dakle, nemojmo se ometati tehničkim detaljima.

Gotovo, vrijeme je da vidimo šta se dogodilo. Kliknite na kompilaciju i pokrenite emulaciju (Ctrl+F7).

Otklanjanje grešaka
Prolazile su svakakve trake napretka, studio se mijenjao i žuta strelica se pojavila blizu ulaza u glavnu funkciju. Ovdje procesor trenutno radi i simulacija je pauzirana.

Činjenica je da je u početku, zapravo, bilo na liniji UBRRL = LO(bauddivider); Uostalom, ono što imamo u definiciji nije kod, već samo preliminarni proračuni, zbog čega je simulator pomalo dosadan. Ali sada je shvatio, prva instrukcija je završena i ako se popneš na drvo I/O View, u USART odjeljak i pogledajte UBBRL bajt tamo, vidjet ćete da je vrijednost već tamo! 0x33.

Napravite korak dalje. Pogledajte kako se mijenja sadržaj drugog registra. Dakle, prođite kroz sve njih, obratite pažnju na činjenicu da su svi naznačeni bitovi postavljeni kao što sam vam rekao, i da su postavljeni istovremeno za cijeli bajt. Neće ići dalje od Povratka - program je završen.

Otvaranje
Sada resetirajte simulaciju na nulu. Kliknite tamo Resetiraj (Shift+F5). Otvorite rastavljeni listing, sada ćete vidjeti šta se zapravo dešava u kontroleru. Pogled -> Disassembler. A ne YYAAAAAA!!! Assembler!!! HORROR!!! I TO JE POTREBNO. Tako da kasnije, kada nešto krene po zlu, ne budete glupi u kodu i ne postavljate jadna pitanja po forumima, već se odmah udubite i vidite gdje ste zapeli. Nema tu ništa strašno.

Prvo će biti topovi iz serije:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 +00000000: 940C002A JMP 0x00002A JMP 0x00000034 JMP 0x0000004: 94000004: 940000034 JMP +00000000: 940C0034 JMP +00000000: 940C0034 JMP 0x00000034 JMP 0x0000 0034 Jump + 0000000C: 940C0034 JMP 0x00000034 Jump + 0000000E: 940C0034 JMP 0x00000034 Skok +00000010: 940C0034 JMP 0x00000034 Skok +00000012: 940C0034 JMP 0x0000000 JMP 03000040004004 0x00000034 Skok +00000016: 940C0034 JMP 0x00000034 Skok +00000018: 940C0034 JMP 0x00000034 Skok +0000001A: 9400000000000000 : 940C0034 JMP 0x00000034 JMP + 00000034 JMP 0x00002043 JMP 0x000023: 940C0034: 940C0034 JMP 0x00000023: 940C0034 JMP 0x00000034 JMP 0x00000034 Skoči +0000 0028: 940C0034 JMP 0x00000034 Skoči

00000000: 940C002A JMP 0x0000002A Skok +00000034 JMP 0x0000004: 940000034 JMP 0x000000: 940C0034 JMP +00000000: 940C0034 JMP 0x00000034 JMP 0x000000 34 Jump + 0000000C: 940C0034 JMP 0x00000034 Jump + 0000000E : 940C0034 JMP 0x00000034 Skok +00000010: 940C0034 JMP 0x00000034 Skok +00000012: 940C0034 JMP 0x00000034 Jump0000000000000000000000000 000000000000000000000000000004 34 Skok +00000016: 940C0034 JMP 0x00000034 Skok +00000018: 940C0034 JMP 0x00000034 Skok +0000001A: 940C0034 JMP 000000000 : 940C0034 JMP 0x00000034 JMP +00002034 JMP 0x00002034 JMP 0x000023: 940C0034: 940C0034 JMP 0x00000034 JMP 3C0034 JMP 0x00000034 JMP 0x00000034 Skoči +0000 0028: 940C0034 JMP 0x00000034 Skoči

Ovo je tabela vektora prekida. Kasnije ćemo se vratiti na to, ali za sada samo pogledajte i zapamtite da postoji. Prva kolona je adresa fleš ćelije u kojoj se nalazi komanda, druga je kod komande, treća je mnemonika komande, ista instrukcija za sklapanje, treća su operandi komande. Pa, automatski komentar.
Dakle, ako pogledate, postoje neprekidni prijelazi. A JMP komandni kod je četiri bajta, sadrži adresu za skok napisanu unazad - niži bajt na niskoj adresi i kod komande za skok 940C

0000002B: BE1F OUT 0x3F,R1 Izlaz na I/O lokaciju

Snimanje ove nule na adresi 0x3F Ako pogledate kolonu I/O pogleda, vidjet ćete da je adresa 0x3F adresa SREG registra - registra zastavice kontrolera. One. resetujemo SREG da pokrenemo program pod nultim uslovima.

1 2 3 4 +0000002C: E5CF LDI R28,0x5F Učitaj odmah +0000002D: E0D4 LDI R29,0x04 Učitaj odmah +0000002E: BFDE OUT 0x3E,R29 Izlaz na I/O lokaciju +0000002 Out to I/O lokaciju +0000002 Out to I/OUT

0000002C: E5CF LDI R28,0x5F Učitaj odmah +0000002D: E0D4 LDI R29,0x04 Učitaj odmah +0000002E: BFDE OUT 0x3E,R29 Izlaz na I/O lokaciju +0000002 Out to I/O lokaciju +0000002 Out to I/OUT

Ovo učitava pokazivač steka. Ne možete direktno učitavati u I/O registre, samo preko međuregistra. Prema tome, prvo LDI do srednjeg, a zatim odatle OUT do I/O. Također ću vam reći više o steku kasnije. Za sada znajte da je ovo područje dinamičke memorije koje visi na kraju RAM-a i pohranjuje adrese i međuvarijable. Sada smo naznačili odakle će početi naš stog.

00000032: 940C0041 JMP 0x00000041 Skoči

Skočite na sam kraj programa, i tamo imamo zabranu prekidanja i čvrstog petljanja po sebi:

1 2 +00000041: 94F8 CLI Global Interrupt Disable +00000042: CFFF RJMP PC-0x0000 Relativni skok

00000041: 94F8 CLI Global Interrupt Disable +00000042: CFFF RJMP PC-0x0000 Relativni skok

To je u slučaju nepredviđenih okolnosti, kao što je napuštanje glavne funkcije. Kontroler se može izvući iz takve petlje ili hardverskim resetiranjem, ili, što je vjerojatnije, resetiranjem od nadzornika. Pa, ili, kao što sam rekao gore, ispravite ovo u hex editoru i odgalopirajte gdje god nam srce želi. Također imajte na umu da postoje dvije vrste prijelaza: JMP i RJMP; prvi je direktan prijelaz na adresu. Zauzima četiri bajta i može direktno skočiti kroz cijelo memorijsko područje. Drugi tip tranzicije je RJMP - relativan. Njegova komanda zauzima dva bajta, ali se pomiče sa trenutne pozicije (adrese) 1024 koraka naprijed ili nazad. A njegovi parametri ukazuju na pomak od trenutne tačke. Češće se koristi jer zauzima polovinu prostora u ravnini, a dugi prijelazi rijetko su potrebni.

1 +00000034: 940C0000 JMP 0x00000000 Skoči

00000034: 940C0000 JMP 0x00000000 Skoči

A ovo je skok na sam početak koda. Neka vrsta ponovnog pokretanja. Ovdje možete provjeriti da li svi vektori skaču. Zaključak iz ovoga je da ako sada omogućite prekide (oni su podrazumevano onemogućeni) i dođe do vašeg prekida, ali nema rukovaoca, onda će doći do softverskog resetovanja - program će biti vraćen na sam početak.

Funkcija main. Sve je slično, ne treba ni opisivati. Pogledajte samo već izračunati broj koji se upisuje u registre. Preprocesor kompajlera pravi!!! Dakle, bez “magičnih” brojeva!

1 2 3 4 5 6 7 8 9 10 11 12 <

00000036: E383 LDI R24,0x33 Učitavanje odmah +00000037: B989 OUT 0x09,R24 Izlaz na I/O lokaciju 15: UBRRH = HI(bauddivider); +00000038: BC10 OUT 0x20,R1 Izlaz na I/O lokaciju 16: UCSRA = 0; +00000039: B81B OUT 0x0B,R1 Izlaz na I/O lokaciju 17: UCSRB = 1<

A evo i greške:

1 2 3 +0000003E: E080 LDI R24.0x00 Učitaj odmah +0000003F: E090 LDI R25.0x00 Učitaj odmah +00000040: 9508 RET Podrutinski povratak

0000003E: E080 LDI R24.0x00 Učitaj odmah +0000003F: E090 LDI R25.0x00 Učitaj odmah +00000040: 9508 RET Podprogramski povratak

Pitanje je zašto kompajler dodaje takve vrhove? I ovo nije ništa više od Return 0, definisali smo funkciju kao int main(void) i tako smo uzalud potrošili još četiri bajta :) A ako napravite void main(void) onda će ostati samo RET, ali će se pojaviti upozorenje , da naša glavna funkcija ne vraća ništa. Uglavnom, radi šta hoćeš :)

Tesko? Očigledno nije. Kliknite korak po korak izvršavanje u disassembler modu i pogledajte kako procesor izvršava pojedinačne instrukcije, šta se dešava sa registrima. Kako dolazi do kretanja kroz komande i konačnog petlje?

Nastavak za par dana...

Offtop:
Alexei78 Napravio sam dodatak za Firefox koji olakšava navigaciju mojom web lokacijom i forumom.
Diskusija i preuzimanje,

Zadatak: Hajde da razvijemo program za upravljanje jednom LED diodom. Kada se dugme pritisne, LED se pali i kada se otpusti, gasi se.

Prvo, napravimo shematski dijagram uređaja. I/O portovi se koriste za povezivanje bilo kojeg vanjskog uređaja na mikrokontroler. Svaki od portova može raditi i kao ulaz i kao izlaz. Povežimo LED na jedan od portova, a dugme na drugi. Za ovaj eksperiment koristit ćemo kontroler Atmega8. Ovaj čip sadrži 3 I/O porta, ima 2 osam-bitna i 1 šesnaest-bitni tajmer/brojač. Također na brodu se nalazi 3-kanalni PWM, 6-kanalni 10-bitni analogno-digitalni pretvarač i još mnogo toga. Po mom mišljenju, mikrokontroler je odličan za učenje osnova programiranja.

Za povezivanje LED-a koristićemo liniju PB0, a za čitanje informacija sa dugmeta koristićemo liniju PD0. Dijagram je prikazan na slici 1.

Rice. 1

Preko otpornika R2 na ulaz PD0 se dovodi plus napon napajanja, što odgovara logičkom signalu. Kada se dugme zatvori, napon pada na nulu, što odgovara logičkoj nuli. U budućnosti, R2 se može isključiti iz kruga, zamjenjujući ga unutarnjim otpornikom opterećenja, unoseći potrebna podešavanja u program. LED dioda je povezana na izlaz porta PB0 preko strujno-ograničavajućeg otpornika R3. Da biste upalili LED, morate primijeniti logički jedan signal na PB0 liniju. Koristićemo interni glavni generator takta na 4 MHz, jer uređaj nema visoke zahtjeve za stabilnost frekvencije.

Sada pišemo program. Koristim programsko okruženje za pisanje programa AVR Studio I WinAvr. Otvorite AVR Studio, pojaviće se prozor dobrodošlice, kliknite na dugme "Kreiraj novi projekat", zatim izaberite tip projekta - AVR GCC, napišite naziv projekta na primer "cod1", označite i "Kreiraj fasciklu projekta" i "Kreiraj inicijalizacijski fajl" kliknite na dugme "Dalje", izaberite "AVR Simulator" u levom prozoru i ukucajte mikrokontroler "Atmega8" u desnom prozoru, kliknite na dugme "Završi", otvara se uređivač i stablo kategorije projekta - početna podešavanja su završena.

Prvo, dodajmo standardni tekst opisa za Atmega8 koristeći operator za pričvršćivanje vanjskih datoteka: #include

sintaksa direktive #include

#include<имя_файла.h>
#include “filename.h”

Ugaone zagrade< и >ukazati kompajleru da se uključene datoteke prvo moraju potražiti u standardnoj WinAvr fascikli pod nazivom include. Dvostruki navodnici “ i “ govore kompajleru da započne pretragu u direktoriju u kojem je projekt pohranjen.

Svaki tip mikrokontrolera ima svoju datoteku zaglavlja. Za ATMega8 ova datoteka se zove iom8.h, za ATtiny2313 - iotn2313.h. Na početku svakog programa moramo uključiti datoteku zaglavlja mikrokontrolera koji koristimo. Ali postoji i uobičajena datoteka zaglavlja io.h. Predprocesor obrađuje ovu datoteku i, ovisno o postavkama projekta, uključuje potrebnu datoteku zaglavlja u naš program.

Za nas će prva linija programa izgledati ovako:

#include

Svaki C program mora sadržavati jednu glavnu funkciju. Naziva se glavnim. Izvršenje programa uvijek počinje izvršavanjem glavne funkcije. Funkcija ima zaglavlje - int main(void) i tijelo - ograničeno je vitičastim zagradama ().

int main(void)
{
tijelo funkcije
}

Naš kod ćemo dodati u tijelo funkcije. Tip povratka je naznačen prije imena funkcije. Ako funkcija ne vrati vrijednost, koristi se ključ void.

int- ovo je 2-bajtni cijeli broj, raspon vrijednosti je od - 32768 do 32767

Nakon naziva funkcije, parametri koji se prosljeđuju funkciji kada se ona pozove označeni su u zagradama (). Ako funkcija nema parametre, koristi se ključna riječ void. Funkcija main sadrži skup komandi, sistemske postavke i glavnu programsku petlju.

Zatim konfigurišemo port D na ulazu. Način rada porta je određen sadržajem registra DDRD(registar pravaca prijenosa informacija). U ovaj registar upisujemo broj “0x00” (0b0000000 - u binarnom obliku), na ovaj port ništa nije povezano osim dugmeta, tako da konfigurišemo ceo port D kao ulaz. Port možete konfigurisati bit po bit tako što ćete upisati brojeve 0 ili 1 u svaki bit registra (0-ulaz, 1-izlaz), na primjer DDRD = 0x81 (0b10000001) - prva i zadnja linija porta D rade kao izlaz, ostalo kao ulaz. Interni otpornik opterećenja također mora biti spojen. PORTx registar kontrolira da li su interni otpornici uključeni ili isključeni kada je port u ulaznom modu. Hajde da upišemo jedinice tamo.

Postavljanje porta B do izlaza. Način rada porta je određen sadržajem registra DDRB. Ništa osim LED diode na portu B nije povezan, tako da se cijeli port može konfigurirati kao izlaz. To se radi upisom u registar DDRB brojevi "0xFF". Da spriječite da se LED dioda upali kada ga prvi put uključite, pišite na port B logičke nule. Ovo se radi snimanjem PORTB= 0x00;

Za dodjelu vrijednosti koristi se simbol "=" i naziva se operator dodjeljivanja, a ne smije se brkati sa znakom "jednako".

Konfiguracija porta će izgledati ovako:

DDRD = 0x00;
PORTD = 0xFF;
DDRB = 0xFF;
PORTB = 0x00;

Pišemo glavnu petlju programa. dok(“while” sa engleskog) - ova naredba organizira petlju, ponavljajući tijelo petlje mnogo puta dok se ne ispuni uslov, odnosno dok je izraz u zagradama tačan. U C-u izraz se smatra istinitim ako nije jednak nuli, a netačnim ako jeste.

Naredba izgleda ovako:

dok (uvjet)
{
tijelo petlje
}

U našem slučaju, glavna petlja će se sastojati od samo jedne naredbe. Ova komanda dodjeljuje registar PORTB vrijednost registra za invertiranje PORTD.

PORTB = ~PIND; //preuzeti vrijednost sa porta D, invertirati je i dodijeliti je PORTB (upisati u PORTB)

// C izrazi se čitaju s desna na lijevo

PIND registar za unos informacija. Da biste pročitali informacije sa eksternog izlaza kontrolera, prvo morate prebaciti željeni bit porta u način unosa. To jest, pisati u odgovarajući bit registra DDRx nula. Tek nakon toga se digitalni signal sa eksternog uređaja može isporučiti na ovaj pin. Zatim će mikrokontroler pročitati bajt iz registra PINx. Sadržaj odgovarajućeg bita odgovara signalu na vanjskom pinu porta. Naš program je spreman i izgleda ovako:

#include int main (void) ( DDRD = 0x00; //port D - ulaz PORTD = 0xFF; //spoji otpornik opterećenja DDRB = 0xFF; //port B - izlaz PORTB = 0x00; //postavimo izlaz na 0 while(1 ) ( PORTB = ~PIND; //~ znak inverzije bitova ) )

Komentari se široko koriste u jeziku C. Postoje dva načina za pisanje.

/*Komentar*/
//Komentar

U ovom slučaju kompajler neće obraćati pažnju na ono što je napisano u komentaru.

Ako koristite isti program i povežete 8 dugmadi i 8 LED dioda na mikrokontroler, kao što je prikazano na slici 2, tada će biti jasno da svaki bit porta D odgovara njegovom bitu porta B. Pritiskom na dugme SB1 svetli HL1, pritiskom na dugme SB2 svetli HL2 itd.

Slika 2

U članku su korišteni materijali iz knjige A.V. Belova. "Vodič za programere AVR uređaja"

Atmega8 mikrokontroleri su najpopularniji predstavnici svoje porodice. Na mnogo načina to duguju, s jedne strane, jednostavnosti rada i razumljive strukture, as druge, prilično širokoj funkcionalnosti. Ovaj članak će pokriti Atmega8 programiranje za početnike.

opće informacije

Mikrokontroleri su posvuda. Mogu se naći u frižiderima, mašinama za pranje veša, telefonima, fabričkim mašinama i velikom broju drugih tehničkih uređaja. Mikrokontroleri se kreću od jednostavnih do izuzetno složenih. Potonji nude znatno više funkcija i funkcionalnosti. Ali nećete moći odmah razumjeti složenu tehnologiju. U početku morate savladati nešto jednostavno. A Atmega8 će biti uzet kao uzorak. Programiranje na njemu nije teško zahvaljujući njegovoj kompetentnoj arhitekturi i prijateljskom interfejsu. Osim toga, ima dovoljne performanse da se koristi u većini. Štaviše, koriste se čak iu industriji. U slučaju Atmega8, programiranje zahtijeva poznavanje jezika kao što je AVR (C/Assembler). Gdje početi? Ovladavanje ovom tehnologijom moguće je na tri načina. I svako bira za sebe gdje će početi raditi sa Atmega8:

  1. Programiranje preko Arduina.
  2. Kupovina gotovog uređaja.
  3. Samostalna montaža mikrokontrolera.

Razmotrićemo prvu i treću tačku.

Arduino

Ovo je zgodna platforma dizajnirana u obliku koji je pogodan za brzo kreiranje raznih uređaja. Ploča već ima sve što vam je potrebno u vidu samog mikrokontrolera, njegovog uprtača i programatora. Prateći ovaj put, osoba će dobiti sljedeće pogodnosti:

  1. Zahtjevi niskog praga. Za razvoj tehničkih uređaja ne morate imati posebne vještine.
  2. Biće dostupan širok spektar elemenata za povezivanje bez dodatne pripreme.
  3. Brzi početak razvoja. Sa Arduinom možete skočiti direktno u kreiranje uređaja.
  4. Dostupnost velikog broja materijala za obuku i primjera implementacije različitih dizajna.

Ali postoje i određeni nedostaci. Stoga vam Arduino programiranje Atmega8 ne dozvoljava da zaronite dublje u svijet mikrokontrolera i shvatite mnoge korisne aspekte. Pored toga, moraćete da naučite programski jezik, koji se razlikuje od onih koje koristi AVR (C/Assembler). I još nešto: Arduino ima prilično uzak raspon modela. Stoga, prije ili kasnije će se pojaviti potreba za korištenjem mikrokontrolera, koji se ne koristi u pločama. Ali općenito, ovo je dobra opcija za rad s Atmega8. Programiranje putem Arduina pružit će vam siguran početak u svijetu elektronike. I malo je vjerovatno da će osoba odustati zbog neuspjeha i problema.

Samostalna montaža

Zahvaljujući ljubaznom dizajnu, možete ih sami napraviti. Uostalom, za to su potrebne jeftine, pristupačne i jednostavne komponente. To će vam omogućiti da temeljito proučite dizajn Atmega8 mikrokontrolera, čije će se programiranje nakon sklapanja činiti lakšim. Također, ako je potrebno, možete samostalno odabrati druge komponente za određeni zadatak. Istina, ovdje postoji određeni nedostatak - složenost. Nije lako sami sastaviti mikrokontroler kada nemate potrebno znanje i vještine. Razmotrićemo ovu opciju.

Šta je potrebno za montažu?

Prvo morate nabaviti sam Atmega8. Programiranje mikrokontrolera bez njega je nemoguće. To će koštati nekoliko stotina rubalja - uz pristojnu funkcionalnost. Tu je i pitanje kako će se Atmega8 programirati. USBAsp je prilično dobar uređaj koji se pokazao kao veoma dobar. Ali možete koristiti neki drugi programator. Ili ga sami sastavite. Ali u ovom slučaju postoji rizik da će, ako je napravljen loše, mikrokontroler pretvoriti u nefunkcionalni komad plastike i željeza. Takođe ne bi škodilo da imate matičnu ploču i džempere. Nisu obavezni, ali će vam uštedjeti živce i vrijeme. I konačno, potreban vam je izvor napajanja od 5V.

Atmega8 programiranje za početnike koristeći primjer

Pogledajmo kako, općenito, nastaje uređaj. Dakle, recimo da imamo mikrokontroler, LED, otpornik, programator, spojne žice i napajanje. Prvi korak je pisanje firmvera. Podrazumijeva se kao skup naredbi za mikrokontroler, koji se predstavlja kao konačni fajl u posebnom formatu. Potrebno je navesti vezu svih elemenata, kao i interakciju sa njima. Nakon toga možete početi sa sastavljanjem kruga. VCC pin bi trebao biti napajan. Na bilo koji drugi, dizajniran za rad s uređajima i elementima, prvo se povezuje otpornik, a zatim LED. U ovom slučaju, snaga prvog ovisi o zahtjevima za snagom drugog. Možete koristiti sljedeću formulu: R=(Up-Ups)/Is. Ovdje je p snaga, a s je LED. Zamislimo da imamo LED koji troši 2V i zahtijeva struju napajanja od 10 mA, pretvorimo ga u oblik pogodniji za matematičke operacije i dobijemo 0,01A. Tada će formula izgledati ovako: R=(5V-2V)/0.01A=3V/0.01A=300 Ohm. Ali u praksi je često nemoguće odabrati idealan element. Stoga se uzima najpogodniji. Ali morate koristiti otpornik s otporom većim od vrijednosti dobivene matematičkim putem. Zahvaljujući ovom pristupu produžit ćemo njegov vijek trajanja.

Šta je sledeće?

Dakle, imamo mali dijagram. Sada ostaje samo da povežete programator sa mikrokontrolerom i zapišete firmver koji je kreiran u njegovu memoriju. Ovdje postoji jedna poenta! Prilikom izgradnje kola potrebno ga je kreirati na način da se mikrokontroler može flešovati bez odlemljenja. To će uštedjeti vrijeme, živce i produžiti vijek trajanja elemenata. Uključujući Atmega8. Treba napomenuti da programiranje unutar kola zahtijeva znanje i vještine. Ali takođe vam omogućava da kreirate naprednije dizajne. Uostalom, često se dešava da se prilikom odlemljenja elementi oštete. Nakon toga, dijagram je spreman. Može se primijeniti napon.

Važne tačke

Želio bih početnicima dati korisne savjete o Atmega8 programiranju. Ne mijenjajte ugrađene varijable i funkcije! Preporučljivo je flešovati uređaj kreiranim programom nakon što ga provjerite na odsustvo "vječnih petlji", koje će blokirati sve druge smetnje, i koristeći dobar odašiljač. Ako koristite domaći proizvod u ove svrhe, trebali biste biti psihički spremni na kvar mikrokontrolera. Kada flešujete uređaj pomoću programatora, trebalo bi da povežete odgovarajuće izlaze VCC, GND, SCK, MOSI, RESET, MISO. I nemojte kršiti sigurnosne mjere! Ako tehničke specifikacije predviđaju da napajanje treba biti 5V, tada se morate pridržavati upravo tog napona. Čak i korištenje 6V elemenata može negativno utjecati na performanse mikrokontrolera i skratiti njegov vijek trajanja. Naravno, baterije od 5V imaju određene razlike, ali, u pravilu, sve je u razumnim granicama. Na primjer, maksimalni napon će se zadržati na 5,3V.

Obuka i usavršavanje vještina

Na sreću, Atmega8 je veoma popularan mikrokontroler. Stoga, neće biti teško pronaći istomišljenike ili jednostavno obrazovane i vješte ljude. Ako ne želite ponovo izmisliti točak, već samo želite riješiti određeni problem, tada možete potražiti potrebnu shemu na ogromnoj svjetskoj mreži. Usput, mali savjet: iako je robotika prilično popularna u segmentu ruskog govornog područja, ako nema odgovora, onda biste je trebali potražiti u segmentu engleskog govornog područja - sadrži red veličine više informacija. Ako postoje određene sumnje u kvalitet postojećih preporuka, onda možete potražiti knjige koje govore o Atmega8. Na sreću, proizvodna kompanija uzima u obzir popularnost svog razvoja i opskrbljuje ih specijalizovanom literaturom, gdje iskusni ljudi govore šta i kako, a također daju primjere kako uređaj radi.

Je li teško početi stvarati nešto svoje?

Dovoljno je imati 500-2000 rubalja i nekoliko slobodnih večeri. Ovo vrijeme je više nego dovoljno da se upoznate sa Atmega8 arhitekturom. Nakon malo vježbe, lako možete kreirati vlastite projekte koji obavljaju određene zadatke. Na primjer, robotska ruka. Sam Atmega8 trebao bi biti više nego dovoljan za prenošenje osnovnih motoričkih funkcija prstiju i šake. Naravno, ovo je prilično težak zadatak, ali je sasvim izvodljiv. U budućnosti će biti moguće kreirati složene stvari koje će zahtijevati desetine mikrokontrolera. Ali ovo je sve pred vama, prije toga morate dobiti školu dobre prakse na nečem jednostavnom.