Programovanie Atmega8. Programovanie mikrokontrolérov AVR. Rozhranie MK v režime programovania

Na prenos z počítača do mikrokontroléra potrebujeme USBasp a program AVRDUDE.Dnes existuje široký výber programátorov určených na programovanie mikrokontroléry AVR. Medzi nimi nájdete veľa domácich, ktoré sa sotva dajú nazvať programátormi, pretože sú priamo pripojené na COM port pomocou niekoľkých rezistorov. Avšak moderné počítače a notebooky už prakticky nie sú vybavené COM portami, takže jedným z hlavných kritérií pri výbere programátora je možnosť pripojiť ho k USB vstup. Najlacnejší, najjednoduchší a najbežnejší je programátor USBasp. Dá sa kúpiť takmer v každom obchode s rádiami priaznivá cena. Jeho cena je čínsky internet Obchod sa pohybuje od 1,5 do 3 USD.

Programátor USBasp

Počítač komunikuje s mikrokontrolérom pomocou programátora USBasp cez USB port a dáta sa prenášajú cez rozhranie SPI S erial P periférne ja rozhranie(sériové periférne rozhranie). Na komunikáciu MK s programátorom sa používajú špeciálne piny: MOSI, MISO, SCK, RESET, VCC, GND. Hoci SPI predpokladá použitie iba troch pinov MOSI, MISO a SCK, ale použijeme všetkých šesť pinov.

Pri výmene dát cez rozhranie SPI Mikrokontrolér môže súčasne prijímať (MISO pin) alebo vysielať dáta (MOSI pin). Nastavenie režimu prijímania alebo vysielania dát sa vykonáva privedením určitého impulzu na kolík SCK.

Konektor programátora má spravidla 10 pinov a je pripojený k mikrokontroléru pomocou 10-žilového kábla. Je však vhodnejšie použiť káble, ktoré majú 6-pinový adaptér, pretože v tomto prípade sú všetky kolíky obsadené. V prípade desaťkolíkového konektora zostáva jeden kolík neobsadený a štyri kolíky sú pripojené k spoločnému vodiču (GND).

Aby počítač rozpoznal programátor, musíte nainštalovať ovládač USBasp.

Fotografia programátora pripojeného k mikrokontroléru ATmega8 je uvedená nižšie.

Jedinou nevýhodou, alebo správnejšie, menšou nevýhodou tohto programátora je, že ho nepodporuje (bez rôznych trikov) Atmel Studio, takže musíte použiť program tretej strany. Najosvedčenejším je AVRDUDE.

nastavenie

Teraz už len musíme dokončiť posledný krok. Spustite program AVRDUDE. V predvolenom nastavení sa otvorí karta Program. V spodnej časti okna v ponuke Nastavenia vyberte typ programátora usbasp. Ďalší v kategórii Mikrokontrolér vyberte si náš mikrokontrolér ATmega8. Nižšie v kategórii Flash kliknite na ikonu elipsy a v ponuke, ktorá sa otvorí, zadajte cestu k skompilovanému súboru s príponou hex. Cesta k súboru a samotný súbor budú rovnaké, ako sme predtým špecifikovali v .

Aby ste sa uistili, že programátor je detekovaný operačným systémom (ovládač programátora je nainštalovaný správne) a je správne pripojený k mikrokontroléru, kliknite na tlačidlo Čítanie. Ak nie sú žiadne chyby, zobrazí sa okno so záznamom „ Kalibračné bunky generátora boli načítané!“ A v hornom okne sa zobrazí hexadecimálne číslo. Každý MK má svoje číslo.

Pred nahrávaním nový program Odporúča sa vymazať pamäť mikrokontroléra. Môžete to urobiť kliknutím na tlačidlo Vymazať všetko. V dôsledku toho sa zobrazí okno, ktoré naznačuje, že kryštál je čistý.

Teraz kliknite na tlačidlo Program v kategórii Flash. Po úspešnom zaznamenaní programu v MK sa zobrazí okno s nižšie uvedeným záznamom.

Výsledkom zaznamenaného, ​​alebo, ako sa tiež hovorí, firmware programu je rozsvietená LED dióda pripojená na pin PC0 nášho mikrokontroléra.

Dobrý deň. Pokračujme. Keď sme sa zoznámili s procesom ladenia programu, ktorý sme napísali v „atmel studio“ a virtuálne poskladali obvod s jednou LED v „proteus“, nastal čas zostaviť obvod do hardvéru a zablikať mikrokontrolérom.

Naprogramovať prototyp ( Atmega 8) použijeme programátor USBASP. Vyzerá to takto:

Kábel bude pripojený ku konektoru, do ktorého sú pripojené prepojky, ktoré budú zase pripojené k zásuvkám doštičky, na ktorej je nainštalovaný mikrokontrolér:

Prvý kolík je na konektore označený šípkou.


Potom, čo sme prišli na programátora. Prejdime k zostaveniu obvodu v hardvéri. Mikrokontrolér namontujeme na dosku. Pripomínam, že prvá noha je na MK označená malým krúžkom.

Úlohou je spojiť piny programátora s „kamennými“ pinmi.

Na 10-pinový konektor pripájame prepojky. Používame nasledovné piny MOSI, RST, SCK, MISO, VTG (VCC), GND.

Dúfam, že ste si už stiahli datasheet na atmega8. Ak nie, môžete si ho stiahnuť. Pozeráme sa na pinout kolíkov mikrokontroléra.

Prepojky pripájame k nasledujúcim kolíkom:

  • VCC na kolík 7 MK;
  • SCK na kolík 19 MK;
  • MISO na kolík 18 MK;
  • MOSI na kolík 17 MK;
  • GND (pin 10 programátora) na kolík 8 MK;
  • RST na 1 kolík MK;

Pre ďalšiu úspešnú prevádzku operačný systém pri prvom spustení stroja shaitan (programátor) ponúkne inštaláciu ovládačov potrebných na fungovanie zariadenia.

Pri práci s expeditorom by nemali byť žiadne problémy. Stiahnuť ▼. Vytvorte priečinok, do ktorého rozbalíme stiahnutý archív. Potom v Sprievodcovi inštaláciou hardvéru zadáme cestu k priečinku s rozbaleným ovládačom.

Ak používate systém Windows 7 alebo vyšší, môžu sa vyskytnúť menšie problémy. Ovládače pre programátor sú dosť staré, takže nemajú digitálny podpis. Keď sa pokúsite nainštalovať takýto ovládač, operačný systém zobrazí niečo takéto *

„Digitálny podpis vodičov potrebný pre tohto zariadenia. O posledná zmena zariadenia resp softvér nesprávne podpísaný resp poškodený súbor alebo malvér neznámeho pôvodu. (Kód 52).“

Ak chcete situáciu napraviť, musíte vypnúť overovanie digitálneho podpisu ovládača. Nebudem popisovať, ako to zakázať (každý má svoj vlastný operačný systém), nájdete ich na internete.

Po vypnutí overovania podpisu zadajte v Sprievodcovi inštaláciou hardvéru cestu k priečinku s rozbaleným ovládačom.

Dúfam, že vám všetko vyšlo a programátor je pripravený pracovať.

Prejdime k zostaveniu obvodu s LED.

Na flashovanie firmvéru mikrokontroléra použijeme program „avrdudeprog“. Nachádza sa vo všeobecnom archíve.

Vyberte atmega8 zo zoznamu mikrokontrolérov. Po výbere MK sa zobrazí okno informujúce o tom, že poistka a bity Lock sú štandardne nastavené.

Potom otvorte kartu Poistky. Jednoducho povedané Poistky sú konfiguračné nastavenia MK, s ktorými je lepšie sa nezahrávať. Pre prípad, že ste si zakúpili rovnaký ovládač ako ja a nemáte externý kremenný rezonátor (používate interný oscilátor frekvencia hodín), začiarknite presne tie isté políčka ako na obrázku. Vedľa položky „inverzná“ musí byť začiarknuté políčko.

Nakonfigurované nastavenia „prikazujú“ Atmega8A vykonávať svoju prácu v závislosti od taktovania z interného oscilátora (frekvencia taktovania 8 MHz). Aby sa nastavenia prejavili, musíte kliknúť na tlačidlo „Programovanie“. Pred stlačením však ešte raz skontrolujte, či je všetko správne nastavené.

Vráťte sa na stránku „Program“.

Potom, čo sme už povedali programu, ktorý mikrokontrolér budeme blikať, vyberieme súbor firmvéru, ktorý sme napísali v minulej lekcii. Má HEX predĺženie. Nachádza sa v priečinku "Debug".

Pred blikaním „kamienka“ kliknite na tlačidlo „Vymazať všetko“. To vás ochráni pred nepochopiteľnými chybami (čo ak je kameň už šitý):

Výsledok našej práce nás baví :) Pokračovanie...

Viac ako raz alebo dvakrát som povedal, že štúdium MK by malo začať assemblerom. Tomu bol venovaný celý kurz na stránke (nie je síce veľmi dôsledný, ale postupne ho česám do adekvátneho vzhľadu). Áno, je to ťažké, výsledok nebude hneď v prvý deň, ale naučíte sa rozumieť tomu, čo sa deje vo vašom ovládači. Budete vedieť, ako to funguje, a nebudete kopírovať zdroje iných ľudí ako opice a snažiť sa pochopiť, prečo to zrazu prestalo fungovať. Okrem toho je pre C oveľa jednoduchšie vytvoriť kód robotníka, ktorý sa objaví s vidlami v najnevhodnejšom momente.

Bohužiaľ, každý chce výsledky okamžite. Tak som sa rozhodol ísť inou cestou – spraviť návod na C, ale s ukazovaním jeho spodnej bielizne. Dobrý programátor embedderu vždy drží svoj kus hardvéru pevne za skrutku a nedovolí mu urobiť jediný krok bez povolenia. Takže najprv bude C kód, potom čo vytvoril kompilátor a ako to celé vlastne funguje :)

Na druhej strane Xi silný bod Toto je prenosnosť kódu. Ak, samozrejme, napíšete všetko správne. Rozdelenie pracovných algoritmov a ich hardvérových implementácií do rôznych častí projektu. Potom na prenos algoritmu na iný mikrokontrolér bude stačiť prepísať iba vrstvu rozhrania, kde sú zapísané všetky volania hardvéru, a nechať všetok pracovný kód tak, ako je. A, samozrejme, čitateľnosť. Zdrojový kód C je na prvý pohľad zrozumiteľnejší (aj keď... napríklad mi je jedno, na čo mám ukazovať - ​​či už C alebo ASM :)), ale opäť, ak je všetko napísané správne. Budem venovať pozornosť aj týmto bodom.

Leví podiel na všetkých príkladoch bude môj ako testovací kus, na ktorom bude nainštalovaný leví podiel na všetkých príkladoch. vývojová rada.

Prvý program C pre AVR

Výber kompilátora a nastavenie prostredia
Existuje veľa rôznych kompilátorov C pre AVR:
V prvom rade toto IAR AVR C- je takmer určite uznávaný ako najlepší kompilátor pre AVR, pretože samotný ovládač vznikol v úzkej spolupráci Atmelu a špecialistov z IAR. Za všetko však treba platiť. A tento kompilátor nie je len drahý komerčný softvér, ale má aj toľko nastavení, že jednoducho ho v ňom skompilovať dá veľa námahy. Naozaj som si s ním nevybudoval priateľstvo; projekt hnil kvôli zvláštnym chybám vo fáze spájania (neskôr som zistil, že to bola krivá trhlina).

Prichádza druhý WinAVR GCC- výkonný optimalizačný kompilátor. Plne otvorený zdroj, multiplatformový, vo všeobecnosti všetky radosti života. Dokonale sa tiež integruje do Štúdio AVRčo vám umožní ladiť priamo tam, čo je sakramentsky pohodlné. Vo všeobecnosti som si to vybral.

Je tu tiež CodeVision AVR C je veľmi populárny kompilátor. Stala sa populárnou vďaka svojej jednoduchosti. Pracovný program Môžete to získať len za pár minút - sprievodca štartovacím kódom s tým výrazne pomáha, pretože razí štandardy pre inicializáciu všetkých druhov uartov. Aby som bol úprimný, mám to trochu podozrievavé - akonáhle som musel rozobrať program napísaný týmto kompilátorom, ukázalo sa, že je to nejaký neporiadok a nie kód. Strašné množstvo zbytočných pohybov a operácií, čo malo za následok značné množstvo kódu a pomalý výkon. Možno však došlo k chybe v DNA osoby, ktorá napísala pôvodný firmvér. Navyše chce peniaze. Nie toľko ako IAR, ale znateľné. A v demo režime vám umožňuje napísať maximálne 2 kb kódu.
Samozrejme je tam crack, ale ak sa chystáte kradnúť, je to milión v zmysle IAR :)

Je tu tiež Image Craft AVR C A MicroC z mikroelektroniky. Nemusel som použiť ani jeden, ale S.W.G. veľmi chválim MicroPascal, hovoria, strašne pohodlné programovacie prostredie a knižnice. Myslím, že MicroC nebude o nič horšie, ale je tiež platené.

Ako som povedal, vybral som si WinAVR z troch dôvodov: je zadarmo, integruje sa do AVR Studia a je preň napísaný. pripravený kód pre všetky príležitosti.

Stiahnite si teda inštaláciu WinAVR s AVR Studio. Ďalej sa najprv nainštaluje štúdio, potom sa navrch natočí WinAVR a pripojí sa k štúdiu vo forme pluginu. Dôrazne odporúčam nainštalovať WinAVR na krátku cestu, niečo ako C:\WinAVR, týmto spôsobom sa vyhnete mnohým problémom s cestami.

Vytvorenie projektu
Takže štúdio je nainštalované, C je zaskrutkované, je čas skúsiť niečo naprogramovať. Začnime tým jednoduchým, najjednoduchším. Spustite štúdio, vyberte sa tam nový projekt, ako kompilátor AVR GCC a zadajte názov projektu.

Otvorí sa pracovné pole s prázdnym súborom *.c.

Teraz nezaškodí nakonfigurovať zobrazenie ciest v záložkách štúdia. Ak to chcete urobiť, prejdite na:
Ponuka Nástroje - Možnosti - Všeobecné - Karty súborov a z rozbaľovacieho zoznamu vyberte možnosť „Iba názov súboru“. V opačnom prípade nebude možné pracovať - ​​karta bude obsahovať úplnú cestu k súboru a na obrazovke nebudú viac ako dve alebo tri karty.

Nastavenie projektu
Vo všeobecnosti sa za klasické považuje vytvorenie súboru make, v ktorom sú popísané všetky závislosti. A to je asi správne. Ale pre mňa, ktorý vyrastal s plne integrovanými IDE, ako uVision alebo Štúdio AVR tento prístup je hlboko cudzí. Preto si to urobím po svojom, všetko pomocou štúdiových prostriedkov.

Stlačte tlačidlo s ozubeným kolieskom.


Toto sú nastavenia pre váš projekt, alebo skôr nastavenia pre automatické generovanie súboru make. Na prvej stránke stačí zadať frekvenciu, na ktorej bude váš MK fungovať. To závisí od bitov poistky, takže predpokladáme, že naša frekvencia je 8 000 000 Hz.
Venujte pozornosť aj optimalizačnej línii. Teraz je tu -Os - to je optimalizácia veľkosti. Zatiaľ to nechajte tak, potom sa môžete skúsiť pohrať s týmto parametrom. -O0 nie je vôbec žiadna optimalizácia.

Ďalším krokom je konfigurácia ciest. Najprv tam pridajte svoj adresár projektu – pridáte tam knižnice tretích strán. V zozname sa zobrazí cesta „.\“.

Súbor Make bol vygenerovaný, môžete si ho pozrieť v predvolenom priečinku vo svojom projekte, stačí sa pozrieť a zistiť, čo tam je.


To je zatiaľ všetko. Kliknite na tlačidlo OK všade a prejdite na zdroj.

Formulácia problému
Prázdny list papiera láka na realizáciu nejakého prefíkaného nápadu, pretože banálne blikanie diódy už nefunguje. Okamžite vezmime býka za rohy a implementujme spojenie s počítačom - to je prvá vec, ktorú robím.

Bude to fungovať takto:
Keď cez COM port príde jednotka (kód 0x31), diódu zapneme a keď príde nula (kód 0x30), zhasne. Navyše sa všetko bude robiť na prerušeniach a úlohou na pozadí bude blikanie ďalšej diódy. Jednoduché a zmysluplné.

Zostavenie obvodu
Potrebujeme pripojiť modul prevodníka USB-USART na piny USART mikrokontroléra. Aby ste to urobili, vezmite prepojku z dvoch drôtov a umiestnite ju na kolíky krížom. To znamená, že pripojíme Rx regulátora k Tx prevodníka a Tx prevodníka k Rx regulátora.

Nakoniec je to schéma:


Neuvažujem o pripojení zostávajúcich pinov, napájania alebo resetovaní, je to štandard.

Písanie kódu

Dovoľte mi hneď urobiť výhradu, že sa nebudem venovať konkrétne popisu samotného jazyka C. Existuje na to jednoducho obrovské množstvo materiálu, od klasického „programovacieho jazyka C“ od K&R až po rôzne príručky.

Jednu takú metódu som našiel vo svojej skrýši, raz som ju použil na štúdium tohto jazyka. Všetko je tam krátke, jasné a vecné. Postupne to dávam dokopy a presúvam na svoj web.

Je pravda, že ešte nie sú prenesené všetky kapitoly, ale myslím si, že to nebude dlho.

Je nepravdepodobné, že by som to mohol opísať lepšie, takže od výcvikový kurz, namiesto podrobného vysvetlenia jemností uvediem jednoducho priame odkazy na jednotlivé stránky tohto návodu.

Pridávanie knižníc.
V prvom rade pridávame potrebné knižnice a hlavičky s definíciami. Koniec koncov, C je univerzálny jazyk a musíme mu vysvetliť, že pracujeme špeciálne s AVR, takže napíšte riadok do zdrojového kódu:

1 #include

#include

Tento súbor sa nachádza v priečinku WinAVR a obsahuje popis všetkých registrov a portov radiča. Okrem toho je všetko prefíkané, s väzbou na konkrétny ovládač, ktorý prenáša kompilátor cez urobiť súbor v parametri MCU a na základe tejto premennej sa k vášmu projektu pripojí hlavičkový súbor s popisom adries všetkých portov a registrov pre tento konkrétny radič. Wow! Bez nej je to tiež možné, ale potom nebudete môcť používať symbolické názvy registrov ako SREG alebo UDR a budete si musieť zapamätať adresy každého z nich, napríklad „0xC1“, čo bude bolieť hlava.

Tým samotným #include<имя файла> umožňuje pridať do projektu akýkoľvek obsah textový súbor, napríklad súbor s popisom funkcií alebo kus iného kódu. A aby smernica tento súbor našla, uviedli sme cestu k nášmu projektu (adresár WinAVR je tam už štandardne zaregistrovaný).

Hlavná funkcia.
Program C pozostáva výlučne z funkcií. Môžu byť vnorené a volané jeden od druhého v ľubovoľnom poradí a rôzne cesty. Každá funkcia má tri požadované parametre:

  • Návratová hodnota je napr. hriech(x) vráti hodnotu sínusu x. Skrátka ako v matematike.
  • Prenášané parametre sú rovnaké X.
  • Funkčné telo.

Všetky prenášané a vrátené hodnoty musia byť určitého typu v závislosti od údajov.

Každý program v jazyku C musí obsahovať funkciu Hlavná ako vstupný bod do hlavného programu, inak to vôbec nie je C :). Prítomnosťou hlavného v zdrojovom kóde niekoho iného z milióna súborov môžete pochopiť, že toto je hlavná časť programu, kde všetko začína. Tak sa spýtajme:

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

int main(void) ( return 0; )

To je všetko najjednoduchší program napísané, nevadí, že to nič nerobí, práve sme začali.

Poďme zistiť, čo sme urobili.
int Toto je dátový typ, ktorý vracia hlavná funkcia.

Samozrejme, v mikrokontroléri Hlavná v zásade sa nedá nič vrátiť a teoreticky by malo void main (void), ale GCC bol pôvodne navrhnutý pre PC a tam môže program vrátiť hodnotu operačný systém po dokončení. Preto GCC zapnuté void main (void) prisahá pri Varovaní.

Toto nie je chyba, bude to fungovať, ale nemám rád upozornenia.

neplatné v tomto prípade ide o typ údajov, ktoré odovzdávame funkcii Hlavná tiež nemôže prijať nič zvonku, preto neplatné- figurína. Pahýľ sa používa, keď nie je potrebné nič prenášať alebo vracať.

Tu sú { } zložené zátvorky sú programový blok, v tomto prípade telo funkcie Hlavná, kód sa tam bude nachádzať.

vrátiť- to je návratová hodnota, ktorú vráti funkcia main po dokončení, keďže máme int, teda číslo, tak musíme vrátiť číslo. Aj keď to stále nedáva zmysel, pretože... na mikrokontroléri nemôžeme ísť nikam len z hlavného. vraciam null. Lebo na tom nezáleží. Ale kompilátor je zvyčajne inteligentný a negeneruje kód pre tento prípad.
Hoci, ak zvrátené, tak z Hlavná Môžete prejsť na MK - napríklad spadnúť do sekcie bootloader a spustiť ho, ale bude to vyžadovať prácu s firmvérom na nízkej úrovni, aby sa opravili adresy prechodu. Nižšie uvidíte sami a pochopíte, ako na to. Prečo? To je ďalšia otázka, v 99,999% prípadov to nie je potrebné :)

Urobili sme to a išli ďalej. Pridajme premennú, v podstate ju nepotrebujeme a bez nej nemá zmysel zavádzať premenné, ale učíme sa. Ak sú premenné pridané do tela funkcie, potom sú lokálne a existujú iba v tejto funkcii. Keď funkciu ukončíte, tieto premenné sa vymažú a pamäť RAM sa pridelí pre dôležitejšie potreby. .

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

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

nepodpísané znamená nepodpísaný. Faktom je, že v binárnej reprezentácii je najvýznamnejší bit pridelený znamienku, čo znamená, že číslo +127/-128 sa zmestí do jedného bajtu (char), ale ak sa znamienko zahodí, zmestí sa od 0 do 255. Zvyčajne znak nie je potrebný. Takže nepodpísané.
i je len názov premennej. Nikdy viac.

Teraz musíme inicializovať porty a UART. Samozrejme, môžete vziať a pripojiť knižnicu a zavolať nejaký druh UartInit(9600); ale potom nebudes vediet co sa vlastne stalo.

Robíme toto:

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(prenosová hranica) ; UBRRH = HI(prenosová jednotka) ; 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 (deliteľ prenosovej rýchlosti); UBRRH = HI (deliteľ prenosovej rýchlosti); UCSRA = 0; UCSRB = 1<

desivé? V skutočnosti existuje len päť posledných riadkov skutočného kódu. Všetko, to #definovať je to makrojazyk preprocesora. Takmer to isté ako v Assembly, ale syntax je mierne odlišná.

Uľahčia vám bežné operácie výpočtu potrebných koeficientov. V prvom riadku hovoríme, že namiesto toho XTAL môžete bezpečne nahradiť 8000000 a L- označenie typu, pričom long je hodinová frekvencia procesora. Rovnaký prenosová rýchlosť— frekvencia prenosu dát cez UART.

prenosový delič už zložitejšie, namiesto neho sa nahradí výraz vypočítaný pomocou vzorca z dvoch predchádzajúcich.
No a L.O. A AHOJ nízke a vysoké bajty budú prevzaté z tohto výsledku, pretože Očividne sa nemusí zmestiť do jedného bajtu. IN AHOJ X (vstupný parameter makra) sa posunie osemkrát doprava, výsledkom čoho je, že zostane len najvýznamnejší bajt. A v L.O. urobíme bitové AND s číslom 00FF, výsledkom čoho bude len nízky bajt.

Takže všetko, čo sa robí, je ako #definovať môžete ho pokojne vyhodiť a potrebné čísla si vypočítať na kalkulačke a hneď ich zadať do riadkov UBBRL = …. a UBBRH = ....

Môcť. Ale! To urobiť ABSOLÚTNE NEMOŽNÉ!

Bude to fungovať tak alebo tak, ale budete mať tzv magické čísla- hodnoty prevzaté odnikiaľ a z neznámych dôvodov a ak takýto projekt otvoríte o pár rokov, bude sakra ťažké pochopiť, o aké hodnoty ide. Aj teraz, ak chcete zmeniť rýchlosť alebo zmeniť frekvenciu quartz, všetko sa bude musieť znova prepočítať, ale zmenili ste pár čísel v kóde a je to. Vo všeobecnosti, ak nechcete byť označený ako kódovač, vytvorte si kód tak, aby bol ľahko čitateľný, zrozumiteľný a ľahko upraviteľný.

Potom je všetko jednoduché:
Všetky tieto „UBRRL and Co“ sú konfiguračné registre vysielača UART, pomocou ktorých budeme komunikovať so svetom. A teraz sme im priradili požadované hodnoty, nastavili ich na požadovanú rýchlosť a režim.

Typ nahrávania 1< Znamená nasledovné: vezmite 1 a vložte ho na miesto RXEN v byte. RXEN toto je 4. bit registra UCSRB, Takže 1< tvorí binárne číslo 00010000, TXEN- toto je 3. bit a 1< dá 00001000. Single "|" je to bitové ALEBO, teda 00010000 | 00001000 = 00011000. Rovnakým spôsobom sa nastavia zostávajúce potrebné konfiguračné bity a pridajú sa do všeobecnej haldy. Výsledkom je, že zhromaždené číslo je zaznamenané v UCSRB. Viac podrobností je popísaných v datasheete na MK v sekcii USART. Nenechajme sa teda rozptyľovať technickými detailmi.

Hotovo, je čas pozrieť sa, čo sa stalo. Kliknite na kompiláciu a spustite emuláciu (Ctrl+F7).

Ladenie
Prebehli najrôznejšie postupové lišty, štúdio sa zmenilo a pri vchode do hlavnej funkcie sa objavila žltá šípka. Tu je momentálne spustený procesor a simulácia je pozastavená.

Faktom je, že spočiatku to v skutočnosti bolo na riadku UBRRL = LO(bauddivider); Koniec koncov, to, čo definujeme, nie je kód, ale iba predbežné výpočty, a preto je simulátor trochu nudný. Ale teraz si uvedomil, že prvý pokyn bol dokončený a ak vyleziete na strom Zobrazenie I/O, do sekcie USART a pozrite sa tam na bajt UBBRL, uvidíte, že hodnota tam už je! 0x33.

Urobte to ešte o krok ďalej. Pozrite sa, ako sa mení obsah druhého registra. Prejdite si ich teda všetky, dávajte pozor na to, že všetky uvedené bity sú nastavené tak, ako som vám povedal, a sú nastavené súčasne pre celý bajt. Ďalej ako Návrat to nepôjde – program sa skončil.

Otvorenie
Teraz resetujte simuláciu na nulu. Kliknite tam Obnoviť (Shift+F5). Otvorte rozobraný výpis, teraz uvidíte, čo sa vlastne v ovládači deje. Zobraziť -> Disassembler. A nie YYAAAAAA!!! Assembler!!! HOROR!!! A JE TO POTREBNÉ. Aby ste neskôr, keď sa niečo pokazí, neboli v kóde hlúpi a nekládli na fórach chabé otázky, ale okamžite sa dostali do útrob a zistili, kde ste uviazli. Nie je tam nič strašidelné.

Najprv to budú topy zo série:

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 JMP0000000000000000C0034 JMP 0x00000000 0x00000034 Skok +00000008: 940C0034 JMP 0x00000034 Skok +0000000A: 940C0034 JMP 0x00000034 Skok +0000000C: 3440C000C: 0340C00000 0000000E: 940C0034 JMP 0x00000034 Skok +00000010: 940C0034 JMP 0x00000034 Skok +00000012: 940C0034 JMP 0x3409000000000004 009000400000000000001 0x00000034 Skok +00000016: 940C0034 JMP 0x00000034 Skok +00000018: 940C0034 JMP 0x00000034 Skok +0000001A: 0000001A: 0000000000000000000000 : 940C0034 JMP 0x00000034 Skok +0000001E: 940C0034 JMP 0x00000034 Skok +00000020: 940C0034 JMP 0x00000034 Skok 0x00000034 Skok 040002000002000002 34 Skok +00000024: 940C0034 JMP 0x00000034 Skok +00000026: 940C0034 JMP 0x00000034 Skok +00000028: 940C0030 Jump 0x003

00000000: 940C002A JMP 0x0000002A Skok +00000002: 940C0034 JMP 0x00000034 Skok +00000004: 940C0034 JMP 0x340900000000000x00000034 Skok +00000008: 940C0034 JMP 0x00000034 Skok +0000000A: 940C0034 JMP 0x00000034 Skok +0000000C: 0000000C: 3440C0: 940C0034 JMP 0x00000034 Skok +00000010: 940C0034 JMP 0x00000034 Skok +00000012: 940C0034 JMP 0x00000034 Skok 040004 +0000004 +000000004 00004 34 Skok +00000016: 940C0034 JMP 0x00000034 Skok +00000018: 940C0034 JMP 0x00000034 Skok +0000001A: 940C00034 Jump +0x000000000003 : 940C0034 JMP 0x00000034 Skok +0000001E: 940C0034 JMP 0x00000034 Skok +00000020: 940C0034 JMP 0x00000034 Skok 0x00000034 Skok 040002000002000002 34 Skok +00000024: 940C0034 JMP 0x00000034 Skok +00000026: 940C0034 JMP 0x00000034 Skok +00000028: 940C0030 Jump 0x003

Toto je tabuľka vektorov prerušení. Vrátime sa k tomu neskôr, ale zatiaľ sa len pozrite a zapamätajte si, že existuje. Prvý stĺpec je adresa flash bunky, v ktorej príkaz leží, druhý je kód príkazu, tretí je mnemotechnická pomôcka príkazu, rovnaký návod na zostavenie, tretí sú operandy príkazu. No, automatický komentár.
Takže, ak sa pozriete, existujú nepretržité prechody. A príkazový kód JMP má štyri bajty, obsahuje spätne zapísanú adresu skoku - nízky bajt na nízkej adrese a kód príkazu skoku 940C

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

Zaznamenajte túto nulu na adrese 0x3F. Ak sa pozriete na stĺpec zobrazenia I/O, uvidíte, že adresa 0x3F je adresa registra SREG - príznakového registra kontroléra. Tie. resetujeme SREG, aby sa program spustil pri nulových podmienkach.

1 2 3 4 +0000002C: E5CF LDI R28,0x5F Okamžité načítanie +0000002D: E0D4 LDI R29,0x04 Okamžité načítanie +0000002E: BFDE OUT 0x3E,R29 Out to I/O umiestnenie +0000002F: BFCD OUT2,00x umiestnenie BFCD IR29

0000002C: E5CF LDI R28,0x5F Okamžité načítanie +0000002D: E0D4 LDI R29,0x04 Okamžité načítanie +0000002E: BFDE OUT 0x3E,R29 Out to I/O umiestnenie +0000002F: BFCD OUT22F umiestnenie BFCD IR29,0x04

Načítava sa ukazovateľ zásobníka. Nemôžete priamo načítať do I/O registrov, iba cez prechodný register. Preto najprv LDI na stredný a potom odtiaľ OUT na I/O. Neskôr vám tiež poviem viac o zásobníku. Zatiaľ vedzte, že ide o oblasť dynamickej pamäte, ktorá visí na konci pamäte RAM a ukladá adresy a prechodné premenné. Teraz sme naznačili, odkiaľ bude náš stack začínať.

00000032: 940C0041 JMP 0x00000041 Skok

Preskočte na úplný koniec programu a tam máme zákaz prerušovania a tesného cyklovania:

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

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

Je to v prípade nepredvídaných okolností, ako je napríklad ukončenie hlavnej funkcie. Regulátor môže byť z takejto slučky vyvedený buď hardvérovým resetom, alebo pravdepodobnejšie resetom z watchdogu. Alebo, ako som povedal vyššie, opravte to v hexadecimálnom editore a odcválajte tam, kam si naše srdce želá. Všimnite si tiež, že existujú dva typy prechodov: JMP a RJMP; prvý je priamy prechod na adresu. Zaberá štyri bajty a môže priamo preskakovať cez celú oblasť pamäte. Druhým typom prechodu je RJMP – relatívny. Jeho príkaz trvá dva bajty, ale z aktuálnej pozície (adresy) sa posunie o 1024 krokov dopredu alebo dozadu. A jeho parametre označujú posun od aktuálneho bodu. Používa sa častejšie, pretože zaberá polovicu priestoru pri splachovaní a dlhé prechody sú potrebné len zriedka.

1 +00000034: 940C0000 JMP 0x00000000 Skok

00000034: 940C0000 JMP 0x00000000 Skok

A toto je skok na úplný začiatok kódu. Akýsi reštart. Tu môžete skontrolovať, či všetky vektory skáču. Záver z toho je, že ak teraz povolíte prerušenia (v predvolenom nastavení sú vypnuté) a vaše prerušenie nastane, ale neexistuje žiadna obsluha, dôjde k resetovaniu softvéru – program sa vráti na úplný začiatok.

Hlavná funkcia. Všetko je podobné, ani to netreba opisovať. Stačí sa pozrieť na už vypočítané číslo, ktoré sa zapisuje do registrov. Preprocesor kompilátora skaly!!! Takže žiadne „magické“ čísla!

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

00000036: E383 LDI R24,0x33 Okamžité načítanie +00000037: B989 OUT 0x09,R24 Out to I/O umiestnenie 15: UBRRH = HI(bauddivider); +00000038: BC10 OUT 0x20,R1 Out to I/O umiestnenie 16: UCSRA = 0; +00000039: B81B OUT 0x0B,R1 Výstup na I/O umiestnenie 17: UCSRB = 1<

A tu je chyba:

1 2 3 +0000003E: E080 LDI R24.0x00 Okamžité načítanie +0000003F: E090 LDI R25.0x00 Okamžité načítanie +00000040: 9508 Návrat podprogramu RET

0000003E: E080 LDI R24.0x00 Okamžité načítanie +0000003F: E090 LDI R25.0x00 Okamžité načítanie +00000040: 9508 Návrat podprogramu RET

Otázkou je, prečo kompilátor pridáva takéto vrcholy? A to nie je nič iné ako Return 0, funkciu sme definovali ako int main(void) a tak sme premrhali ďalšie štyri bajty pre nič za nič :) A ak spravíte void main(void) tak zostane len RET, ale objaví sa varovanie , že naša hlavná funkcia nič nevracia. Vo všeobecnosti robte, ako chcete :)

ťažké? Zjavne nie. Kliknite na spustenie krok za krokom v režime disassemblera a uvidíte, ako procesor vykonáva jednotlivé inštrukcie, čo sa deje s registrami. Ako prebieha pohyb cez príkazy a záverečná slučka?

Pokračovanie o pár dní...

Offtop:
Alexej78 Vytvoril som doplnok pre Firefox, ktorý uľahčuje navigáciu na mojej stránke a fóre.
Diskusia a sťahovanie,

Úloha: Vyvinieme program na ovládanie jednej LED diódy. Po stlačení tlačidla sa LED rozsvieti a po uvoľnení zhasne.

Najprv vypracujme schematický diagram zariadenia. I/O porty sa používajú na pripojenie akýchkoľvek externých zariadení k mikrokontroléru. Každý z portov je schopný fungovať ako vstupný aj výstupný. Pripojme LED do jedného z portov a tlačidlo do druhého. Na tento experiment použijeme ovládač Atmega8. Tento čip obsahuje 3 I/O porty, má 2 osembitové a 1 šestnásťbitový časovač/počítadlo. Na palube je tiež 3-kanálový PWM, 6-kanálový 10-bitový analógovo-digitálny prevodník a oveľa viac. Mikrokontrolér je podľa mňa výborný na učenie sa základov programovania.

Na pripojenie LED použijeme linku PB0 a na čítanie informácií z tlačidla linku PD0. Schéma je znázornená na obr.

Ryža. 1

Cez rezistor R2 sa na vstup PD0 privádza plus napájacie napätie, ktoré zodpovedá signálu logickej jednotky. Keď je tlačidlo zatvorené, napätie klesne na nulu, čo zodpovedá logickej nule. V budúcnosti môže byť R2 vylúčený z obvodu, nahradený interným zaťažovacím odporom a zadaním potrebných nastavení do programu. LED je pripojená k výstupu portu P0 cez odpor obmedzujúci prúd R3. Aby sa LED rozsvietila, musíte na linku PB0 priviesť signál logickej jednotky. Použijeme interný generátor hlavných hodín na 4 MHz, keďže zariadenie nemá vysoké požiadavky na frekvenčnú stabilitu.

Teraz napíšeme program. Programovacie prostredie používam na písanie programov Štúdio AVR A WinAvr. Otvorte AVR Studio, zobrazí sa uvítacie okno, kliknite na tlačidlo "Vytvoriť nový projekt", potom vyberte typ projektu - AVR GCC, napíšte názov projektu, napríklad "cod1", začiarknite políčka "Vytvoriť priečinok projektu" a "Vytvoriť". inicializačný súbor“ , kliknite na tlačidlo „Ďalej“, v ľavom okne vyberte „AVR Simulator“ a v pravom okne typ mikrokontroléra „Atmega8“, kliknite na tlačidlo „Dokončiť“, otvorí sa editor a strom kategórií projektu – počiatočné nastavenia sú dokončené.

Najprv pridajte štandardný text popisu pre Atmega8 pomocou operátora na pripojenie externých súborov: #include

syntax direktívy #include

#include<имя_файла.h>
#include „názov súboru.h“

Uhlové zátvorky< и >naznačte kompilátoru, že zahrnuté súbory je potrebné najskôr vyhľadať v štandardnom priečinku WinAvr s názvom include. Dvojité úvodzovky „ a “ hovoria kompilátoru, aby začal hľadať v adresári, kde je uložený projekt.

Každý typ mikrokontroléra má svoj vlastný hlavičkový súbor. Pre ATMega8 sa tento súbor nazýva iom8.h, pre ATtiny2313 - iotn2313.h. Na začiatok každého programu musíme zahrnúť hlavičkový súbor mikrokontroléra, ktorý používame. Existuje však aj bežný hlavičkový súbor io.h. Preprocesor tento súbor spracuje a v závislosti od nastavení projektu zaradí požadovaný hlavičkový súbor do nášho programu.

Pre nás bude prvý riadok programu vyzerať takto:

#include

Každý program v jazyku C musí obsahovať jednu hlavnú funkciu. Nazýva sa hlavná. Vykonávanie programu vždy začína vykonaním hlavnej funkcie. Funkcia má hlavičku - int main(void) a telo - je ohraničená zloženými zátvorkami ().

int main (void)
{
funkčné telo
}

Do tela funkcie pridáme náš kód. Návratový typ je uvedený pred názvom funkcie. Ak funkcia nevráti hodnotu, použije sa kláves neplatné.

int- toto je 2-bajtové celé číslo, rozsah hodnôt je od - 32768 do 32767

Za názvom funkcie sú parametre, ktoré sa funkcii odovzdajú pri jej volaní, uvedené v zátvorkách (). Ak funkcia nemá žiadne parametre, použije sa kľúčové slovo neplatné. Funkcia Hlavná obsahuje sadu príkazov, systémové nastavenia a hlavnú programovú slučku.

Ďalej nakonfigurujeme port D Pri vchode. Prevádzkový režim portu je určený obsahom registra DDRD(register smeru prenosu informácií). Do tohto registra zapíšeme číslo „0x00“ (0b0000000 - v binárnom tvare), na tento port nie je nič pripojené okrem tlačidla, takže celý port D nakonfigurujeme ako vstup. Port môžete nakonfigurovať bit po bite zapísaním čísel 0 alebo 1 do každého bitu registra (0-vstup, 1-výstup), napríklad DDRD = 0x81 (0b10000001) - prvý a posledný riadok portu D funguje ako výstup, zvyšok ako vstup. Musí byť pripojený aj interný zaťažovací odpor. Register PORTx riadi, či sú interné odpory zapnuté alebo vypnuté, keď je port v režime vstupu. Napíšeme tam jednotky.

Nastavenie portu B k východu. Prevádzkový režim portu je určený obsahom registra DDRB. Nič okrem LED do portu B nie je pripojený, takže celý port môže byť nakonfigurovaný ako výstup. Robí sa to zápisom do registra DDRBčísla "0xFF". Ak chcete zabrániť rozsvieteniu LED pri prvom zapnutí, napíšte do portu B logické nuly. To sa vykonáva nahrávaním PORTB= 0x00;

Na priradenie hodnôt sa používa symbol "=" a nazýva sa operátor priradenia, nezamieňajte si ho so znamienkom "rovná sa".

Konfigurácia portu bude vyzerať takto:

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

Napíšeme hlavnú slučku programu. zatiaľ čo("zatiaľ" z angličtiny) - tento príkaz organizuje cyklus, pričom telo cyklu opakuje mnohokrát, kým nie je splnená podmienka, to znamená, že výraz v zátvorkách je pravdivý. V C sa výraz považuje za pravdivý, ak sa nerovná nule, a za nepravdivý, ak je.

Príkaz vyzerá takto:

kým (podmienka)
{
telo slučky
}

V našom prípade bude hlavná slučka pozostávať iba z jedného príkazu. Tento príkaz priradí register PORTB hodnotu registra, ktorá sa má invertovať PORTD.

PORTB = ~PIND; //vezmite hodnotu z portu D, invertujte ju a priraďte k PORTB (zapíšte do PORTB)

// C výrazy sa čítajú sprava doľava

PIND register zadávania informácií. Aby ste mohli čítať informácie z externého výstupu ovládača, musíte najprv prepnúť požadovaný bit portu do režimu vstupu. To znamená, že zapíšte do zodpovedajúceho bitu registra DDRx nula. Až potom môže byť na tento pin privedený digitálny signál z externého zariadenia. Ďalej mikrokontrolér načíta bajt z registra PINx. Obsah príslušného bitu zodpovedá signálu na externom pine portu. Náš program je pripravený a vyzerá takto:

#include int main (void) ( DDRD = 0x00; //port D - vstup PORTD = 0xFF; //pripojenie záťažového odporu DDRB = 0xFF; //port B - výstup PORTB = 0x00; //výstup nastavte na 0 while(1 ) ( PORTB = ~PIND; //~ znak bitovej inverzie ) )

Komentáre sú široko používané v jazyku C. Sú dva spôsoby písania.

/*Komentár*/
//Komentár

V tomto prípade kompilátor nebude venovať pozornosť tomu, čo je napísané v komentári.

Ak použijete rovnaký program a pripojíte k mikrokontroléru 8 tlačidiel a 8 LED diód, ako je znázornené na obrázku 2, potom bude jasné, že každý bit portu D zodpovedá jeho bitu portu B. Stlačením tlačidla SB1 sa rozsvieti HL1, stlačením tlačidla SB2 sa rozsvieti HL2 atď.

Obrázok 2

V článku boli použité materiály z knihy A.V. Belova. "Výukový program pre vývojárov zariadení AVR"

Mikrokontroléry Atmega8 sú najobľúbenejšími predstaviteľmi svojej rodiny. V mnohom za to vďačia na jednej strane jednoduchosti ovládania a zrozumiteľnej štruktúre a na druhej strane pomerne širokej funkčnosti. Tento článok sa bude zaoberať programovaním Atmega8 pre začiatočníkov.

všeobecné informácie

Mikrokontroléry sú všade. Možno ich nájsť v chladničkách, práčkach, telefónoch, výrobných strojoch a veľkom množstve iných technických zariadení. Rozsah mikrokontrolérov je od jednoduchých až po extrémne zložité. Posledne menované ponúkajú podstatne viac funkcií a funkcií. Nebudete však schopní okamžite pochopiť zložité technológie. Najprv musíte zvládnuť niečo jednoduché. A Atmega8 sa bude brať ako vzorka. Programovanie na ňom nie je ťažké vďaka jeho kompetentnej architektúre a priateľskému rozhraniu. Navyše má dostatočný výkon na to, aby sa dal použiť vo väčšine, navyše sa používajú aj v priemysle. V prípade Atmega8 si programovanie vyžaduje znalosť jazykov ako AVR (C/Assembler). Kde začať? Zvládnutie tejto technológie je možné tromi spôsobmi. A každý si sám vyberie, kde začne pracovať s Atmega8:

  1. Programovanie cez Arduino.
  2. Nákup hotového zariadenia.
  3. Vlastná montáž mikrokontroléra.

Budeme brať do úvahy prvý a tretí bod.

Arduino

Ide o pohodlnú platformu navrhnutú vo forme, ktorá je vhodná na rýchle vytváranie rôznych zariadení. Doska už má všetko potrebné v podobe samotného mikrokontroléra, jeho zväzku a programátora. Nasledovaním tejto cesty človek získa nasledujúce výhody:

  1. Nízkoprahové požiadavky. Na vývoj technických zariadení nemusíte mať špeciálne zručnosti.
  2. Na pripojenie bez dodatočnej prípravy bude k dispozícii široká škála prvkov.
  3. Rýchly štart vývoja. S Arduino sa môžete vrhnúť priamo na vytváranie zariadení.
  4. Dostupnosť veľkého množstva školiacich materiálov a ukážok realizácií rôznych dizajnov.

Existujú však aj určité nevýhody. Arduino programovanie Atmega8 vám teda neumožňuje ponoriť sa hlbšie do sveta mikrokontroléra a pochopiť mnohé užitočné aspekty. Okrem toho sa budete musieť naučiť programovací jazyk, ktorý sa líši od tých, ktoré používa AVR (C/Assembler). A ešte jedna vec: Arduino má pomerne úzku škálu modelov. Preto skôr či neskôr vznikne potreba použiť mikrokontrolér, ktorý sa v doskách nepoužíva. Ale vo všeobecnosti je to dobrá voľba pre prácu s Atmega8. Programovanie cez Arduino vám poskytne sebavedomý štart vo svete elektroniky. A človek sa pravdepodobne nevzdá kvôli zlyhaniam a problémom.

Vlastná montáž

Vďaka prívetivému dizajnu si ich môžete vyrobiť aj sami. To si predsa vyžaduje lacné, cenovo dostupné a jednoduché komponenty. To vám umožní dôkladne si preštudovať dizajn mikrokontroléra Atmega8, ktorého programovanie po zložení sa vám bude zdať jednoduchšie. V prípade potreby môžete tiež nezávisle vybrať ďalšie komponenty pre konkrétnu úlohu. Je pravda, že je tu určitá nevýhoda - zložitosť. Nie je ľahké zostaviť mikrokontrolér svojpomocne, keď nemáte potrebné znalosti a zručnosti. Túto možnosť zvážime.

Čo je potrebné na montáž?

Najprv musíte získať samotný Atmega8. Programovanie mikrokontroléra bez neho, viete, je nemožné. Bude to stáť niekoľko stoviek rubľov - pri poskytovaní slušnej funkčnosti. Otázkou je aj to, ako sa bude Atmega8 programovať. USBAsp je celkom dobré zariadenie, ktoré sa ukázalo ako veľmi dobré. Môžete však použiť iný programátor. Alebo si ho zostavte sami. No v tomto prípade hrozí, že pri nekvalitnom vytvorení sa z mikrokontroléra stane nefunkčný kus plastu a železa. Tiež by nezaškodilo mať dosku a svetre. Nie sú povinné, ale ušetria vám nervy a čas. A nakoniec potrebujete 5V napájanie.

Programovanie Atmega8 pre začiatočníkov na príklade

Pozrime sa, ako vo všeobecnosti vzniká zariadenie. Povedzme teda, že máme mikrokontrolér, LED diódu, rezistor, programátor, spojovacie vodiče a napájací zdroj. Prvým krokom je napísanie firmvéru. Je chápaný ako súbor príkazov pre mikrokontrolér, ktorý je prezentovaný ako finálny súbor v špeciálnom formáte. Je potrebné špecifikovať spojenie všetkých prvkov, ako aj interakciu s nimi. Potom môžete začať zostavovať obvod. Pin VCC by mal byť napájaný. K akémukoľvek inému, určenému na prácu so zariadeniami a prvkami, je najprv pripojený odpor a potom LED. V tomto prípade výkon prvého závisí od požiadaviek na výkon druhého. Môžete použiť nasledujúci vzorec: R=(Up-Ups)/Is. Tu p je výkon a s je LED. Predstavme si, že máme LED, ktorá spotrebuje 2V a vyžaduje napájací prúd 10mA, preveďme ju do podoby vhodnejšej pre matematické operácie a dostaneme 0,01A. Potom bude vzorec vyzerať takto: R=(5V-2V)/0,01A=3V/0,01A=300 Ohm. V praxi je však často nemožné vybrať ideálny prvok. Preto sa vyberie ten najvhodnejší. Musíte však použiť odpor s odporom vyšším, ako je hodnota získaná matematicky. Vďaka tomuto prístupu predĺžime jeho životnosť.

Čo bude ďalej?

Takže máme malý diagram. Teraz už zostáva len pripojiť programátor k mikrokontroléru a do jeho pamäte zapísať firmvér, ktorý vznikol. Je tu jeden bod! Pri zostavovaní obvodu je potrebné ho vytvoriť tak, aby sa mikrokontrolér dal flashovať bez odspájkovania. To ušetrí čas, nervy a predĺži životnosť prvkov. Vrátane Atmega8. Treba poznamenať, že programovanie v obvode vyžaduje znalosti a zručnosti. Umožňuje vám však vytvárať aj pokročilejšie návrhy. Koniec koncov, často sa stáva, že počas odspájkovania sa prvky poškodia. Potom je diagram pripravený. Dá sa použiť napätie.

Dôležité body

Chcel by som dať začiatočníkom užitočné tipy o programovaní Atmega8. Nemeňte vstavané premenné a funkcie! Po skontrolovaní absencie „večných slučiek“, ktoré zablokujú akékoľvek iné rušenie, a pomocou dobrého vysielača je vhodné zariadenie flashnúť vytvoreným programom. Ak na tieto účely používate domáci produkt, mali by ste byť psychicky pripravení na zlyhanie mikrokontroléra. Keď flashujete zariadenie pomocou programátora, mali by ste pripojiť zodpovedajúce výstupy VCC, GND, SCK, MOSI, RESET, MISO. A neporušujte bezpečnostné opatrenia! Ak je v technických špecifikáciách stanovené, že napájanie by malo byť 5V, musíte presne toto napätie dodržať. Aj použitie 6V prvkov môže negatívne ovplyvniť výkon mikrokontroléra a skrátiť jeho životnosť. Samozrejme, 5V batérie majú určité rozdiely, ale spravidla je všetko v rozumných medziach. Napríklad maximálne napätie bude udržiavané na 5,3 V.

Školenie a zlepšovanie zručností

Našťastie je Atmega8 veľmi populárny mikrokontrolér. Preto nájsť podobne zmýšľajúcich ľudí alebo jednoducho informovaných a šikovných ľudí nebude ťažké. Ak nechcete znovu vynájsť koleso, ale len chcete vyriešiť určitý problém, môžete vyhľadať požadovanú schému na obrovskom webe. Mimochodom, malá nápoveda: hoci robotika je v rusky hovoriacom segmente pomerne populárna, ak neexistuje žiadna odpoveď, mali by ste ju hľadať v anglicky hovoriacom segmente - obsahuje rádovo viac informácií. Ak existujú určité pochybnosti o kvalite existujúcich odporúčaní, môžete vyhľadať knihy, ktoré pojednávajú o Atmega8. Našťastie výrobná spoločnosť berie do úvahy popularitu svojho vývoja a dodáva im odbornú literatúru, kde skúsení ľudia hovoria, čo a ako, a tiež uvádzajú príklady fungovania zariadenia.

Je ťažké začať vytvárať niečo vlastné?

Stačí mať 500-2000 rubľov a niekoľko voľných večerov. Tento čas je viac než dostatočný na zoznámenie sa s architektúrou Atmega8. Po troche cviku si ľahko vytvoríte vlastné projekty, ktoré plnia špecifické úlohy. Napríklad robotické rameno. Samotný Atmega8 by mal byť viac než dostatočný na sprostredkovanie základných motorických funkcií prstov a ruky. Samozrejme, je to dosť náročná úloha, ale je celkom uskutočniteľná. V budúcnosti bude možné vytvárať zložité veci, ktoré si budú vyžadovať desiatky mikrokontrolérov. Ale toto je všetko pred nami, predtým musíte získať dobrú prax v niečom jednoduchom.