Programiranje Atmega8. Programiranje AVR mikrokontrolerjev. Vmesnik MK v načinu programiranja

Za prenos iz računalnika na mikrokontroler potrebujemo USBasp in program AVRDUDE.Danes obstaja širok izbor programatorjev, namenjenih programiranju AVR mikrokontrolerji. Med njimi lahko najdete veliko domačih, ki jih komajda imenujemo programerji, saj so neposredno priključeni na vrata COM z le nekaj uporov. Vendar sodobnih računalnikov in prenosni računalniki praktično niso več opremljeni s COM vrati, zato je eden od glavnih kriterijev pri izbiri programatorja možnost povezave z vrata USB. Najcenejši, najpreprostejši in najpogostejši je programator USBasp. Kupiti ga je mogoče v skoraj vsaki radijski trgovini na dostopna cena. Njegov strošek je kitajski internet Cena v trgovini se giblje od 1,5 do 3 dolarje.

Programer USBasp

Računalnik z mikrokontrolerjem komunicira s programatorjem USBasp preko USB priključka, podatki pa se prenašajo preko vmesnika SPI S erial p periferni jaz vmesnik(serijski periferni vmesnik). Za komunikacijo MK s programatorjem se uporabljajo posebni zatiči: MOSI, MISO, SCK, RESET, VCC, GND. čeprav SPI predvideva uporabo samo treh pinov MOSI, MISO in SCK, vendar bomo uporabili vseh šest pinov.

Pri izmenjavi podatkov preko vmesnika SPI Mikrokrmilnik lahko istočasno sprejema (MISO pin) ali oddaja podatke (MOSI pin). Nastavitev načina sprejemanja ali oddajanja podatkov se izvede z uporabo določenega impulza na pin SCK.

Konektor programatorja ima praviloma 10 pinov in je povezan z mikrokrmilnikom z 10-žilnim kablom. Vendar pa je bolj priročno uporabljati kable, ki imajo 6-polni adapter, saj so v tem primeru vsi nožice zasedeni. Pri deset-polnem konektorju ostane en kontakt nezaseden, štirje kontakti pa so povezani s skupno žico (GND).

Da bi računalnik zaznal programator, morate namestiti gonilnik USBasp.

Spodaj je prikazana fotografija programatorja, povezanega z mikrokrmilnikom ATmega8.

Edina pomanjkljivost ali, bolje rečeno, manjša nevšečnost tega programatorja je, da ga (brez raznih trikov) ne podpira Atmel Studio, zato morate uporabiti program tretje osebe. Najbolj preverjen je AVRDUDE.

nastavitve

Zdaj moramo dokončati le še zadnji korak. Zaženite program AVRDUDE. Privzeto se odpre zavihek Program. Na dnu okna v meniju Nastavitve izberite vrsto programatorja usbasp. Naslednji v kategoriji Mikrokrmilnik izberite naš mikrokrmilnik ATmega8. Spodaj v kategoriji Flash kliknite ikono elipse in v meniju, ki se odpre, določite pot do prevedene datoteke s pripono hex. Pot do datoteke in sama datoteka bosta enaki, kot smo predhodno določili v .

Če se želite prepričati, da operacijski sistem zazna programator (gonilnik programatorja je pravilno nameščen) in je pravilno povezan z mikrokrmilnikom, kliknite na gumb Branje. Če ni napak, se prikaže okno z vnosom " Umeritvene celice generatorja so bile prebrane!« In šestnajstiško število bo prikazano v zgornjem oknu. Vsak MK ima svojo številko.

Pred snemanjem nov program Priporočamo, da počistite pomnilnik mikrokontrolerja. To lahko storite s klikom na gumb Zbriši vse. Posledično se prikaže okno, ki nakazuje, da je kristal čist.

Sedaj kliknite gumb Program v kategoriji Flash. Ko je program uspešno posnet v MK, se prikaže okno s spodnjim vnosom.

Rezultat posnetega ali, kot pravijo tudi firmware programa, je prižgana LED dioda, priključena na pin PC0 našega mikrokontrolerja.

Dober dan. Nadaljujmo. Ko smo se seznanili s postopkom razhroščevanja programa, ki smo ga napisali v “atmel studiu” in virtualno sestavili vezje z eno LED diodo v “proteusu”, je sledila strojna sestava vezja in flash mikrokontrolerja.

Za programiranje prototipa ( atmega 8) uporabili bomo programator USBASP. Videti je takole:

Na konektor bo priključen kabel, v katerega so priključeni mostički, ti pa na vtičnice na mizi, na kateri je nameščen mikrokontroler:

Prvi zatič je na konektorju označen s puščico.


Ko smo ugotovili programerja. Preidimo na sestavljanje vezja v strojni opremi. Mikrokrmilnik namestimo na maketo. Naj vas spomnim, da je prva etapa označena na MK z majhnim krogom.

Naloga je povezati zatiče programatorja s "kamnitimi" zatiči.

Mostičke priključimo na 10-polni konektor. Uporabljamo naslednje nožice MOSI, RST, SCK, MISO, VTG (VCC), GND.

Upam, da ste že prenesli podatkovni list na atmega8. Če ne, ga lahko prenesete. Ogledamo si razporeditev pinov mikrokontrolerja.

Skakalce povežemo z naslednjimi zatiči:

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

Za nadaljnje uspešno delovanje bo operacijski sistem ob prvem zagonu shaitan stroja (programatorja) ponudil namestitev potrebnih gonilnikov za delovanje naprave.

Pri delu z ekspediterjem ne bi smelo biti težav. Prenesi. Ustvarite mapo, v katero razpakiramo preneseni arhiv. Nato v čarovniku za namestitev strojne opreme določimo pot do mape z razpakiranim gonilnikom.

Če uporabljate Windows 7 ali novejši, lahko naletite na manjše težave. Gonilniki za programator so precej stari, zato jih nimajo digitalni podpis. Ko poskusite namestiti tak gonilnik, bo operacijski sistem prikazal nekaj takega *

"Digitalni podpis gonilnikov, ki je potreben za te naprave. pri zadnja sprememba opremo oz programsko opremo napačno podpisano oz poškodovana datoteka oz zlonamerna programska oprema neznanega izvora. (koda 52).«

Če želite popraviti situacijo, morate onemogočiti preverjanje digitalnega podpisa gonilnika. Ne bom opisoval, kako ga onemogočiti (vsak ima svoj operacijski sistem), najdete jih na internetu.

Ko onemogočite preverjanje podpisa, v čarovniku za namestitev strojne opreme podajte pot do mape z razpakiranim gonilnikom.

Upam, da se vam je vse izšlo in je programer pripravljen na delo.

Preidimo na sestavljanje vezja z LED.

Za flash programske opreme mikrokrmilnika bomo uporabili program “avrdudeprog”. Je v splošnem arhivu.

Na seznamu mikrokontrolerjev izberite atmega8. Po izbiri MK se prikaže okno, ki vas obvesti, da so varovalka in Lock bits privzeto nastavljeni.

Nato odprite zavihek Varovalke. Z enostavnimi besedami Varovalke so konfiguracijske nastavitve MK, s katerimi se ni najbolje igrati. Za primer, ko ste kupili enak krmilnik kot jaz in nimate zunanjega kvarčnega resonatorja (uporabljate notranji oscilator urna frekvenca), potrdite popolnoma enaka polja, kot je prikazano na sliki. Poleg elementa "obratno" mora biti kljukica.

Konfigurirane nastavitve »ukažejo« Atmega8A, da opravlja svoje delo ob upoštevanju takta notranjega oscilatorja (frekvenca takta 8 MHz). Da bi nastavitve začele veljati, morate klikniti gumb »Programiranje«. Toda preden pritisnete, še enkrat preverite, ali je vse pravilno nastavljeno.

Vrnite se na stran »Program«.

Ko smo programu že povedali, kateri mikrokrmilnik bomo flashali, izberemo firmware datoteko, ki smo jo napisali v zadnji lekciji. Ima razširitev HEX. Nahaja se v mapi »Debug«.

Pred utripanjem "kamenčka" kliknite gumb "Izbriši vse". To vas bo zaščitilo pred nerazumljivimi napakami (kaj pa, če je kamen že prišit):

Uživamo v rezultatu našega dela :) Nadaljevanje...

Več kot enkrat ali dvakrat sem rekel, da je treba študij MK začeti z asemblerjem. Temu je bil namenjen cel tečaj na spletni strani (čeprav ni zelo dosleden, a ga postopoma počešem do ustreznega videza). Da, težko je, rezultat ne bo prvi dan, vendar se boste naučili razumeti, kaj se dogaja v vašem krmilniku. Vedeli boste, kako deluje, in ne boste kot opica kopirali virov drugih ljudi in poskušali razumeti, zakaj je nenadoma prenehal delovati. Poleg tega je za C veliko lažje ustvariti redneck kodo, ki bo prišla ven z vilami v najbolj neprimernem trenutku.

Na žalost si vsi želijo rezultate takoj. Zato sem se odločil, da grem v drugo smer - naredim vadnico o C-ju, vendar s prikazovanjem njegovega spodnjega perila. Dober programer za vdelavo vedno drži svoj kos strojne opreme tesno za vijak in ji ne dovoli, da naredi en sam korak brez dovoljenja. Torej, najprej bo koda C, nato kaj je proizvedel prevajalnik in kako vse skupaj dejansko deluje :)

Po drugi strani pa Xi močna točka To je prenosljivost kode. Če seveda vse pravilno napišete. Ločevanje delovnih algoritmov in njihove strojne izvedbe v različne dele projekta. Nato bo za prenos algoritma na drug mikrokrmilnik dovolj, da prepišemo le vmesniški sloj, kjer so zapisani vsi klici strojne opreme, in pustimo vso delovno kodo takšno, kot je. In seveda berljivost. Izvorna koda C je na prvi pogled lažje razumljiva (čeprav ... na primer, meni je vseeno, na kaj naj pokažem - ali C ali ASM :)), ampak, spet, če je vse pravilno napisano. Pozoren bom tudi na te točke.

Levji delež vseh primerkov bo moj kot testni primerek, na katerega bo nameščen levji delež vseh primerkov. razvojna plošča.

Prvi C program za AVR

Izbira prevajalnika in nastavitev okolja
Obstaja veliko različnih prevajalnikov C za AVR:
Najprej to IAR AVR C- je skoraj zagotovo priznan kot najboljši prevajalnik za AVR, ker sam krmilnik je bil ustvarjen v tesnem sodelovanju med Atmelom in strokovnjaki iz IAR. Ampak za vse moraš plačati. In ta prevajalnik ni samo draga komercialna programska oprema, ampak ima tudi tolikšno količino nastavitev, da se je treba kar precej potruditi, da jo enostavno prevedeš v njem. Z njim res nisem razvil prijateljstva, projekt je propadal zaradi čudnih napak v fazi povezovanja (kasneje sem ugotovil, da je šlo za kriv crack).

Drugi pride WinAVR GCC- močan optimizacijski prevajalnik. Popolnoma odprta koda, več platform, na splošno vse radosti življenja. Prav tako se popolnoma integrira v AVR Studio kar vam omogoča odpravljanje napak kar tam, kar je prekleto priročno. Na splošno sem ga izbral.

Je tudi CodeVision AVR C je zelo priljubljen prevajalnik. Postala je priljubljena zaradi svoje preprostosti. Program dela Dobite ga lahko v samo nekaj minutah - čarovnik za začetno kodo vam pri tem zelo pomaga, saj žigosa standarde za inicializacijo vseh vrst uartov. Če sem iskren, sem nekako sumljiv glede tega - ko sem moral razstaviti program, ki ga je napisal ta prevajalnik, se je izkazalo, da gre za nekakšno zmešnjavo in ne za kodo. Ogromna količina nepotrebnih premikov in operacij, kar je povzročilo precejšnjo količino kode in počasno delovanje. Vendar pa je morda prišlo do napake v DNK osebe, ki je napisala originalno programsko opremo. Poleg tega hoče denar. Ne toliko kot IAR, vendar opazno. In v demo načinu vam omogoča pisanje največ 2kb kode.
Seveda obstaja crack, ampak če boš kradel, je milijon, v IAR smislu :)

Je tudi Slika Craft AVR C in MicroC iz mikroelektronike. Ni mi bilo treba uporabiti ne enega ne drugega, ampak S.W.G. zelo pohvalno MicroPascal, pravijo, strašno priročno programsko okolje in knjižnice. Mislim, da MicroC ne bo nič slabši, vendar je tudi plačan.

Kot sem rekel, sem izbral WinAVR iz treh razlogov: je brezplačen, integrira se v AVR Studio in je napisan zanj. pripravljena koda za vse priložnosti.

Torej prenesite namestitev WinAVR z AVR Studio. Nato je najprej nameščen studio, nato pa je WinAVR nameščen na vrhu in pritrjen na studio v obliki vtičnika. Močno priporočam namestitev WinAVR na kratko pot, nekaj takega kot C:\WinAVR, tako se boste izognili številnim težavam s potmi.

Ustvarjanje projekta
Torej, studio je nameščen, C je privit, čas je, da poskusimo nekaj programirati. Začnimo s preprostim, najbolj preprostim. Zaženite studio, izberite tam nov projekt, kot prevajalnik AVR GCC in vnesite ime projekta.

Odpre se delovno polje s prazno datoteko *.c.

Zdaj ne bo škodilo, če konfigurirate prikaz poti v zaznamkih studia. Če želite to narediti, pojdite na:
Meni Orodja - Možnosti - Splošno - Zavihki datotek in na spustnem seznamu izberite "Samo ime datoteke". V nasprotnem primeru bo nemogoče delovati - zavihek bo vseboval celotno pot datoteke in na zaslonu ne bo več kot dveh ali treh zavihkov.

Nastavitev projekta
Na splošno velja, da je klasična izdelava make datoteke, v kateri so opisane vse odvisnosti. In verjetno je tako. Toda zame, ki sem odraščal s popolnoma integriranimi IDE-ji, kot je uVision oz AVR Studio ta pristop je globoko tuj. Zato bom naredil po svoje, vse v studiu pomeni.

Pritisnite gumb z orodjem.


To so nastavitve za vaš projekt oziroma nastavitve za samodejno generiranje make datoteke. Na prvi strani morate samo vnesti frekvenco, na kateri bo deloval vaš MK. To je odvisno od bitov varovalke, zato predpostavljamo, da je naša frekvenca 8000000Hz.
Bodite pozorni tudi na optimizacijsko vrstico. Zdaj je tu -Os - to je optimizacija velikosti. Zaenkrat pustite tako, kot je, nato pa se lahko poskusite igrati s tem parametrom. -O0 sploh ni optimizacija.

Naslednji korak je konfiguracija poti. Najprej dodajte imenik svojega projekta tja - tja boste dodali knjižnice tretjih oseb. Na seznamu bo prikazana pot ».\«.

Datoteka Make je bila ustvarjena, lahko si jo ogledate v privzeti mapi v vašem projektu, samo poglejte in poglejte, kaj je tam.


To je vse za zdaj. Povsod kliknite V redu in pojdite na vir.

Oblikovanje problema
Prazen list papirja je vabljiv za izvedbo kakšne zvite ideje, saj banalno utripanje diode ne deluje več. Takoj primemo bika za roge in vzpostavimo povezavo z računalnikom – to je prva stvar, ki jo naredim.

Delovalo bo takole:
Ko skozi vrata COM prispe ena (koda 0x31), diodo prižgemo, ko prispe ničla (koda 0x30), pa ugasne. Poleg tega bo vse narejeno na prekinitvah, naloga v ozadju pa bo utripanje druge diode. Enostavno in smiselno.

Sestavljanje vezja
Pretvorniški modul USB-USART moramo povezati z zatiči USART mikrokontrolerja. Če želite to narediti, vzemite mostiček iz dveh žic in ga navzkrižno položite na nožice. To pomeni, da priključimo Rx krmilnika na Tx pretvornika in Tx pretvornika na Rx krmilnika.

Na koncu je to diagram:


Ne razmišljam o povezovanju preostalih zatičev, napajanja ali ponastavitve, to je standardno.

Pisanje kode

Naj takoj rezerviram, da se ne bom posebej poglabljal v opis samega jezika C. Za to obstaja preprosto ogromna količina materiala, od klasičnega »programskega jezika C« od K&R do različnih priročnikov.

Eno takšno metodo sem našel v svoji zalogi; nekoč sem jo uporabil za študij tega jezika. Vse je kratko, jasno in jedrnato. Postopoma ga sestavljam in vlečem na svojo spletno stran.

Res je, da vsa poglavja še niso prenesena, a mislim, da ne bo dolgo.

Malo verjetno je, da ga lahko bolje opišem, zato od vadba, namesto podrobne razlage podrobnosti, bom preprosto navedel neposredne povezave do posameznih strani tega priročnika.

Dodajanje knjižnic.
Najprej dodamo potrebne knjižnice in glave z definicijami. Konec koncev je C univerzalen jezik in mu moramo razložiti, da delamo posebej z AVR, zato napišite vrstico v izvorno kodo:

1 #vključi

#vključi

Ta datoteka se nahaja v mapi WinAVR in vsebuje opis vseh registrov in vrat krmilnika. Poleg tega je vse tam zvito, z vezavo na določen krmilnik, ki ga prevajalnik prenaša prek narediti datoteka v parametru MCU in na podlagi te spremenljivke je z vašim projektom povezana datoteka glave z opisom naslovov vseh vrat in registrov za ta določen krmilnik. Vau! Brez tega je tudi mogoče, vendar potem ne boste mogli uporabljati simboličnih imen registrov, kot sta SREG ali UDR, in si boste morali zapomniti naslov vsakega, kot je "0xC1", kar bo povzročilo glavobol.

Sama ekipa #vključi<имя файла> vam omogoča, da svojemu projektu dodate vsebino katere koli vrste besedilna datoteka, na primer datoteka z opisom funkcij ali del druge kode. In da bi lahko direktiva našla to datoteko, smo določili pot do našega projekta (imenik WinAVR je tam že privzeto registriran).

Glavna funkcija.
Program C je v celoti sestavljen iz funkcij. Lahko se ugnezdijo in kličejo drug od drugega v poljubnem vrstnem redu in različne poti. Vsaka funkcija ima tri zahtevane parametre:

  • Povratna vrednost je npr. greh(x) vrne vrednost sinusa x. Kot pri matematiki, skratka.
  • Preneseni parametri so enaki X.
  • Funkcijsko telo.

Vse prenesene in vrnjene vrednosti morajo biti določene vrste, odvisno od podatkov.

Vsak program C mora vsebovati funkcijo glavni kot vstopna točka v glavni program, sicer sploh ni C :). Po prisotnosti glavnega v izvorni kodi nekoga drugega iz milijona datotek lahko razumete, da je to glavni del programa, kjer se vse začne. Torej vprašajmo:

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

int main(void) ( vrni 0; )

To je to, najprej najpreprostejši program napisano, ni važno, da nič ne naredi, šele začeli smo.

Ugotovimo, kaj smo naredili.
int To je podatkovni tip, ki ga vrne glavna funkcija.

Seveda v mikrokontrolerju glavni načeloma ni mogoče vrniti ničesar in v teoriji bi moralo biti void main(void), vendar je bil GCC prvotno zasnovan za osebni računalnik in tam lahko program vrne vrednost operacijski sistem ob zaključku. Zato GCC naprej void main(void) prisega na Opozorilo.

To ni napaka, delovalo bo, vendar ne maram opozoril.

praznina to je vrsta podatkov, ki jih v tem primeru posredujemo funkciji glavni tudi ne more sprejeti ničesar od zunaj, torej praznina- lutka. Škrbina se uporablja, ko ni treba ničesar pošiljati ali vračati.

Tukaj so { } zavit oklepaj je programski blok, v tem primeru telo funkcije glavni, se bo koda nahajala tam.

vrnitev- to je povratna vrednost, ki jo bo glavna funkcija vrnila po zaključku, ker imamo int, torej število, potem moramo vrniti število. Čeprav to še vedno nima smisla, ker... na mikrokrmilniku ne moremo iti nikamor od glavnega. Vrnem nič. Ker je vseeno. Toda prevajalnik je običajno pameten in za ta primer ne ustvari kode.
Čeprav, če je sprevržen, potem iz glavni Lahko greste na MK - na primer, padete v razdelek zagonskega nalagalnika in ga izvedete, vendar bo to zahtevalo nizko raven popravljanja vdelane programske opreme, da bi popravili prehodne naslove. Spodaj se boste sami prepričali in razumeli, kako to storiti. Za kaj? To je drugo vprašanje, v 99,999% primerov to ni potrebno :)

Uspelo nam je in šli naprej. Dodajmo spremenljivko, res je ne potrebujemo in brez nje nima smisla uvajati spremenljivk, se pa učimo. Če so spremenljivke dodane znotraj telesa funkcije, potem so lokalne in obstajajo samo v tej funkciji. Ko zapustite funkcijo, se te spremenljivke izbrišejo, pomnilnik RAM pa se dodeli za pomembnejše potrebe. .

1 2 3 4 5 6 int main(void) (unsigned char i; return 0;)

int main(void) (unsigned char i; return 0; )

nepodpisan pomeni nepodpisano. Dejstvo je, da je v binarni predstavitvi najpomembnejši bit dodeljen znaku, kar pomeni, da se število +127/-128 prilega enemu bajtu (char), če pa znak zavržemo, se prilega od 0 do 255. Običajno znak ni potreben. torej nepodpisan.
jaz je samo ime spremenljivke. Nič več.

Zdaj moramo inicializirati vrata in UART. Seveda lahko vzamete in povežete knjižnico ter pokličete nekakšen UartInit(9600); potem pa ne boste vedeli, kaj se je v resnici zgodilo.

Naredimo to:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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(bauddivider) ; UBRRH = HI(bauddivider) ; 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(bauddivider); UBRRH = HI(bauddivider); UCSRA = 0; UCSRB = 1<

Strašljivo? Pravzaprav obstaja samo pet zadnjih vrstic prave kode. Vse, to #definiraj je predprocesorski makro jezik. Skoraj enake stvari kot v Assembly, vendar je sintaksa nekoliko drugačna.

Olajšali vam bodo rutinske operacije izračunavanja potrebnih koeficientov. V prvi vrstici rečemo, da namesto tega XTAL lahko varno zamenjate 8000000, in L- navedba tipa, pri čemer je long urna frekvenca procesorja. Enako baudrate— frekvenca prenosa podatkov prek UART.

bauddividerže bolj zapleteno, namesto njega bo zamenjan izraz, izračunan po formuli iz prejšnjih dveh.
No in L.O. in HI nizki in visoki bajti bodo vzeti iz tega rezultata, ker Očitno se morda ne prilega enemu bajtu. IN HI X (vhodni parameter makra) se premakne osemkrat v desno, zaradi česar ostane samo najpomembnejši bajt. In v L.O. naredimo bitni IN s številko 00FF, posledično bo ostal samo spodnji bajt.

Torej je vse, kar je narejeno, podobno #definiraj lahko varno zavržete, potrebne številke pa izračunate na kalkulatorju in jih takoj vnesete v vrstice UBBRL = …. in UBBRH = …..

Lahko. Ampak! To storite POPOLNOMA NEMOGOČE!

Delovalo bo tako ali drugače, vendar boste imeli t.i magične številke- vrednote, ​​vzete od nikoder in iz neznanih razlogov, in če čez nekaj let odprete tak projekt, bo presneto težko razumeti, kaj so te vrednote. Tudi zdaj, če hočeš spremeniti hitrost, ali spremeniti frekvenco kvarca, bo treba vse znova izračunati, ampak si spremenil par številk v kodi in to je to. Na splošno, če ne želite, da vas označijo za kodirnika, naredite kodo tako, da bo lahko berljiva, razumljiva in enostavna za spreminjanje.

Potem je vse preprosto:
Vsi ti “UBRRL in Co” so konfiguracijski registri UART oddajnika, s pomočjo katerega bomo komunicirali s svetom. In zdaj smo jim dodelili zahtevane vrednosti, jih nastavili na želeno hitrost in način.

Vrsta snemanja 1< Pomeni naslednje: vzemite 1 in ga postavite na mesto RXEN v bajtu. RXEN to je 4. bit registra UCSRB, Torej 1< tvori binarno število 00010000, TXEN- to je 3. bit in 1< bo dal 00001000. En sam "|" bitno je ALI, torej 00010000 | 00001000 = 00011000. Na enak način se nastavijo preostali potrebni konfiguracijski biti in dodajo splošni kopici. Posledično se zbrana številka zabeleži v UCSRB. Več podrobnosti je opisanih v podatkovnem listu na MK v razdelku USART. Naj nas torej ne zamotijo ​​tehnične podrobnosti.

Končano, čas je, da vidimo, kaj se je zgodilo. Kliknite kompilacijo in zaženite emulacijo (Ctrl+F7).

Odpravljanje napak
Vrstile so se najrazličnejše vrstice napredka, studio se je spremenil in blizu vhoda v glavno funkcijo se je pojavila rumena puščica. Tukaj se trenutno izvaja procesor in simulacija je zaustavljena.

Dejstvo je, da je bilo na začetku pravzaprav na liniji UBRRL = LO(bauddivider); Navsezadnje to, kar imamo v definiciji, ni koda, ampak le predhodni izračuni, zato je simulator nekoliko dolgočasen. Zdaj pa je spoznal, da je prvo navodilo opravljeno in če splezaš na drevo V/I pogled, v razdelek USART in tam poglejte bajt UBBRL, videli boste, da je vrednost že tam! 0x33.

Naredite še korak naprej. Oglejte si, kako se spreminja vsebina drugega registra. Torej pojdite skozi vse, bodite pozorni na dejstvo, da so vsi označeni biti nastavljeni, kot sem vam povedal, in so nastavljeni hkrati za celoten bajt. Dlje od Vrnitve ne bo šlo - programa je konec.

Otvoritev
Zdaj ponastavite simulacijo na nič. Kliknite tam Ponastavi (Shift+F5). Odprite razstavljen seznam, zdaj boste videli, kaj se dejansko dogaja v krmilniku. Pogled -> Disassembler. In ne JAAAAAAA!!! Sestavljalec!!! GROZA!!! IN JE NUJNO. Da kasneje, ko gre kaj narobe, ne boš neumen v kodi in ne sprašuješ bedastih vprašanj na forumih, ampak se takoj poglobiš v drobovje in vidiš, kje si se zataknil. Tam ni nič strašnega.

Najprej bodo vrhovi 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 0x0000002A Skok +00000002: 940C0034 JMP 0x00000034 Skok +00000004: 940C0034 JMP 0x00000034 Skok +00000006: 940C0034 JMP 0x00000034 Skok +00000008: 940C0034 JMP 0x00000034 Skok +0000000A: 940C0034 JMP 0x00000034 Skok +0000000C: 940C0034 JMP 0x00000034 Skok + 0000000E: 940C0034 JMP 0x00000034 Skok +00000010: 940C0034 JMP 0x00000034 Skok +00000012: 940C0034 JMP 0x00000034 Skok +00000014: 940C0034 JMP 0x00000034 Skok +00000016: 940C0034 JMP 0x00000034 Skok +00000018: 940C0034 JMP 0x00000034 Skok +0000001A: 940C0034 JMP 0x00000034 Skok +0000001C : 940C0034 JMP 0x00000034 Jump +0000001E: 940C0034 JMP 0x00000034 Jump +00000020: 940C0034 JMP 0x00000034 Jump +00000022: 940C0034 JMP 0x000000 34 Skok +00000024: 940C0034 JMP 0x00000034 Skok +00000026: 940C0034 JMP 0x00000034 Skok +00000028: 940C0034 JMP 0x00000034 Skok

00000000: 940C002A JMP 0x0000002A Skok +00000002: 940C0034 JMP 0x00000034 Skok +00000004: 940C0034 JMP 0x00000034 Skok +00000006: 940C0034 JMP 0x00000034 Skok +00000008: 940C0034 JMP 0x00000034 Skok +0000000A: 940C0034 JMP 0x00000034 Skok +0000000C: 940C0034 JMP 0x00000034 Skok +0000000E : 940C0034 JMP 0x00000034 Skok +00000010: 940C0034 JMP 0x00000034 Skok +00000012: 940C0034 JMP 0x00000034 Skok +00000014: 940C0034 JMP 0x000000 34 Skok +00000016: 940C0034 JMP 0x00000034 Skok +00000018: 940C0034 JMP 0x00000034 Skok +0000001A: 940C0034 JMP 0x00000034 Skok +0000001C : 940C0034 JMP 0x00000034 Jump +0000001E: 940C0034 JMP 0x00000034 Jump +00000020: 940C0034 JMP 0x00000034 Jump +00000022: 940C0034 JMP 0x000000 34 Skok +00000024: 940C0034 JMP 0x00000034 Skok +00000026: 940C0034 JMP 0x00000034 Skok +00000028: 940C0034 JMP 0x00000034 Skok

To je tabela vektorjev prekinitev. K temu se bomo vrnili kasneje, za zdaj pa samo poglejte in se spomnite, da obstaja. Prvi stolpec je naslov bliskovne celice, v kateri je ukaz, drugi je koda ukaza, tretji je mnemonika ukaza, isto navodilo za sestavljanje, tretji so operandi ukaza. No, samodejni komentar.
Torej, če pogledate, obstajajo neprekinjeni prehodi. In koda ukaza JMP je štiribajtna, vsebuje naslov skoka, zapisan nazaj - nizki bajt na nizkem naslovu in kodo ukaza skoka 940C

0000002B: BE1F OUT 0x3F,R1 Out to I/O location

Snemanje te ničle na naslov 0x3F.Če pogledate stolpec pogleda I/O, boste videli, da je naslov 0x3F naslov registra SREG - registra zastavic krmilnika. Tisti. ponastavimo SREG za izvajanje programa pod ničelnimi pogoji.

1 2 3 4 +0000002C: E5CF LDI R28,0x5F Naloži takoj +0000002D: E0D4 LDI R29,0x04 Naloži takoj +0000002E: BFDE OUT 0x3E,R29 Out to I/O location +0000002F: BFCD OUT 0x3D,R28 Out to I/O location

0000002C: E5CF LDI R28,0x5F Naloži takoj +0000002D: E0D4 LDI R29,0x04 Naloži takoj +0000002E: BFDE OUT 0x3E,R29 Out to I/O location +0000002F: BFCD OUT 0x3D,R28 Out to I/O location

To je nalaganje kazalca sklada. Ne morete neposredno nalagati v V/I registre, samo prek vmesnega registra. Zato najprej LDI do vmesnega, nato pa od tam OUT do I/O. Kasneje vam bom povedal tudi več o skladu. Za zdaj vedite, da je to območje dinamičnega pomnilnika, ki visi na koncu RAM-a in shranjuje naslove in vmesne spremenljivke. Zdaj smo navedli, od kod se bo začel naš sklad.

00000032: 940C0041 JMP 0x00000041 Skok

Skoči na sam konec programa in tam imamo prepoved prekinitev in tesno zanko samega sebe:

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 v primeru nepredvidenih okoliščin, kot je izstop iz glavne funkcije. Krmilnik je mogoče odstraniti iz takšne zanke s ponastavitvijo strojne opreme ali, bolj verjetno, s ponastavitvijo psa čuvaja. No, ali pa, kot sem rekel zgoraj, popravimo to v hex urejevalniku in oddirjamo, kamor nam srce poželi. Upoštevajte tudi, da obstajata dve vrsti prehodov: JMP in RJMP; prvi je neposreden prehod na naslov. Zavzema štiri bajte in lahko neposredno skače skozi celotno območje pomnilnika. Druga vrsta prehoda je RJMP - relativni. Njegov ukaz traja dva bajta, vendar se premakne s trenutnega položaja (naslova) 1024 korakov naprej ali nazaj. In njegovi parametri kažejo odmik od trenutne točke. Uporablja se pogosteje, ker pri izpiranju zavzame polovico prostora in redko so potrebni dolgi prehodi.

1 +00000034: 940C0000 JMP 0x00000000 Skok

00000034: 940C0000 JMP 0x00000000 Skok

In to je skok na sam začetek kode. Nekakšen ponovni zagon. Tukaj lahko preverite, ali vsi vektorji skačejo. Zaključek iz tega je, da če zdaj omogočite prekinitve (privzeto so onemogočene) in se vaša prekinitev pojavi, vendar ni upravljalnika, potem bo prišlo do ponastavitve programske opreme - program bo vrnjen nazaj na sam začetek.

Glavna funkcija. Vse je podobno, ni vam treba niti opisovati. Samo poglejte že izračunano število, ki se vpisuje v registre. Predprocesor prevajalnika je neverjeten!!! Torej brez "čarobnih" številk!

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

00000036: E383 LDI R24,0x33 Nalaganje takoj +00000037: B989 OUT 0x09,R24 Izhod na V/I lokacijo 15: UBRRH = HI(bauddivider); +00000038: BC10 OUT 0x20,R1 Izhod na V/I lokacijo 16: UCSRA = 0; +00000039: B81B OUT 0x0B,R1 Out to I/O location 17: UCSRB = 1<

In tukaj je napaka:

1 2 3 +0000003E: E080 LDI R24.0x00 Naloži takoj +0000003F: E090 LDI R25.0x00 Naloži takoj +00000040: 9508 RET Vrnitev podprograma

0000003E: E080 LDI R24.0x00 Naloži takoj +0000003F: E090 LDI R25.0x00 Naloži takoj +00000040: 9508 RET Vrnitev podprograma

Vprašanje je, zakaj prevajalnik dodaja takšne vrhove? In to ni nič drugega kot Return 0, funkcijo smo definirali kot int main(void) in tako smo zapravili še štiri bajte za nič :) In če naredite void main(void), bo ostal samo RET, vendar se bo pojavilo opozorilo , da naša glavna funkcija ne vrne ničesar. Na splošno naredite, kot želite :)

Težko? Očitno ne. Kliknite na izvajanje korak za korakom v načinu disassemblerja in si oglejte, kako procesor izvaja posamezna navodila, kaj se zgodi z registri. Kako poteka premikanje skozi ukaze in končno zanko?

Nadaljevanje čez par dni...

Offtop:
Aleksej78 Ustvaril sem vtičnik za Firefox, ki olajša krmarjenje po mojem spletnem mestu in forumu.
Razprava in prenos,

Naloga: Razvijmo program za krmiljenje ene LED. Ko gumb pritisnete, LED lučka zasveti in ko ga spustite, ugasne.

Najprej razvijemo shematski diagram naprave. V/I vrata se uporabljajo za priključitev zunanjih naprav na mikrokrmilnik. Vsaka od vrat lahko deluje kot vhod in izhod. Povežimo LED na eno od vrat in gumb na drugo. Za ta poskus bomo uporabili krmilnik Atmega8. Ta čip vsebuje 3 V/I vrata, ima 2 osembitna in 1 šestnajstbitni časovnik/števec. Na krovu je tudi 3-kanalni PWM, 6-kanalni 10-bitni analogno-digitalni pretvornik in še veliko več. Po mojem mnenju je mikrokrmilnik odličen za učenje osnov programiranja.

Za povezavo LED bomo uporabili linijo PB0, za branje informacij z gumba pa linijo PD0. Diagram je prikazan na sliki 1.

riž. 1

Skozi upor R2 se plus napajalna napetost dovaja na vhod PD0, kar ustreza signalu logične ena. Ko je gumb zaprt, napetost pade na nič, kar ustreza logični ničli. V prihodnosti lahko R2 izključite iz vezja in ga nadomestite z notranjim obremenitvenim uporom, pri čemer vnesete potrebne nastavitve v program. LED je povezana z izhodom priključka PB0 prek upora za omejevanje toka R3. Če želite zasvetiti LED, morate na linijo PB0 uporabiti signal logične ena. Uporabili bomo notranji glavni taktni generator na 4 MHz, saj naprava nima visokih zahtev glede stabilnosti frekvence.

Zdaj pišemo program. Za pisanje programov uporabljam programsko okolje AVR Studio in WinAvr. Odprite AVR Studio, pojavi se pozdravno okno, kliknite gumb "Ustvari nov projekt", nato izberite vrsto projekta - AVR GCC, napišite ime projekta, na primer "cod1", označite "Ustvari mapo projekta" in "Ustvari inicializacijska datoteka« potrditvena polja, kliknite gumb »Naprej«, v levem oknu izberite »AVR Simulator« in v desnem oknu vnesite tip mikrokrmilnika »Atmega8«, kliknite gumb »Dokončaj«, odpre se urejevalnik in drevo kategorij projekta - so začetne nastavitve končane.

Najprej dodajmo standardno opisno besedilo za Atmega8 z uporabo operatorja za pripenjanje zunanjih datotek: #vključi

sintaksa direktive #vključi

#vključi<имя_файла.h>
#include “imedatoteke.h”

Kotni oklepaji< и >navedite prevajalniku, da je treba vključene datoteke najprej poiskati v standardni mapi WinAvr z imenom include. Dvojna narekovaja “ in “ sporočata prevajalniku, naj začne iskati v imeniku, kjer je shranjen projekt.

Vsak tip mikrokrmilnika ima svojo datoteko glave. Za ATMega8 se ta datoteka imenuje iom8.h, za ATtiny2313 - iotn2313.h. Na začetku vsakega programa moramo vključiti datoteko glave mikrokontrolerja, ki ga uporabljamo. Obstaja pa tudi običajna datoteka glave io.h. Predprocesor obdela to datoteko in glede na nastavitve projekta vključi zahtevano datoteko glave v naš program.

Za nas bo prva vrstica programa videti takole:

#vključi

Vsak program C mora vsebovati eno glavno funkcijo. Imenuje se glavni. Izvajanje programa se vedno začne z izvajanjem glavne funkcije. Funkcija ima glavo - int main(void) in telo - razmejeno je z zavitimi oklepaji ().

int main(void)
{
funkcijsko telo
}

Našo kodo bomo dodali telesu funkcije. Vrnjeni tip je naveden pred imenom funkcije. Če funkcija ne vrne vrednosti, se uporabi ključ praznina.

int- to je 2-bajtno celo število, obseg vrednosti je od - 32768 do 32767

Za imenom funkcije so v oklepajih () navedeni parametri, ki se posredujejo funkciji, ko jo pokličete. Če funkcija nima parametrov, se uporabi ključna beseda praznina. funkcija glavni vsebuje nabor ukazov, sistemske nastavitve in glavno programsko zanko.

Nato konfiguriramo vrata D na vhodu. Način delovanja vrat določa vsebina registra DDRD(register smeri prenosa informacij). V ta register zapišemo številko "0x00" (0b0000000 - v binarni obliki), s temi vrati ni povezano nič razen gumba, tako da celotno vrata D konfiguriramo kot vhod. Vrata lahko konfigurirate bit za bit tako, da zapišete številke 0 ali 1 v vsak bit registra (0-vhod, 1-izhod), na primer DDRD = 0x81 (0b10000001) - prva in zadnja vrstica vrat D delujeta kot izhod, ostalo kot vhod. Priključiti je treba tudi notranji bremenski upor. Register PORTx nadzoruje, ali so notranji upori vklopljeni ali izklopljeni, ko so vrata v vhodnem načinu. Zapišimo tja enote.

Nastavitev pristanišča B do izhoda. Način delovanja vrat določa vsebina registra DDRB. Nič drugega kot LED na vrata B ni povezan, tako da je mogoče celotna vrata konfigurirati kot izhod. To storite s pisanjem v register DDRBštevilke "0xFF". Če želite preprečiti, da bi LED zasvetila, ko jo prvič vklopite, pišite na vrata B logične ničle. To se naredi s snemanjem PORTB= 0x00;

Za dodeljevanje vrednosti se uporablja simbol "=" in se imenuje operator dodeljevanja, ne sme se zamenjati z znakom "enako".

Konfiguracija vrat bo videti takole:

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

Napišemo glavno zanko programa. medtem(»medtem ko« iz angleščine) - ta ukaz organizira zanko in večkrat ponavlja telo zanke, dokler ni pogoj izpolnjen, to je, dokler je izraz v oklepajih resničen. V C se šteje, da je izraz resničen, če ni enak nič, in napačen, če je.

Ukaz izgleda takole:

medtem ko (pogoj)
{
telo zanke
}

V našem primeru bo glavna zanka sestavljena samo iz enega ukaza. Ta ukaz dodeli register PORTB vrednost registra, ki jo želite obrniti PORTD.

PORTB = ~PIND; //vzemite vrednost iz vrat D, jo obrnite in dodelite PORTB (zapišite v PORTB)

// Izrazi C se berejo od desne proti levi

PIND register vnosa informacij. Če želite prebrati informacije iz zunanjega izhoda krmilnika, morate najprej preklopiti želeni bit vrat v vhodni način. To pomeni, da zapišete v ustrezen bit registra DDRx nič. Šele po tem se lahko digitalni signal iz zunanje naprave dovaja na ta pin. Nato bo mikrokrmilnik prebral bajt iz registra PINx. Vsebina ustreznega bita ustreza signalu na zunanjem zatiču vrat. Naš program je pripravljen in izgleda takole:

#vključi int main (void) ( DDRD = 0x00; //vrata D - vhod PORTD = 0xFF; //povežite bremenski upor DDRB = 0xFF; //vrata B - izhod PORTB = 0x00; //nastavite izhod na 0 while(1) ) ( PORTB = ~PIND; //~ znak bitne inverzije ) )

Komentarji se pogosto uporabljajo v jeziku C. Obstajata dva načina pisanja.

/*Komentar*/
// Komentar

V tem primeru prevajalec ne bo pozoren na zapisano v komentarju.

Če uporabite isti program in povežete 8 gumbov in 8 LED na mikrokrmilnik, kot je prikazano na sliki 2, bo jasno, da vsak del vrat D se ujema z bitom vrat B. S pritiskom na tipko SB1 zasveti HL1, s pritiskom na tipko SB2 zasveti HL2 itd.

Slika 2

V članku so bili uporabljeni materiali iz knjige A. V. Belova. "Vadnica za razvijalce naprav AVR"

Mikrokontrolerji Atmega8 so najbolj priljubljeni predstavniki svoje družine. V mnogih pogledih to dolgujejo na eni strani preprostosti delovanja in razumljivi strukturi ter na drugi strani precej široki funkcionalnosti. Ta članek bo obravnaval programiranje Atmega8 za začetnike.

splošne informacije

Mikrokontrolerji so povsod. Najdemo jih v hladilnikih, pralnih strojih, telefonih, tovarniških strojih in številnih drugih tehničnih napravah. Mikrokontrolerji segajo od enostavnih do zelo zapletenih. Slednji ponujajo bistveno več funkcij in funkcionalnosti. Toda kompleksne tehnologije ne boste mogli razumeti takoj. Na začetku morate obvladati nekaj preprostega. In Atmega8 bo vzet kot vzorec. Programiranje na njem ni težko zaradi njegove kompetentne arhitekture in prijaznega vmesnika. Poleg tega ima zadostno zmogljivost za uporabo v večini, poleg tega pa se uporabljajo tudi v industriji. V primeru Atmega8 programiranje zahteva znanje jezikov, kot je AVR (C/Assembler). Kje začeti? Obvladovanje te tehnologije je možno na tri načine. In vsak se sam odloči, kje bo začel delati z Atmega8:

  1. Programiranje preko Arduina.
  2. Nakup že pripravljene naprave.
  3. Samosestavljanje mikrokontrolerja.

Upoštevali bomo prvo in tretjo točko.

Arduino

To je priročna platforma, zasnovana v obliki, ki je primerna za hitro ustvarjanje različnih naprav. Plošča že ima vse, kar potrebujete, v obliki samega mikrokontrolerja, njegovega snopa in programatorja. Če sledi tej poti, bo oseba prejela naslednje koristi:

  1. Zahteve za nizek prag. Za razvoj tehničnih naprav vam ni treba imeti posebnih znanj.
  2. Za priključitev brez dodatne priprave bo na voljo širok nabor elementov.
  3. Hiter začetek razvoja. Z Arduinom lahko skočite naravnost v ustvarjanje naprav.
  4. Razpoložljivost velikega števila učnih gradiv in primerov izvedb različnih modelov.

So pa tudi določene slabosti. Tako vam Arduino programiranje Atmega8 ne omogoča, da bi se poglobili v svet mikrokrmilnika in razumeli številne uporabne vidike. Poleg tega se boste morali naučiti programskega jezika, ki se razlikuje od tistih, ki jih uporablja AVR (C/Assembler). In še nekaj: Arduino ima precej ozko paleto modelov. Zato se bo prej ali slej pojavila potreba po uporabi mikrokontrolerja, ki se v ploščah ne uporablja. Toda na splošno je to dobra možnost za delo z Atmega8. Programiranje prek Arduina vam bo omogočilo samozavesten začetek v svetu elektronike. In oseba verjetno ne bo obupala zaradi neuspehov in težav.

Samosestavljanje

Zahvaljujoč prijaznemu dizajnu jih lahko izdelate sami. Navsezadnje to zahteva poceni, cenovno dostopne in enostavne komponente. To vam bo omogočilo, da temeljito preučite zasnovo mikrokrmilnika Atmega8, katerega programiranje po montaži se bo zdelo lažje. Po potrebi lahko samostojno izberete druge komponente za določeno nalogo. Res je, tu obstaja določena pomanjkljivost - zapletenost. Samostojno sestaviti mikrokrmilnik ni enostavno, če nimate potrebnega znanja in spretnosti. To možnost bomo upoštevali.

Kaj je potrebno za montažo?

Najprej morate dobiti samo Atmega8. Programiranje mikrokrmilnika brez tega je nemogoče. Stalo bo nekaj sto rubljev - hkrati pa bo zagotovilo dostojno funkcionalnost. Postavlja se tudi vprašanje, kako bo Atmega8 programiran. USBAsp je precej dobra naprava, ki se je izkazala za zelo dobro. Lahko pa uporabiš kakšen drug programator. Ali pa ga sestavite sami. Toda v tem primeru obstaja tveganje, da bo mikrokrmilnik, če je izdelan slabo, spremenil v nefunkcionalen kos plastike in železa. Prav tako ne bi škodilo, če bi imeli mizo in skakalce. Niso obvezne, a vam bodo prihranile živce in čas. In končno, potrebujete vir napajanja 5 V.

Programiranje Atmega8 za začetnike z uporabo primera

Poglejmo, kako na splošno nastane naprava. Torej, recimo, da imamo mikrokontroler, LED, upor, programator, povezovalne žice in napajalnik. Prvi korak je pisanje vdelane programske opreme. Razumemo ga kot niz ukazov za mikrokrmilnik, ki je predstavljen kot končna datoteka v posebnem formatu. Določiti je treba povezavo vseh elementov, pa tudi interakcijo z njimi. Po tem lahko začnete sestavljati vezje. Pin VCC mora biti napajan. Na katero koli drugo, zasnovano za delo z napravami in elementi, je najprej priključen upor in nato LED. V tem primeru je moč prvega odvisna od potreb po moči drugega. Uporabite lahko naslednjo formulo: R=(Up-Ups)/Is. Tukaj je p moč in s LED. Predstavljajmo si, da imamo LED, ki porabi 2 V in zahteva napajalni tok 10 mA, pretvorimo jo v obliko, ki je bolj primerna za matematične operacije, in dobimo 0,01 A. Potem bo formula videti takole: R=(5V-2V)/0,01A=3V/0,01A=300 Ohm. Toda v praksi je pogosto nemogoče izbrati idealen element. Zato se vzame najprimernejši. Vendar morate uporabiti upor z uporom, višjim od matematično pridobljene vrednosti. Zahvaljujoč temu pristopu bomo podaljšali njegovo življenjsko dobo.

Kaj je naslednje?

Tako imamo majhen diagram. Sedaj preostane le še povezovanje programatorja z mikrokontrolerjem in v njegov pomnilnik zapisati ustvarjeno firmware. Tukaj je ena točka! Pri gradnji vezja ga je treba ustvariti tako, da je mikrokrmilnik mogoče flashati brez odspajkanja. To bo prihranilo čas, živce in podaljšalo življenjsko dobo elementov. Vključno z Atmega8. Treba je opozoriti, da programiranje v vezju zahteva znanje in veščine. Omogoča pa tudi ustvarjanje naprednejših modelov. Navsezadnje se pogosto zgodi, da se med odspjkanjem poškodujejo elementi. Po tem je diagram pripravljen. Napetost se lahko uporabi.

Pomembne točke

Začetnikom bi rad dal koristne nasvete o programiranju Atmega8. Ne spreminjajte vgrajenih spremenljivk in funkcij! Priporočljivo je, da napravo utripate z ustvarjenim programom, potem ko preverite, ali ni "večnih zank", ki bodo blokirale vse druge motnje, in z uporabo dobrega oddajnika. Če za te namene uporabljate domači izdelek, morate biti psihično pripravljeni na odpoved mikrokrmilnika. Ko utripate napravo s programatorjem, morate povezati ustrezne izhode VCC, GND, SCK, MOSI, RESET, MISO. In ne kršite varnostnih ukrepov! Če tehnične specifikacije določajo, da mora biti napajanje 5V, potem se morate držati točno te napetosti. Tudi uporaba 6V elementov lahko negativno vpliva na delovanje mikrokontrolerja in skrajša njegovo življenjsko dobo. Seveda imajo 5V baterije določene razlike, vendar je praviloma vse v razumnih mejah. Na primer, največja napetost bo ohranjena pri 5,3 V.

Usposabljanje in izpopolnjevanje veščin

Na srečo je Atmega8 zelo priljubljen mikrokrmilnik. Zato iskanje podobno mislečih ali preprosto razgledanih in spretnih ljudi ne bo težko. Če ne želite znova izumljati kolesa, ampak želite samo rešiti določeno težavo, potem lahko zahtevano shemo poiščete na obsežnem svetovnem spletu. Mimogrede, majhen namig: čeprav je robotika precej priljubljena v rusko govorečem segmentu, če ni odgovora, ga poiščite v angleško govorečem segmentu - vsebuje red velikosti več informacij. Če obstajajo določeni dvomi o kakovosti obstoječih priporočil, potem lahko poiščete knjige, ki obravnavajo Atmega8. Na srečo proizvodno podjetje upošteva priljubljenost svojega razvoja in jih oskrbuje s specializirano literaturo, kjer izkušeni ljudje povedo, kaj in kako, ter dajejo primere, kako naprava deluje.

Je težko začeti ustvarjati nekaj svojega?

Dovolj je imeti 500-2000 rubljev in nekaj prostih večerov. Ta čas je več kot dovolj, da se seznanite z arhitekturo Atmega8. Po malo vaje lahko preprosto ustvarite lastne projekte, ki opravljajo določene naloge. Na primer robotska roka. Sama Atmega8 bi morala biti več kot dovolj za prenos osnovnih motoričnih funkcij prstov in roke. Seveda je to precej težka naloga, vendar je povsem izvedljiva. V prihodnosti bo mogoče ustvariti kompleksne stvari, ki bodo zahtevale na desetine mikrokontrolerjev. Ampak to je vse pred nami, pred tem morate dobiti šolo dobre prakse o nečem preprostem.