Obsah:

Konfigurácia poistkových bitov mikrokontroléra AVR. Vytvorenie a odoslanie programu blikania diódy LED do pamäte Flash mikrokontroléra: 5 krokov
Konfigurácia poistkových bitov mikrokontroléra AVR. Vytvorenie a odoslanie programu blikania diódy LED do pamäte Flash mikrokontroléra: 5 krokov

Video: Konfigurácia poistkových bitov mikrokontroléra AVR. Vytvorenie a odoslanie programu blikania diódy LED do pamäte Flash mikrokontroléra: 5 krokov

Video: Konfigurácia poistkových bitov mikrokontroléra AVR. Vytvorenie a odoslanie programu blikania diódy LED do pamäte Flash mikrokontroléra: 5 krokov
Video: Видеокурс по AVR микроконтроллерам - Урок 7 2024, Jún
Anonim
Image
Image

V tomto prípade vytvoríme jednoduchý program v kóde C a napálime ho do pamäte mikrokontroléra. Napíšeme vlastný program a skompilujeme hex súbor, pomocou Atmel Studio ako integrovanej vývojovej platformy. Konfigurujeme poistkové bity a nahráme hex súbor do pamäte mikrokontroléra AVR ATMega328P pomocou vlastného programátora a softvéru AVRDUDE.

AVRDUDE - je program na sťahovanie a nahrávanie pamätí mikroprocesorov Atmel AVR na čip. Môže programovať Flash a EEPROM, a ak to podporuje protokol sériového programovania, môže programovať poistkové a blokovacie bity.

Krok 1: Program na písanie a kompiláciu hexadecimálneho súboru pomocou programu Atmel Studio

Program na písanie a kompilovanie hexadecimálneho súboru pomocou Atmel Studio
Program na písanie a kompilovanie hexadecimálneho súboru pomocou Atmel Studio
Program na písanie a kompilovanie hexadecimálneho súboru pomocou Atmel Studio
Program na písanie a kompilovanie hexadecimálneho súboru pomocou Atmel Studio

Ak nemáte Atmel Studio, mali by ste si ho stiahnuť a nainštalovať:

Tento projekt bude používať C, takže zo zoznamu šablón vyberte možnosť GCC C Executable Project a vygenerujte spustiteľný projekt s holými kosťami.

Ďalej je potrebné určiť, pre aké zariadenie bude projekt vyvinutý. Tento projekt bude vyvinutý pre mikrokontrolér AVR ATMega328P.

Zadajte kód programu do oblasti Main Source Editor programu Atmel Studio. Editor hlavného zdroja - Toto okno je hlavným editorom zdrojových súborov v aktuálnom projekte. Editor má funkcie kontroly pravopisu a automatického dokončovania.

1. Musíme kompilátoru povedať, akou rýchlosťou náš čip beží, aby dokázal správne vypočítať oneskorenia.

#ifndef F_CPU

#define F_CPU 16000000UL // informujúci o kryštálovej frekvencii ovládača (16 MHz AVR ATMega328P) #endif

2. Zahrnieme preambulu, kam vložíme informácie o zahrnutí z iných súborov, ktoré definujú globálne premenné a funkcie.

#include // hlavička na povolenie riadenia toku údajov nad kolíkmi. Definuje piny, porty atď.

#include // hlavička na povolenie funkcie oneskorenia v programe

3. Po preambule prichádza funkcia main ().

int main (neplatné) {

Funkcia main () je jedinečná a odlišuje sa od všetkých ostatných funkcií. Každý program C musí mať presne jednu hlavnú () funkciu. Main () je miesto, kde AVR začne vykonávať váš kód pri prvom zapnutí, takže je to vstupný bod programu.

4. Nastavte pin 0 na PORTB ako výstup.

DDRB = 0b00000001; // Nastaviť PORTB1 ako výstup

Vykonáme to tak, že do registra B smeru údajov zapíšeme binárne číslo. Register B smeru údajov nám umožňuje vytvoriť bity registra B vstupu alebo výstupu. Písmeno 1 spôsobí, že budú výstupom, zatiaľ čo 0 by znamenalo ich vstup. Pretože pripájame diódu LED, ktorá slúži ako výstup, napíšeme binárne číslo, čím sa pin 0 PORT B stane výstupom.

5. Slučka.

pričom (1) {

Tento príkaz je slučka, často označovaná ako hlavná slučka alebo slučka udalostí. Tento kód je vždy pravdivý; preto sa vykonáva znova a znova v nekonečnej slučke. Nikdy neprestáva. LED dióda preto bude blikať nekonečne, pokiaľ nie je vypnuté napájanie z mikrokontroléra alebo ak je kód vymazaný z pamäte programu.

6. Zapnite diódu LED pripojenú k portu PB0

PORTB = 0b00000001; // zapne LED diódu pripojenú k portu PB0

Tento riadok dáva 1 PB0 portu PortB. PORTB je hardvérový register na čipe AVR, ktorý obsahuje 8 pinov, PB7-PB0, prechádzajúcich zľava doprava. Po zadaní 1 na konci sa získa 1 k PB0; tým sa nastaví PB0 vysoko, čím sa zapne. LED dióda pripojená k kolíku PB0 sa preto rozsvieti a rozsvieti.

7. Oneskorenie

_delay_ms (1000); // spôsobí 1-sekundové oneskorenie

Toto vyhlásenie spôsobí 1-sekundové oneskorenie, takže dióda LED sa rozsvieti a zostane svietiť presne 1 sekundu.

8. Vypnite všetky piny B vrátane PB0

PORTB = 0b00000000; // Vypína všetky piny B vrátane PB0

Tento riadok vypne všetkých 8 pinov portu B, takže aj PB0 je vypnutý, takže dióda LED zhasne.

9. Ďalšie zdržanie

_delay_ms (1000); // vytvára ďalšie 1-sekundové oneskorenie

Vypína sa presne na 1 sekundu, potom sa slučka začne znova a narazí na linku, ktorá ju znova zapne a celý proces sa opakuje. Stáva sa to nekonečne, takže LED dióda neustále bliká a zhasína.

10. Vyhlásenie o vrátení

}

návrat (0); // tento riadok sa v skutočnosti nikdy nedosiahne}

Posledný riadok nášho kódu je príkaz return (0). Aj keď sa tento kód nikdy nespúšťa, pretože existuje nekonečná slučka, ktorá sa nikdy nekončí, pre naše programy spustené na stolných počítačoch je dôležité, aby operačný systém vedel, či bežali správne alebo nie. Z tohto dôvodu GCC, náš kompilátor, chce, aby každé hlavné () skončilo návratovým kódom. Návratové kódy nie sú potrebné pre kód AVR, ktorý beží voľne stojace z akéhokoľvek podporujúceho operačného systému; napriek tomu kompilátor upozorní, ak neskončíte main s return ().

Posledným krokom je výstavba projektu. Znamená to kompilovať a nakoniec prepojiť všetky objektové súbory na vygenerovanie súboru spustiteľného súboru (.hex). Tento hexadecimálny súbor je generovaný v priečinku Debug, ktorý je v priečinku Project. Tento hexadecimálny súbor je pripravený na načítanie do čipu mikrokontroléra.

Krok 2: Zmena predvolenej konfigurácie poistkových bitov mikroovládača

Zmena predvolenej konfigurácie poistkových bitov mikroovládača
Zmena predvolenej konfigurácie poistkových bitov mikroovládača
Zmena predvolenej konfigurácie poistkových bitov mikroovládača
Zmena predvolenej konfigurácie poistkových bitov mikroovládača
Zmena predvolenej konfigurácie poistkových bitov mikroovládača
Zmena predvolenej konfigurácie poistkových bitov mikroovládača

Je dôležité mať na pamäti, že niektoré poistkové bity môžu byť použité na uzamknutie určitých aspektov čipu a potenciálne ho môžu zamurovať (urobiť ho nepoužiteľným)

V ATmega328P je použitých celkom 19 poistkových bitov, ktoré sú rozdelené do troch rôznych poistkových bytov. Tri z poistkových bitov sú obsiahnuté v „Predĺženom byte poistky“, osem v „Vysokom byte poistky“a osem ďalších v „Nízkom byte poistky“. Existuje aj štvrtý bajt, ktorý sa používa na programovanie blokovacích bitov.

Každý bajt má 8 bitov a každý bit je samostatné nastavenie alebo príznak. Keď hovoríme o nastavení, nie o nastavení, naprogramovaných, nenaprogramovaných poistkách, v skutočnosti používame binárne. 1 znamená nenastavené, nenaprogramované a nula znamená nastavené, naprogramované. Pri programovaní poistiek môžete použiť binárny zápis alebo bežnejšie hexadecimálny zápis.

Čipy ATmega 328P majú vstavaný RC oscilátor, ktorý má frekvenciu 8 MHz. S touto súpravou sa dodávajú nové čipy ako zdroj hodinového signálu a aktívna poistka CKDIV8, čo má za následok systémové hodiny 1 MHz. Čas spustenia je nastavený na maximum a časový limit je povolený.

Nové čipy ATMega 328P majú vo všeobecnosti nasledujúce nastavenia poistiek:

Nízka poistka = 0x62 (0b01100010)

Vysoká poistka = 0xD9 (0b11011001)

Predĺžená poistka = 0xFF (0b11111111)

Použijeme čip ATmega 328 s externým kryštálom 16 MHz. Preto musíme zodpovedajúcim spôsobom naprogramovať bity „Fuse Low Byte“.

1. Bity 3-0 riadia voľbu oscilátora a predvolené nastavenie 0010 je použitie kalibrovaného interného RC oscilátora, ktorý nechceme. Chceme prevádzku kryštálového oscilátora s nízkym výkonom od 8,0 do 16,0 MHz, takže bity 3-1 (CKSEL [3: 1]) by mali byť nastavené na 111.

2. Bity 5 a 4 riadia čas spustenia a predvolené nastavenie 10 je pre oneskorenie spustenia šesť hodinových cyklov od vypnutia a úspory energie, plus dodatočné oneskorenie spustenia 14 hodinových cyklov plus 65 milisekúnd od resetu.

Aby sme boli v bezpečí pre kryštálový oscilátor s nízkym výkonom, chceme, aby bolo maximálne oneskorenie 16 000 hodinových cyklov pri vypnutí a úspore energie, preto by mal byť SUT [1] nastavený na 1 plus dodatočné oneskorenie spustenia zo 14 hodinových cyklov plus 65 milisekúnd od resetu, takže SUT [0] by mal byť nastavený na 1. Navyše CKSEL [0] by mal byť nastavený na 1.

3. Bit 6 riadi hodinový výstup do PORTB0, o ktorý sa nestaráme. Bit 6 teda môžete nechať nastavený na 1.

4. Bit 7 riadi operáciu delenia na 8 a predvolené nastavenie 0 má povolenú funkciu, ktorú nechceme. Bit 7 teda musí byť zmenený z 0 na 1.

Preto by mal byť nový Fuse Low Byte 11111111, ktorý je v hexadecimálnom zápise 0xFF

Na programovanie bitov „Fuse Low Byte“môžeme použiť náš programátor (https://www.instructables.com/id/ISP-Programmer-fo…) a softvér AVRDUDE. AVRDUDE je nástroj príkazového riadka, ktorý sa používa na sťahovanie a nahrávanie do mikrokontrolérov Atmel.

Stiahnite si AVRDUDE:

Najprv musíme pridať popis nášho programátora do konfiguračného súboru AVRDUDE. V systéme Windows je konfiguračný súbor obvykle na rovnakom mieste ako spustiteľný súbor AVRDUDE.

Prilepte text do konfiguračného súboru avrdude.conf:

# ISPProgv1

programátor id = "ISPProgv1"; desc = "búchanie sériového portu, reset = dtr sck = rts mosi = txd miso = cts"; typ = "serbb"; connection_type = serial; resetovať = 4; sck = 7; mosi = 3; miso = 8;;

Pred spustením AVRDUDE musíme pripojiť mikrokontrolér k programátoru podľa schémy

Otvorte okno výzvy DOS.

1. Ak chcete zobraziť zoznam programátorov, ktoré avrdude podporuje, zadajte príkaz avrdude -c c. Ak je všetko v poriadku, zoznam by mal mať ID programátora „ISPProgv1“

2. Ak chcete zobraziť zoznam podporovaných zariadení Atmel, zadajte príkaz avrdude -c ISPProgv1. V zozname by malo byť zariadenie m328p pre Atmel ATMega 328P.

Ďalej zadajte avrdude -c ISPProgv1 –p m328p, príkaz tell avrdude, aký programátor sa používa a čo je pripojený mikrokontrolér Atmel. Predstavuje podpis ATmega328P v hexadecimálnom zápise: 0x1e950f. Predstavuje programovanie poistkových bitov, aktuálne dostupné v ATmega328P, tiež v hexadecimálnom zápise; v tomto prípade sú bajty poistiek naprogramované podľa predvoleného nastavenia od výroby.

Ďalej zadajte avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, Je to príkaz, ktorý oznámi avrdude, aký programátor sa používa a aký mikrokontrolér Atmel je pripojený, a zmení Fuse Low Byte na 0xFF.

Teraz by mal hodinový signál pochádzať z kryštálového oscilátora s nízkym výkonom.

Krok 3: Napálenie programu do pamäte mikrokontroléra ATMega328P

Napálenie programu do pamäte mikrokontroléra ATMega328P
Napálenie programu do pamäte mikrokontroléra ATMega328P
Napálenie programu do pamäte mikrokontroléra ATMega328P
Napálenie programu do pamäte mikrokontroléra ATMega328P

Najprv skopírujte hexadecimálny súbor programu, ktorý sme vytvorili na začiatku inštrukcie, do adresára AVRDUDE.

Potom zadajte do okna výzvy DOS príkaz avrdude –c ISPProgv1 –p m328p –u –U flash: w: [názov vášho hexadecimálneho súboru]

Príkaz zapíše hexadecimálny súbor do pamäte mikrokontroléra. Mikrokontrolér teraz pracuje v súlade s pokynmi nášho programu. Pozrime sa na to!

Krok 4: Skontrolujte, či mikrokontrolér funguje v súlade s pokynmi nášho programu

Skontrolujte, či funguje mikrokontrolér v súlade s pokynmi nášho programu
Skontrolujte, či funguje mikrokontrolér v súlade s pokynmi nášho programu
Skontrolujte, či funguje mikrokontrolér v súlade s pokynmi nášho programu
Skontrolujte, či funguje mikrokontrolér v súlade s pokynmi nášho programu
Skontrolujte, či funguje mikrokontrolér v súlade s pokynmi nášho programu
Skontrolujte, či funguje mikrokontrolér v súlade s pokynmi nášho programu

Pripojte komponenty podľa schematického diagramu blikajúceho obvodu LED AVR

Po prvé, potrebujeme napájanie, ako to robia všetky obvody AVR. Na prevádzku čipu AVR stačí asi 5 voltov energie. Môžete to získať buď z batérií, alebo z napájania jednosmerným prúdom. Pripojíme +5V napájania na pin 7 a pin 8 na uzemnenie na doske. Medzi oba piny umiestnime keramický kondenzátor 0,1 μF, aby sa vyhladil výkon zdroja, aby čip AVR získal hladké elektrické vedenie.

Rezistor 10 KΩ slúži na zaistenie resetovania napájania (POR) zariadenia. Keď je napájanie zapnuté, napätie na kondenzátore bude nulové, takže sa zariadenie resetuje (pretože reset je aktívny nízky), potom sa kondenzátor nabije na VCC a reset bude deaktivovaný.

Pripojíme anódu našej LED k pinu AVR PB0. Toto je kolík 14 ATMega328P. Pretože ide o LED, chceme obmedziť prúd tečúci na LED, aby nevyhorel. Preto umiestnime odpor 330Ω do série s LED diódou. Katóda LED sa spojí so zemou.

16 MHz kryštál sa používa na zabezpečenie hodín pre mikrokontrolér Atmega328 a kondenzátory 22 pF sa používajú na stabilizáciu činnosti kryštálu.

Toto sú všetky pripojenia potrebné na rozsvietenie LED diódy. Zdroj.

Ok. LED dióda bliká s sekundovým oneskorením. Práca mikrokontroléra zodpovedá našim úlohám

Krok 5: Záver

Je pravda, že to bol dlhý proces len na blikanie LED, ale pravdou je, že ste úspešne odstránili hlavné prekážky: vytvorenie hardvérovej platformy na programovanie mikrokontroléra AVR, používanie Atmel Studio ako integrovanej vývojovej platformy, používanie AVRDUDE ako softvéru pre konfigurácia a programovanie mikrokontroléra AVR

Ak chcete mať aktuálne informácie o mojich projektoch základných mikrokontrolérov, prihláste sa na odber môjho YouTube! Sledovanie a zdieľanie mojich videí je spôsob, ako podporiť to, čo robím

Prihláste sa na odber kanála YouTube FOG

Odporúča: