Obsah:

Konfigurace pojistkových bitů mikrokontroléru AVR. Vytvoření a nahrání programu Flash LED do flash paměti mikrokontroléru: 5 kroků
Konfigurace pojistkových bitů mikrokontroléru AVR. Vytvoření a nahrání programu Flash LED do flash paměti mikrokontroléru: 5 kroků

Video: Konfigurace pojistkových bitů mikrokontroléru AVR. Vytvoření a nahrání programu Flash LED do flash paměti mikrokontroléru: 5 kroků

Video: Konfigurace pojistkových bitů mikrokontroléru AVR. Vytvoření a nahrání programu Flash LED do flash paměti mikrokontroléru: 5 kroků
Video: Elektrická instalace - Postup výroby domovního rozvaděče 2024, Červen
Anonim
Image
Image

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

Program pro psaní a kompilace hexadecimálního souboru pomocí Atmel Studio
Program pro psaní a kompilace hexadecimálního souboru pomocí Atmel Studio
Program pro psaní a kompilace hexadecimálního souboru pomocí Atmel Studio
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

Změna výchozí konfigurace pojistkových bitů mikrořadiče
Změna výchozí konfigurace pojistkových bitů mikrořadiče
Změna výchozí konfigurace pojistkových bitů mikrořadiče
Změna výchozí konfigurace pojistkových bitů mikrořadiče
Změna výchozí konfigurace pojistkových bitů mikrořadiče
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

Vypálení programu do paměti mikrokontroléru ATMega328P
Vypálení programu do paměti mikrokontroléru ATMega328P
Vypálení programu do paměti mikrokontroléru ATMega328P
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

Zkontrolujte, zda funguje mikrokontrolér v souladu s pokyny našeho programu
Zkontrolujte, zda funguje mikrokontrolér v souladu s pokyny našeho programu
Zkontrolujte, zda funguje mikrokontrolér v souladu s pokyny našeho programu
Zkontrolujte, zda funguje mikrokontrolér v souladu s pokyny našeho programu
Zkontrolujte, zda funguje mikrokontrolér v souladu s pokyny našeho programu
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: