Obsah:
- Krok 1: Program pro psaní a kompilace hexadecimálního souboru pomocí Atmel Studio
- Krok 2: Změna výchozí konfigurace pojistkových bitů mikrořadiče
- Krok 3: Vypálení programu do paměti mikrokontroléru ATMega328P
- Krok 4: Zkontrolujte, zda funguje mikrokontrolér v souladu s pokyny našeho programu
- Krok 5: Závěr
Video: Konfigurace pojistkových bitů mikrokontroléru AVR. Vytvoření a nahrání programu Flash LED do flash paměti mikrokontroléru: 5 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:22
V tomto případě vytvoříme jednoduchý program v C kódu a vypálíme ho do paměti mikrokontroléru. Napíšeme vlastní program a zkompilováme hexadecimální soubor pomocí Atmel Studio jako integrované vývojové platformy. Pomocí vlastního programátoru a softwaru AVRDUDE nakonfigurujeme pojistkové bity a nahrajeme hex soubor do paměti mikrokontroléru AVR ATMega328P.
AVRDUDE - je program pro stahování a odesílání pamětí na čipu mikrokontrolérů AVR společnosti Atmel. Může programovat Flash a EEPROM, a pokud to podporuje protokol sériového programování, může programovat pojistkové a blokovací bity.
Krok 1: Program pro psaní a kompilace hexadecimálního souboru pomocí Atmel Studio
Pokud Atmel Studio nemáte, měli byste si jej stáhnout a nainstalovat:
Tento projekt bude používat C, takže vyberte ze seznamu šablon možnost GCC C Executable Project a vygenerujte spustitelný projekt s holými kostmi.
Dále je nutné určit, pro jaké zařízení bude projekt vyvíjen. Tento projekt bude vyvinut pro mikrokontrolér AVR ATMega328P.
Zadejte kód programu do oblasti Hlavní zdrojový editor Atmel Studio. Hlavní zdrojový editor - Toto okno je hlavním editorem zdrojových souborů v aktuálním projektu. Editor má funkce kontroly pravopisu a automatického doplňování.
1. Musíme kompilátoru říci, jakou rychlostí náš čip běží, aby dokázal správně vypočítat zpoždění.
#ifndef F_CPU
#define F_CPU 16000000UL // sdělující krystalovou frekvenci ovladače (16 MHz AVR ATMega328P) #endif
2. Zahrneme preambuli, kam vložíme informace o zahrnutí z jiných souborů, které definují globální proměnné a funkce.
#include // header umožňující řízení toku dat přes piny. Definuje piny, porty atd.
#include // header povolí funkci zpoždění v programu
3. Po preambuli přichází funkce main ().
int main (neplatné) {
Funkce main () je jedinečná a odlišuje se od všech ostatních funkcí. Každý program C musí mít přesně jednu hlavní () funkci. Main () je místo, kde AVR začne spouštět váš kód při prvním zapnutí, takže je to vstupní bod programu.
4. Nastavte pin 0 na PORTB jako výstup.
DDRB = 0b00000001; // Nastavit PORTB1 jako výstup
To provedeme zapsáním binárního čísla do registru směrování dat B. Registr směru dat B nám umožňuje vytvořit bity registru B vstupu nebo výstupu. Když napíšete 1, stanou se výstupem, zatímco 0 by je zadalo. Protože připojujeme LED diodu, která slouží jako výstup, napíšeme binární číslo, takže pin 0 PORT B bude výstupem.
5. Smyčka.
zatímco (1) {
Toto prohlášení je smyčka, často označovaná jako hlavní smyčka nebo smyčka událostí. Tento kód je vždy pravdivý; proto se provádí znovu a znovu v nekonečné smyčce. Nikdy nepřestává. LED tedy bude blikat do nekonečna, pokud nedojde k vypnutí napájení z mikrokontroléru nebo vymazání kódu z paměti programu.
6. Zapněte LED připojenou k portu PB0
PORTB = 0b00000001; // rozsvítí LED připojenou k portu PB0
Tento řádek dává 1 PB0 z PortB. PORTB je hardwarový registr na čipu AVR, který obsahuje 8 pinů, PB7-PB0, procházející zleva doprava. Zadáním 1 na konci získáte 1 k PB0; tím se nastaví PB0 vysoko, což jej zapne. LED dioda připojená ke kolíku PB0 se proto rozsvítí a rozsvítí.
7. Zpoždění
_delay_ms (1000); // vytvoří 1sekundové zpoždění
Toto prohlášení vytvoří 1sekundové zpoždění, takže se LED rozsvítí a zůstane svítit přesně 1 sekundu.
8. Vypněte všechny B piny, včetně PB0
PORTB = 0b00000000; // Vypne všechny B piny, včetně PB0
Tento řádek vypne všech 8 pinů Port B, takže i PB0 je vypnutý, takže LED zhasne.
9. Další zpoždění
_delay_ms (1000); // vytvoří další 1sekundové zpoždění
Vypne se přesně na 1 sekundu, než smyčku znovu spustíte a narazíte na linku, která ji znovu zapne a celý proces se opakuje. To se děje nekonečně, takže LED dioda neustále bliká a zhasíná.
10. Prohlášení o vrácení
}
return (0); // tento řádek není ve skutečnosti nikdy dosažen}
Poslední řádek našeho kódu je příkaz return (0). Přestože tento kód není nikdy spuštěn, protože existuje nekonečná smyčka, která nikdy nekončí, pro naše programy běžící na stolních počítačích je důležité, aby operační systém věděl, zda běžel správně nebo ne. Z tohoto důvodu GCC, náš kompilátor, chce, aby každý main () končil návratovým kódem. Návratové kódy jsou pro kód AVR, který běží volně stojící na jakémkoli podporujícím operačním systému, zbytečné; přesto kompilátor vyvolá varování, pokud neukončíte main s return ().
Posledním krokem je stavba projektu. Znamená to kompilaci a konečné propojení všech objektových souborů pro generování souboru spustitelného souboru (.hex). Tento hexadecimální soubor je generován ve složce Debug, která je uvnitř složky Project. Tento hexadecimální soubor je připraven k načtení do čipu mikrokontroléru.
Krok 2: Změna výchozí konfigurace pojistkových bitů mikrořadiče
Je důležité si uvědomit, že některé pojistkové bity lze použít k zablokování určitých aspektů čipu a potenciálně jej mohou zdělit (učinit nepoužitelným)
V ATmega328P je použito celkem 19 pojistkových bitů, které jsou rozděleny do tří různých pojistkových bytů. Tři z pojistkových bitů jsou obsaženy v „rozšířeném bytě pojistky“, osm je obsaženo v „vysokém bytě pojistky“a osm dalších je obsaženo v „nízkém bytě pojistky“. Existuje také čtvrtý bajt, který se používá k programování blokových bitů.
Každý bajt má 8 bitů a každý bit je samostatné nastavení nebo příznak. Když mluvíme o nastavení, nikoli nastavení, naprogramovaných, neprogramovaných pojistkách, ve skutečnosti používáme binární. 1 znamená nenastaveno, není naprogramováno a nula znamená nastaveno, naprogramováno. Při programování pojistek můžete použít binární zápis nebo běžněji hexadecimální zápis.
Čipy ATmega 328P mají vestavěný RC oscilátor, který má frekvenci 8 MHz. Nové čipy jsou dodávány s touto sadou jako zdrojem hodin a aktivní pojistkou CKDIV8, což má za následek systémové hodiny 1 MHz. Čas spuštění je nastaven na maximum a časový limit povolen.
Nové čipy ATMega 328P mají obecně následující nastavení pojistek:
Nízká pojistka = 0x62 (0b01100010)
Vysoká pojistka = 0xD9 (0b11011001)
Prodloužená pojistka = 0xFF (0b11111111)
Použijeme čip ATmega 328 s externím krystalem 16 MHz. Proto musíme podle toho naprogramovat bity „Fuse Low Byte“.
1. Bity 3-0 ovládají volbu oscilátoru a výchozí nastavení 0010 je použít kalibrovaný interní RC oscilátor, který nechceme. Chceme provoz krystalového oscilátoru s nízkým výkonem od 8,0 do 16,0 MHz, takže bity 3-1 (CKSEL [3: 1]) by měly být nastaveny na 111.
2. Bity 5 a 4 řídí čas spuštění a výchozí nastavení 10 je pro zpoždění při spuštění šesti hodinových cyklů od vypnutí a úspory energie, plus dodatečné zpoždění při spuštění 14 hodin a 65 milisekund od resetu.
Abychom měli jistotu krystalového oscilátoru s nízkým výkonem, chceme maximální zpoždění 16 000 hodinových cyklů od vypnutí a úspory energie, takže SUT [1] by měl být nastaven na 1 plus dodatečné zpoždění při spuštění ze 14 hodinových cyklů plus 65 milisekund od resetu, takže SUT [0] by mělo být nastaveno na 1. Kromě toho by měl být CKSEL [0] nastaven na 1.
3. Bit 6 ovládá hodinový výstup na PORTB0, což nás nezajímá. Bit 6 tedy lze ponechat nastavený na 1.
4. Bit 7 ovládá operaci dělení 8 a výchozí nastavení 0 má povolenou funkci, kterou nechceme. Bit 7 je tedy třeba změnit z 0 na 1.
Proto by měl být nový Fuse Low Byte 11111111, což je v hexadecimálním zápisu 0xFF
K programování bitů „Fuse Low Byte“můžeme použít náš programátor (https://www.instructables.com/id/ISP-Programmer-fo…) a software AVRDUDE. AVRDUDE je nástroj příkazového řádku, který se používá ke stahování a odesílání do mikrokontrolérů Atmel.
Stáhnout AVRDUDE:
Nejprve musíme přidat náš programátor do konfiguračního souboru AVRDUDE. V systému Windows je konfigurační soubor obvykle ve stejném umístění jako spustitelný soubor AVRDUDE.
Vložte text do konfiguračního souboru avrdude.conf:
# ISPProgv1
programátor id = "ISPProgv1"; desc = "bouchání sériového portu, reset = dtr sck = rts mosi = txd miso = cts"; typ = "serbb"; connection_type = serial; reset = 4; sck = 7; mosi = 3; miso = 8;;
Před spuštěním AVRDUDE musíme připojit mikrokontrolér k programátoru podle schématu
Otevřete okno výzvy DOS.
1. Chcete -li zobrazit seznam programátora, který podporuje avrdude, zadejte příkaz avrdude -c c. Pokud je vše v pořádku, seznam by měl mít ID programátora „ISPProgv1“
2. Chcete -li zobrazit seznam podporovaných zařízení Atmel, zadejte příkaz avrdude -c ISPProgv1. Seznam by měl mít zařízení m328p pro Atmel ATMega 328P.
Dále zadejte avrdude -c ISPProgv1 –p m328p, příkaz řekněte avrdude, jaký programátor se používá a jaký mikrokontrolér Atmel je připojen. Představuje podpis ATmega328P v hexadecimálním zápisu: 0x1e950f. Představuje programování bitů pojistek aktuálně v ATmega328P také v hexadecimálním zápisu; v tomto případě jsou bajty pojistek naprogramovány podle továrního nastavení.
Dále zadejte avrdude -c ISPProgv1 –p m328p –U lfuse: w: 0xFF: m, Je to příkaz, který avrdude řekne, jaký programátor se používá a jaký mikrokontrolér Atmel je připojen, a změní Fuse Low Byte na 0xFF.
Nyní by hodinový signál měl pocházet z krystalového oscilátoru s nízkým výkonem.
Krok 3: Vypálení programu do paměti mikrokontroléru ATMega328P
Nejprve zkopírujte hexadecimální soubor programu, který jsme vytvořili na začátku instrukce, do adresáře AVRDUDE.
Poté do okna výzvy systému DOS zadejte příkaz avrdude –c ISPProgv1 –p m328p –u –U flash: w: [název vašeho hexadecimálního souboru]
Příkaz zapíše hexadecimální soubor do paměti mikrokontroléru. Mikrokontrolér nyní pracuje v souladu s pokyny našeho programu. Pojďme to zkontrolovat!
Krok 4: Zkontrolujte, zda funguje mikrokontrolér v souladu s pokyny našeho programu
Připojte komponenty podle schematického diagramu blikajícího obvodu LED AVR
Za prvé, potřebujeme napájení, jako to dělají všechny obvody AVR. Pro provoz čipu AVR stačí přibližně 5 voltů energie. Můžete to získat buď z baterií nebo ze stejnosměrného zdroje. Na pin 7 připojíme +5V napájení a na desce propojíme pin 8 se zemí. Mezi oba piny umístíme 0,1μF keramický kondenzátor, který vyhladí výkon napájecího zdroje, aby čip AVR získal hladké elektrické vedení.
Rezistor 10KΩ slouží k zajištění resetování napájení (POR) zařízení. Když je napájení zapnuto, napětí na kondenzátoru bude nulové, takže se zařízení resetuje (protože reset je aktivní nízko), poté se kondenzátor nabije na VCC a reset bude deaktivován.
Připojíme anodu naší LED k AVR pinu PB0. Toto je pin 14 ATMega328P. Protože se jedná o LED, chceme omezit proud tekoucí do LED, aby se nespálil. To je důvod, proč umístíme odpor 330Ω do série s LED. Katoda LED se připojí k zemi.
16 MHz krystal se používá k zajištění hodin pro mikrokontrolér Atmega328 a kondenzátory 22 pF se používají ke stabilizaci provozu krystalu.
Toto jsou všechna připojení nezbytná k rozsvícení LED. Zdroj napájení.
OK. LED bliká s jednosekundovým zpožděním. Práce mikrokontroléru odpovídá našim úkolům
Krok 5: Závěr
Je pravda, že to byl dlouhý proces jen pro blikání LED, ale pravdou je, že jste úspěšně odstranili hlavní překážky: vytvoření hardwarové platformy pro programování mikrokontroléru AVR, použití Atmel Studio jako integrované vývojové platformy, použití AVRDUDE jako softwaru pro konfigurace a programování mikrokontroléru AVR
Pokud chcete mít aktuální informace o mých projektech základních mikrokontrolérů, přihlaste se k odběru mého YouTube! Sledování a sdílení mých videí je způsob, jak podpořit to, co dělám
Přihlaste se k odběru kanálu YouTube FOG
Doporučuje:
Upgradujte štít motoru pro robot SMARS Arduino - nahrání kódu přes Bluetooth: 20 kroků
Upgrade Motor Shield for SMARS Robot Arduino - Upload Code over Bluetooth: Existuje několik možností štítu motoru, které můžete použít s Arduino Uno na tomto projektu robota SMARS, velmi často pomocí Motor Shield V1 vyrobeného společností Adafruit nebo kompatibilní (klon z Číny), ale nevýhodou tohoto štítu není Blueto
Nahrání hodnoty vibračního senzoru do IOT ThingSpeak pomocí NodeMCU: 4 kroky
Nahrání hodnoty vibračního senzoru do IOT ThingSpeak pomocí NodeMCU: Existuje několik kritických strojů nebo drahých zařízení, která jsou poškozena vibracemi. V takovém případě je vyžadován snímač vibrací, aby se zjistilo, zda stroj nebo zařízení produkuje vibrace nebo ne. Identifikace objektu, který
Vytvoření prvního programu C ++ (Windows): 12 kroků
Vytvoření prvního programu C ++ (Windows): Dobrý den, ctižádostiví kodéři! Chcete mít možnost říct svým přátelům, že jste vytvořili program? Možná jen hledáte dobré místo, kde byste mohli začít, abyste zjistili, zda by to nebyl zajímavý koníček? Nezáleží na tom, jak dobře znáte nav
Vytvoření prvního programu v jazyce Visual Basic: 7 kroků
Vytvoření prvního programu v jazyce Visual Basic: Tento návod vám ukáže, jak programovat Microsoft Visual Basic 2005 Express Edition. Příklad, který dnes vytvoříte, je jednoduchý prohlížeč obrázků. Pokud se vám tento návod líbí, stiskněte tlačítko + v horní části pokynů. Poděkovat
Vytvoření programu v jazyce Visual Basic: Webový prohlížeč: 9 kroků
Vytvoření programu v jazyce Visual Basic: Webový prohlížeč: Tento Instructable vysvětluje proces vytváření jednoduché aplikace webového prohlížeče ve VB.NET Je navržen jako pokračování mého prvního VB.NET Instructable: Vytvoření prvního programu v jazyce Visual Basic. Doporučuje se přečíst si tento inst