• Programování mk avr pro začátečníky. Programování AVR. Programování mikrokontroléru AVR pro začátečníky

    Dobrý den, drahý Habrazhitel!

    V tomto článku chci mluvit o tom, jak jsem se kdysi rozhodl začít programovat mikrokontroléry, co k tomu bylo potřeba a co se nakonec stalo.

    Téma mikrokontrolérů mě zajímalo velmi dlouho, tedy v roce 2001. Pak se ale ukázalo problematické sehnat programátora v místě bydliště a o nákupu přes internet nemohla být řeč. Musel jsem tento obchod odložit na lepší časy. A pak jsem to jednoho dne zjistil lepší časy přišel bez opuštění domova, můžete si koupit vše, co jsem potřeboval. Rozhodl se to zkusit. Co tedy potřebujeme:

    1. Programátor
    Na trhu je mnoho možností – od nejlevnějších ISP (In-System Programming) programátorů za pár dolarů až po výkonné debugger programátory za pár stovek. Jelikož nemám v tomto oboru mnoho zkušeností, rozhodl jsem se pro začátek vyzkoušet jeden z nejjednodušších a nejlevnějších - USBasp. Zakoupeno včas na eBay za 12 $, nyní je možné najít i za 3-4 $. Vlastně tohle čínská verze programátor od Thomase Fischla. Co o něm mohu říci? Jen jedna věc - funguje to. Navíc podporuje poměrně hodně AVR řadičů řady ATmega a ATtiny. Pod Linuxem nevyžaduje ovladač.

    Pro firmware je potřeba propojit výstupy programátoru VCC, GND, RESET, SCK, MOSI, MISO s odpovídajícími výstupy mikrokontroléru. Pro jednoduchost jsem postavil pomocný obvod přímo na prkénku:

    Vlevo na desce je stejný mikrokontrolér, který budeme blikat.

    2. Mikrokontrolér
    S výběrem mikrokontroléru jsem si moc hlavu nelámal a vzal ATmega8 od Atmelu - 23 I/O pinů, dva 8bitové časovače, jeden 16bitový, frekvence - až 16 MHz, nízká spotřeba (1-3,6 mA) , levné (2 $). Obecně platí, že pro začátek - více než dost.

    Pod Linuxem balík avr-gcc + avrdude funguje dobře pro kompilaci a nahrání firmwaru do řadiče. Instalace je triviální. Podle pokynů můžete nainstalovat veškerý potřebný software během několika minut. Jediná věc, kterou je třeba poznamenat, je, že avrdude (software pro zápis řadiče) může vyžadovat práva superuživatele pro přístup k programátoru. Konec - spusťte přes sudo (ve skutečnosti ne dobrý nápad), nebo přidělit zvláštní práva udev. Syntaxe se může lišit v závislosti na různé verze OS, ale v mém případě ( Linux Mint 15) přidání následujícího pravidla do souboru /etc/udev/rules.d/41-atmega.rules fungovalo:

    # USBasp programátor SUBSYSTEM=="usb", ATTR(idVendor)=="16c0", ATTR(idProduct)=="05dc", GROUP="plugdev", MODE="0666"

    Poté je samozřejmě potřeba službu restartovat
    restart služby udev
    Můžete kompilovat a flashovat bez problémů přímo z příkazový řádek(kdo by pochyboval), ale pokud je projektů hodně, tak je pohodlnější nainstalovat plugin a vše dělat přímo z prostředí Eclipse.

    V systému Windows budete muset nainstalovat ovladač. Jinak nejsou žádné problémy. V zájmu vědeckého zájmu jsem toho zkusil spoustu AVR Studio+ eXtreme Burner v systému Windows. Opět vše funguje skvěle.

    Začínáme s programováním

    AVR regulátory lze programovat jak v assembleru (AVR assembler), tak v C. Zde si myslím, že by si měl každý vybrat sám v závislosti na konkrétním úkolu a svých preferencích. Osobně jsem nejprve začal vybírat assembler. Při programování v assembleru se zpřehlední architektura zařízení a vzniká pocit, že se hrabete přímo do útrob regulátoru. Navíc se domnívám, že v programech, které jsou obzvláště důležité z hlediska velikosti a výkonu, může být znalost assembleru velmi užitečná. Po seznámení s assemblerem AVR jsem se plazil do C.

    Po seznámení s architekturou a základními principy jsem se rozhodl shromáždit něco užitečného a zajímavého. Tady mi pomohla dcera, která hraje šachy a jednoho krásného večera řekla, že by chtěla mít na chvíli časomíru na hry. BAM! Tady to je - myšlenka prvního projektu! Mohli jste si je samozřejmě objednat na stejném eBayi, ale chtěl jsem si vyrobit vlastní hodinky s černými... ehm... s indikátory a tlačítky. Sotva řečeno, než uděláno!

    Jako displej bylo rozhodnuto použít dva 7segmentové LED indikátory. K ovládání stačilo 5 tlačítek - „Player 1“, „Player 2“, „Reset“, „Settings“ a „Pause“. No, nezapomeňte na zvukovou indikaci konce hry. Vypadá to, že je to ono. Níže uvedený obrázek ukazuje obecné schéma připojení mikrokontroléru k indikátorům a tlačítkům. Budeme to potřebovat při analýze zdrojový kód programy:

    Letový rozbor

    Začněme podle očekávání vstupním bodem programu – hlavní funkcí. Ve skutečnosti v něm není nic pozoruhodného - nastavení portů, inicializace dat a nekonečný koloběh rukojeť stisknutí tlačítka. No, volání sei () je povolení zpracovávat přerušení, o nich trochu později.

    Int main(void) ( init_io(); init_data(); sound_off(); sei(); while(1) ( handle_buttons(); ) return 0; )
    Zvažme každou funkci zvlášť.

    Void init_io() ( // nastavení výstupu DDRB = 0xFF; DDRD = 0xFF; // nastavení vstupu DDRC = 0b11100000; // pull-up rezistory PORTC |= 0b00011111; // časovač přeruší TIMSK = (1<

    Nastavení I/O portů je velmi jednoduché - do registru DDRx se zapíše číslo (kde x je písmeno označující port), jehož každý bit znamená, zda odpovídající pin bude vstupní zařízení (odpovídá 0) nebo výstupní zařízení (odpovídá 1). Takže odesláním čísla 0xFF do DDRB a DDRD jsme vytvořili výstupní porty B a D. V souladu s tím příkaz DDRC = 0b11100000; změní prvních 5 pinů portu C na vstupní piny a zbytek na výstupní piny. Příkaz PORTC |= 0b00011111; obsahuje vnitřní pull-up rezistory na 5 vstupech regulátoru. Na tyto vstupy jsou podle schématu připojena tlačítka, která je po stisknutí uzavřou k zemi. Ovladač tedy pochopí, že je tlačítko stisknuto.

    Následuje nastavení dvou časovačů, Timer0 a Timer1. První používáme k aktualizaci indikátorů a druhý k odpočítávání času po jeho nastavení na každou sekundu. Podrobný popis všech konstant a způsob nastavení časovače na určitý interval naleznete v dokumentaci ATmega8.

    Manipulace s přerušením

    ISR (TIMER0_OVF_vect) ( display(); if (_buzzer > 0) ( _buzzer--; if (_buzzer == 0) sound_off(); ) ) ISR(TIMER1_COMPA_vect) ( if (ActiveTimer == 1 && Timer1 > 0) ( Timer1--; if (Timer1 == 0) process_timeoff(); ) if (ActiveTimer == 2 && Timer2 > 0) (Timer2--; if (Timer2 == 0) process_timeoff(); ) )

    Když časovač vyprší, řízení se přenese na příslušnou obsluhu přerušení. V našem případě se jedná o handler TIMER0_OVF_vect, který volá proceduru pro zobrazení času na indikátorech, a TIMER1_COMPA_vect, který zpracovává odpočítávání.

    Výstup do indikátorů

    Void display() ( display_number((Timer1/60)/10, 0b00001000); _delay_ms(0,25); display_number((Timer1/60)%10, 0b00000100); _delay_ms(0,25); display_number0(/10%6) , 0b00000010); _delay_ms(0,25); display_number((Timer1%60)%10, 0b00000001); _delay_ms(0,25); display_number((Timer2/60)/10, 0b100000000);0b100000000; 0b100000000; 60)%10, 0b01000000); _delay_ms(0,25); display_number((Časovač2%60)/10, 0b00100000); _delay_ms(0,25); display_number((Časovač2%60)%10, 0b02001 PORT0002501 = 0; ) void display_number(int number, int mask) ( PORTB = number_mask(number); PORTD = mask; )

    Funkce zobrazení využívá metodu dynamického zobrazení. Faktem je, že každý jednotlivý indikátor má 9 kontaktů (7 pro ovládání segmentu, 1 pro bod a 1 pro napájení). K ovládání 4 číslic by bylo potřeba 36 pinů. Příliš plýtvání. Proto je výstup číslic na indikátoru s několika číslicemi organizován podle následujícího principu:

    Napětí je střídavě přiváděno na každý ze společných kontaktů, což umožňuje zvýraznit požadované číslo na odpovídajícím indikátoru pomocí stejných 8 ovládacích kontaktů. Při dostatečně vysoké výstupní frekvenci to pro oko vypadá jako statický obraz. Proto je všech 8 výkonových kontaktů obou indikátorů ve schématu připojeno k 8 výstupům portu D a 16 kontaktů ovládajících segmenty je zapojeno do párů a připojeno k 8 výstupům portu B. Funkce displeje tak střídavě zobrazuje požadované číslo ke každému z indikátorů se zpožděním 0,25 ms . Na konci se vypnou všechny výstupy, které napájí indikátory (příkaz PORTD = 0;). Pokud tak neučiníte, zůstane poslední zobrazená číslice svítit až do příštího volání funkce displeje, díky čemuž bude svítit jasněji než ostatní.

    Zvládání kliknutí

    void handle_buttons() ( handle_button(KEY_SETUP); handle_button(KEY_RESET); handle_button(KEY_PAUSE); handle_button(KEY_PLAYER1); handle_button(KEY_PLAYER2); ) void handle_button(int key) (int bit; switch (key) ( case KEY_SETUP: bit = SETUP_BIT; přerušení; malá a velká písmena KEY_RESET: bit = RESET_BIT; přerušení; velikost písmen KEY_PAUSE: bit = PAUSE_BIT; přestávka; velikost písmen KEY_PLAYER1: bit = PLAYER1_BIT; přestávka; velká a malá písmena KEY_PLAYER2: bit = PLAYER2_BIT; break; výchozí: návrat; ) if (bit_is_clear TLAČÍTKO_PIN, bit)) ( if (_stisknuto == 0) ( _delay_ms(DEBOUNCE_TIME); if (bit_is_clear(BUTTON_PIN, bit)) ( _stisknuto |= klávesa; // klávesa akce přepínač (klávesa) ( případ KEY_SETUP: process_setup(); break; case KEY_RESET: process_reset(); break; case KEY_PAUSE: process_pause(); break; case KEY_PLAYER1: process_player1(); break; case KEY_PLAYER2: process_player2(); break; ) sound_on(15); ) ) ) else ( _pressed &= ~klíč;))

    Tato funkce se postupně dotazuje všech 5 tlačítek a zpracovává stisk, pokud existuje. Kliknutí se zaregistruje kontrolou bit_is_clear(BUTTON_PIN, bit) , tzn. tlačítko je stisknuto, pokud je příslušný vstup připojen k zemi, což se stane podle schématu po stisknutí tlačítka. Je potřeba zpoždění DEBOUNCE_TIME a překontrolování, aby se předešlo vícenásobným zbytečným spouštěním v důsledku odražení kontaktu. Uložení stavu stisku do odpovídajících bitů proměnné _pressed slouží k zamezení opakované operace při delším stisku tlačítka.
    Funkce pro manipulaci s klikáním jsou celkem triviální a věřím, že nepotřebují dalších komentářů.

    Plné znění programu

    #define F_CPU 4000000UL #zahrnout #zahrnout #zahrnout #define debounce_time 20 #define Button_pin Pinc #define Setup_bit PC0 #define Reset_bit PC1 #Define Pause_bit PC2 #Define Player1_bit PC3 #Define Player2_bit PC4 #DEFINITIONITIOMITS10100 #PYFINETIO Aktivní časovač = 0; volatile int Časovač1 = 0; volatile int Časovač2 = 0; volatile int_buzzer = 0; volatile int_pressed = 0; // deklarace funkce void init_io(); void init_data(); int cislo_mask(int cislo); void handle_buttons(); void tlačítko_handle (klíč int); void process_setup(); void proces_reset(); void process_pause(); void process_timeoff(); void process_player1(); void process_player2(); void display(); void display_number(int mask, int number); void sound_on(int interval); void sound_off(); // přeruší ISR (TIMER0_OVF_vect) ( display(); if (_buzzer > 0) ( _buzzer--; if (_buzzer == 0) sound_off(); ) ) ISR(TIMER1_COMPA_vect) ( if (ActiveTimer == 1 && Timer1 > 0) ( Timer1--; if (Timer1 == 0) process_timeoff(); ) if (ActiveTimer == 2 && Timer2 > 0) (Timer2--; if (Timer2 == 0) process_timeoff(); ) ) int main (void) ( init_io(); init_data(); sound_off(); sei(); while(1) ( handle_buttons(); ) return 0; ) void init_io() ( // nastavení výstupu DDRB = 0xFF; DDRD = 0xFF ; // nastavení vstupu DDRC = 0b11100000; // pull-up rezistory PORTC |= 0b00011111; // časovač přeruší TIMSK = (1<5940 || Timer2 > 5940) ( Timer1 = 0; Timer2 = 0; ) ) void process_reset() ( init_data(); ) void process_timeoff() ( init_data(); sound_on(30); ) void process_pause() (ActiveTimer = 0; ) void process_player1() ( ActiveTimer = 2; ) void process_player2() ( ActiveTimer = 1; ) void handle_button (int key) ( int bit; switch (key) ( case KEY_SETUP: bit = SETUP_BIT; break; case KEY_RESET: bit = RESET_BIT ; přestávka; malá a velká písmena KEY_PAUSE: bit = PAUSE_BIT; přestávka; velká a malá písmena KEY_PLAYER1: bit = PLAYER1_BIT; break; malá a velká písmena KEY_PLAYER2: bit = PLAYER2_BIT; break; výchozí: návrat; ) if (bit_is_clear(BUTTON_PIN, bit)) ( if (_pressed == 0) ( _delay_ms(DEBOUNCE_TIME); if (bit_is_clear(BUTTON_PIN, bit)) ( _stisknuto |= klávesa; // přepínač akce kláves (klávesa) ( case KEY_SETUP: process_setup(); break; case KEY_RESET: process_reset(); break; case KEY_PAUSE: process_pause(); break; case KEY_PLAYER1: process_player1(); break; case KEY_PLAYER2: process_player2(); break; ) sound_on(15); ) ) ) else ( _pressed &= ~key; ) ) void handle_buttons() ( handle_button(KEY_SETUP); handle_button(KEY_RESET); handle_button(KEY_PAUSE); handle_button(KEY_PLAYER1); handle_button(KEY_PLAYER2); ) void display() ( display_number((Timer1/60)/10, 0b0000) ; _delay_ms(0,25); display_number((Timer1/60)%10, 0b00000100); _delay_ms(0,25); display_number((Timer1%60)/10, 0b00000010); _1delay_ms_Time (0,25); 10, 0b00000001); _delay_ms(0,25); display_number((Timer2/60)/10, 0b10000000); _delay_ms(0,25); display_number((Timer2/60)%10, 0b01000000.252 displaynumber(Timer_000.252 displaynumber0.2 %60)/10, 0b00100000); _delay_ms(0,25); display_number((Timer2%60)%10, 0b00010000); _delay_ms(0,25); PORTD = 0; ) void display_number(int číslo, int maska_ma) (číslo); PORTD = maska; ) void sound_on(int interval) ( _buzzer = interval; // nastavit špendlík bzučáku vysoko PORTC |= 0b00100000; ) void zvuk_vypnout() ( // nastavit špendlík bzučáku nízko PORTC &= ~0b00100000; )

    Prototyp byl sestaven na prkénku.

    Jsem kategoricky proti tomuto přístupu. Většinou to všechno končí – buď ničím, nebo ucpanými fóry s prosbami o pomoc. I když se někomu pomůže, tak v 90% už na stránkách elektroniky nevyskočí. Ve zbylých 10% dál plní fóra prosbami, nejdřív ho nakopnou, pak na něj nasypou bláto. Z těchto 10 % je vyřazeno dalších 9 %. Pak jsou dvě možnosti: buď přijde na hloupou hlavu a stále jde na začátek, nebo ve zvlášť opomíjených verzích je jeho údělem kopírovat cizí návrhy, bez jediné myšlenky na to, jak to funguje. Z těch druhých se často rodí arduino.

    Cesta od nuly je podle mého názoru studovat periferie a funkce, pokud se jedná o mikrokontrolér. Je správnější se nejprve zabývat tím, jak trhat nohama, pak časovači a poté rozhraními. A teprve potom se snažte zvýšit TUK. Ano, není to rychlé, ano, bude to vyžadovat čas a úsilí, ale praxe ukazuje, že bez ohledu na to, jak se snažíte zkrátit tuto cestu, stále se objeví problémy, které bude třeba vyřešit, a bez této základny strávíte mnohem více času.

    Jen nezaměňujte teplé a měkké. Jednak jsou výjimky ze všech pravidel, osobně jsem viděl lidi, kteří předtím mikrokontroléry v ruce nedrželi, ale v extrémně krátké době dokázali předběhnout zkušené zkušené radioamatéry, nebereme je v úvahu. Za druhé jsem narazil na jedince, kteří začali kopírováním schémat a hned na to přišli, ale spíše je to také výjimka z pravidla. Za třetí, mezi arduiny jsou zkušení programátoři, je to prostě platforma, ale to je spíše výjimka.

    Pokud mluvíme o obecné mase, pak se věci mají přesně tak, jak jsem popsal na začátku: neochota zabývat se základy v lepším případě oddaluje okamžik, kdy se musíte k těmto otázkám vrátit. V horším případě rychle narazíte na strop svých znalostí a celou dobu budete ze svých problémů obviňovat někoho jiného.

    2. Než problém vyřešíte, rozdrťte jej do absurdity až po „připájení rezistoru“, pomáhá to, je to prověřeno. Malé úkoly se řeší mnohem snadněji. Když je velký úkol rozdělen do hromady malých akcí, pak už zbývá jen je dokončit. Mohu dát ještě jednu dobrou radu, i když se vám to může zdát šílené – pořiďte si sešit a zapište si do něj vše, co budete dělat. Myslíš, že si to budu pamatovat, ale ne. Řekněme, že dnes mám dobrou náladu a přemýšlím, jak poplatek vybrat. Napište si akční plán: jděte koupit rezistor, připravte vodiče, namontujte displej. Pak na všechno zapomenete, otevřete sešit a koukáte - jo, dneska je nálada stříhat a stříhat, udělám paspartu. Nebo si sesbíráte desku a už zbývá zapájet poslední součástku, ale nebylo tam, kde došly odpory, takže bych si to před pájením zapsal, pak jsem si vzpomněl.

    3. Nepoužívejte generátory kódu, nestandardní funkce a další zjednodušující prostředky, alespoň v prvních fázích. Mohu uvést svůj osobní příklad. Když jsem aktivně používal AVR, použil jsem kodogen CAVR. Naprosto mi vyhovoval, i když všichni říkali, že je kaká. Neustále zvonily, byly problémy s knihovnami, se syntaxí, s portováním, ale bylo těžké to odmítnout. Nechápal jsem, jak to funguje, jen jsem věděl, kde a jak zaškrtnout políčka.

    Do rakve mi byl zaražen kůl s příchodem STM32, bylo nutné se na ně doplazit a pak se objevily problémy. Problémy, mírně řečeno, ve skutečnosti jsem musel zvládnout mikrokontroléry a jazyk C od nuly. Už jsem chyby z minulosti neopakoval. Musím říct, že se mi to nejednou hodilo. Od té doby jsem měl možnost pracovat s jinými platformami a neměl jsem žádné potíže, ospravedlňuje se tento přístup.

    Ohledně všech zlepšováků a zjednodušovačů bylo jedno velmi dobré přirovnání, že jsou jako invalidní vozíky, které jezdí po kolejích, můžete jet a užívat si, ale nemůžete vstát, kam vás vezou - tam přijedete.

    4. Naučte se jazyk C. Ach, jak často slyším začínající radioamatéry chlubit se, že dobře znají sišku. Pro mě se to stalo jídlem, vždy se rád poradím s takovými partnery. Většinou se hned ukáže, že jazyk vůbec neznají. Mohu říci, že přes zdánlivou jednoduchost jsem nepotkal tolik lidí, kteří by ho opravdu dobře znali. V podstatě ho každý zná tolik, kolik je potřeba k řešení problémů.

    Problém je však podle mě v tom, že bez znalosti možností se silně omezujete. Na jedné straně ne optimální řešení vyžadující výkonnější hardware, na straně druhé nečitelný kód, který je náročný na údržbu. Čitelnost a udržovatelnost kódu je podle mého názoru jedno z nejdůležitějších míst a je pro mě těžké si představit, jak toho lze dosáhnout bez využití všech funkcí jazyka C.

    Spousta začátečníků učením jazyka pohrdá, takže pokud nejste jako všichni ostatní, okamžitě se dostanete o dva stupně výš než ostatní začátečníci. Nezáleží také na tom, kde se jazyk naučit. Mikrokontrolér se k tomu dle mého názoru moc nehodí. Je mnohem jednodušší dát nějaké Visual studio nebo Qt Creator a řešit problémy na příkazovém řádku.

    Dobrou pomůckou bude i nastudování případných jazykových testů, které se při pohovorech zadávají. Pokud budete kopat, můžete se naučit spoustu nových věcí.

    5. Učíte se assembler? Není nutné se ho bát, stejně jako zbožňovat. Není třeba si myslet, že tím, že umíte napsat program v assembleru, se z vás okamžitě stane guru mikrokontrolérů, z nějakého důvodu je to běžná mylná představa. V první řadě je to nástroj. I když jej neplánujete používat, přesto bych důrazně doporučil napsat alespoň pár programů. To značně zjednoduší pochopení činnosti mikrokontroléru a vnitřní struktury programů.

    6. Přečtěte si datový list. Mnoho vývojářů to zanedbává. Prostudováním datasheetu budete o dva kroky výše než tyto vývojáře. Je velmi užitečné to udělat, za prvé, toto je zdroj, bez ohledu na to, jaké stránky čtete, ve většině případů opakují informace z datasheetu, často s chybami a podhodnoceními. Kromě toho se mohou objevit informace, o kterých nyní nepřemýšlíte, ale které se mohou hodit v budoucnu. Může se stát, že se objeví nějaká chybička a vy si vzpomenete, že ano, bylo řečeno v datasheetu. Pokud je vaším cílem stát se dobrým vývojářem, pak se této fázi nelze vyhnout, budete muset číst datasheety, čím dříve s tím začnete, tím rychleji půjde růst.

    7. Lidé často žádají o zaslání datového listu v ruštině. Datashit - to je to, co by mělo být vnímáno jako pravda, nejsprávnější informace. Ani tam nejsou vyloučeny chyby. Když se k tomu přidají chyby překladatele, je to také člověk, možná ani ne naschvál, jen aby byl zpečetěn. Buď má svou vizi, může mu něco uniknout, podle jeho názoru ne důležité, ale pro vás možná nesmírně důležité. Situace se stává obzvláště vtipnou, když potřebujete najít dokumentaci pro nepříliš oblíbené komponenty.

    Podle mého názoru je mnohem snazší odstranit celou vrstvu těchto problémů předem, než je podchytit později. Proto jsem kategoricky proti překladům, jediná správná rada je studovat angličtinu, abyste mohli číst datasheety a manuály v originále. S pomocí překladatelských programů pochopíte význam fráze, i když je vaše jazyková úroveň zcela nulová.

    Provedl jsem experiment: k dispozici byl student, datasheet a Google překladač. Pokus č. 1: student dostal datasheet a dostal za úkol samostatně najít potřebné hodnoty, výsledek je „ano, jak mohu“, „ano, neumím anglicky“, „nenašel jsem cokoliv / jsem nerozuměl“ typické fráze, které říkají, že se o to ani nepokusil. Pokus č. 2: stejný žák dostal stejný datasheet a stejný úkol s tím rozdílem, že jsem seděl vedle něj. Výsledek - po 5 minutách sám našel všechny potřebné hodnoty, absolutně bez mé účasti, bez znalosti angličtiny.

    8. Znovu vynalezte kolo. Například studujete nějakou novinku, řekněme tranzistor, strýc Horowitz ze stránek své knihy autoritativně uvádí, že tranzistor zesiluje, vždy říkejte - NEVĚŘTE. Vezmeme do rukou tranzistor, zapneme ho v obvodu a přesvědčíme se, že tomu tak skutečně je. Existuje celá vrstva problémů a jemností, které nejsou popsány v knihách. Ucítíte je, jen když je vezmete do rukou a pokusíte se je posbírat. Zároveň získáváme spoustu předávaných znalostí, učíme se jemnosti. Navíc jakákoliv teorie bez praxe bude mnohem rychleji zapomenuta.

    V počáteční fázi mi hodně pomohla jedna metoda - nejprve sestavíte obvod a uvidíte, jak to funguje, a pak se snažíte najít zdůvodnění v knize. To samé je se softwarovou částí, když existuje hotový program, je snazší mu porozumět a korelovat kousky kódu, kdo za co zodpovídá.

    Je také důležité jít nad rámec toho, co je povoleno, použít více / méně napětí, vytvořit více / méně odporů a sledovat změny v obvodu. To vše zůstává v mozku a bude se to hodit v budoucnu. Ano, je to zatíženo spotřebou komponent, ale považuji to za nevyhnutelné. Zpočátku jsem seděl a střílel ze všeho, ale teď, než jsem dal tu či onu nominální hodnotu, si vždycky vzpomenu na ty zábavné časy a důsledky vložení špatné nominální hodnoty.

    9. A jak bych to udělal já, kdybych byl na místě vývojářů? Mohu to udělat lépe? Pokaždé si položte tyto otázky, hodně to pomáhá posunout se v učení kupředu. Prostudujte si například rozhraní 1wire, i2c, spi, uart a pak přemýšlejte o tom, jak se liší, zda to nešlo udělat lépe, to vám pomůže pochopit, proč je vše tak, jak je a ne jinak. Budete také vědět, kdy a který z nich je lepší použít.

    10. Jděte za hranice technologie. Je důležité, aby tato rada měla velmi jemnou linii. V životě byla etapa, kdy bylo ze všech dveří slyšet „by bylo nutné znát FPGA“, „ale na FPGA to jde“. Formálně jsem neměl žádné cíle studovat FPGA, ale nedalo se to obejít. Tato problematika dostala trochu času na seznámení. Čas neutíkal nadarmo, měl jsem řadu dotazů ohledně vnitřní struktury mikrokontrolérů, až po rozhovoru se záhyby jsem na ně dostal odpovědi. Podobných příkladů je mnoho, všechny znalosti, které jsem v té či oné podobě získal, se mi dříve či později hodily. Nemám jediný zbytečný příklad.

    Ale jak bylo řečeno, otázka technologie má jemnou linii. Nemusíte na sebe brát všechno. V elektronice existuje mnoho směrů. Možná máte rádi analogové, možná digitální, možná jste specialista na napájení. Pokud to není jasné, zkuste se všude, ale praxe ukazuje, že zpočátku je lepší se soustředit na něco konkrétního. I když potřebujete stisknout v několika směrech, je lepší to udělat po krocích, nejprve protlačte jednu věc.

    11. Pokud se zeptáte začínajícího radioamatéra, co ho baví víc programování nebo obvody, tak s pravděpodobností 99% bude odpovědí programování. Zároveň tito programátoři tráví většinu času výrobou desek s LUT / fotorezistem. Důvody jsou obecně pochopitelné, ale dost často to přechází v jakési šílenství, které spočívá ve výrobě desek pro výrobu desek.

    Na internetu je téměř jedinou cestou k programování stát se výrobcem PCB Jedi. I já jsem si touto cestou prošel, ale pokaždé si položím otázku proč? Od té doby, co jsem si koupil pár prken pro všechny příležitosti, pokaždé přemýšlím o tom, jak bych mohl celou tu dobu žít bez domácích prken. Moje rada, pokud existuje byť jen kapka pochybností, pak je lepší se neobtěžovat a vzít si hotovou debugovací desku a bylo by lepší utrácet čas a peníze na programování.

    12. Další rada, obzvlášť bolestivá, opravdu nechci rozebírat, ale musím.Často mi píšou, že xxx rub za yy je drahý, kde bys ho sehnal levněji. Zdá se, že je to častá otázka, ale většinou jsem z ní okamžitě napjatá, protože často přechází v nekonečné nářky na nedostatek peněz. Vždycky mám otázku: proč neutrhnout pátý bod a nepustit se do práce? Minimálně ve stejném McDucku, alespoň na stavbu, vydržet měsíc, ale pak se dá koupit pár prkýnek, které vystačí na další rok. Ano, vím, že v malých městech a na vesnicích je těžké najít práci, přestěhovat se do velkého města. Práce na dálku, obecně, musíte točit. Jen nemá smysl si stěžovat, ze situace existuje východisko, kdo hledá, najde.

    13. Ve stejném prasátku přidám velmi bolestivou otázku nástroje. Nástroj by vám měl umožnit co nejrychlejší vývoj zařízení. Z nějakého důvodu si mnoho vývojářů neváží svého času. Typickým příkladem je levné krimpování koncovek, na kterém mnozí zaměstnavatelé rádi šetří. Problém je v tom, že se to ani správně nezalisuje, kvůli tomu dráty vypadávají. Musíte udělat spoustu dalších manipulací, abyste ztráceli čas. Ale jak víte, blázen platí třikrát, takže nízká cena krimpovačky se mnohonásobně zvýší, kvůli strávenému času a špatné kvalitě krimpu.

    Neříkám, že levné = špatné, ne - vše záleží na situaci. Vrátím se k příkladu krimpovačky, byla doba, kdy jsem to krimpoval čímkoli, takže často nastávaly problémy. Zvláště nepříjemné je, když desku spustíte a nefunguje, po dlouhém hledání chyby si uvědomíte, že je to škoda kvůli špatně namačkanému drátu. Od doby, kdy se objevilo normální krimpování, tyto problémy nebyly. Ano, vnitřní ropucha kvákala a dusila se svou cenou, ale nikdy tohoto rozhodnutí nelitoval. Chci jen říct, že po práci s normálním nástrojem se absolutně nechci vracet ke špatnému, nechci o tom ani diskutovat. Jak ukazuje praxe, je lepší nešetřit na nástrojích, pokud máte pochybnosti - vezměte někoho na testování, přečtěte si recenze, recenze.

    14. Založte si webovou stránku, můžete na ni psát cokoliv, stejně jako poznámky. Praxe ukazuje, že to zaměstnavatelé stále nečtou, ale samotná skutečnost má velký vliv.

    15. Jemná otázka: specializované vysokoškolské vzdělání, je nutné? Znám víc než pár případů, kdy lidé pracovali absolutně bez vzdělání a na základě svých zkušeností a znalostí mohli dát světlo každému absolventovi. Ve skutečnosti nemám specializované vzdělání, cítím z toho nepohodlí? Do jisté míry ano.

    Na úplných začátcích, kdy pro mě byly mikrokontroléry koníčkem, jsem hodně pomáhal se semestrálními prácemi a diplomy z různých univerzit, jen abych zhodnotil svou úroveň. Mohu s jistotou říci, že úroveň je obecně nízká, bez ohledu na název univerzity. K napsání takového diplomu není nutné studovat několik let. Můžete toho dosáhnout sami ve velmi krátké době. A přesto byly často momenty, kdy studenti znali nějaký předmět, který probírali ve 2. nebo 3. ročníku, ale já jsem nevěděl toto. Všechny tyto znalosti byly sice kompenzovány sebevzděláváním, přesto by bylo lepší s tím neztrácet čas.

    Univerzita kvůli papíru. Mohu říci, že byly i situace, kdy nabízeli práci, která vyžadovala povinnou školní docházku a byla škoda, že zrovna v tu chvíli nebylo papírování. Obecně ale historie ukazuje, že většina zaměstnavatelů se o váš papír nestará.

    Další bod se dost často nebere v úvahu, tím je prostředí. Nezapomeňte, že lidé, se kterými studujete, jsou vaše generace, je možné, že s nimi budete spolupracovat. Počet firem působících v jednom odvětví je velmi omezený. Praxe ukazuje, že i ve velkých městech o sobě všichni vědí až do intimních detailů.

    Dalším bodem jsou možnosti. Vysoké školy mají často své vlastní možnosti - vybavení, možná nějaké sekce, možná nějaké programy práce v zahraničí, toho by se mělo využít, pokud je tu sebemenší příležitost. Pokud na univerzitě nevidíte žádné vyhlídky, jděte na jinou, u jedné svět nekončí.

    Abych to shrnula, rada zní takto: pokud je i sebemenší příležitost, je třeba jít studovat, určitě sleduj profil, pokud je alespoň nějaká šance, tak lez všude a neseď kalhoty na záda psacího stolu. Navazujte známosti, zároveň cvičte doma, rozvíjejte se.

    16. Je příliš pozdě začít s programováním ve 20, 30, 40, 50 letech? Praxe ostatních lidí ukazuje, že věk není vůbec překážkou. Mnozí z nějakého důvodu neberou v úvahu fakt, že existuje celá vrstva práce, kterou mladí lidé kvůli svým ambicím dělat nechtějí. Zaměstnavatelé proto raději berou ty, kteří to budou tahat. Toto je vaše šance se chytit a pak už vše závisí na vás.

    A poslední rada. Mnoho radioamatérů je nespolečenských, naštvaných a podrážděných – to považujte za specifika této práce. Vyzařujte laskavost a pozitivitu, buďte dobrým člověkem.

    Mikrokontroléry (dále jen MK) pevně vstoupily do našich životů, na internetu lze najít spoustu zajímavých obvodů, které jsou na MK provedeny. Co nelze sbírat na MK: různé indikátory, voltmetry, domácí spotřebiče (ochranná zařízení, spínací zařízení, teploměry ...), detektory kovů, různé hračky, roboty atd. seznam může být velmi dlouhý. Viděl jsem první obvod na mikrokontroléru před 5-6 lety v rozhlasovém časopise a téměř okamžitě jsem otočil stránku a pomyslel si: "Ještě to nemůžu sestavit." Opravdu, v té době pro mě byly MK něco velmi složitého a nepochopeného zařízení, neměl jsem ponětí, jak fungují, jak je flashovat a co s nimi dělat v případě nesprávného firmwaru. Ale asi před rokem jsem poprvé sestavil svůj první obvod na MK, byl to obvod digitálního voltmetru na 7 segmentových indikátorech a mikrokontrolér ATmega8. Stalo se, že jsem si ten mikrokontrolér koupil náhodou, když jsem stál v oddělení rádiových dílů, týpek přede mnou kupoval MK a taky jsem se rozhodl, že si ho koupím a zkusím něco sestavit. Ve svých článcích vám budu vyprávět Mikrokontroléry AVR, naučím vás s nimi pracovat, zvážíme programy firmwaru, vyrobíme jednoduchého a spolehlivého programátora, zvážíme proces firmwaru a hlavně problémy, které mohou nastat nejen pro začátečníky.

    Hlavní parametry některých mikrokontrolérů rodiny AVR:

    mikrokontrolér

    FLASH paměť

    paměti RAM

    Paměť EEPROM

    I/O porty

    u dodávky

    Další parametry MK AVR mega:

    Provozní teplota: -55…+125*С
    Skladovací teplota: -65…+150*С
    Napětí na pinu RESET vzhledem k GND: max 13V
    Maximální napájecí napětí: 6,0V
    Maximální proud I/O linky: 40 mA
    Maximální proud na elektrickém vedení VCC a GND: 200 mA

    Přiřazení pinů pro modely ATmega 8X

    Přiřazení pinů pro modely ATmega48x, 88x, 168x

    Přiřazení pinů pro modely ATmega8515x

    Přiřazení pinů pro modely ATmega8535x

    Přiřazení pinů pro modely ATmega16, 32x

    Přiřazení pinů pro modely ATtiny2313

    Na konci článku je připojen archiv s datasheety pro některé mikrokontroléry.

    Bity nastavení FUSE MK AVR

    Pamatujte, že naprogramovaná pojistka je 0, nenaprogramovaná je 1. Při nastavování pojistek buďte opatrní, chybně naprogramovaná pojistka může zablokovat mikrokontrolér. Pokud si nejste jisti, kterou pojistku potřebujete naprogramovat, je lepší napoprvé zablikat MK bez pojistek.

    Nejoblíbenější mikrokontroléry pro radioamatéry jsou ATmega8, následují ATmega48, 16, 32, ATtiny2313 a další. Mikrokontroléry se prodávají v pouzdrech TQFP a DIP, začátečníkům doporučuji koupit v DIP. Pokud si koupíte TQFP, bude problematičtější je flashnout, desku si budete muset koupit nebo připájet. jejich nohy jsou velmi blízko u sebe. Mikrokontroléry radím v obalech DIP, nasaďte je na speciální patice, je to pohodlné a praktické, nemusíte MK pájet, pokud jej chcete přeflashovat, nebo použít pro jiný design.

    Téměř všechny moderní mikrokontroléry mají schopnost in-circuit programování ISP, tzn. pokud je váš mikrokontrolér připájen k desce, pak pro změnu firmwaru jej nemusíme odpájet z desky.

    K programování se používá 6 pinů:
    RESETOVAT- Vstup MK
    VCC- Plus napájení, 3-5V, závisí na MK
    GND- Společný vodič, mínus napájení.
    MOSI- MK vstup (informační signál v MK)
    MISO- MK výstup (informační signál z MK)
    SCK- MK vstup (hodinový signál v MK)

    Někdy používají i výstupy XTAL 1 a XTAL2, na tyto výstupy lpí quartz, pokud bude MK pracovat z externího generátoru, u ATmega 64 a 128 se výstupy MOSI a MISO nepoužívají pro programování ISP, místo toho jsou výstupy MOSI připojeny k nohu PE0 a MISO na PE1. Při připojování mikrokontroléru k programátoru by propojovací vodiče měly být co nejkratší a kabel z programátoru do LPT portu by také neměl být příliš dlouhý.

    Označení mikrokontroléru může obsahovat nesrozumitelná písmena s čísly, např. Atmega 8L 16PU, 8 16AU, 8A PU atd. Písmeno L znamená, že MK pracuje s nižším napětím než MK bez písmene L, obvykle 2,7V . Čísla za pomlčkou nebo mezerou 16PU nebo 8AU označují vnitřní frekvenci oscilátoru, který je v MK. Pokud jsou pojistky nastaveny tak, aby fungovaly z externího quartz, musí být quartz nastaven na frekvenci nepřesahující maximum podle datasheetu, to je 20 MHz pro ATmega48/88/168 a 16 MHz pro ostatní atmegas.

    Minimální sada materiálů pro výuku programování

    Od tohoto článku začneme konkrétně řešit jeden problém − programování mikrokontroléru. Proces bude probíhat následovně - nejprve článek o zařízení mikrokontroléru (například první článek bude o I/O portech) a poté článek o programování. Dnešní náš rozhovor je úvodní, a bude věnován problematice materiálu a softwaru pro proces studia základů programování mikrokontrolérů.

    Startovací sada mikrokontroléru pro začátečníky

    Pro začátek bych rozdělil začínající mikrokontroléry do tří podmíněných skupin:
    - radioamatéři, kteří chtějí sestavit hotová řešení na mikrokontrolérech, ale nemají chuť učit se programovat
    - ti, kteří se chtějí naučit programovat a sestavovat návrhy na mikrokontrolérech, ale zvolili nejjednodušší způsob - Arduino
    - ti, kteří chtějí plně porozumět zařízení a programování mikrokontrolérů a sestavit si vlastní návrhy

    U první skupiny je vše velmi jednoduché:
    - pořiďte si programátor a naučte se s ním pracovat

    U druhé skupiny se zastavím trochu podrobněji.
    Arduino je zaměřeno na začátečníky, neprofesionální uživatele a skládá se ze dvou částí – softwarové a hardwarové.
    Softwarovou část tvoří bezplatný softwarový shell pro psaní programů, jejich kompilaci a programování zařízení.
    Programovacím jazykem je standardní C++ s některými změnami usnadňujícími práci s tímto jazykem (i když je možné vytvářet programy nebo vkládat hotové projektové soubory pomocí standardního jazyka C++). Naučit se programovat s Arduinem je velmi jednoduché (proto se programy pro Arduino nazývají „náčrty“) – celý proces programování spočívá ve výběru potřebných hotových knihoven, abyste získali konkrétní výsledek.
    Hardwarovou část tvoří již hotová deska s mikrokontrolérem s nezbytným páskováním pro běžný provoz mikrokontroléru a rozšiřující desky (shieldy). Kromě toho se vyrábí mnoho již hotových senzorů a akčních členů. Celý proces skládání konstrukce na Arduinu připomíná Lego konstruktor – vyberete potřebné rozšiřující desky a zařízení a dokujete je se základní deskou. Ke stažení programu není nutný samostatný programátor.
    Arduino je samozřejmě dobrá věc, ale hlavně je určeno jen pro ty, kteří chtějí sestavovat návrhy na mikrokontrolérech, ale nechtějí si zatěžovat mozek zbytečnými (podle jejich názoru) znalostmi (toto je čistě můj názor).

    No a my se zařadíme do třetí skupiny a půjdeme sice trnitou, ale velmi zajímavou cestou.

    Abyste mohli začít s praktickou studií jak zařízení, tak programování mikrokontroléru, potřebujete mít minimální materiálovou základnu – startovací sadu. Startovací sadu, která je podle mého názoru nezbytná pro zvládnutí mikrokontroléru, lze zakoupit v internetovém obchodě webu (takže tento článek lze považovat za komerční reklamu :)):

    Rád bych poznamenal komentář jednoho čtenáře webu. Bohužel komentář kamsi zmizel a ani jméno čtečky se nezachovalo, ale člověk si toho všiml velmi přesně - nejedná se o první verzi sady, ale již třetí, dražší - změnilo se balení stavebnice, více se rozšířil, přibyly nové (potřebné) komponenty (prosím čtenáře webu, který komentář zanechal, aby mě omluvil za chybu webu). Nesnažím se čtenáře webu nutit, aby si něco koupili v internetovém obchodě webu. To není vůbec nutné, můžete si to objednat u čínských soudruhů.

    A teď k tomu hlavnímu:
    1. Pro praktické experimenty potřebujeme mikrokontrolér (nejlépe tři):
    — nejoblíbenější a nejžádanější mikrokontroléry — ATmega8A-PU a ATtiny2313A-PU, ATtiny13A-PU. Mimochodem, ATtiny13 je velmi populární MK a ne nadarmo se mu říká "dítě" - malé příležitosti - ale vážný vývoj.
    2. K zápisu programu do mikrokontroléru je vyžadován programátor:
    - ideálním řešením je podle mě programátor USBASP, ze kterého dostaneme i napětí 5 voltů pro budoucí návrhy.
    3. Pro vizuální vyhodnocení a závěry výsledků programu jsou zapotřebí nástroje pro zobrazování informací:
    - LED diody
    - sedmisegmentový LED indikátor
    — LCD displej syntetizující znaky (alfanumerický).
    4. Prostudovat procesy komunikace mikrokontroléru s jinými zařízeními:
    - digitální teplotní senzor DS18B20 a hodiny reálného času DS1307 (velmi praktická zařízení)
    5. Dále potřebujeme tranzistory, rezistory, křemenné rezonátory, kondenzátory, tlačítka:
    - bipolární tranzistory struktury NPN a PNP
    - sada odporů různých hodnot
    - quartz (zde jsem vyhodil přebytek) na 32,768 kHz, 8 MHz.
    - 22 pF keramické kondenzátory
    - dotyková tlačítka
    6. K sestavení struktur na mikrokontroléru budete potřebovat prkénko pro montáž bez pájení a sadu propojek k němu:
    - prkénko na krájení MB102 (ideální mít dvě takové desky - jsou spojeny, což bude v budoucnu velmi užitečné)
    - spojovací propojky k prototypové desce tří typů - flexibilní (matka-matka, otec-otec) a tuhé ve tvaru U

    Výsledkem je taková množina:

    V budoucnu bude součástí této sady prkénko a propojky k němu, programátor bude vždy potřeba pro navrhování a testování vašich návrhů a zbytek lze použít v těchto návrzích.

    Po vyřešení materiální základny přejděte k druhé otázce.

    Výběr programovacího jazyka a vývojového prostředí pro programování

    Abych byl upřímný, výběr programovacího jazyka a vývojového prostředí je velmi důležitá záležitost, je docela těžké někomu vnutit své preference a něco poradit.
    Zkusme k této volbě přistoupit bez předsudků, čistě z praktické stránky.
    1. Pro mikrokontroléry existují dva hlavní programovací jazyky - Assembler (nízkoúrovňový jazyk) a C (vysokoúrovňový jazyk).
    Pokud chceme programovat mikrokontroléry s využitím všech jejich možností (a chceme), pak se musíme naučit tyto dva jazyky.
    2. Vývojové prostředí pro programování mikrokontrolérů.
    Je tu široký výběr a spousta názorů. Proto můžeme říci: "Každá žába chválí svůj močál." Velmi se mi líbí například vzácné grafické vývojové prostředí „Algorithm Builder“ a o jeho výhodách oproti jiným programům mohu „krákat“ velmi dlouho. Ale uděláme volbu, jak je uvedeno výše, ne zaujaté a praktické.
    Mikrokontroléry AVR vyrábí společnost Atmel, která nám také poskytuje bezplatné programovací prostředí Atmel Studio (dříve AVR Studio). Tam se zastavíme.
    Integrované vývojové prostředí (IDE - Integrated development environment) Atmel Studio nám umožní:
    - psát programy jak v Assembleru, tak v C (Proč v C. Program Atmel Studio umožňuje psát programy ve třech jazycích (o kterých budeme mluvit v prvním článku), ale je tu jedna věc: považujeme programy v C ++ nebudeme, a to z jednoho důvodu a v příštím článku o tom budu mluvit
    - ladit program
    - přeložit program do strojového kódu (kompilovat)
    - napište program do mikrokontroléru

    To je vše, vybrali jsme:


    Nyní je třeba udělat dvě věci:
    1. Pořiďte si nějakou startovací sadu (pro začátek postačí mikrokontrolér ATmega8, pár LED, pár tlačítek a odpory k nim).
    2. Nainstalujte (jmenovitě instalujte, nestahujte as registrací) z oficiálních stránek společnosti Atmel (http://www.atmel.com/ru/) program Atmel Studio.
    Mikrokontroléry budeme programovat pomocí programátoru USBASP.
    O Atmel Studiu nebudu psát samostatný článek, budeme ho studovat postupně, podle potřeby a ve spojení s články o návrhu a programování mikrokontrolérů.

    Dobrý den, milí radioamatéři!
    Vítám vás na stránkách ""

    Co je to mikrokontrolér a proč je potřeba. Podívejme se na jeho definici:

    - mikroobvod určený k ovládání elektronických zařízení, nebo jiným způsobem - jednoduchý počítač (mikropočítač) schopný provádět jednoduché úkoly.

    Čili ve skutečnosti je mikrokontrolér zařízení, které nám umožňuje realizovat naše nápady (i bláznivé), ale samozřejmě v rámci svých možností. A co je nejdůležitější, realizace myšlenky se nedosahuje vytvářením sofistikovaných elektronických struktur, ale v podstatě pouze silou naší myšlenky (chtěli byste se stát čarodějem?).
    Nejoblíbenější mezi radioamatéry jsou dva typy mikrokontrolérů:
    PIC- Technologie mikročipů
    AVR- od Atmel

    Rád bych udělal krátkou odbočku a objasnil jednu ze svých pozic. Nehodlám rozebírat přednosti toho či onoho typu mikrokontrolérů, toho či onoho softwaru a obecně všeho, co s mikrokontroléry souvisí, abych něco radil a ještě víc čtenářům vnucoval. Vše je věcí vkusu, osobních preferencí a vašich konečných cílů při učení mikrokontrolérů. Protože „nesmírnost nelze obsáhnout“, budu veškeré své další vyprávění vést ve vztahu k mikrokontrolérům AVR a ne příliš běžnému, ale mému oblíbenému programu „Algorithm Builder“. Různé typy mikrokontrolérů, programů, se samozřejmě liší, ale mají také mnoho společného. A svět mikrokontrolérů se naučíme tak, abychom později získané znalosti mohli bez problémů aplikovat na PIC a jakýkoli software. A ještě jednou připomenu, že tato série článků je mým pokusem pomoci těm, kteří poprvé slyšeli o existenci mikrokontrolérů a chtějí pochopit, jak s nimi pracovat.

    Co se potřebujete naučit pracovat s mikrokontroléry? Vybral bych několik, podle mého názoru, hlavních podmínek:
    1. Touha a vytrvalost .
    Všechno je zde velmi jednoduché: existuje touha - všechno bude fungovat. A touha s vytrvalostí je obecně super věc.
    2. Znalost zařízení mikrokontroléru.
    Hluboké znalosti zde nejsou důležité (a možná vůbec ne), ale je nutné vědět, co je „na palubě“ mikrokontroléru. Jedině vědět, z čeho se mikrokontrolér skládá, jaká zařízení má, jejich možnosti, jak fungují – jedině tak budeme moci využít možnosti mikrokontroléru naplno.
    3. Znalost programovacího jazyka a řídicích příkazů mikrokontroléru.
    Jak bude mikrokontrolér fungovat, jaké úkoly mu zadáváte a jak je bude provádět, určuje program v něm vložený – program, který si pro mikrokontrolér sami složíte. A tomuto bodu se budeme věnovat podrobněji, abychom zvážili problémy, které mohou v budoucnu nastat.

    Program(v překladu toto slovo znamená „předpis“) - předběžný popis nadcházejících událostí nebo akcí.

    Například chceme, aby mikrokontrolér blikal LED. Jednoduchý úkol, ale přesto, aby mikrokontrolér tento úkol splnil, musíme nejprve krok za krokem popsat všechny akce mikrokontroléru, napsat program, který musí provést, aby získal výsledek, který potřebujeme - blikající LED dioda . Něco takového:
    ♦ Rozsviťte LED:
    - nakonfigurujte výstup, ke kterému je LED připojena, aby pracoval na výstupu informací
    - aplikujte na tento pin logickou úroveň, která vám umožní rozsvítit LED
    ♦ Chvíli počkejte:
    - přejděte na podprogram, který tvoří pauzu (kterou je také třeba „rozkousat“)
    - po dokončení podprogramu pauza se vraťte do hlavního programu
    ♦ Vypněte LED:
    - aplikujte na výstup logickou úroveň a zhasněte LED
    a tak dále.
    s termínem Program další pojem je neoddělitelně spojen - Algoritmus(jako Vlk a zajíc, Tom a Jerry).

    Algoritmus- soubor pokynů, které popisují postup k dosažení požadovaného výsledku.

    Pokud jsme v programu nejpodrobněji předepisovat akce mikrokontroléru, pak v algoritmu my určit postup mikrokontroléru, na jehož základě pak vytvoříme program. Podobně jako v příkladu výše:
    ♦ Rozsviťte LED
    ♦ Chvíli počkejte
    ♦ Vypněte LED
    a tak dále.
    Tím pádem, algoritmus je předchůdcem programu. A čím pečlivěji a promyšleněji je algoritmus vytvořen, tím snazší bude vytvoření programu.

    Celkově je program pro mikrokontrolér sled akcí mikrokontroléru ve formě sady příkazů a instrukcí, které musí provést, aby dosáhl našich cílů.

    Příkazy pro mikrokontrolér vypadají jako sada jedniček a nul:
    00110101 011000100
    tzv. - příkazové kódy, a příkazové kódy jsou jazykem, kterému mikrokontrolér rozumí. A abychom přeložili náš algoritmus z ruštiny do jazyka mikrokontroléru - právě do těchto sad nul a jedniček existují speciální programy.
    Tyto programy nám umožňují popsat pořadí práce pro mikrokontrolér v pro nás více či méně srozumitelném jazyce a následně toto pořadí převést do jazyka srozumitelného mikrokontroléru, což má za následek tzv. strojový kód- posloupnost příkazů a instrukcí (samotné nuly a jedničky), kterým rozumí pouze mikrokontrolér. Zavolá se text programu napsaného programátorem zdrojový kód. Program je přeložen z programovacího jazyka (zdrojového kódu) do jazyka mikrokontroléru (strojového kódu) překladatelé. Překladač převádí text programu na strojové kódy, které se následně zapisují do paměti mikrokontroléru.
    V takových programech je pořadí činnosti mikrokontroléru popsáno speciálním jazykem - programovacím jazykem. Programovací jazyk se liší od našeho lidského jazyka. Pokud je náš komunikační jazyk primárně určen k výměně informací, pak:

    Programovací jazyk - jedná se o způsob přenosu příkazů, instrukcí, přehledný návod k činnosti pro mikrokontrolér.

    Programovacích jazyků je mnoho a lze je rozdělit do dvou typů:
    nízkoúrovňové programovací jazyky
    programovací jazyky na vysoké úrovni
    Jaký je rozdíl. A liší se svou blízkostí k mikrokontroléru.
    Na úsvitu vzniku mikroprocesorové technologie byly programy psány ve strojových kódech, to znamená, že celý algoritmus práce byl postupně zapsán ve formě nul a jedniček. Takto vypadal program:

    01000110
    10010011
    01010010

    Je nepravděpodobné, že by někdo dokázal přijít na takovou sadu kombinací dvou čísel a práce prvních programátorů byla velmi pracná. Aby si programátoři usnadnili život, začali vytvářet první programovací jazyky. Čím blíže je tedy programovací jazyk takové sadě nul a jedniček, tím je „nízká úroveň“ a čím dále od nich, tím více „vyšší úroveň“.
    Nejběžnější programovací jazyky pro mikrokontroléry:
    - jazyk nízké úrovně - assembler
    – jazyk na vysoké úrovni – C (Ci)
    Podívejme se na příklad jejich rozdílu (tyto příklady jsou abstraktní).
    Řekněme, že potřebujeme sečíst dvě čísla: 25 a 35.
    V nativním kódu může tento příkaz vypadat takto:
    00000101 1101001
    V jazyce nízké úrovně:
    PŘIDAT Rd, Rr
    V jazyce vysoké úrovně:
    25+35
    Rozdíl mezi jazyky nízké a vysoké úrovně je viditelný pouhým okem, komentáře, jak se říká, jsou nadbytečné.
    Podívejme se však hlouběji na tyto příklady. Nebudeme analyzovat příklad strojového kódu, protože je shodný s příkladem v assembleru. V jádru jsou montážní pokyny stejné strojové kódy (příkazy), kterým jsou jednoduše přiřazeny písmenné zkratky, aby se neztratily v nulách a jedničkách. Instrukcí assembleru ADD Rd, Rr nastavíme mikrokontrolér tak, aby sečetl dvě nalezená čísla (a proto je tam musíme nejprve napsat) - první do Rd, druhé do Rr a umístit výsledek sčítání v Rd. Jak vidíte, nastavili jsme pro mikrokontrolér velmi specifický úkol: kde jej získat, co s ním dělat a kam umístit výsledek. V tomto případě pracujeme přímo s mikrokontrolérem.
    Příkaz v jazyce na vysoké úrovni: 25+35 , nám známý matematický zápis, příjemný pro naše oči. Ale v tomto případě nepracujeme přímo s mikrokontrolérem, jednoduše mu nastavíme za úkol sečíst dvě čísla. Výsledek a posloupnost akcí v tomto případě bude stejná jako při provádění příkazu assembleru: nejprve se tato dvě čísla někam zapíší, pak se sečtou a výsledek se někam umístí.
    A zde spočívá hlavní rozdíl mezi jazyky na vysoké a nízké úrovni. Pokud v Assembleru řídíme celý proces (ať se nám to líbí nebo ne): víme, kde jsou tato dvě čísla zapsána, a víme, kde bude výsledek, pak v jazyce na vysoké úrovni proces neřídíme. Program sám rozhodne, kam čísla předpíše a kam umístí výsledek. Ve většině případů to nepotřebujeme vědět, protože pro nás je hlavním výsledkem číslo 60 ve výstupu. Výsledkem je, že programy ve vyšších jazycích jsou čitelnější, příjemnější pro oči a menší – koneckonců nemusíme „lézt do všech děr“ a malovat každý krok mikrokontroléru, programu udělá to za nás později, když to zkompiluje - přeloží to do strojových kódů. Má to ale i nevýhodu. Dva identické algoritmy napsané v Assembleru a v C budou mít po převodu na strojové kódy jinou velikost: program napsaný v Assembleru bude o 20–40 % kratší než program napsaný v C – čert ví, kudy C vede dosáhnout výsledku, který potřebujeme. A jsou případy, kdy se nedůvěřuje vysokoúrovňovému jazyku a do programu C vloží kód napsaný v Assembleru.
    Profesionální programátoři zpravidla znají několik programovacích jazyků (nebo pracují v týmu, který zahrnuje specialisty na různé jazyky), kreativně kombinují své funkce a výhody v jednom programu. No, my, amatéři, potřebujeme umět alespoň jeden jazyk (pro začátek) a je potřeba začít (a o tom jsem pevně přesvědčen a nikdo mě nepřesvědčí) od jazyka nízké úrovně - Assembly.

    No, myslím, a tady je nám vše jasné - musíte se naučit programovací jazyk jiným způsobem - v žádném případě.

    Příkazy a instrukce pro ovládání mikrokontroléru.
    Mikrokontroléry AVR mají více než 130 různých příkazů, které mu umožňují realizovat všechny možnosti, které jsou v něm obsaženy. Ale hned řeknu, že málokterý amatér je všechny zná, natož aby je všechny používal. Obvykle je v amatérské praxi dostatek znalostí a polovina týmů, nebo i méně. Ale musíte se naučit příkazy. Čím více příkazů budete znát, tím propracovanější (v dobrém slova smyslu) a elegantnější programy budou.

    Aritmetická logická jednotka a organizace paměti - programová paměť, datová paměť, energeticky nezávislá paměť