Spisu treści:
2025 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2025-01-23 15:03
By moldypizzaObserwuj Więcej autora:
O:.oO0Oo. Więcej o pleśniowej pizzy »
Witamy w samouczku BARE METAL pi 3 Migająca dioda LED!
W tym samouczku przejdziemy przez kolejne kroki, od początku do końca, aby uzyskać miganie diody LED za pomocą Raspberry PI 3, płytki stykowej, rezystora, diody LED i pustej karty SD.
Czym więc jest GOŁY METAL? BARE METAL to programowanie bez fanaberii. Goły metal oznacza, że mamy pełną kontrolę nad tym, co komputer zrobi w każdym szczególe. Oznacza to więc, że kod zostanie w całości napisany w asemblerze, przy użyciu zestawu instrukcji Arm. Na koniec stworzymy program, który będzie migać diodą LED, uzyskując dostęp do fizycznego adresu jednego z pinów GPIO Raspberry Pi i konfigurując go do wyjścia, a następnie włączając go i wyłączając. Próba tego projektu to świetny sposób na rozpoczęcie pracy z programowaniem wbudowanym i, miejmy nadzieję, lepsze zrozumienie działania komputera.
Czego potrzebujesz?
Sprzęt komputerowy
- Malina PI 3
- Karta SD z załadowanym obrazem startowym
- Deska do krojenia chleba
- Męskie żeńskie przewody połączeniowe
- Męskie męskie przewody połączeniowe
- PROWADZONY
- Rezystor 220 omów (nie musi być dokładnie 220 omów, większość rezystorów będzie działać)
- mini karta SD
- karta mini sd z fabrycznie załadowanym systemem operacyjnym raspberry pi (zwykle dołączona do pi)
Oprogramowanie
- kompilator GCC
- Wbudowany łańcuch narzędzi GNU
- Edytor tekstu
- program do formatowania kart sd
W porządku, zacznijmy!
Krok 1: USTAWIANIE RZECZY/RZECZYW
No dobrze… pierwszym krokiem jest zakup sprzętu. Możesz kupić części osobno lub jest zestaw, który zawiera więcej niż wystarczającą liczbę części. POŁĄCZYĆ
Ten zestaw zawiera wszystko, co jest potrzebne do skonfigurowania raspberry pi 3 i nie tylko! jedyną rzeczą, której nie ma w tym zestawie, jest dodatkowa karta mini SD. Czekać! Nie kupuj jeszcze jednego. Jeśli nie planujesz używać instalacji linuksowej wstępnie załadowanej na karcie, po prostu skopiuj zawartość dołączonej karty mini SD na później i ponownie sformatuj kartę (więcej na ten temat później). WAŻNA UWAGA: upewnij się, że przechowujesz pliki na dołączonej karcie, będą Ci potrzebne na później!
Następnie nadszedł czas na konfigurację oprogramowania. Ten samouczek nie zawiera szczegółowych instrukcji dotyczących instalacji oprogramowania. Istnieje wiele zasobów i samouczków online, jak je zainstalować:
UŻYTKOWNICY WINDOWS:
Pobierz i zainstaluj gcc
Następnie pobierz i zainstaluj wbudowany toolchain GNU ARM
LINUX/MAC
- Dystrybucje Linuksa są dostarczane z preinstalowanym gcc
- Pobierz i zainstaluj wbudowany łańcuch narzędzi GNU ARM.
Ok, więc jeśli wszystko pójdzie dobrze, powinieneś być w stanie otworzyć terminal (linux/mac) lub cmd line (windows) i spróbować wpisać
ramię-none-eabi-gcc
Wynik powinien wyglądać podobnie do pierwszego obrazu. Ma to na celu sprawdzenie, czy jest poprawnie zainstalowany.
W porządku, teraz, gdy nie ma już wstępnych wymagań, czas zacząć zabawę.
Krok 2: OBWÓD
Czas obwodu! Obwód tego jest prosty. Podłączymy led do GPIO 21 (pin 40) na pi (patrz rysunek 2 i 3). Rezystor jest również podłączony szeregowo, aby zapobiec uszkodzeniu diody. Rezystor zostanie podłączony do ujemnej kolumny na płytce stykowej, która zostanie podłączona do GND (pin 39) na pi. Podłączając diodę LED pamiętaj, aby podłączyć krótki koniec do strony ujemnej. Zobacz ostatnie zdjęcie
Krok 3: ROZRUCHOWY Mini SD
Istnieją trzy kroki, aby Twoje pi 3 rozpoznało twoją pustą kartę mini SD. Musimy znaleźć i skopiować bootcode.bin, start.elf i fixup.dat. Możesz pobrać te pliki na dołączonej karcie mini SD, jeśli kupiłeś canakit lub stwórz bootowalną kartę SD dla pi 3 z dystrybucją linux. Tak czy inaczej, te pliki są niezbędne, aby umożliwić pi rozpoznanie karty SD jako urządzenia rozruchowego. Następnie sformatuj mini SD do fat32 (większość kart mini SD jest sformatowana w fat32. Użyłem taniej karty mini SD firmy sandisk), przenieś bootcode.bin, start.elf, fixup.dat na kartę SD. I gotowe! OK jeszcze raz i w kolejności na zdjęciach kroki są następujące:
- Znajdź bootcode.bin, start.elf, fixup.dat.
- Upewnij się, że twoja karta SD jest sformatowana do fat32.
- Przenieś bootcode.bin, start.elf i fixup.dat na sformatowaną kartę SD.
Oto jak to wymyśliłem, link.
Krok 4: SPRAWDŹ Mini SD
W porządku, mamy bootowalną kartę mini SD i miejmy nadzieję, że masz w tym momencie pi 3. Więc teraz powinniśmy to przetestować, aby upewnić się, że pi 3 rozpoznaje kartę mini SD jako bootowalną.
Na pi, w pobliżu portu mini usb znajdują się dwie małe diody led. Jeden jest czerwony. To jest wskaźnik zasilania. Gdy pi jest zasilane, ta lampka powinna się świecić. Więc jeśli podłączysz teraz swoje pi bez karty mini SD, powinno zaświecić się na czerwono. Dobra, teraz odłącz pi i włóż bootowalną kartę mini SD, która została utworzona w poprzednim kroku, i podłącz pi. Czy widzisz inne światło? Tuż obok czerwonego powinno być zielone światło, które wskazuje, że odczytuje kartę SD. Ta dioda LED nazywana jest diodą ACT. Zaświeci się, gdy włożona zostanie sprawna karta SD. Będzie migać, gdy uzyska dostęp do karty mini SD.
Okej, więc dwie rzeczy powinny się wydarzyć po włożeniu rozruchowej karty mini SD i podłączeniu pi:
- Czerwona dioda LED powinna się świecić, wskazując odbiór zasilania
- Zielona dioda LED powinna się zaświecić, wskazując, że została uruchomiona na karcie mini sd
Jeśli coś poszło nie tak, spróbuj powtórzyć poprzednie kroki lub kliknij poniższy link, aby uzyskać więcej informacji.
Link tutaj jest dobrym odniesieniem.
Krok 5: KOD1
Ten projekt jest napisany w języku asemblera ARM. W tym samouczku zakłada się podstawowe zrozumienie montażu ARM, ale oto kilka rzeczy, które powinieneś wiedzieć:
.equ: przypisuje wartość do symbolu, tj. abc.equ 5 abc reprezentuje teraz pięć
- ldr: ładuje z pamięci
- str: zapisuje w pamięci
- cmp: porównuje dwie wartości, wykonując odejmowanie. Ustawia flagi.
- b: gałąź do etykiety
- dodaj: wykonuje arytmetykę
Jeśli nie masz doświadczenia z montażem ramienia, obejrzyj ten film. Da ci to dobre zrozumienie języka asemblera Arm.
Okej, więc teraz mamy obwód, który jest podłączony do naszego raspberry pi 3 i mamy kartę SD rozpoznawaną przez pi, więc naszym następnym zadaniem jest wymyślenie sposobu interakcji z obwodem poprzez załadowanie pi programem wykonywalnym. Ogólnie rzecz biorąc, musimy powiedzieć pi, aby wyprowadzało napięcie z GPIO 21 (pin podłączony do czerwonego przewodu). Następnie potrzebujemy sposobu na przełączanie diody LED, aby migała. Aby to zrobić, potrzebujemy więcej informacji. W tym momencie nie mamy pojęcia, jak przekazać GPIO 21 do wyjścia, dlatego musimy przeczytać arkusz danych. Większość mikrokontrolerów ma arkusze danych, które dokładnie określają, jak wszystko działa. Niestety pi 3 nie posiada oficjalnej dokumentacji! Istnieje jednak nieoficjalny arkusz danych. Oto dwa linki do niego:
- github.com/raspberrypi/documentation/files…
- web.stanford.edu/class/cs140e/docs/BCM2837…
Dobrze, w tym momencie powinieneś poświęcić kilka minut przed przejściem do następnego kroku, aby przejrzeć arkusz danych i zobaczyć, jakie informacje możesz znaleźć.
Krok 6: CODE2:Włącz_Led_ON
Rejestry raspberry pi 3 53 do sterowania pinami wyjściowymi/wejściowymi (peryferia). Piny są zgrupowane razem, a każda grupa jest przypisana do rejestru. W przypadku GPIO musimy mieć dostęp do rejestrów SELECT, SET i CLEAR. Aby uzyskać dostęp do tych rejestrów, potrzebujemy fizycznych adresów tych rejestrów. Kiedy czytasz arkusz danych, chcesz tylko zanotować przesunięcie adresu (bajt lo) i dodać to do adresu bazowego. Musisz to zrobić, ponieważ arkusz danych zawiera listę wirtualnych adresów linuksowych, które są w zasadzie wartościami przypisywanymi przez systemy operacyjne. Nie używamy systemu operacyjnego, więc musimy uzyskać dostęp do tych rejestrów bezpośrednio przy użyciu adresu fizycznego. Do tego potrzebne są następujące informacje:
- Podstawowy adres urządzeń peryferyjnych: 0x3f200000. Plik pdf (strona 6) mówi, że adres bazowy to 0x3f000000, jednak ten adres nie będzie działał. Użyj 0x3f200000
- Przesunięcie FSEL2(SELECT) nie pełny adres rejestru. PDF zawiera FSEL2 w 0x7E20008, ale ten adres odnosi się do wirtualnego adresu linux. Przesunięcie będzie takie samo, więc to właśnie chcemy zauważyć. 0x08
- Przesunięcie GPSET0 (SET): 0x1c
- Przesunięcie GPCLR0(CLEAR):0x28
Więc prawdopodobnie zauważyłeś, że arkusz danych zawiera 4 rejestry SELECT, 2 rejestry SET i 2 rejestry CLEAR, więc dlaczego wybrałem te, które wybrałem? Dzieje się tak, ponieważ chcemy użyć GPIO 21 i FSEL2 steruje GPIO 20-29, SET0 i CLR0 steruje GPIO 0-31. Rejestry FSEL przypisują trzy bity dla każdego pinu GPIO. Ponieważ używamy FSEL2, oznacza to, że bity 0-2 kontrolują GPIO 20, a bity 3-5 kontrolują GPIO 21 i tak dalej. Rejestry Set i CLR przypisują jeden bit do każdego pinu. Na przykład, bit 0 w SET0 i CLR0 steruje GPIO 1. Aby sterować GPIO 21 należy ustawić bit 21 w SET0 i CLR0.
Ok, więc rozmawialiśmy o tym, jak uzyskać dostęp do tych rejestrów, ale co to wszystko znaczy?
- Rejestr FSEL2 zostanie użyty do ustawienia wyjścia GPIO 21. Aby ustawić pin na wyjście, musisz ustawić bit kolejności lo trzech bitów na 1. Więc jeśli bity 3-5 kontrolują GPIO 21, oznacza to, że musimy ustawić pierwszy bit, bit 3 na 1. To powie pi że chcemy użyć GPIO 21 jako wyjścia. Więc gdybyśmy mieli spojrzeć na 3 bity dla GPIO 21, powinny wyglądać tak po ustawieniu go na wyjście, b001.
- GPSET0 mówi pi, aby włączyć pin (wyprowadzić napięcie). Aby to zrobić, po prostu przełączamy bit, który odpowiada pinowi GPIO, który chcemy. W naszym przypadku bit 21.
- GPCLR0 mówi pi, aby wyłączył pin (brak napięcia). Aby wyłączyć pin należy ustawić bit na odpowiedni pin GPIO. W naszym przypadku bit 21
Zanim przejdziemy do migającej diody, najpierw zróbmy prosty program, który po prostu włączy diodę.
Na początek musimy dodać dwie dyrektywy na początku naszego kodu źródłowego.
- .section.init mówi pi, gdzie umieścić kod
- .global _start
Następnie musimy rozplanować wszystkie adresy, których będziemy używać. Użyj.equ, aby przypisać czytelne symbole do wartości.
- .equ GPFSEL2, 0x08
- .równe GPSET0, 0x1c
- .equ GPCLR0, 0x28
- .equ BASE, 0x3f200000
Teraz stworzymy maski, aby ustawić bity, które musimy ustawić.
- .equ SET_BIT3, 0x08 To ustawi bit trzeci 0000_1000
- .equ SET_BIT21, 0x200000
Następnie musimy dodać naszą etykietę _start
_początek:
Załaduj adres bazowy do rejestru
ldr r0, =BAZA
Teraz musimy ustawić bit3 GPFSEL2
- ldr r1, SET_BIT3
- str r1, [r0, #GPFSEL2] Ta instrukcja nakazuje zapisanie z powrotem bitu 0x08 na adres GPFSEL2
Na koniec musimy włączyć GPIO 21, ustawiając bit 21 w rejestrze GPSET0
- ldr r1, =SET_BIT21
- str r1, [r0, #GPSET0]
Produkt końcowy powinien wyglądać podobnie do przedstawionego kodu.
Następnym krokiem jest skompilowanie kodu i utworzenie pliku.img, który może uruchomić pi.
- Pobierz załączony plik makefile i kernel.ld oraz jeśli chcesz kod źródłowy turn_led_on.s.
- Umieść wszystkie pliki w tym samym folderze.
- Jeśli używasz własnego kodu źródłowego, edytuj plik makefile i zastąp kod = turn_led_on.s kodem =.s
- Zapisz plik makefile.
- Użyj terminala (linux) lub okna cmd (okna), aby przejść do folderu zawierającego pliki, wpisz make i naciśnij enter
- Plik make powinien generować plik o nazwie kernel.img
- Skopiuj plik kernel.img na swoją kartę mini SD. Zawartość Twoich kart powinna wyglądać jak na zdjęciu (rys. 3):bootcode.bin, start.elf, fixup.dat i kernel.img.
- Wyjmij kartę mini SD i włóż ją do gniazda
- Podłącz pi do źródła zasilania
- Dioda powinna się zapalić!!!
NIECO WAŻNA UWAGA: Najwyraźniej instruktorzy mieli problem z tym, że plik makefile nie ma rozszerzenia, więc przesłałem go ponownie z rozszerzeniem.txt. Usuń rozszerzenie po pobraniu, aby działało poprawnie.
Zalecana:
Migająca dioda LED Hack-O-Lantern po piosence!: 6 kroków
Podążająca za piosenką migająca dioda LED Hack-O-Lantern!: Stwórz jack-o-lantern, który gra i miga wielokolorowymi diodami LED do ulubionej piosenki na Halloween
Mała migająca dioda LED Rysunek: 6 kroków
Miniaturowa migająca dioda LED: Możesz łatwo mrugać diodą LED za pomocą timera arduino lub 555. Ale możesz zrobić migający obwód bez takich układów scalonych. Jest to prosta migająca figurka wykonana z oddzielnych części
Zestaw do samodzielnego montażu w kształcie wiatraka Czerwona migająca dioda LED: 6 kroków (ze zdjęciami)
Zestaw DIY Windmill Shaped Red LED Flashing Light: Opis: Jest to nauka projektowania DIY MCU Elektroniczne zestawy wiatraków do praktyki lutowania. Łatwy w montażu: Ten produkt jest dostarczany do Ciebie, ponieważ zestaw komponentów należy zainstalować w chłodnym module, takim jak wiatrak. Nazwa znacznika elementów zestawu to
Migająca dioda LED za pomocą Arduino (TinkerCAD): 5 kroków
Migająca dioda LED przy użyciu Arduino (TinkerCAD): HI! Ta instrukcja będzie dość podstawowa. Tutaj pokażę, jak używać TinkerCAD do migania diody LED za pomocą Arduino. TinkerCAD to całkiem przydatne oprogramowanie, jeśli chodzi o szybkie testowanie kodu i jest bardzo przydatne dla tych, którzy
STM32L100 Migająca dioda LED przy użyciu Atollic TrueSTUDIO i STM32CubeMX: 5 kroków
STM32L100 Blink LED przy użyciu Atollic TrueSTUDIO i STM32CubeMX: W tym projekcie opowiem o tym, jak migać LED przy użyciu 32L100discovery. Więc tutaj opowiem Ci o zasadzie działania tego samouczka z miganiem, a także jakiego rodzaju oprogramowania i sprzętu potrzebujesz