Laboratorul 01: Simulator Wowki, introducere în RP2040
Microcontroler
Microcontrolerele sunt circuite integrate (IC) mici pe care le puteți programa să îndeplinească diverse sarcini. Acestea au un procesor, memorie și pini de intrare/ieșire (GPIO) pentru a interacționa cu lumea externă. De la jucării până la mașini, microcontrolerele sunt prezente peste tot în electronică.
RP2040 este un microcontroler puternic și versatil construit de Raspberry Pi Foundation. Acest cip, bazat pe arhitectura ARM, este inima plăcilor de dezvoltare precum popularul Raspberry Pi Pico. De asemenea, folosim RP2040 în placa Marble Pico.
Raspberry Pi Pico oferă o flexibilitate remarcabilă în ceea ce privește programarea. Alegerea metodei potrivite depinde de nevoile și preferințele tale. Indiferent de metoda aleasă, Pico-SDK oferă o bază solidă pentru dezvoltarea de aplicații embedded.
Pentru a debloca potențialul microcontroller-ului RP2040, Raspberry Pi Foundation a creat Pico-SDK. Acest kit de dezvoltare software (SDK) gratuit și open-source vă oferă instrumentele și bibliotecile necesare pentru a programa RP2040 în C și C++.
Pe lângă Pico-SDK, există și alte metode eficiente pentru a programa Raspberry Pi Pico, fiecare având propriile avantaje și dezavantaje:
1. MicroPython este o implementare a limbajului Python pentru microcontrolere și sisteme embedded. Oferă avantajele Python-ului, cum ar fi dezvoltarea rapidă și sintaxa simplă, păstrând în același timp o amprentă mică potrivită pentru dispozitive cu resurse limitate. Este ideal pentru prototipuri rapide și proiecte educaționale, deși poate avea performanțe ușor mai scăzute decât C/C++ pentru aplicații care necesită calcule intensive.
2. CircuitPython este o variantă a Python-ului optimizată pentru microcontrolere, cu accent pe ușurința utilizării și integrarea hardware. Este similar cu MicroPython, dar se remarcă prin integrarea superioară cu plăci precum Raspberry Pi Pico și o comunitate în expansiune. Deși excelent pentru proiecte educaționale și de dimensiuni mici spre medii, poate avea unele limitări în comparație cu MicroPython în ceea ce privește gama de biblioteci și funcționalități disponibile.
3. Alte limbaje:
Rust: Un limbaj de programare modern, sigur și performant, care devine din ce în ce mai popular în dezvoltarea embedded.
Assembly: Pentru aplicații foarte specifice și optimizate, dar necesită o înțelegere profundă a arhitecturii procesorului.
IDE-uri și medii de dezvoltare:
Thonny: Simplu, ideal pentru începători și MicroPython.
Visual Studio Code: Versatil, cu extensii pentru C/C++, MicroPython și CircuitPython.
Arduino IDE: Familiar utilizatorilor de Arduino, configurabil pentru Pico.
Linia de comandă: Control complet pentru utilizatori avansați.
Platform IO: Platformă unificată pentru proiecte IoT, inclusiv Pico.
Opțiuni pentru programare cu SDK-ul C:
Desi marea majoritatea a proiectelor experimentate in cadrul laboratorului pot fi realizate cu MicroPython sau CircuitPython pentru proiectele mai complexe recomandam utilizarea C/C++ in special din considerente de performanta. De asemenea recomandam sa verificati disponibilitatea bibliotecilor, pentru a va asigura că există biblioteci disponibile pentru limbajul și proiectul dvs.
RP2040
Numele acestui cip a fost furnizat de Raspberry Pi Foundation și este explicat în fișa tehnică:
RP: Reprezintă “Raspberry Pi”, similar cu modul în care alte produse Raspberry Pi folosesc “Pi” în numele lor.
2: Indică numărul de nuclee din CPU. RP2040 are un procesor cu două nuclee.
0: Reprezintă tipul de CPU (Arm Cortex-M0+) folosit în RP2040.
4: Semnifică cantitatea de RAM (în kilobyți) de pe cip. RP2040 vine de obicei cu 256KB de RAM (2^4 * 16KB) - floor(log2(ram / 16k)).
0: Semnifică cantitatea de stocare nevolatilă de pe cip. RP2040 vine de obicei cu 0MB de flash, dar poate avea până la 16MB de memorie flash off-chip prin intermediul bus-ului dedicat QSPI (2^4 * 16KB) - floor(log2(nonvolatile / 16k)).
RP2040 are două nuclee de procesor M0+, DMA, memorie internă și blocuri periferice conectate prin intermediul țesăturii de bus AHB/APB. Acesta oferă o varietate de caracteristici pentru dezvoltare flexibilă:
Memorie:
Suport pentru memorie externă: Codul poate fi executat direct din memoria flash externă folosind interfețele SPI, DSPI sau QSPI. O mică cache internă îmbunătățește performanța pentru datele accesate frecvent.
SRAM internă: Memoria internă (256 kB) poate stoca cod sau date și este accesibilă simultan de diferite părți ale cipului.
Procesare:
DMA: Canalele DMA (Direct Memory Access) dedicate descarcă sarcinile repetitive de mutare a datelor de la procesoare, îmbunătățind eficiența.
I/O flexibil: Pinii GPIO pot fi controlați direct sau prin funcții logice integrate.
Comunicare:
Periferice hardware: Hardware-ul dedicat gestionează protocoalele standard de comunicare:
UART: Pentru comunicație serială
SPI: Pentru comunicație serială sincronă
I2C: Pentru comunicație serială multi-master
I/O programabil (PIO): Controlierele PIO flexibile pot fi configurate pentru diverse funcții de I/O personalizate.
USB - poate fi utilizată atât pentru programarea microcontrolerului, cât și pentru comunicația cu alte dispozitive:
Convertor analog-digital (ADC - pentru conversia analog-digitală): Patru canale ADC pot fi folosite pentru a converti semnalele analogice în date digitale.
PWM: Pentru generarea de semnale PWM (Pulse Width Modulation)
Ceasuri - pentru măsurarea timpului și generarea de întreruperi:
Gestionarea puterii:
Pe scurt, RP2040 oferă procesare puternică, opțiuni flexibile de memorie, diverse opțiuni de comunicare și periferice integrate, ceea ce îl face potrivit pentru diverse proiecte de dezvoltare.
Datasheet
RP2040, la fel ca majoritatea componentelor electronice, are o fișă tehnică (uneori numită fișă de date sau fișă de specificații). Acest document este ca un manual de instrucțiuni pentru cip, explicând caracteristicile sale și cum să îl utilizați în proiectele dvs.
Ce conține o fișă tehnică RP2040?
Prezentare generală: O descriere de bază a RP2040, funcționalitățile sale și tipurile de proiecte pentru care este potrivit.
Pinout: O diagramă care arată toți pinii de pe cip, funcțiile lor (cum ar fi GPIO-urile pentru conectarea la alte componente) și specificațiile electrice (cum ar fi limitele de tensiune).
Specificații tehnice: Informații detaliate despre performanța, memoria, consumul de energie și alte aspecte tehnice ale RP2040.
A avea în vedere:
Complexitate: Fișele tehnice pot fi tehnice. Nu vă faceți griji dacă nu înțelegeți totul de la început! Concentrați-vă pe secțiunile relevante pentru proiectul dvs. (de exemplu, pinii GPIO).
Exemple limitate: Fișele tehnice pot să nu ofere ghiduri pas cu pas pentru proiecte. Cu toate acestea, ele oferă baza pentru înțelegerea modului de utilizare a RP2040 cu codul dvs.
Resurse complementare: Dacă fișa tehnică este copleșitoare, resursele online precum tutorialele și forumurile vă pot ajuta să explicați conceptele într-un mod mai ușor de utilizat.
Configurarea GPIO-urilor
Pinii GPIO pot fi utilizați ca ieșiri (LED-uri, motoare, buzzere) sau ca intrări (butoane, senzori).
RP2040 are trei periferice care controlează pinii GPIO:
Pads - controlează pinul sau pad-ul fizic efectiv pe care procesorul îl are în exterior. Acest control reglează parametrii electrici, cum ar fi curentul maxim sau rezistențele de pull-up și pull-down.
IO Bank0 - conectează și multiplexează pinii perifericului la pad-urile de ieșire. Mai multe periferice utilizează același pad de ieșire pentru a comunica cu exteriorul. De exemplu, în imaginea de mai jos, GPIO0 poate fi utilizat fie pentru:
SIO - funcția GPIO
SPI_RX - pinul de recepție pentru perifericul SPI
I2C0_SDA - pinul de date pentru perifericul I2C0
UART0_TX - pinul de transmisie pentru perifericul UART0 (portul serial 0)
SIO - care controlează pinii interiori ai MCU. Acesta este perifericul pe care dezvoltatorii îl folosesc pentru a citi și a scrie valoarea pinilor.
Simulator Wowki
Wokwi este o platformă bazată pe web care vă permite să simulați și să prototipați circuite electronice cu microcontrolere. Oferă o interfață vizuală unde puteți glisa și plasa componente, conectați-le cu fire virtuale și scrieți cod pentru a controla comportamentul lor. Wokwi suportă în prezent plăci de microcontrolere populare precum:
De ce să folosiți Wokwi?
Simulare rapidă și ușoară: Wokwi vă permite să creați și să testați circuite electronice fără a avea nevoie de hardware fizic. Acest lucru poate accelera semnificativ procesul de dezvoltare.
Interfață intuitivă: Platforma oferă o interfață grafică ușor de utilizat, ceea ce face accesibilă chiar și pentru începători în domeniul electronicii.
Integrare cu IDE-uri populare: Wokwi se poate integra cu IDE-uri precum Arduino IDE și Visual Studio Code, permițându-vă să scrieți și să compilați codul direct în cadrul platformei.
Funcționalități avansate: Pe lângă simulare și prototipare, Wokwi oferă și funcționalități precum debug-ul, analiza circuitelor și partajarea proiectelor cu alții.
Cum funcționează Wokwi?
Creați un nou proiect: Alegeți un tip de microcontroler și începeți să adăugați componente în circuitul dvs.
Conectați componentele: Folosiți fire virtuale pentru a conecta componentele împreună.
Scrieți cod: Utilizați editorul de cod integrat pentru a scrie codul care va controla comportamentul componentelor.
Simulați circuitul: Apăsați butonul de simulare pentru a vedea cum funcționează circuitul dvs. în timp real.
Wokwi este un instrument excelent pentru studenții de la Computer Science care doresc să învețe despre electronică și programare. Platforma oferă un mediu sigur și accesibil pentru experimentare și dezvoltare de proiecte.
Exercitii
Creați un program în Wokwi pentru a clipi un LED conectat la un microcontroler Raspberry Pi Pico (RP2040).
Proiectați și implementați un program pentru un microcontroler Raspberry Pi Pico (RP2040) care incrementează un contor de la 0 la 9 și afișează numărul curent pe un display cu 7 segmente. Programul ar trebui să includă și un buton de resetare care, atunci când este apăsat, resetează contorul înapoi la 0.
Rescrieti aplicatia de la punctul 2 in MicroPython si observati diferentele de implementare.
Bibliografie