Obsah:
- Krok 1: Program na písanie a kompiláciu hexadecimálneho súboru pomocou programu Atmel Studio
- Krok 2: Zmena predvolenej konfigurácie poistkových bitov mikroovládača
- Krok 3: Napálenie programu do pamäte mikrokontroléra ATMega328P
- Krok 4: Skontrolujte, či mikrokontrolér funguje v súlade s pokynmi nášho programu
- Krok 5: Záver
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
2024 Autor: John Day | [email protected]. Naposledy zmenené: 2024-01-30 11:59
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
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
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
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
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:
DragonBoard410c - odoslanie údajov do Ubidots: 3 kroky
DragonBoard410c - odosielanie údajov do Ubidots: Ubidots vám umožňuje vytvárať informačné panely v reálnom čase na analýzu vašich údajov alebo ovládanie vašich zariadení. Podeľte sa o svoje údaje prostredníctvom verejných odkazov alebo ich vložte do svojej mobilnej alebo webovej aplikácie. V tomto tutoriáli odošleme údaje na platformu pomocou Drago
Detektor blikania svetla: 3 kroky (s obrázkami)
Detektor blikania svetla: Vždy ma fascinovalo, že nás sprevádza elektronika. Je to proste všade. Keď hovoríme o svetelných zdrojoch (nie o tých prirodzených, ako sú hviezdy), musíme vziať do úvahy niekoľko parametrov: jas, farbu a
Vylepšite svoj IPod Mini pomocou pamäte Flash - už žiadny pevný disk!: 6 krokov (s obrázkami)
Vylepšite svoj IPod Mini pomocou pamäte Flash - už žiadny pevný disk!: Namiesto pevného disku bude váš nový inovovaný iPod používať pamäť Flash bez pohyblivých častí na rýchlejšie spustenie & prístupové časy a nižšia spotreba energie. (IPod som bežal nepretržite viac ako 20 hodín na jedno nabitie!). Tiež získate vylepšenie
Premeňte svoj IPod 4. generácie na používanie pamäte Flash: 6 krokov (s obrázkami)
Premeňte svoj IPod 4. generácie na používanie pamäte Flash: Všetci poznáme niekoho, kto má iPod s vybitým pevným diskom. Samozrejme, že si môžete jednoducho kúpiť iný disk, ale ste späť v tom istom výkonnom, hladnom a krehkom rotujúcom médiu, ktoré je náchylné na zlyhanie. Namiesto toho inovujte svoj iPod tak, aby používal pamäť Flash. Su
Premeňte svoje video IPod 5. generácie na využitie pamäte Flash!: 6 krokov (s obrázkami)
Premeňte svoje iPod video 5. generácie na flash pamäť!: Možno ste videli moje ďalšie inštrukcie o tom, ako konvertovať iPody Mini a 4G iPody na CF a premýšľali ste, či by ste to isté nemohli urobiť aj s iPod Video. Môžete! Poznámka: Niektoré z pokynov sú veľmi podobné (ak nie rovnaké) ako ostatné