Spisu treści:

Konfiguracja bitów bezpiecznika mikrokontrolera AVR. Tworzenie i przesyłanie do pamięci Flash mikrokontrolera programu migania diody LED.: 5 kroków
Konfiguracja bitów bezpiecznika mikrokontrolera AVR. Tworzenie i przesyłanie do pamięci Flash mikrokontrolera programu migania diody LED.: 5 kroków

Wideo: Konfiguracja bitów bezpiecznika mikrokontrolera AVR. Tworzenie i przesyłanie do pamięci Flash mikrokontrolera programu migania diody LED.: 5 kroków

Wideo: Konfiguracja bitów bezpiecznika mikrokontrolera AVR. Tworzenie i przesyłanie do pamięci Flash mikrokontrolera programu migania diody LED.: 5 kroków
Wideo: Marcin Wójcik - CISCO - Arduino - Szymon Flak - PodCast 31 #1 2024, Czerwiec
Anonim
Image
Image

W takim przypadku stworzymy prosty program w kodzie C i wypiszemy go w pamięci mikrokontrolera. Napiszemy własny program i skompilujemy plik szesnastkowy, wykorzystując Atmel Studio jako zintegrowaną platformę programistyczną. Skonfigurujemy fuse bity i wgramy plik hex do pamięci mikrokontrolera AVR ATMega328P, korzystając z własnego programatora i oprogramowania AVRDUDE.

AVRDUDE - to program do pobierania i wgrywania pamięci on-chip mikrokontrolerów AVR firmy Atmel. Może programować Flash i EEPROM, a jeśli jest obsługiwany przez protokół programowania szeregowego, może programować bity bezpiecznika i blokady.

Krok 1: Pisanie programu i kompilacja pliku szesnastkowego za pomocą Atmel Studio

Pisanie programu i kompilacja pliku szesnastkowego za pomocą Atmel Studio
Pisanie programu i kompilacja pliku szesnastkowego za pomocą Atmel Studio
Pisanie programu i kompilacja pliku szesnastkowego za pomocą Atmel Studio
Pisanie programu i kompilacja pliku szesnastkowego za pomocą Atmel Studio

Jeśli nie posiadasz Atmel Studio, powinieneś je pobrać i zainstalować:

Ten projekt będzie używał C, więc wybierz opcję GCC C Executable Project z listy szablonów, aby wygenerować projekt wykonywalny typu bare-bones.

Następnie należy określić, na jakie urządzenie będzie realizowany projekt. Projekt ten zostanie opracowany dla mikrokontrolera AVR ATMega328P.

Wpisz kod programu w obszarze Main Source Editor w Atmel Studio. Główny edytor źródła - to okno jest głównym edytorem plików źródłowych w bieżącym projekcie. Edytor posiada funkcje sprawdzania pisowni i autouzupełniania.

1. Musimy powiedzieć kompilatorowi, z jaką prędkością działa nasz układ, aby mógł poprawnie obliczać opóźnienia.

#ifndef F_CPU

#define F_CPU 16000000UL // mówienie częstotliwości kryształu kontrolera (16 MHz AVR ATMega328P) #endif

2. Dołączamy preambułę, w której umieszczamy informacje dołączane z innych plików, które definiują globalne zmienne i funkcje.

#include //header, aby włączyć kontrolę przepływu danych przez piny. Definiuje piny, porty itp.

#dołącz //nagłówek, aby włączyć funkcję opóźnienia w programie

3. Po preambule pojawia się funkcja main().

int główny(unieważniony) {

Funkcja main() jest unikalna i różni się od wszystkich innych funkcji. Każdy program w C musi mieć dokładnie jedną funkcję main(). Main() to miejsce, w którym AVR rozpoczyna wykonywanie kodu po pierwszym włączeniu zasilania, więc jest to punkt wejścia programu.

4. Ustaw pin 0 portu PORTB jako wyjście.

DDRB=0b0000001; //Ustaw PORTB1 jako wyjście

Robimy to, wpisując liczbę binarną do rejestru kierunku danych B. Rejestr kierunku danych B pozwala nam tworzyć bity wejścia lub wyjścia rejestru B. Zapisanie jedynki powoduje, że są one wyprowadzane, a 0 powoduje, że wchodzą. Ponieważ dołączamy diodę LED, aby działała jako wyjście, zapisujemy liczbę binarną, dzięki czemu pin 0 PORT B jest wyjściem.

5. Pętla.

podczas gdy (1) {

Ta instrukcja jest pętlą, często nazywaną pętlą główną lub pętlą zdarzeń. Ten kod jest zawsze prawdziwy; dlatego wykonuje się w kółko w nieskończonej pętli. Nigdy się nie kończy. W związku z tym dioda LED będzie migać w nieskończoność, chyba że zasilanie zostanie wyłączone z mikrokontrolera lub kod zostanie skasowany z pamięci programu.

6. Włącz diodę LED podłączoną do portu PB0

PORTB= 0b00000001; //włącza diodę LED podłączoną do portu PB0

Ta linia daje 1 do PB0 PortB. PORTB to rejestr sprzętowy w układzie AVR, który zawiera 8 pinów, PB7-PB0, biegnących od lewej do prawej. Umieszczenie 1 na końcu daje 1 do PB0; ustawia to PB0 na wysokim poziomie, który go włącza. W związku z tym dioda LED podłączona do pinu PB0 zaświeci się i zaświeci.

7. Opóźnienie

_delay_ms(1000); //tworzy 1-sekundowe opóźnienie

To stwierdzenie tworzy 1-sekundowe opóźnienie, dzięki czemu dioda LED włącza się i świeci dokładnie przez 1 sekundę.

8. Wyłącz wszystkie piny B, w tym PB0

PORTB= 0b00000000; //Wyłącza wszystkie piny B, w tym PB0

Ta linia wyłącza wszystkie 8 pinów Portu B, więc nawet PB0 jest wyłączony, więc dioda LED gaśnie.

9. Kolejne opóźnienie

_delay_ms(1000); //tworzy kolejne 1-sekundowe opóźnienie

Wyłącza się dokładnie na 1 sekundę, przed ponownym uruchomieniem pętli i napotkaniem linii, która włącza ją ponownie, powtarzając cały proces. Dzieje się to w nieskończoność, dzięki czemu dioda LED stale miga.

10. Oświadczenie o zwrotach

}

powrót (0); //ta linia nigdy nie została osiągnięta }

Ostatni wiersz naszego kodu to instrukcja return(0). Mimo że ten kod nigdy nie jest wykonywany, ponieważ istnieje nieskończona pętla, która nigdy się nie kończy, w przypadku naszych programów działających na komputerach stacjonarnych ważne jest, aby system operacyjny wiedział, czy działają poprawnie, czy nie. Z tego powodu GCC, nasz kompilator, chce, aby każda metoda main() kończyła się kodem powrotu. Kody zwrotne są niepotrzebne w przypadku kodu AVR, który działa niezależnie od dowolnego obsługującego systemu operacyjnego; niemniej jednak kompilator zgłosi ostrzeżenie, jeśli nie zakończysz main za pomocą return().

Ostatnim krokiem jest zbudowanie projektu. Oznacza to kompilację i ostateczne połączenie wszystkich plików obiektowych w celu wygenerowania pliku wykonywalnego (.hex). Ten plik szesnastkowy jest generowany w folderze Debug, który znajduje się w folderze Project. Ten plik szesnastkowy jest gotowy do załadowania do układu mikrokontrolera.

Krok 2: Zmiana domyślnej konfiguracji bitów bezpiecznika mikrokontrolera

Zmiana domyślnej konfiguracji bitów bezpiecznika mikrokontrolera
Zmiana domyślnej konfiguracji bitów bezpiecznika mikrokontrolera
Zmiana domyślnej konfiguracji bitów bezpiecznika mikrokontrolera
Zmiana domyślnej konfiguracji bitów bezpiecznika mikrokontrolera
Zmiana domyślnej konfiguracji bitów bezpiecznika mikrokontrolera
Zmiana domyślnej konfiguracji bitów bezpiecznika mikrokontrolera

Ważne jest, aby pamiętać, że niektóre z końcówek bezpiecznika mogą być użyte do zablokowania pewnych aspektów chipa i potencjalnie mogą go zepsuć (uczynić go bezużytecznym)

W ATmega328P jest używanych łącznie 19 bitów bezpiecznika, które są podzielone na trzy różne bajty bezpiecznika. Trzy bity bezpiecznika są zawarte w „Extended Fuse Byte”, osiem jest zawartych w „Fuse High Byte”, a osiem więcej jest zawartych w „Fuse Low Byte”. Istnieje również czwarty bajt używany do programowania bitów blokujących.

Każdy bajt ma 8 bitów, a każdy bit jest osobnym ustawieniem lub flagą. Kiedy mówimy o ustawianiu, a nie ustawianiu, programowaniu, nie programowaniu bezpieczników, w rzeczywistości używamy binarnych. 1 oznacza nieustawione, nie zaprogramowane, a zero oznacza ustawione, zaprogramowane. Podczas programowania bezpieczników można użyć notacji binarnej lub częściej notacji szesnastkowej.

Układy ATmega 328P mają wbudowany oscylator RC o częstotliwości 8 MHz. Nowe układy są dostarczane z tym zestawem jako źródło zegara i aktywnym bezpiecznikiem CKDIV8, co daje zegar systemowy 1 MHz. Czas uruchamiania jest ustawiony na maksimum i włączony jest limit czasu.

Nowe układy ATMega 328P mają generalnie następujące ustawienia bezpieczników:

Niski bezpiecznik = 0x62 (0b01100010)

Wysoki bezpiecznik = 0xD9 (0b11011001)

Przedłużony bezpiecznik = 0xFF (0b11111111)

Będziemy używać układu ATmega 328 z zewnętrznym kryształem 16MHz. Dlatego musimy odpowiednio zaprogramować bity „Fuse Low Byte”.

1. Bity 3-0 kontrolują wybór oscylatora, a domyślne ustawienie 0010 to użycie skalibrowanego wewnętrznego oscylatora RC, czego nie chcemy. Chcemy, aby oscylator kwarcowy małej mocy działał od 8,0 do 16,0 MHz, więc bity 3-1 (CKSEL[3:1]) powinny być ustawione na 111.

2. Bity 5 i 4 kontrolują czas rozruchu, a domyślne ustawienie 10 dotyczy opóźnienia rozruchu wynoszącego sześć cykli zegara od wyłączenia zasilania i oszczędzania energii, plus dodatkowe opóźnienie rozruchu wynoszące 14 cykli zegara plus 65 milisekund od zresetowania.

Aby być po bezpiecznej stronie oscylatora kwarcowego o małej mocy, chcemy mieć maksymalne możliwe opóźnienie wynoszące 16 000 cykli zegara od wyłączenia i oszczędzania energii, więc SUT[1] powinien być ustawiony na 1, plus dodatkowe opóźnienie startu 14 cykli zegara plus 65 milisekund od zresetowania, więc SUT[0] powinno być ustawione na 1. Ponadto CKSEL[0] powinno być ustawione na 1.

3. Bit 6 steruje wyjściem zegara do PORTB0, na czym nam nie zależy. Tak więc bit 6 można pozostawić na 1.

4. Bit 7 kontroluje operację dzielenia przez 8, a domyślne ustawienie 0 ma włączoną funkcję, której nie chcemy. Tak więc bit 7 należy zmienić z 0 na 1.

Dlatego nowy niski bajt Fuse powinien mieć wartość 11111111, co w notacji szesnastkowej to 0xFF

Do zaprogramowania bitów „Fuse Low Byte” możemy użyć naszego programatora (https://www.instructables.com/id/ISP-Programmer-fo…) oraz oprogramowania AVRDUDE. AVRDUDE to narzędzie wiersza poleceń, które służy do pobierania i przesyłania do mikrokontrolerów Atmel.

Pobierz AVRDUDE:

Najpierw musimy dodać opis naszego programatora do pliku konfiguracyjnego AVRDUDE. W systemie Windows plik konfiguracyjny znajduje się zwykle w tej samej lokalizacji, co plik wykonywalny AVRDUDE.

Wklej tekst w pliku konfiguracyjnym avrdude.conf:

# ISPProgv1

id programisty = "ISPProgv1"; desc = "uderzanie portu szeregowego, reset=dtr sck=rts mosi=txd miso=cts"; typ = "serb"; typ_połączenia = szeregowy; reset = 4; sck = 7; mosi = 3; miso = 8;;

Przed uruchomieniem AVRDUDE musimy podłączyć mikrokontroler do programatora zgodnie ze schematem

Otwórz okno wiersza poleceń DOS.

1. Aby wyświetlić listę programistów obsługujących avrdude, wpisz polecenie avrdude -c c. Jeśli wszystko jest w porządku, lista powinna zawierać identyfikator programisty „ISPProgv1”

2. Aby wyświetlić listę obsługiwanych urządzeń firmy Atmel, wpisz polecenie avrdude -c ISPProgv1. Na liście powinno znajdować się urządzenie m328p dla Atmel ATMega 328P.

Następnie wpisz avrdude -c ISPProgv1 –p m328p, polecenie poinformuje avrdude jaki programator jest używany i jaki mikrokontroler Atmel jest podłączony. Prezentuje sygnaturę ATmega328P w notacji szesnastkowej: 0x1e950f. Przedstawia programowanie fuse bitów obecnie w ATmega328P również w notacji szesnastkowej; w takim przypadku bajty bezpiecznika są zaprogramowane fabrycznie.

Następnie wpisz avrdude -c ISPProgv1 –p m328p –U lfuse:w:0xFF:m, Jest to polecenie informujące avrdude, jaki programator jest używany i jaki mikrokontroler Atmel jest podłączony oraz aby zmienić Fuse Low Byte na 0xFF.

Teraz sygnał zegarowy powinien pochodzić z oscylatora kwarcowego małej mocy.

Krok 3: Wypalenie programu w pamięci mikrokontrolera ATMega328P

Wypalanie programu w pamięci mikrokontrolera ATMega328P
Wypalanie programu w pamięci mikrokontrolera ATMega328P
Wypalanie programu w pamięci mikrokontrolera ATMega328P
Wypalanie programu w pamięci mikrokontrolera ATMega328P

Najpierw skopiuj plik hex programu, który stworzyliśmy na początku instrukcji do katalogu AVRDUDE.

Następnie wpisz w okienku DOS polecenie avrdude –c ISPProgv1 –p m328p –u –U flash:w:[nazwa pliku hex]

Polecenie zapisuje plik hex do pamięci mikrokontrolera. Teraz mikrokontroler pracuje zgodnie z instrukcjami naszego programu. Sprawdźmy to!

Krok 4: Sprawdź, czy mikrokontroler działa zgodnie z instrukcjami naszego programu

Sprawdź, czy mikrokontroler działa zgodnie z instrukcjami naszego programu
Sprawdź, czy mikrokontroler działa zgodnie z instrukcjami naszego programu
Sprawdź, czy mikrokontroler działa zgodnie z instrukcjami naszego programu
Sprawdź, czy mikrokontroler działa zgodnie z instrukcjami naszego programu
Sprawdź, czy mikrokontroler działa zgodnie z instrukcjami naszego programu
Sprawdź, czy mikrokontroler działa zgodnie z instrukcjami naszego programu

Podłączyć elementy zgodnie ze schematem ideowym obwodu diody migającej AVR

Po pierwsze, potrzebujemy zasilania, tak jak robią to wszystkie obwody AVR. Do działania układu AVR wystarcza około 5 woltów. Możesz to uzyskać z baterii lub zasilacza prądu stałego. Podłączamy +5V zasilania do pinu 7 i podłączamy pin 8 do masy na płytce stykowej. Pomiędzy obydwoma pinami umieszczamy kondensator ceramiczny 0,1 μF, aby wygładzić moc zasilacza, aby układ AVR otrzymał płynną linię zasilania.

Rezystor 10KΩ służy do zapewnienia urządzenia Power On Reset (POR). Po włączeniu zasilania napięcie na kondensatorze będzie zerowe, więc urządzenie zresetuje się (ponieważ reset jest aktywny w stanie niskim), następnie kondensator ładuje się do VCC i reset zostanie wyłączony.

Anodę naszej diody podłączamy do pinu PB0 AVR. To jest pin 14 ATMega328P. Ponieważ jest to dioda LED, chcemy ograniczyć prąd płynący do diody, aby się nie przepaliła. Dlatego z diodą łączymy szeregowo rezystor 330 Ω. Katoda diody LED zostaje podłączona do masy.

Kryształ 16 MHz służy do zapewnienia zegara mikrokontrolera Atmega328, a kondensatory 22pF służą do stabilizacji pracy kryształu.

To są wszystkie połączenia niezbędne do zapalenia diody LED. Zasilacz.

Ok. Dioda miga z jednosekundowym opóźnieniem. Praca mikrokontrolera odpowiada naszym zadaniom

Krok 5: Wniosek

Trzeba przyznać, że był to długi proces dla samego migania diody LED, ale prawda jest taka, że udało Ci się pokonać główne przeszkody: stworzenie platformy sprzętowej do programowania mikrokontrolera AVR, wykorzystanie Atmel Studio jako zintegrowanej platformy programistycznej, użycie AVRDUDE jako oprogramowania do konfigurowanie i programowanie mikrokontrolera AVR

Jeśli chcesz być na bieżąco z moimi podstawowymi projektami mikrokontrolerów, zasubskrybuj mój YouTube! Oglądanie i udostępnianie moich filmów to sposób na wspieranie tego, co robię

Subskrybuj kanał YouTube FOG

Zalecana: