Spisu treści:

Raspberry Pi 3: Migająca dioda LED: 8 kroków
Raspberry Pi 3: Migająca dioda LED: 8 kroków

Wideo: Raspberry Pi 3: Migająca dioda LED: 8 kroków

Wideo: Raspberry Pi 3: Migająca dioda LED: 8 kroków
Wideo: Migająca dioda led 1W połączona z Raspberry Pi poprzez układ ULN2803A 2024, Lipiec
Anonim
Raspberry Pi 3: migająca dioda LED
Raspberry Pi 3: migająca dioda LED

By moldypizzaObserwuj Więcej autora:

Przycisk Raspberry Pi z diodami LED goły metal
Przycisk Raspberry Pi z diodami LED goły metal
Przycisk Raspberry Pi z diodami LED goły metal
Przycisk Raspberry Pi z diodami LED goły metal
Skrzynie
Skrzynie
Skrzynie
Skrzynie
Jak zrobić płaskorzeźbę na Dzień Weteranów?
Jak zrobić płaskorzeźbę na Dzień Weteranów?
Jak zrobić płaskorzeźbę na Dzień Weteranów?
Jak zrobić płaskorzeźbę na Dzień Weteranów?

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

KONFIGURACJA RZECZY/RZECZY
KONFIGURACJA RZECZY/RZECZY

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

OKRĄŻENIE
OKRĄŻENIE
OKRĄŻENIE
OKRĄŻENIE
OKRĄŻENIE
OKRĄŻENIE

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

BUTY Mini SD
BUTY Mini SD
BUTY Mini SD
BUTY Mini SD
BUTY Mini SD
BUTY 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:

  1. Znajdź bootcode.bin, start.elf, fixup.dat.
  2. Upewnij się, że twoja karta SD jest sformatowana do fat32.
  3. Przenieś bootcode.bin, start.elf i fixup.dat na sformatowaną kartę SD.

Oto jak to wymyśliłem, link.

Krok 4: SPRAWDŹ Mini SD

SPRAWDŹ Mini SD
SPRAWDŹ Mini SD
SPRAWDŹ Mini SD
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:

  1. Czerwona dioda LED powinna się świecić, wskazując odbiór zasilania
  2. 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:

  1. github.com/raspberrypi/documentation/files…
  2. 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

CODE2:Włącz_Led_ON
CODE2:Włącz_Led_ON
CODE2:Włącz_Led_ON
CODE2:Włącz_Led_ON
CODE2:Włącz_Led_ON
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: