Cuprins:
- Pasul 1: SETAREA LUCRURILOR / UTILIZĂRILOR
- Pasul 2: CIRCUIT
- Pasul 3: BOOTABLE Mini SD
- Pasul 4: VERIFICĂ Mini SD
- Pasul 5: COD 1
- Pasul 6: COD 2: Turn_Led_ON
Video: Bare Metal Raspberry Pi 3: LED intermitent: 8 pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:45
De moldypizza Urmăriți mai multe de la autor:
Despre:.oO0Oo. Mai multe despre moldypizza »
Bine ați venit la tutorialul cu LED-uri intermitente BARE METAL pi 3!
În acest tutorial vom parcurge pașii, de la început până la sfârșit, pentru a obține un LED intermitent folosind un Raspberry PI 3, o placă de rezoluție, un rezistor, un led și un card SD gol.
Deci, ce este BARE METAL? BARE METAL nu este o programare simplă. Metalul gol înseamnă că controlăm pe deplin ce va face computerul până la bit. Deci, practic înseamnă că codul va fi complet scris în asamblare, folosind setul de instrucțiuni Arm. Până la sfârșit, vom fi creat un program care va clipi un LED accesând adresa fizică a unuia dintre pinii GPIO ai Raspberry Pi și configurându-l la ieșire și apoi activându-l și oprindu-l. Încercarea acestui proiect este o modalitate excelentă de a începe cu programarea încorporată și, sperăm, de a oferi o mai bună înțelegere a modului în care funcționează un computer.
De ce ai nevoie?
Hardware
- Raspberry PI 3
- Card SD preîncărcat cu o imagine bootabilă
- Pană de pâine
- Bărbați Femei jumper fire
- Bărbați Bărbați jumper fire
- LED
- Rezistor de 220 ohmi (nu trebuie să fie exact 220 ohmi, majoritatea oricărui rezistor va funcționa)
- mini card SD
- card mini SD preîncărcat cu sistemul de operare raspberry pi (de obicei inclus cu pi)
Software
- Compilator GCC
- Lanț de instrumente încorporat GNU
- editor de text
- formatator card SD
În regulă, începeți!
Pasul 1: SETAREA LUCRURILOR / UTILIZĂRILOR
Bine, deci … primul pas este să achiziționați hardware. Puteți cumpăra piesele separat sau există un kit care vine cu piese mai mult decât suficiente. LEGĂTURĂ
Acest kit vine cu tot ce este necesar pentru configurarea raspberry pi 3 și mai mult! singurul lucru care nu este inclus în acest kit este un mini card SD suplimentar. Aștepta! Nu cumpărați încă unul încă. Dacă nu intenționați să utilizați instalarea Linux preîncărcată pe card, copiați conținutul cardului mini sd inclus pentru mai târziu și re-formatați cardul (mai multe despre asta mai târziu). NOTĂ IMPORTANTĂ: asigurați-vă că păstrați fișierele pe cardul inclus, veți avea nevoie de ele pentru mai târziu!
Apoi este timpul să configurați software-ul. Acest tutorial nu va include instrucțiuni detaliate despre cum să instalați software-ul. Există multe resurse și tutoriale online despre cum să le instalați:
UTILIZATORI WINDOWS:
Descărcați și instalați gcc
Apoi, descărcați și instalați lanțul de instrumente încorporat GNU ARM
LINUX / MAC
- Distribuțiile Linux vin cu gcc preinstalat
- Descărcați și instalați lanțul de instrumente încorporat GNU ARM.
Bine, dacă totul merge bine, atunci ar trebui să puteți deschide terminalul (linux / mac) sau linia cmd (windows) și să încercați să tastați
arm-none-eabi-gcc
Rezultatul ar trebui să arate similar cu prima imagine. Aceasta este doar pentru a verifica dacă este instalat corect.
Bine acum, că nu mai sunt necesare cerințele prealabile, este timpul să începeți cu lucrurile distractive.
Pasul 2: CIRCUIT
Timp de circuit! Circuitul pentru acest lucru este simplu. Vom conecta un led la GPIO 21 (pinul 40) pe pi (vezi imaginea 2 și 3). Un rezistor este, de asemenea, conectat în serie pentru a preveni deteriorarea ledului. Rezistorul va fi conectat la coloana negativă de pe panoul care va fi conectat la GND (pinul 39) de pe pi. Când conectați ledul, asigurați-vă că conectați capătul scurt la partea negativă. Vezi ultima poză
Pasul 3: BOOTABLE Mini SD
Există trei pași pentru a face ca Pi 3 să vă recunoască mini cardul SD gol. Trebuie să găsim și să copiem bootcode.bin, start.elf și fixup.dat. Puteți obține aceste fișiere pe mini cardul SD inclus dacă ați cumpărat canakit sau creați un card SD bootabil pentru pi 3 cu o distribuție Linux. Oricum, aceste fișiere sunt necesare pentru a permite PI să recunoască cardul SD ca dispozitiv de boot. Apoi, formatați mini SD în fat32 (majoritatea mini cardurilor SD sunt formatate în fat32. Am folosit o mini card SD ieftină de la sandisk), mutați bootcode.bin, start.elf, fixup.dat pe cardul SD. Și gata! Bine încă o dată și în ordinea imaginilor pașii sunt:
- Găsiți bootcode.bin, start.elf, fixup.dat.
- Asigurați-vă că cardul SD este formatat în fat32.
- Mutați bootcode.bin, start.elf și fixup.dat pe cardul SD formatat.
Iată cum mi-am dat seama, link.
Pasul 4: VERIFICĂ Mini SD
Bine, avem un mini card SD bootabil și, sperăm, aveți un pi 3 în acest moment. Deci, acum ar trebui să-l testăm pentru a ne asigura că pi 3 recunoaște cardul mini sd ca bootabil.
Pe pi, lângă portul mini USB există două leduri mici. Unul este roșu. Acesta este indicatorul de alimentare. Când pi primește energie, această lumină ar trebui să fie aprinsă. Deci, dacă vă conectați pi-ul chiar acum, fără card mini SD, acesta ar trebui să se aprindă în roșu. Bine, acum deconectați-vă de pe pi și puneți-vă mini-cardul SD de boot care a fost creat în pasul anterior și conectați pi-ul. Mai vedeți o lumină? Ar trebui să existe o lumină verde, chiar lângă cea roșie, care să indice că citește cardul SD. Acest led se numește ACT led. Se va aprinde atunci când este introdus un card SD viabil. Va clipi când accesează cartela mini sd.
Bine, așa că ar fi trebuit să se întâmple două lucruri după ce ați introdus mini cardul SD bootabil și ați conectat pi-ul:
- Ledul roșu ar trebui să fie aprins indicând recepția puterii
- Ledul verde ar trebui să fie aprins, indicând faptul că a pornit pe mini cardul SD
Dacă ceva nu a funcționat corect, încercați să repetați pașii anteriori sau faceți clic pe linkul de mai jos pentru mai multe informații.
Link aici este o referință bună.
Pasul 5: COD 1
Acest proiect este scris în limbajul de asamblare ARM. În acest tutorial se presupune o înțelegere de bază a asamblării ARM, dar iată câteva lucruri pe care ar trebui să le știți:
.equ: atribuie o valoare unui simbol adică abc.equ 5 abc reprezintă acum cinci
- ldr: se încarcă din memorie
- str: scrie în memorie
- cmp: compară două valori prin efectuarea unei scăderi. Setează steaguri.
- b: ramură la etichetă
- add: efectuează aritmetica
Dacă nu aveți nicio experiență cu asamblarea brațelor, urmăriți acest videoclip. Vă va oferi o bună înțelegere a limbajului de asamblare al brațului.
Bine, așa că acum avem un circuit conectat la raspberry pi 3 și avem un card SD pe care pi îl recunoaște, așa că următoarea noastră sarcină este să aflăm cum să interacționăm cu circuitul încărcând pi cu un program executabil. În general, ceea ce trebuie să facem este să spunem lui pi să emită o tensiune de la GPIO 21 (pin conectat la firul roșu). Apoi, avem nevoie de o modalitate de a comuta ledul pentru a-l clipi. Pentru a face acest lucru avem nevoie de mai multe informații. În acest moment nu avem nicio idee cum să spunem GPIO 21 să producă, motiv pentru care trebuie să citim fișa tehnică. Majoritatea microcontrolerelor au fișe tehnice care specifică exact cum funcționează totul. Din păcate, pi 3 nu are documentație oficială! Cu toate acestea, există o fișă tehnică neoficială. Iată două linkuri către acesta:
- github.com/raspberrypi/documentation/files…
- web.stanford.edu/class/cs140e/docs/BCM2837…
Bine, în acest moment, ar trebui să luați câteva minute înainte de a trece la pasul următor pentru a căuta în foaia tehnică și a vedea ce informații puteți găsi.
Pasul 6: COD 2: Turn_Led_ON
Raspberry pi 3 53 se înregistrează pentru a controla pinii de ieșire / intrare (periferice). Pinii sunt grupați împreună și fiecare grup este atribuit unui registru. Pentru GPIO trebuie să putem accesa registrele SELECT, registrul SET și registrele CLEAR. Pentru a accesa aceste registre avem nevoie de adresa fizică a acestor registre. Când citiți fișa tehnică, doriți doar să notați compensarea adresei (lo octet) și să o adăugați la adresa de bază. Trebuie să faceți acest lucru, deoarece foaia tehnică listează adresa virtuală Linux, care sunt practic valori pe care sistemele de operare le atribuie. Nu folosim un sistem de operare, așa că trebuie să accesăm aceste registre direct folosind adresa fizică. Pentru aceasta aveți nevoie de următoarele informații:
- Adresa de bază a perifericelor: 0x3f200000. PDF-ul (pagina6) spune că adresa de bază este 0x3f000000, însă această adresă nu va funcționa. Utilizați 0x3f200000
- Decalajul FSEL2 (SELECT) nu adresa completă a registrului. PDF listează FSEL2 la 0x7E20008, dar această adresă se referă la adresa virtuală Linux. Decalajul va fi același, așa că dorim să observăm. 0x08
- Offset GPSET0 (SET): 0x1c
- Offset GPCLR0 (CLEAR): 0x28
Așa că probabil ați observat că fișa tehnică listează 4 registre SELECT, 2 registre SET și 2 registre CLEAR, de ce le-am ales pe cele pe care le-am făcut? Acest lucru se datorează faptului că dorim să utilizăm GPIO 21 și FSEL2 controlează GPIO 20-29, SET0 și CLR0 controlează GPIO 0-31. Registrele FSEL atribuie trei biți pentru fiecare pin GPIO. Deoarece folosim FSEL2, asta înseamnă că biții 0-2 controlează GPIO 20, iar biții 3-5 controlează GPIO 21 și așa mai departe. Registrele Set și CLR atribuie un singur bit fiecărui pin. De exemplu, bitul 0 din SET0 și CLR0 controlează GPIO 1. Pentru a controla GPIO 21, ați seta bitul 21 în SET0 și CLR0.
Bine, așa că am vorbit despre cum să accesați aceste registre, dar ce înseamnă totul?
- Registrul FSEL2 va fi utilizat pentru a seta GPIO 21 la ieșire. Pentru a seta un pin la ieșire, trebuie să setați bitul de ordine lo al celor trei biți la 1. Deci, dacă biții 3-5 controlează GPIO 21 asta înseamnă că trebuie să setăm primul bit, bitul 3 la 1. Acest lucru va spune pi că vrem să folosim GPIO 21 ca ieșire. Deci, dacă ar fi să ne uităm la cei 3 biți pentru GPIO 21, ar trebui să arate așa după ce l-am setat la ieșire, b001.
- GPSET0 îi spune lui pi să pornească pinul (ieșire o tensiune). Pentru a face acest lucru, trebuie doar să comutăm bitul care corespunde pinului GPIO dorit. În cazul nostru, bitul 21.
- GPCLR0 îi spune lui pi să oprească pinul (fără tensiune). Pentru a opri pinul, setați bitul la pinul GPIO corespunzător. În cazul nostru bitul 21
Înainte de a ajunge la un led intermitent, mai întâi să facem un program simplu care va porni pur și simplu ledul.
Pentru a începe, trebuie să adăugăm două directive în partea de sus a codului sursă.
- .secțiunea.init îi spune pi unde să pună codul
- .global _start
Apoi, trebuie să dispunem toate adresele pe care le vom folosi. Utilizați.equ pentru a atribui simboluri lizibile valorilor.
- .equ GPFSEL2, 0x08
- .equ GPSET0, 0x1c
- .equ GPCLR0, 0x28
- .equ BASE, 0x3f200000
Acum vom crea măști pentru a seta biții care trebuie să fie setați.
- .equ SET_BIT3, 0x08 Acest lucru va seta bitul trei 0000_1000
- .equ SET_BIT21, 0x200000
Apoi, trebuie să adăugăm eticheta noastră _start
_start:
Încărcați adresa de bază în registru
ldr r0, = BASE
Acum trebuie să setăm bit3 de GPFSEL2
- ldr r1, SET_BIT3
- str r1, [r0, # GPFSEL2] Această instrucțiune spune să scrieți înapoi bitul 0x08 la adresa GPFSEL2
În cele din urmă, trebuie să setăm GPIO 21 la pornit prin setarea bitului 21 în registrul GPSET0
- ldr r1, = SET_BIT21
- str r1, [r0, # GPSET0]
Produsul final ar trebui să arate ceva asemănător codului din imagine.
Următorul pas este să compilați codul și să creați un fișier.img pe care pi îl poate rula.
- Descărcați makefile atașat și kernel.ld și dacă doriți codul sursă turn_led_on.s.
- Puneți toate fișierele în același folder.
- Dacă utilizați propriul cod sursă, editați makefile și înlocuiți codul = turn_led_on.s cu codul =.s
- Salvați makefile-ul.
- Utilizați terminalul (linux) sau fereastra cmd (windows) pentru a naviga la folderul dvs. care conține fișierele și tastați make și apăsați Enter
- Fișierul make ar trebui să genereze un fișier numit kernel.img
- Copiați kernel.img pe cartela mini sd. Conținutul cardurilor dvs. ar trebui să fie așa cum este prezentat (imaginea 3): bootcode.bin, start.elf, fixup.dat și kernel.img.
- Scoateți cardul mini sd și introduceți-l în pi
- Conectați pi la sursa de alimentare
- LED-ul ar trebui să se aprindă !!!
NOTĂ UȘOR IMPORTANTĂ: Aparent instructabile au avut o problemă cu makefile neavând o extensie, așa că l-am reîncărcat cu o extensie.txt. Vă rugăm să eliminați extensia atunci când o descărcați pentru a funcționa corect.
Recomandat:
Trei moduri de a realiza un circuit intermitent LED cu control al ratei și intermitent alternativ: 3 pași
Trei moduri de a crea un circuit de intermitent LED cu control al ratei și intermitent alternativ: Circuitul intermitent este un circuit în care LED-ul clipește ON și OFF într-o rată influențată de condensatorul utilizat. Aici, vă voi arăta trei moduri diferite de a realiza acest circuit folosind : 1. Tranzistori 2. 555 Timer IC3. Quartz CircuitLDR poate fi, de asemenea, utilizat pentru a
AVR / Arduino intermitent cu Raspberry Pi: 3 pași (cu imagini)
AVR / Arduino intermitent cu Raspberry Pi: un programator în sistem (ISP) este un dispozitiv pe care îl puteți utiliza pentru a programa multe microcontrolere, de exemplu ATMega328p, care este creierul unui Arduino Uno. Puteți cumpăra ceva de genul USBtinyISP sau chiar puteți folosi un Arduino. Această voință instructabilă
Tutorial Raspberry Pi despre LED-ul intermitent: 4 pași
Tutorial Raspberry Pi pentru intermitent LED: Cerință: Raspberry PiBreadBoard sau T-Cobbler Jumper WiresLED Faceți clic aici pentru mai multe informații
Începeți primul dvs. proiect cu Raspberry: LED intermitent: 4 pași
Începeți primul dvs. proiect cu Raspberry: LED intermitent: În acest proiect vă voi arăta cum să programați Raspberry Pi pentru a face un LED intermitent, dacă ați cumpărat aproape un Raspberry pi și nu știți nimic de unde să începeți, acest lucru tutorialul se potrivește. Pe lângă Raspberry Pi care rulează Raspbian, y
Lampă LED verde (controlată cu led intermitent): 9 pași
Lampă LED verde (controlată cu led intermitent): Acum câțiva ani am citit un articol despre iluminatul din țările în curs de dezvoltare, spunând că 1,6 miliarde de oameni nu au acces la electricitate și că o sursă fiabilă de iluminare este o problemă MARE pentru ei. O companie canadiană produce și distribuie lightinâ € ¦