Programovanie MK od nuly. AVR programovanie

Nemám raz a nie dva hovorili, že štúdium MK by sa mala začať s assemblerom. To bolo venované celého kurzu na mieste (aj keď to nie je veľmi konzistentné, ale postupne som ho čeliš na primeraný typ). Áno, je to ťažké, výsledok nebude prvý deň, ale naučíte sa pochopiť, čo sa deje vo vašom regulátore. Budete vedieť, ako to funguje, a nie na opice kopírovať zdroje iných ľudí a pokúsiť sa pochopiť, prečo zrazu prestala pracovať. Okrem toho, SI je oveľa jednoduchšie predbehnúť stredom, ktorý vyjde s vidlicami na najviac inopportune moment.

Bohužiaľ, každý chce výsledok okamžite. Preto som sa rozhodol ísť na druhú ruku - aby sa škola na Si, ale s výstavou jeho spodného prádla. Dobrý programátor-Vložiť vždy drží jeho kúsok železa pre Squall, bez toho, aby jej krok k kroku bez povolenia. Takže to bude na začiatku takého kódu, potom to, čo sa narodil kompilátor a ako to naozaj funguje v skutočnosti :)

Na druhej strane, Si silná strana Toto je kód prenosnosti. Ak, samozrejme, napísať všetko správne. Oddelenie pracovných algoritmov a ich realizácií železa v rôznych častiach projektu. Potom, ak chcete preniesť algoritmus do iného MK, stačí prepísať iba vrstvu rozhrania, kde je napísané všetky výzvy na žľazu a zanechá celý pracovný kód ako je. A samozrejme, čitateľnosť. Zdroj Sash Zdroj je ľahšie pochopiť na prvý pohľad (aj keď .. Napríklad, nestarám sa o to, čo flirtovať, je aspoň SI, aspoň AFM :)), Ale opäť, ak napíšete všetko správne. S týmto momentmi budem tiež venovať pozornosť.

Ako vodivý kúsok hardvéru, na ktorom bude mať podiel leva na všetkých príkladoch ladenie.

Prvý program na C pre AVR

Výber kompilátora a inštalácie životného prostredia
Pre AVR existuje mnoho rôznych C kompilátorov:
Najprv IAR AVR C. - takmer jednoznačne uznávaný ako najlepší kompilátor pre AVR, pretože Samotný regulátor bol vytvorený úzkym spolupracovníkom Atmel a špecialistov z IAR. Ale pre všetko, čo musíte zaplatiť. A tento kompilátor nestačí o tom, čo je drahý komerčný softvér, tiež má také raňajkové nastavenia, ktoré len berú a zostavujú v nej by sa mali ponáhľať. Naozaj som nemal priateľstvo s ním, projekt bol opitý na podivných chýb v javisku prepojenia (neskôr zistil, že to bola krivka crack).

Druhá prichádza WINAVR GCC. - Výkonný optimalizačný kompilátor. Úplné otvára, cezhraničnú platformu, vo všeobecnosti všetky radosti života. Dokonale sa dokonale integruje v AVR Studio, ktorý vám umožní vykladať hneď, že sakra je pohodlná. Všeobecne som si to vybral.

Tiež CODEVISION AVR C.- Veľmi populárny kompilátor. Stal sa populárnym v súvislosti s jeho jednoduchosťou. Pracovný program Môžete sa dostať do nej za pár minút - majster východiskového kódu je výrazne podporovaný, pečiatka inicializácie všetkých druhov uší. Úprimne, je mi ľúto s podozrením k nemu - nejako som musel rozoberať prog napísanú týmto kompilátorom, nejaký druh myslel, ale nie kód bol získaný. Strašné množstvo zbytočných televíznych televíznych a operácií, ktoré sa nalial do miernych kódov a pomalú rýchlosť. Možno však bola chyba v DNA napísala pôvodný firmvér. Navyše chce peniaze. Nie je toľko ako IAR, ale viditeľný. A v Demozhim nedáva viac ako 2kb kód.
Crack samozrejme je, ale ak ste ukradnú, tak milión, v zmysle IAR :)

Je tu tiež Image Craft AVR C a Mikrok z mikroelektroniky. Ani používať žiadne iné použitie, ale tu SWG. Veľmi orbnutie MikropastalTaven je strašne pohodlné programovacie prostredie a knižnica. Myslím, že mikrok nebude horšie, ale platené.

Ako som povedal, vyberiem WINAVR. Z troch dôvodov: ZADARMO, je integrovaný do AVR Studio a je napísané jednoducho členenie hotového kódu pre všetky príležitosti.

Stiahnite si na inštaláciu WinAVR C a AVR Studio. Potom sa štúdio najprv dal, zhora, zhora, WinAVR valí a otvára sa do štúdia vo forme pluginu. Dôrazne odporúčam inštalovať WinAVR na krátkym spôsobom, niečo ako C: winavr, čím sa vyhnete hromadeniu problémov so spôsobom.

Vytvorenie projektu
Takže štúdio je dodané, SI je upevnená, je čas vyskúšať niečo na program. Začnime s jednoduchým, najjednoduchším. Spustite štúdio, vyberte tam nový projekt, ako kompilátor AVR GCC a zadajte názov projektu.

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

Teraz nebráni nakonfigurovať zobrazenie ciest v štúdiových záložkách. Na to, šikmý na:
Ponuka Nástroje - Možnosti - všeobecné - Filetabs a v rozbaľovacom zozname vyberte iba "iba názov súboru". V opačnom prípade nebude možné pracovať - \u200b\u200bna karte bude úplná cesta súboru a na obrazovke nebude viac ako dve karty.

Projektové nastavenie
Všeobecne platí, že vytvorenie spisu, v ktorom by boli opísané všetky závislosti. A to je pravdepodobne správne. Ale vyrastal som na plne integrovanú IDE uvision. alebo AVR Studio. Tento prístup je hlboko cudzinec. Preto urobím vlastným spôsobom, všetky štúdiá.

Hromadu do tlačidla so zariadením.


Toto sú nastavenia vášho projektu, alebo skôr nastavenie automatickej generácie zariadenia. Na prvej stránke musíte zadať frekvenciu, na ktorej bude váš MK pracovať. Záleží na poistkách bitov, takže sa domnievame, že frekvencia je 8000000gz.
Venujte pozornosť optimalizačným reťazcom. Teraz je tu optimalizácia. Kým odídete, ako je to, potom sa môžete pokúsiť hrať s týmto parametrom. -O0 je vôbec odnímateľná optimalizácia.

Ďalším krokom je konfigurácia ciest. Prvá vec na pridanie adresára vášho projektu je - budete tam dať knižnicu tretej strany. Zoznam sa zobrazí "."

Vytvorte si súbor, môžete ho vidieť v predvolenom priečinku vo vašom projekte, len prejdite cez oči, pozrite si, čo je tam.


To je všetko. Jim všade ok a choďte na zdroj.

Formulácia problému
Prázdny list je tak mávaný na stelesnenie nejakej zložitej myšlienky, pretože banálny blikanie diódy sa nevkladá. Poďme okamžite vziať býk pre rohy a implementovať spojenie s počítačom - to je prvá vec, ktorú robím.

Bude to fungovať takto:
Pod príchodom portu COM sa jednotka (kód 0x31) rozsvieti rozsvieti dichlici a keď príchod nulovej (kód 0x30) zhasne. Okrem toho sa všetko bude vykonávať na prerušení, a pozadie úlohu bude blikať ďalšiu diódu. Jednoducho as zmyslom.

Zbierajte schému
Musíme pripojiť modul USB-usart Converter s mikrokontrolérom USART meničom. Aby to urobil, vezmite jumper z dvoch vedení a dajte kríž do kolíkov kríža. To znamená, že RX regulátor sa pripojí s TX Converter a TX Converter s RX regulátorom.

V dôsledku toho sa to ukáže, že je to takáto schéma:


Spojenie ostatných záverov, výživy, výtoku

Píšeme kód

Ihneď vykonať rezerváciu, ktorú nebudem prehĺbiť špecificky v popise samotného jazyka SI. Na to existuje jednoducho obrovské množstvo materiálu, od klasiky "SI programovacieho jazyka" z K & R a končí rôznymi technikami.

Jedna takáto metóda sa našla vo mne v Honeycomb, kedy som na ňu študoval tento jazyk. Tam je všetko stručné, zrozumiteľné av prípade. Postupne to robím a preskupil na moje stránky.

Naozaj nie je vôbec žiadna kapitola odložená, ale myslím, že to nie je dlho.

Je nepravdepodobné, že by som opísal lepšie, takže z tréningového kurzu, namiesto podrobnej expozície modrých jemností, budem jednoducho dať priame odkazy na určité stránky tejto techniky.

Pridajte knižnice.
Po prvé, pridávame potrebné knižnice a tituly s definíciami. Koniec koncov, SI je univerzálnym jazykom a potrebuje vysvetliť, že pracujeme s AVR, takže zadajte do zdrojového riadku:

1 #Include.

#Include.

Tento súbor je v priečinku WINAVR. A obsahuje popis všetkých registrov a portov regulátora. A tam všetky mazané, s odkazom na špecifický regulátor, ktorý je prenášaný kompilátorom cez urobiť Súbor v parametri MCU. A na základe tejto premennej vo vašom projekte je na tomto regulátore súbor hlavičky s popisom adries všetkých portov a registrov. Ako! Bez nej je tiež možné, ale potom nebudete môcť používať symbolické názvy registrov ako Sreg alebo UDR a musia si zapamätať na adresu každého ako "0xc1", a to je hlava.

Samotný tím #Include.<имя файла> Umožňuje pridať do vášho projektu obsah ľubovoľného textového súboru, napríklad súbor popisujúci funkcie alebo kus iného kódu. A tak, že smernica by mohla nájsť tento súbor, uviedli sme spôsoby, ako na náš projekt (WinAVr Directory je už učebnený).

Hlavná funkcia.
Program v jazyku SI pozostáva z funkcií. Môžu byť vložené a priniesli navzájom v akomkoľvek poradí a rôznymi spôsobmi. Každá funkcia má tri požadované parametre:

  • Napríklad návratnosť hriech (x) Vráti hodnotu x sínusu. Ako v matematike, krátke.
  • Prenášané parametre, rovnaké X.
  • Funkcia tela.

Všetky prenášané hodnoty a vrátené musia byť akýkoľvek typ, v závislosti od údajov.

Akýkoľvek program na C musí obsahovať funkciu hlavný. Ako bod vstupu do hlavného programu, inak je NIFIGA NOT SI :). Podľa prítomnosti hlavného v zdroji niekoho iného z milióna súborov, možno pochopiť, že je to hlava programu, kde sa všetko začína. Opýtajte sa:

1 2 3 4 5 Int hlavné (prázdnota) (návrat 0;)

int hlavné (prázdnota) (návrat 0;)

Všetko, prvý najjednoduchší program je napísaný, nezáleží na tom, že nerobí nič, práve sme začali.

Analyzujeme, čo sme urobili.
int. Tento typ údajov, ktoré hlavná funkcia vráti.

Samozrejme, v mikrokontroléri hlavný. Nemôžem v zásade vrátiť nič a teoreticky by mala byť void Main (Void)GCC je však spočiatku nabrúsený na PC a program môže po dokončení vrátiť hodnotu operačného systému. Preto GCC void Main (Void) výstraha.

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

neplatný. Tento typ údajov, ktoré vysielame do funkcie v tomto prípade hlavný. Tiež nemôže zobrať nič zvonku, básnik neplatný. - Dummy. Zástrčka sa aplikuje, keď nie je potrebné prenášať nič alebo návrat.

Tieto sú { } Obrazové zátvorky sú softvérový blok, v tomto prípade funkcia tela hlavný., Bude kód.

návrat. - Toto je návratová hodnota, ktorú hlavná funkcia dá po dokončení, pretože sme INT, to znamená, že číslo, ktoré musíme vrátiť číslo. Hoci to stále nedáva zmysel, pretože Na mikrokontroléri z hlavného, \u200b\u200bmy sme okrem nikde. Vrátim nulu. Pre nonfig. A kompilátor je zvyčajne šikovný a kód nevytvára kód.
Hoci, ak ste zvrhli, potom hlavný. Môžete prejsť na MC - napríklad, spadnúť do sekcie zavádzača a splniť ho, ale je tu už nízkoúrovňový firmvérový výber, na úpravu prechodných adries. Nižšie uvidíte a pochopíte, ako to urobiť. Za čo? Toto je ďalšia otázka, v 99.999% prípadov, že tento Nafi IT nie je potrebný :)

Ďalej. Pridajte premennú, nie je potrebné pre nás obzvlášť potrebné a nie je potrebné zaviesť premenné, ale učenie sa. Ak sa premenné pridajú do tela funkcie - potom sú lokálne a existujú len v tejto funkcii. Keď opustíte funkciu, tieto premenné sú odstránené a pamäť RAM je daná dôležitejším potrebám. .

1 2 3 4 5 6 Int hlavné (neplatné) (nepodpísané char i; návrat 0;)

int hlavné (neplatné) (nepodpísané char i; návrat 0;)

nepodpísaný Nie je uns výhodné. Faktom je, že v binárnom reprezentácii máme seniorový bit pre znamenie, čo znamená v jednom bajtovi (char) číslo + 127 / -128, ale ak znamenie vyhodí, sa dostane už od 0 do 255. Zvyčajne je označenie nepotrebné. Tak nepodpísaný.
i. - Toto je len názov premennej. Nikdy viac.

Teraz musíte inicializovať prístavy a UART.. Samozrejme, môžete si vziať a pripojiť knižnicu a zavolať nejaký druh Uartinitu (9600); Ale potom neviete, čo sa stalo v skutočnosti.

Robíme to:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 Int hlavné (neplatné) (nepodpísané char I; #define XTAL 8000000L #DEFINE BAUDRATE 9600L #Define Bauddivider (Xtal / (16 * Baudrate) -1) #Define hi (x) ((x) \u003e\u003e 8) #define LO (X) ((x) & 0xff) UBRLL \u003d LO (BAUDDIVER); UBRRH \u003d HI (BAUDDIVER); Ucsra \u003d 0; UCSRB \u003d 1.<< RXEN| 1 << TXEN| 1 << RXCIE| 0 << TXCIE; UCSRC = 1 << URSEL| 1 << UCSZ0| 1 << UCSZ1; }

int hlavné (neplatné) (nepodpísané char I; #define XTAL 8000000L #DEFINE BAUDRATE 9600L #DEFINE BAUDDIVER (XTAL / (16 * Baudrate) -1) #Define HI (X) ((X) \u003e\u003e 8) #Define LO ( x) ((x) & 0xff) UBRL \u003d LO (BAUDDIVER); UBRRH \u003d HI (BAUDDIVER); UCSRA \u003d 0; UCSRB \u003d 1<

Desivé? V skutočnosti je skutočný kód len päť posledných riadkov. Všetko, to #Define Toto je makro-jazyk predprocesor. Takmer rovnaké topy ako v assembler, ale syntax je trochu odlišný.

Uľahčia vaše rutinné operácie na výpočet potrebných koeficientov. V prvom riadku hovoríme, že namiesto toho XTAL Môžete bezpečne nahradiť 80 000 000 a L.- Špecifikácia typu, dlhé centrum sú frekvencia hodinových procesorov. Rovnaký bAUDRATE. - Frekvencia údajov UART.

bAUDDIVER. Namiesto toho bude expresia vypočítaná expresia vypočítaná vzorcom dvoch predchádzajúcich.
Dobre a Lo. a AHOJ Z tohto výsledku vezme mladšie a seniorské bajty, pretože V jednom bajtovi to jasne nemusí zapadnúť. V AHOJ Shift ICSE sa vykonáva (vstupný parameter makro) osemkrát vpravo vpravo, v dôsledku toho zostane len najstarší bajt. A B. Lo. Robíme vsádzku a s číslom 00FF v dôsledku toho zostane len najmladší bajt.

Takže všetko, čo sa vykonáva ako #Define Môžete bezpečne vyhodiť a požadované čísla sa počítajú na kalkulačke a okamžite ich zadajte do UBBRL \u003d riadky .... a UBBRH \u003d ... ..

Môcť. Ale! To urobiť Je kategoricky nemožné!

Bude tiež fungovať na prácu, ale budete mať tzv. magické čísla - Hodnoty nezrozumiteľne, odkiaľ nie je jasné, prečo a ak si takýto projekt darujete za pár rokov, potom je ťažké pochopiť, že to bude zatraceně. Áno, a teraz, chcete zmeniť rýchlosť, alebo zmeniť frekvenciu kremenca a všetko bude musieť prepočítať, a tak zmenil pár Tsiferok v kóde a všetko sám. Všeobecne platí, že ak nechcete vychutnať BydLokoder, potom urobte kód, aby bolo ľahké čítať, bolo to pochopiteľné a ľahko modifikované.

Potom je všetko jednoduché:
Všetky tieto "Ubrl a CO" sú registre konfigurácie vysielača, s ktorým komunikujeme so svetom. A teraz sme priradili potrebné hodnoty konfiguráciou požadovanej rýchlosti a pravého režimu.

Zobrazenie nahrávania 1< Znamená nasledovné: Take 1 a dať ho na mieste RXEN. Za behu. RXEN. Toto je 4. bit registra UCSRB.tak 1< tvorí binárne číslo 00010000, TXEN. - Toto je 3. bit a 1< DAST 00001000. Single "|" Je to pokazené AleboSO 00010000 | 00001000 \u003d 00011000. Zostávajúce potrebné konfiguračné bity sú vystavené rovnakým spôsobom a pridané do všeobecnej partii. V dôsledku toho je číslo montáže napísané v UCSRB. Podrobnosti sú zapísané v databáze na MC v sekcii USART. Technické detaily sa teda nerozptýlite.

Pripravený, je čas vidieť, čo sa stalo. Pips na kompilácii a spustení emulácie (CTRL + F7).

Ladenie
Všetky druhy stĺpcov prebiehajú, štúdio sa zmenilo a žltá šípka sa objavila v blízkosti hlavnej funkcie. Toto je miesto, kde je procesor aktuálny prúd, a simulácia na pauze.

Faktom je, že pôvodne, v skutočnosti, že stál na riadku UBRRL \u003d LO (BAUDDIVER); Koniec koncov, skutočnosť, že máme v definovaní, nie je kód, ale jednoducho predbežné výpočty, potom simulátor trochu upevnil. Ale teraz si uvedomil, prvá inštrukcia je dokončená a ak stúpate na strom I / O pohľad, V sekcii USART a vyhrajte tam na UBBRL Byte, uvidíte, že už tam je! 0x33.

Urobiť ďalší krok. Pri pohľade na to, ako sa obsah iného registra zmení. Tak ich poistite, venujte pozornosť tomu, že všetky uvedené bity sú vystavené, ako som povedal, a je nastavený na čas na celý bajt. Ďalší návrat nefunguje, program je u konca.

Otvorenie
Teraz resetujte simuláciu v nule. Kliknite tam Reset (SHIFT + F5). Otvorený demontáž Zoznam, teraz uvidíte, čo sa deje v regulátore v skutočnosti. Zobraziť -\u003e DisasseMbler. A nie yyaaaa !!! Assembler !!! Uzhos !!! Ale musíte. Tak, že neskôr, keď sa niečo pokazí, sa neodvážil do kódu a nepožiadal o problémoch na fórach, a okamžite vyliezli do straty a sledoval, kde máte stánok. Tam nie je nič hrozné.

Po prvé, bude to vrchol 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 JMP 0x00000034 skok 00000006: 940C0034 JMP 0x00000034 skok 00000008: 940C0034 JMP 0x00000034 skok + 0000000: 940C0034 JMP 0x00000034 skok + 0000000C: 940C0034 JMP 0x00000034 skok + 0000000: 940C0034 JMP 0x00000034 skok 00000010: 940C0034 JMP 0x00000034 skok 00000012: 940C0034 JMP 0x00000034 skok 00000014: 940C0034 JMP 0x00000034 skok 00000016: 940C0034 JMP 0x00000034 skok 00000018: 940C0034 JMP 0x00000034 skok + 0000001: 940C0034 JMP 0x00000034 skok + 0000001C : 940C0034 JMP 0x00000034 skok + 0000001: 940C0034 JMP 0x00000034 skok 00000020: 940C0034 JMP 0x00000034 skok 00000022: 940C0034 JMP 0x00000034 skok 00000024: 940C0034 JMP 0x00000034 skok 00000026: 940C0034 JMP 0x00000034 skok 00000028: 940C0034 JMP 0x00000034 skok

00000000: 940C002A JMP 0x0000002A skok 00000002: 940C0034 JMP 0x00000034 skok 00000004: 940C0034 JMP 0x00000034 skok 00000006: 940C0034 JMP 0x00000034 skok 00000008: 940C0034 JMP 0x00000034 skok + 0000000: 940C0034 JMP 0x00000034 skok + 0000000C: 940C0034 JMP 0x00000034 skok + 0000000 : 940C0034 JMP 0x00000034 skok 00000010: 940C0034 JMP 0x00000034 skok 00000012: 940C0034 JMP 0x00000034 skok 00000014: 940C0034 JMP 0x00000034 skok 00000016: 940C0034 JMP 0x00000034 skok 00000018: 940C0034 JMP 0x00000034 skok + 0000001: 940C0034 JMP 0x00000034 skok + 0000001C: 940C0034 JMP 0x00000034 skok + 0000001: 940C0034 JMP 0x00000034 skok 00000020: 940C0034 JMP 0x00000034 skok 00000022: 940C0034 JMP 0x00000034 skok 00000024: 940C0034 JMP 0x00000034 skok 00000026: 940C0034 JMP 0x00000034 skok 00000028: 940C0034 JMP 0x00000034 skok

Toto je tabuľka prerušenia vektorov. Vrátime sa k nemu, zatiaľ čo vidíme a pamätajte si, že je. Prvý stĺpec je blesková adresa blesku, v ktorej je príkaz ležiaci, druhý príkazový kód tretieho mnemonického tímu, rovnaký nástroj assembler, tretí operand tímu. Automatický komentár.
Takže, ak sa pozriete, potom existujú tuhé prechody. A príkazový kód JMP je štyri bajt, obsahuje prechodovú adresu zaznamenanú dozadu - mladším bajtom pre mladšiu adresu a kód príkazového príkazu 940c

0000002b: BE1F OUT 0X3F, R1 OUT DO I / O MIESTO

Nahrávanie tejto nulovej na 0x3f adresu Ak sa zobrazí stĺpec I / O Zobraziť, potom uvidíte, že adresa 0x3f je adresa registra registra Sreg - Flag Register. Tí. SREG resetujeme, aby sme spustili program pri nulových podmienkach.

1 2 3 4 + 0000002C: E5CF LDI R28.0X5F LOAD okamžité + 0000002d: E0D4 LDI R29.0X04 LOAD OKAMŽITÉ + 0000002E: BFDE OUT 0x3E, R29 OUT I / O Umiestnenie + 0000002F: BFCD OUT 0x3D, R28 OUT na I / O Umiestnenie

0000002C: E5CF LDI R28.0X5F LOAD Okamžitá + 0000002d: E0D4 LDI R29.0x04 LOAD OKAMŽITOSTI + 0000002E: BFDE OUT 0x3E, R29 OUT na I / O Umiestnenie + 0000002F: BFCD OUT 0x3D, R28 OUT na I / O Umiestnenie

Toto je nakladanie ukazovateľa zásobníka. Priamo doprava v registroch I / O nemôže, len prostredníctvom stredného registra. Preto prvý LDI v medziprodukte a potom odtiaľ von v I / O. Budem vám tiež povedať viac o zásobníku. Medzitým je známe, že toto je taká dynamická pamäťová oblasť, visí na konci RAM a udržuje adresy a medziprodukty. Teraz sme poukázali na to, kde budeme mať stoh.

00000032: 940c0041 JMP 0x00000041 Skok

Skočiť do SAAAAEEEE END PROGRAMU A TAK, KTORÉ SA MÁME PRIHLÁSIŤ ZÁKAZNÍKAŤ PRIPOJENÝCH PRIPOJENÍM SAMOSTATOČNÝMI:

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

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

To je v prípade nepredvídaných okolností, ako je výstup z hlavnej funkcie. Z takejto slučky môže byť regulátor zobrazený buď s hardvérovým resetom, alebo to je pravdepodobné, vypúšťanie z psie strážcovia - strážny psov. No, alebo, ako som povedal vyššie, opravte tieto miesta v hexentnom editore a smerovanie, kde máme dušu. Venujte pozornosť tomu, že existujú dva typy prechodov JMP a RJMP, prvá je priamy prechod na adresu. Trvá štyri bajty a môže vykonať priamy prechod v oblasti pamäte. Druhý typ prechodu - RJMP - relatívny. Jeho tím má dva bajty, ale prechod to robí z aktuálnej pozície (adresy) o 1024 krokov dopredu alebo dozadu. A vo svojich parametroch je uvedená offset z aktuálneho bodu. Používa častejšie, pretože Trvá dvakrát menej miesta v flush, a dlhé faktory sú zriedkavo potrebné.

1 +000034: 940c0000 JMP 0x00000000 skok

00000034: 940c0000 JMP 0x00000000 Skok

A toto je skok na samom začiatku kódu. Reštartujte druh. Môžete skontrolovať, všetky vektory tu skočia. Z tohto výstupu - ak vám umožní vám umožniť prerušenia (sú zakázané predvolene) a budete prerušení, ale neexistuje žiadny obslužný program, potom tam bude resetovací program - program vyhodí program na samom začiatku.

Hlavná funkcia. Všetko je podobné, môžete dokonca opísať. Pri pohľade len na registre už vypočítal číslo. Preprocessor kompilátor Taxislužby !!! Takže žiadne "magické" čísla!

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

00000036: E383 LDI R24.0X33 LOAD INDEKTION +000037: B989 OUT 0X09, R24 OUT DO I / O MIESTO 15: UBRRH \u003d HI (BAUDDIVER); +000038: BC10 OUT 0x20, R1 OUT na I / O Umiestnenie 16: UCSRA \u003d 0; +000039: B81B OUT 0x0B, R1 OUT na I / O Umiestnenie 17: UCSRB \u003d 1<

A tu je jamb:

1 2 3 + 0000003E: E080 LDI R24.0X00 LOAD Okamžitá + 0000003F: E090 LDI R25.0X00 LOAD Okamžitá +0000000040: 9508 Ret Subroutine Return

0000003E: E080 LDI R24.0X00 LOAD Okamžitá + 0000003F: E090 LDI R25.0X00 LOAD Okamžitá +00000040: 9508 Ret Subroutine Return

Pýta sa, prečo tento kompilátor dodáva taký topmaster? A toto nie je nič iné ako návrat 0, potom sme identifikovali ako Int hlavné (prázdnota). Takže som vyhral viac ako štyri bajty nechápu, čo :) a ak urobíte neplatné hlavné (void), bude to len ret, ale Verning bude. Čo hovoria, že nevrátime nič k hlavnej funkcii. Všeobecne platí, že to urobíte :)

Komplikované? Zdá sa, že to nie je. Vystúpim krok za krokom výkonu v režime DisasseMbler a strmery, pretože procesor vykonáva individuálne pokyny, ktoré sa deje s registrmi. Ako sa pohybovať na príkazy a konečnú slučku.

Pokračovanie nasleduje za pár dní ...

Offtop:
Alexej78. Gang A Upevňovací plugger pre Firefox uľahčujúce navigáciu na mojej stránke a fóre.
Diskusia a prevzatie

Pre programovanie AVR mikrokontroléry, existuje veľa rozvojových nástrojov, avšak najobľúbenejšie, nepochybne, by mal byť uznaný balík AVR Studio. . Existuje niekoľko dôvodov pre takúto popularitu - toto je bezplatný balík vyvinutý spoločnosťou Móda , Kombinuje textový editor, assembler a simulátor. Balík AVR Studio sa používa aj v spojení s fixáciou hardvéru. V navrhovanom článku sa príklady zvažujú techniky na prácu s balíkom, ktorý pomôže počiatočným programovateľom pochopiť interakciu jednotlivých zložiek AVR Studio.

V ďalšej časti článku bude opísané o ladení v prostredí AVR Studio programov napísaných v SI.

Balík AVR Studio má históriu s pevným vývojom, ktorá sa odráža v počte existujúcich verzií. Koncom roka 2003 bola verzia 4.08 vydaná, ktorá má niekoľko užitočných doplnkov, a na začiatku roku 2004 bola uvoľnená aktualizácia (Service Pack 1), pridaním podpory pre regulátory AVR tretej generácie ATTHA48 rodina. Výroba čipov tejto rodiny je naplánovaná na druhú polovicu roka 2004.

Distribúcia balíkov a balík Service Pack si môžete stiahnuť z www.atmel.com alebo získať CD s touto distribúciou od ruského distribútora ATTROLUTION.

Práca balíka AVR Studio je vhodne preskúmaná na akomkoľvek konkrétnom programe. Ako názor, zvážime vytvorenie projektu pre najjednoduchší program, ktorý bude na obrášok na svetlo dve LED diódy. Pre definitívu si vezmite mikroobvod ATMEGA128. a pripojte dve LED diódy do záverov 31 a 32 (tieto sú bity 6 a 7 prístavu D Chip ATMEGA128). AVR Controllers Majú výkonné výstupné kaskády, typický prúd každého výstupu je 20 mA, maximálny výstupný prúd je 40 mA, a to sa vzťahuje na prúdenie aj prúdenie prúdu. V našom príklade sú LED diódy pripojené k anódam k závery regulátora a katódy prostredníctvom ochladzujúcich odporov sú spojené so zemou. To znamená, že LED dióda je zapálená privádzaním "1" na príslušný výstup portu. Schematický diagram je znázornený na obrázku. Diagram tiež zobrazuje dve tlačidlá, ktoré sa majú používať v jednom z programov.

Tu je vhodné urobiť malú odbočku o výbere typu čipu pre najjednoduchší príklad. V skutočnosti, na prvý pohľad, môže sa zdať zvláštne, prečo potrebujete taký silný kryštál v 64-pinovom puzdre, kde je dosť 8-pin chip Attiny12. ? V tomto prístupe je však logika logika. Je známe, že v srdci takmer každého AVR regulátora leží rovnaké jadro. Podľa a veľké, regulátory sa líšia v pamäti, počet I / O portov a súbor periférnych modulov. Vlastnosti každého špecifického regulátora - viazania logického názvu / výstupu registrujú na fyzické adresy, adresy prerušenia vektorov, identifikáciu bitov portov atď. Popisuje v súboroch s Extension.inc, ktoré sú zahrnuté v AVR Studio Balenie. V dôsledku toho, používanie špecifického typu kryštálu, môžete neskúšť o sebe ako sám a pre akýkoľvek mladší kryštál. Ďalej, ak používate najviac senior Crystal ako ladenie, dnes je to ATMEGA128, môžete vykladať program pre takmer akýkoľvek AVR regulátor, stačí použiť hardvérové \u200b\u200bzdroje, ktoré chýbajú z cieľového mikrokontroléra. Tak napríklad môžete neskúšť, ktorý sa má vykonať na ATMEGA128 ATTINY13 . V tomto prípade zostane zdrojový kód prakticky rovnaký, len názov pripojeného súboru s 128def.inc na TN13Def.inc sa zmení. Tento prístup má tiež svoje výhody. Napríklad "Extra" I / O porty môžu byť použité na pripojenie. LCD indikátor ktoré môžete stiahnuť informácie o ladeniach. Alebo použite intrahemem emulátor, ktorý sa pripája k JTAG portu ATMEGA128 čipu (regulátor Attiny13 nemá tento port). Je teda možné použiť jednu lanovku, na ktorej je nainštalovaný "senior" AVR Controller, aby sa vyvinuli všetky novo vyvinuté systémy, prirodzene na základe mikrokontrolérov AVR. Jeden z týchto dosiek sa nazýva As-Megam. Bolo to, že sa použilo na vytvorenie príkladov programov uvedených v článku. Ide o univerzálny jednopodlažný regulátor na základe čipu ATMEGA128, ktorý obsahuje externé RAM, dva porty RS-232. , Port pre pripojenie LCD indikátora, Programátor IntrahMNOPE a emulátora Na JTAG ICE . Doska má tiež miesto na rozdelenie flash-rom série AT45 V puzdrá TSOP32 / 40/48 a dvojkanálový seriál DAC AD5302 / AD5312 / AD5322 . Teraz, po vysvetlení príčin používania AVR Monster zapáliť pár swatodiodes, môžete ísť ďalej.

Pri programovaní v prostredí AVR Studio musíte vykonať štandardnú postupnosť akcií:

  • kompilácia
  • Vytvorenie projektu začína výberom projektu New Project Menu. V okne "Vytvoriť nový projekt", ktorý sa otvorí, musíte zadať názov projektu (v našom prípade - vzorka1) a názov inicializačného súboru. Po stlačení tlačidla "NEXT" sa otvorí správa Select ladenie a okno zariadenia, kde je zvolená platforma debug (simulátor alebo emulátor) a typ mikrokontroléra.

    Môžete si vybrať jednu z ponúkovaných intraHEMNY Emulátorov, poznamenávame, že každý emulátor má svoj vlastný zoznam podporovaných mikroobvodov. Pre posudzovanie príkladu si vyberieme ako ladenie AVR Simulátor a čip ATMEGA128. Po stlačení tlačidla "Dokončiť" sa na náš výstup objaví pracovné okná balíka AVR Studio, zatiaľ čo vyprázdnite. Nasleduje pravé okno, ktoré chcete umiestniť zdrojový text programu. To možno vykonať dvoma spôsobmi, alebo vytočiť celý text priamo v okne editora, alebo si stiahnite existujúci súbor. Nižšie je úplný text najjednoduchšieho programu s pripomienkami.

    ; \\ T Príklad "riadenie LED"; Písomné pre As-Megam Ladenie Rada; Frekvencia generátora parametrov je 7,37 MHz; LED diódy sú pripojené k záverom PD6 a PD7 a cez odpory - na zdieľanom drôte. ; \\ T Pripojenie kódu ATMEGA128 I / O Podrobnosti "M128Def.inc"; Začiatok začiatočného programu:; Prvá prevádzka - Inicializácia zásobníka; Ak sa to neuskutoční, potom zavolajte podprogram alebo prerušenie; sa nevráti kontrolu; Ukazovateľ na konci stohu je nastavený na poslednú adresu vnútornej RAM - RAMEND LDI R16, LOW (RAMEND) OUTL, R16 LDI R16, HIGH (RAMEND) OUT SPH, R16; S cieľom kontrolovať LED diódy pripojené k záverom PD6 a PD7; Tieto závery je potrebné vyhlásiť. ; \\ T Na to, napíšte "1" na zodpovedajúce bity registra DDRD (DATADIRECTION) LDI R16 (1)<<6) | (1<<7) out DDRD,r16 ; основной цикл программы loop: ldi r16,(1<<6) ; светится один светодиод out PORTD,r16 rcall delay ; задержка ldi r16,(1<<7) ; светится второй светодиод out PORTD,r16 rcall delay ; задержка rjmp loop ; повторение цикла; процедура задержки; примерно полсекунды при частоте 7,37 МГц; три пустых вложенных цикла соответственно delay: ldi r16,30 ; 30 delay1: ldi r17,200 ; 200 delay2: ldi r18,200 ; и еще 200 итераций delay3: dec r18 brne delay3 dec r17 brne delay2 dec r16 brne delay1 ret ; возврат в главную программу

    Projekt môže pozostávať z niekoľkých súborov, zatiaľ čo jeden súbor je priradený hlavného. Všetky operácie sú vhodné na výrobu pomocou kontextového tlačidla myši. Po pripojení zdrojového súboru majú systém Windows nasledujúci formulár.

    Zostavovanie projektu je vykonaná príkazom projektu, alebo stlačením tlačidla F7. Proces kompilácie sa zobrazí v okne "Výstup". Toto okno môže byť "vytiahnutie" príkazu zobrazenia.

    V zásade sme už dostali výstupný súbor vo formáte.hex, ktorý už môže byť načítaný do mikroobvodu a sledovať správcov LED diódy. Účelom článku je však ukázať celý cyklus práce v prostredí AVR Studio, takže ideme do etapy ladenia. TOTO JE TOTO DEKONÁLNY TEAM PREPRAVUJÚCICH.

    Teraz nastaviť frekvenciu frekvencie Quartz 7,3728 MHz v okne "Možnosti simulátora", aby ste presne merali čas vykonávania programu.

    Zostávajúce možnosti by sa mali ponechať nezmenené. Teraz môžete vykonať program v kroku krok za krokom pomocou myši alebo tlačidla F11.

    AVR Studio Balíček obsahuje výkonné nástroje na prezeranie a úpravu stavu interných registrov a I / O porty ladestného mikrokontroléra, ako aj čas, vykonanie programu. Prístup k nim sa vykonáva cez okno "I / O".

    V skutočnosti, množstvo informácií dostupných prostredníctvom AVR Studio Balenie Balenie Windows je tak veľký, že je potrebné použiť počítač v konfigurácii dvoch monitorov, aby ste získali maximálny komfort.

    Ak chcete vynechať náš príklad, na prístup k portom D BITS, musíte odhaliť I / O ATMEGA128 String a potom PORTD LINE. Teraz sú viditeľné všetky tri registre tohto prístavu, portd, DDDRD a PIND. Ak chcete zobraziť polia hodnoty, bitov a adresy, budete musieť rozšíriť pravú hranicu okna, potením okna so zdrojovým textom programu.

    Teraz, prejdením programu v kroku-za krokom, môžete vidieť zmenu súčasných stavov týchto registrov v poli BITS. Je možné rýchlo zmeniť stav akejkoľvek bitky registrov portov, čo je možné vykonať buď písaním nového kódu v poli Value, alebo priamo kliknutím na požadovaný bit registra.

    Pre nezávislé cvičenia sa navrhuje nasledujúci program, ktorý sa líši od predchádzajúceho, že zapaľovanie LED diódy je ovládané dvoma tlačidlami.

    ; \\ T Príklad "Ovládanie LED z tlačidiel"; Písomné pre As-Megam Ladenie Rada; LED diódy sú pripojené k záverom PD6 a PD7 a cez odpory - na zdieľanom drôte. ; \\ T Tlačidlá - na PE4 a PE5 .Include "M128Def.inc"; Začnite hlavný program:; Stack Inicializácia LDI R16, LOW (RAMEND) OUTL, R16 LDI R16, HIGH (RAMEND) OUT SPH, R16; Inicializácia LED LED R16 (1)<<6) | (1<<7) out DDRD,r16 ; инициализация выводов, к которым подключены кнопки (на вход) ; внутренние подтягивающие резисторы подключены; для этого в PORTE нужно установить соответствующие биты в единицы ldi r16,(1<<4) | (1<<5) out PORTE,r16 ; а в DDRE - в нули ldi r16,0 out DDRE,r16 ; бесконечный цикл forever: in r16,PINE ; теперь в r16 находится текущее "состояние" кнопок com r16 ; кнопка "нажимается" нулем, поэтому инвертируем регистр lsl r16 ; переносим биты 4,5 в позиции 6,7 lsl r16 ; и обновляем "показания" светодиодов andi r16,(1<<6) | (1<<7) out PORTD,r16 rjmp forever ; цикл выполняется бесконечно

    Na príklade najjednoduchších programov sa teda zobrazujú niektoré funkcie balíka AVR Studio. Je potrebné pochopiť, že je to len prvý známy, ktorý vám umožní rýchlo sa používať so základnými príkazmi balíka. Medzitým sú schopnosti posudzovaného balíka oveľa širšie. Napríklad, tu môžete neskúšťové programy napísané v jazykoch na vysokej úrovni. Najmä C-kompilátor predstaviteľa spoločnosti používa AVR Studio Debugger "ako natívne". Ak to chcete urobiť, pri zostavovaní zdrojového kódu musíte nastaviť možnosť výstupného súboru generácie vo formáte kompatibilnom s AVR Studio. Zároveň je možné ladiť v zdrojových kódoch.

    Ďalšou z mnohých charakteristík Balíka AVR Studio je schopnosť pripojiť externé programy. Aby ste sa uistili, že na vykonanie niekoľkých jednoduchých operácií je potrebný programátor AS2 inšpekčný.

    V ponuke Nástroje hlavného okna AVR Studio musíte zvoliť prispôsobenie;

    V okne Prispôsobenie vyberte položku Nástroje;

    Dvakrát kliknete na tlačidlo myši alebo stlačením vložky na klávesnici, pridajte do zoznamu nový príkaz a zavolajte ho "AS2 programátor";

    Zadajte cestu k spustiteľnému súboru programátora zadaním priamo do vstupného poľa "Príkaz", alebo kliknutím na tlačidlo "... ..." vpravo od tohto poľa;

    Menu Nástroje sa zobrazí "programátor AS2".

    AVR Studio 4.08 znamená, že umožňuje pripojiť pomocné programy - pluginy. Prvý plugin pre AVR Studio je program grafického editora, ktorý zjednodušuje inicializačný proces indikátora LCD, ktorý môže priamo spravovať AVR Controller ATMEGA169. Maximálna logická veľkosť indikátora LCD je 100 segmentov, každý prvok indikátora je vyrobený v súlade s bitom v špeciálnom registri regulátora. Ak chcete zjednodušiť postupný záväzný postup pre niektoré bity pre každý segment, môžete použiť vyššie uvedený program.

    Pri návšteve "vlajky AVR" - Nórska kancelária ATMEL, jeden z autorov článku hovoril s Lars Quener, vedúcim programátorovej skupiny, ktorá vytvorila a podporuje balík AVR Studio. Táto osoba, klasický programátor, s bradou, vo sveta a tkané v ponožky sandále, hovoril o vyhliadkach na rozvoj balíka. Na nasledujúcej verzii (4.09) bude rozhranie povolené pre nový intrahemna emulátor - jtagice MKII (to je tiež nazývaný na jtagice2), ktorý v druhej polovici roka nahradí na jtagiciach. Tento emulátor má dve základné rozdiely. Na jednej strane podporovaná podpora pre nové jednorazové ladenie rozhranie pre mladších AVR regulátorov, Debugwire. Toto rozhranie je zaujímavé, pretože nezaberá ďalšie závery mikrokontroléra pre svoju prácu, pretože používa na výmenu výstupu resetovacieho mikrokontroléra! Na druhej strane (porozumieť tomuto expresiu doslova), na adrese Jtagice2 sa objaví, nakoniec, rozhranie USB komunikovať s počítačom.

    Literatúra

    1. AVR Technické školenia Technické seminárne materiály. Atmel. Nórsko. Deptber 2003.
    2. Nikolay Korolev, Dmitry Korolev AVR-mikrokontroléry druhej generácie: vývojárske médium. // Komponenty a technológie, 2003 č. 7
    3. AVR-mikrokontroléry druhej generácie: Nové hardvérové \u200b\u200bschopnosti // Komponenty a technológie. 2003. Č. 4.
    4. Nikolay Korolev, Dmitry Korolev. AVR mikrokontroléry: veľké v malých. // SHARTERY ", 2001, №5
    5. Nikolay Korolev, Dmitry Korolev. AVR Microcontrollers: Software // Komponenty a technológie, 2000. Č. 4.
    6. Nikolay Korolev. AVR: Developer Hardware // Komponenty a technológie, 1999 № 1
    7. Nikolay Korolev. Atmel RISC-Microcontrollers // Chip-Nezvyky 1998, №2
    8. NIKOLAY KOROLEV, DMITRY KOROLEV AVR: NOVÉ 8-bitové RISC-mikrokontroléry spoločnosti Atmel // Mikroprocesor Review, 1998, №1

    Ihneď sa okamžite vytiahol, aby ste poskytli radu o voľbe programovacieho prostredia pre regulátory AVR. Len sa hádzať do mňa tenisky. Som trochu trochu

    Jazyky Programovanie pre mikrokontroléry veľa. Programovacie médiá tiež nestačí a porovnávajte s nimi nesprávne. Neexistujú žiadne lepšie programovacie jazyky. Takže musíte vybrať najvhodnejší jazyk pre vás a programovacie prostredie.

    Ak ste v súčasnosti, stojte pred výberom, na čo začať pracovať, tu je niekoľko odporúčaní.

    Bývalý programovací zážitok. Nezanedbávajte bývalé skúsenosti v programovaní. Aj keď to bol Baisik. Aj keď to bol dlhý čas v škole. Programovanie ako jazda na bicykli - stačí začať a rýchlo zapamätať si všetko zabudnuté. Začnite s Beysika - Neskôr to bude jednoduchšie vybrať niečo vhodnejšie pre vaše účely.

    Pomôcť životnému prostrediu.Píšte vaši priatelia na Pascal? Pre vás, otázka je vyriešená - písať na Pascal! Vždy budete pomáhať s Radou, knižnice budú hádzané do knižníc, poskytnú pripravené projekty. Všeobecne platí, že šťastný bude prijatý do ich komunity. Ak urobíte naopak, dostanete opačný výsledok. Priatelia Sassers Bavte vás, ktorí sa rozhodli študovať assembler. Nečakajte na pomoc.

    Dobrá AVR programovacia kniha Pomôže to veľmi dobre. Bohužiaľ, existuje len veľmi málo z nich. Ak máte vo svojich rukách knihu, a myslíte si, že všetko je v ňom veľmi k dispozícii. Neodporúčam učiť sa e-knihy, ako posledná možnosť, tlač. Veľmi nepohodlné prepínanie medzi prostredím a textom súboru súboru. Oveľa príjemnejšie čítanie knihy okamžite vyskúšať bez toho, aby ste boli rozptyľovaní prepínaním, navyše môžete urobiť značku na poliach, napíšte nápady, ktoré vznikli.

    Programovacie médium jednoduchšie. Ak existuje výber niekoľkých programov vášho jazykového programovania - nepochybujte, vyberte ten, ktorý je jednoduchší. Nech je to menej funkčné. Nechajte ho kompilovať strašidelný nafúknutý kód. Hlavnou vecou je len začať pracovať. Potom, čo ste štíhli v jednoduchom prostredí, budete ľahko ísť do pokročilejšieho a "pravého" prostredia. A nepočúvajte tých, ktorí hovoria, že stratíte viac času - sú nesprávne. Žiaci juniorských tried nie sú požiadaní, aby si prečítali "vojnu a mier" im uľahčujú knihy - s obrázkami.

    Knižnice. Prítomnosť knižníc je kontroverzná, aby sa učil jazyk. Samozrejme, neskôr, budú výrazne uľahčiť život, ale na prvých "čiernych boxoch" sú nepochopiteľné a nie veľmi pomáhajú pochopiť jazyk. Na druhej strane, to uľahčuje čítanie programu a umožniť nováčik, nie zvlášť namáhať, vybudovať komplexné programy. Takže ich prítomnosť nie je obzvlášť nudná. Aspoň najprv.

    Efektívny kód. Výber programového prostredia na štúdium programovania len tým, aký účinný kód kompilácie je zlý nápad. Vy ste sa hlavne pohodlne začať učiť - že desatina je "na výstupe". Samozrejme, môžete na ňom neskôr pracovať.

    Vizard.Akékoľvek zariadenie na palube kryštálu je potrebné nakonfigurovať pomocou portov. Postup je dosť silný a sú potrebné dátové dátové listy. Okrem toho existujú nuansy, v ktorých nováčik nie je len dať. Preto je v médiu veľmi žiaduce pre prítomnosť vizardov. Automatické úpravy sú automatické SPI, I2C, USART atď. Čím viac zariadení sú podporované, tým lepšie. Vystavujte potrebné periférne parametre a samotný víťaz generuje kód, ktorý poskytne špecifikované parametre. Veľmi zjednodušuje život.


    Všeobecné odporúčania Takéto - programovanie v počiatočnom štádiu by malo byť čo najjednoduchšie (aj keď primitívne). Programovacie prostredie by sa malo ľahko učiť (ako potrebujete, spustiť, naučiť sa programovanie a nestrácajte čas na vyzdvihnutie v nastaveniach). Odporúča sa Russiho. Tiež nebráni ruskej príručke a príklady programov. Je žiaduca možnosť firmvéru kryštálu z média. Ďalej, keď opúšťate základy programovania, môžete sa pohybovať na zložitejších škrupinách.


    Ďalším odporúčaním, napokon, pracuje so skutočným kryštálom. Nebojte sa ho spáliť. Zlepšiť praktické skúsenosti. Práca s emulátormi (napríklad Proteus), aj keď to bude bez spájkovania, ale nikdy nebude môcť poskytnúť spokojnosť, ktorú dostanete zo zarobeného programu, prvé hrnčeky pri LED! Pochopenie toho, čo ste urobili s vlastnými rukami, skutočný pracovný okruh bude vštepiť dôveru a stimul.

    (Navštívili 7 377 krát, 1 návštevy dnes)

    Koncepcia programátora na porte LPT sa zobrazuje na obrázku. Ako bývalá pneumatika, použite 604Ac 244 alebo 74HC244 čip (K1564AP5), 74Ls244 (K5555AP5) alebo 74als244 (K1533AP5).

    LED LED VD1 označuje režim nahrávania mikrokontroléra,

    vD2 LED - čítanie,

    vD3 LED - prítomnosť diagramu.

    Napätie potrebné na napájanie schémy trvá z konektora ISP, t.j. z programovateľného zariadenia. Táto schéma je recyklovaný programátor STK200 / 300 (pridané LED diódy pre jednoduchú prevádzku), takže je kompatibilný so všetkými programami programátora PC pôsobiacich s schémou STK200 / 300. Ak chcete pracovať s týmto programátorom, použite program CVAVR.

    Programátor je možné vykonať na doske plošných spojov a umiestniť ho do krytu konektora LPT, ako je znázornené na obrázkoch:




    Ak chcete pracovať s programátorom, je vhodné použiť LPT extissionnel portu, ktorý sa ľahko vyrába (napríklad z kábla Cableronix pre tlačiareň), hlavná vec je "nie je ľutovať" vodiče pre Zem (18-25 nohy konektora) alebo kúpiť. Kábel medzi programátorom a programovateľným mikroobvodom nesmie prekročiť 20-30 cm.

    Dobrý deň, drahí habarites!

    V tomto článku chcem povedať o tom, ako som sa jedného dňa rozhodol začať programovať mikrokontroléry, ktoré bolo potrebné na to a že nakoniec sa ukázalo.

    Téma mikrokontrolérov ma zaujímajú na dlhú dobu, rok v roku 2001. Ale potom, aby ste získali programátor na mieste bydliska, bolo problematické a na internete a reči. Musel som tento prípad odložiť až do najlepších časov. A tak jeden deň som zistil, že najlepšie časy prišli bez opustenia domu si môžete kúpiť všetko, čo som potreboval. Rozhodol som sa skúsiť. Čo potrebujeme:

    1. programátor
    Existuje mnoho možností na trhu - od najlacnejších programátorov ISP (In-System Programming) pre niekoľko dolárov, na výkonných programátorov debuggger za pár stoviek. Bez väčšej skúsenosti v tejto veci, najprv som sa rozhodol vyskúšať jeden z najjednoduchších a najlacnejších - UsBash. Kúpil som si naraz na eBay za $ 12, teraz môžete nájsť aj za $ 3-4. V skutočnosti je to čínska verzia programátora z Thomas Fischl. Čo o ňom môžem povedať? Iba jedna vec - to funguje. Okrem toho existuje pomerne veľa AVR regulátorov ATTHA a ATDINY SERIES. Pod Linuxom nevyžaduje vodiča.

    Pre firmvér, musíte pripojiť VCC, GND, Reset, SCK, MOSI, výstupy programu Miso Programmer s príslušnými výstupmi mikrokontroléra. Pre jednoduchosť som zhromaždil pomocnú schému priamo na muža:

    Vľavo na doske - ten istý mikrokontrolér, ktorý budeme blikať.

    2. Mikrokontrolér
    So výberom mikrokontroléra som sa nemusel obťažovať a vzal ATMEGA8 z ATTHYL - 23 I / O Borovicu, dva 8-bitové časovače, jednu 16-bitovú frekvenciu - až 16 MHz, malú spotrebu (1-3.6 MA) , Lacné ($ 2). Všeobecne platí, že na začiatok - viac ako dosť.

    Pod Linuxom na kompilovanie a sťahovanie firmvéru na regulátore, AVR-GCC + Avrdede Bulldle funguje perfektne. Inštalácia triviálna. Podľa pokynov môžete nainštalovať všetko, čo potrebujete za pár minút. Jediné neeans, ktoré by sa mali vyplatiť - AVRDUDUDE (softvér na nahrávanie na regulátore), môžu vyžadovať právo super používateľa na prístup k programátoru. Exit - Prejdite cez SUDO (nie veľmi dobrý nápad), alebo registráciu osobitných práv UDEV. Syntax sa môže líšiť v rôznych verziách OS, ale v mojom prípade (Linux Mint 15) bola vykonaná pridaním nasledujúceho pravidla do /etc/udev/rules.d/41-ATMEGA.RULES súbor:

    # UsBasp Programmer Subsystem \u003d\u003d "USB", ATT (IDVENDOR) \u003d\u003d "16c0", att (idproduct) \u003d\u003d "05dc", skupina \u003d "plugDev", režim \u003d "0666"

    Potom, čo je, samozrejme, je potrebný reštart služby.
    Servis UDEV reštart.
    Môžete kompilovať a blesk bez akýchkoľvek problémov priamo z príkazového riadka (ktorí by pochybovali o), ale ak existuje mnoho projektov, je vhodnejšie dať plugin a urobiť všetko priamo z prostredia Eclipse.

    V systéme Windows bude musieť dodať vodiča. V pokoji nie sú žiadne problémy. Pre vedecký záujem som vyskúšala AVR Studio + Extreme Buller Bundle v systéme Windows. Opäť, všetko funguje s treskom.

    Začneme programovanie

    Programovanie AVR Controllers môžu byť na assembler (AVR Assembler) a na C. Myslím si, že každý musí urobiť svoj výber, v závislosti od konkrétnej úlohy a jeho preferencií. Osobne som prvýkrát začal zbierať assembler. Pri programovaní na Assembler sa architektúra zariadenia stáva jasnejším a pocit sa zdá, že kopali priamo vo vnútri regulátora. Okrem toho sa domnievam, že v obzvlášť kritických programoch môže byť znalosť assemblera veľmi užitočná. Po oboznámení s AVR assembler, som posunutím SI.

    Po oboznámení s architektúrou a základnými princípmi som sa rozhodol zbierať niečo užitočné a zaujímavé. Moja dcéra mi pomohla, ona robila šach a jeden krásny večer vyhlásil, že chce mať časovač hodinky pre dávky na chvíľu. Batz! Tu je - myšlienka prvého projektu! Bolo možné si ich objednať na tom istom eBay, ale chcel som si vytvoriť svoje vlastné hodiny, s čiernym ... uh ... s indikátormi a tlačidlami. Nie skôr, ako sa to urobilo!

    Ako displej sa rozhodlo použiť dva 7-segmentové diódy indikátor. Na ovládanie bolo dosť 5 tlačidiel - "Hráč 1", "Player 2", "Reset", "Nastavenie" a "Pauza". No, nezabudnite na zvuk indikáciu hry. Vyzerať takto. Nižšie uvedený obrázok zobrazuje všeobecný diagram pripojenia mikrokontroléra na indikátory a tlačidlá. Bude potrebovať pri analýze zdrojového kódu programu:

    Collecsing Flight

    Začnime, pretože by mal byť z vstupného bodu programu - hlavné funkcie. V skutočnosti nič pozoruhodné v nej nie je - nastavenie portov, inicializáciu údajov a nekonečné tlačidlo stlačenia tlačidiel. No, Hovor SEI () je rozlíšenie spracovania prerušení, o nich o niečo neskôr.

    Int hlavné (neplatné) (init_io (); init_data (); zvuk_off (); sei (); zatiaľ čo (1) (rukoväť_buttons ();) návrat 0;)
    Každú funkciu zvážte samostatne.

    Yaid init_io () (// nastavený výstup DDRRB \u003d 0xff; DDRD \u003d 0xff; // Nastaviť vstup DDRC \u003d 0B11100000; // Pull-Up Resistors Portc | \u003d 0B000111111; // Timer Prerušky TIMSK \u003d (1<

    Nastavenie portov I / O je veľmi jednoduché - do registra DDRX (kde X je písmeno, označujúce port) číslo, ktorého každý kúsok, čo znamená, či zodpovedajúci PIN bude vstupné zariadenie (zodpovedá 0) alebo výstupu (zodpovedá) do 1). Tak, Seashal v DDRB a DDDRD číslo 0xff, sme vyrobili B a D výstupné porty. V súlade s tým, príkaz DDRC \u003d 0B11100000; Otočí prvých 5 portov portu C na vstupné kolíky a zostávajúce cez víkend. Team Portc | \u003d 0B00011111; Zahŕňa vnútorné uťahovacie odpory na 5 vstupoch regulátora. Podľa schémy sú tlačidlá pripojené k týmto vstupom, ktoré sú pri stlačení zatvorené na Zemi. Regulátor teda chápe, že tlačidlo je stlačené.

    Ďalej budete postupovať podľa nastavenia dvoch časovačov, TIMER0 a TIMER1. Najprv použijeme indikátory, a druhý - pre odpočítavanie času, po nastavení na spustenie každú sekundu. Podrobný opis všetkých konštánt a metóda nastavenia časovača do určitého intervalu nájdete v dokumentácii pre ATMEGA8.

    Prerušenie spracovania

    ISR (displej (); ak (_buzzer\u003e 0) (_buzzer--; ak (_buzzer \u003d\u003d 0) zvuk_off ();))) ISR (TIMER1_COMPA_VECT) (ak (ActiveTetimer \u003d\u003d 1 && TIMER1\u003e 0) (TIMER1- IF (TIMER1 \u003d\u003d 0) Process_timeOff ();) IF (ActiveTimer \u003d\u003d 2 && Timer2\u003e 0) (TIMER2--; IF (TIMER2 \u003d\u003d 0) Proces_tifyoff ();)

    Keď sa časovač spustí, riadenie sa prenáša na zodpovedajúce ručenie prerušenia. V našom prípade je to procesor TIMER0_OVF_VECT, ktorý spôsobuje, že časový výstupný postup na indikátory a časovač1_compa_vect, ktorý spracováva odpočítavanie.

    Záver na ukazovatele

    Void Display () (Display_Number ((TIMER1 / 60) / 10, 0B00001000); _DELAY_MS (0,25); Display_Number ((TIMER1 / 60)% 10, 0B00000100); _DELAY_MS (((((((0.25); Display_Number (((TIMER1% 60); 10, 0B00000010); _Delay_ms (0,25); Display_Number ((TIMER1% 60)% 10, 0B00000001); _DELAY_MS (0,25); Display_Number ((TIMER2 / 60) / 10, 0B10000000); _Delay_ms (0,25); Display_Number ((TIMER2); / 60)% 10, 0B0000000); _Delay_ms (0,25); Display_Number ((časovač2% 60) / 10, 0B00100000); _Delay_ms (0,25); Display_Number (((((TIMER2% 60)% 10, 0B00010000); _DELAY_M00010000); ; portdd \u003d 0;) Void Display_Number (číslo Int, Maska Int) (portb \u003d Number_mask (číslo); PortDD \u003d maska;)

    Funkcia displeja používa metódu dynamickej indikácie. Faktom je, že každý jednotlivý indikátor má 9 kontaktov (7 pre kontrolu segmentov, 1 pre bod a 1 pre napájanie). Na ovládanie 4 číslic by to trvalo 36 kontaktov. Príliš zbytočné. Preto je výstup vypúšťania na viacmiestne indikátor organizovaný podľa nasledujúcej zásady:

    Napätie sa striedavo privádza do každého zo zdieľaných kontaktov, čo vám umožňuje zvýrazniť požadovanú hodnotu v príslušnom indikátore pomocou rovnakých 8 riadiacich kontaktov. S dostatočne vysokou frekvenciou výstupov vyzerá ako statický obraz. To je dôvod, prečo sú všetky 8 dodávateľských kontaktov oboch indikátorov na diagrame pripojené na 8 portov portov D, a 16 kontaktných kontrolných segmentov sú pripojené v pároch a pripojených na 8 portov portu B. Takže funkcia zobrazenia s oneskorením 0,25 MS striedavo zobrazí požadované číslo pre každý z indikátorov. Po ukončení sú všetky výstupy, ktoré napájajú napätie na indikátoroch (príkazový portddd \u003d 0;). Ak sa to nestane, potom posledná číslica displeja bude pokračovať v horí, kým sa nebude nasledujúci hovor nazýva funkcia zobrazenia, ktorá povedie k jeho jasnejším luminiscencii v porovnaní so zvyškom.

    Liečba lisov

    Void Lovedber_Buttons () (Rukoväť_Button (Key_setup); Rukoväť_Button (Key_Reset); Rukoväť_Button (Key_Pause); rukoväť_button (keyby_player1); \u003d Setup_bit; Break; Case Key_Reset: Bit \u003d reset_bit; Break; Case Key_PAUSE: Bit \u003d Pause_bit; Break; Case Key_player1: Bit \u003d Player1_bit; Break, Case Key_Bayer2: Bit \u003d Player2_bit; Button_pin, bit)) (ak (_Pressed \u003d\u003d 0) (_Delay_ms (debnenie_pin); ak (bit_is_clear (tlačidlo_pin, bit)) (_IPRESSED | \u003d KEY; // Akčný spínač (KEY_SETUP: Process_Setup (); Break; Case Key_Reset : Process_Reset (); Break; Case Key_PAUSE: Process_pause (); Break; Case Key_player1: Process_player1 (); Process_player1 (); Proces_player2 (); Break;) Sound_on (15);))) INÉ (_PRESSED & \u003d ~ kľúč ))

    Táto funkcia v zmene ankety všetkých 5 tlačidiel a procesov Press, ak sa to stalo. Stlačenie je zaregistrované kontrolou Bit_is_Clear (Tlačidlo_PIN, BIT), t.j. Tlačidlo je stlačené, ak je vstup zodpovedajúci jeho pripojený k zemi, ktorý sa stane podľa schémy, keď stlačíte tlačidlo. Oneskorené oneskorenie Trvanie_Time a opätovné kontroly je potrebné na zabránenie viacerým zbytočným reakciám kvôli raším kontaktom. Uloženie stavu stlačenia v príslušných variabilných bitoch _Pristed sa používa na odstránenie opätovného spustenia s dlhým stlačením tlačidla.
    Tlačové funkcie sú dosť triviálne a veria, že v ďalších komentároch nepotrebujete.

    Úplný textový program

    #Define f_cpu 4000000l #include #Include. #Include. #Define Descketing_time 20 #Define Button_pin Pinc #Define Setup_bit PC0 #DEFINE RESET_BIT PC1 #DEFINE PAUSE_BIT PC2 #DEFINE PREHRÁVAČOVÝ PREHRÁVAČOVÝCH PREHRÁVAČOVÝCH PC4 PC3 #DEFINE Player2_bit PC4 #DEFINE KEY_SETUP 0B00000001 #DEFINE KEY_REPEET 0B0000000010 #DEFINE KEY_PAUSE 0B000000100 #DEFINE Key_Payer1 0B00001000 č ActiveTetimer \u003d 0; Volatilný int časovač1 \u003d 0; Volatilný int časovač2 \u003d 0; Prchavé Int _buzter \u003d 0; Prchavé Int _Pressed \u003d 0; // funkčné vyhlásenia Vidieť init_io (); yaid init_data (); Int number_mask (int num); neplatné rukoväť_buttons (); nepoužiteľné rukoväť_button (kľúč Int); Neplatné proces_settup (); Void Process_Reset (); PORT Process_pause (); Void Process_tifyoff (); Neplatný proces_player1 (); Void Process_player2 (); Displej (); Void Display_Number (maska \u200b\u200bINT, Int číslo); Void sound_on (INT interval); void sound_off (); // prerušuje ISR (displej (); ak (_buzzer\u003e 0) (_buzzer -; ak (_buzzer \u003d\u003d 0) zvuk_off ();))) ISR (TIMER1_COMPA_VECT) (ak (ActiveTetimer \u003d\u003d 1 && TIMER1\u003e 0) TIMER1--; IF (TIMER1 \u003d\u003d 0) Proces_timeOff ();) IF (ActiveTeMer \u003d\u003d 2 && Timer2\u003e 0) (TIMER2--; IF (TIMER2 \u003d\u003d 0) Proces_tifyoff ();)) (init_io (); init_data (); zvuk_off (); seI (); zatiaľ čo (1) (rukoväť_buttons ();) návrat 0;) void_io () (// set výstup DDRRB \u003d 0xff; DDRD \u003d 0xff; // set Vstup DDRC \u003d 0B11100000; // Pull-up Resistors Portc | \u003d 0B000111111; // Timer Prerušenie Timsk \u003d (1< 5940 || Časovač2\u003e 5940) (TIMER1 \u003d 0; TIMER2 \u003d 0;)) Void Process_Reset () (init_data ();) Void Process_TiMeoff () (init_data (); Sound_on (30);) Void Process_pause () (ActiveTetimer \u003d 0;) PORT Process_player1 () (ActiveTetimer \u003d 2;) Void Process_player2 () (ACTIVE) _PLAYER2 () (ActiveTetimer \u003d 1;) Void Lovedle_button (Tlačidlo Int) (KEY_SETUP: bit \u003d setup_bit; prestávka; break; break; CASE KEY_PAUSE: BIT \u003d PAUSE_BIT; BREAK; CASE KEY_PLAYER1: Bit \u003d Player1_bit; Break; Case Key_player2: bit \u003d prehrávač2_bit; _Delay_ms (Debliet_time); ak (bit_is_clear (tlačidlo_pin, bit)) (_PRESSED | \u003d KEY; // KEY_SETUP: Process_setUP (); Break; Case Key_Reset: Process_Reset (); Process_pause (); Break; : proces_player1 (); prestávka; prípad key_player2: proces_player2 (); prestávka;) sound_on (15);))) inak (_pre SSED & \u003d ~ kľúč; )) Void Lovedle_buttons () (Rukoväť_Button (Key_Setup); Rukoväť_Button (Key_Reset); rukoväť_button (key_Pause); rukoväť_button (keyby_player1); rukoväť_button (keyby_player2);) _Delay_ms (0,25); Display_number ((TIMER1 / 60)% 10, 0B00000100); _DELAY_MS (0,25); Display_Number ((TIMER1% 60) / 10, 0B00000010); _Delay_ms ((((((0.25); % 10, 0B00000001); _Delay_ms (0,25); Display_Number ((TIMER2 / 60) / 10, 0B10000000); _DELAY_MS (0,25); Display_Number ((TIMER2 / 60)% 10, 0B0000000); _delay_ms ((0,25); TIMER2% 60) / 10, 0B00100000); _DELAY_MS (0,25); Display_Number (((((TIMER2% 60)% 10, 0B00010000); _DELAY_MS (0,25); Portdd \u003d 0;) Void Display_Number (Int Number_Mask) (PortB \u003d Number_Mask) Číslo); portd \u003d maska;) void sound_on (INT interval) (_buzzer \u003d interval; // dajte bzučiak pin High Portc \u003d 0B00100000;) Void Sound_off () (// Dajte bzučiak pin LOW PORTC & \u003d ~ 0B00100000;)

    Prototyp bol zostavený na dumpingovej doske.