RP2350 - úvod: Rozdiel medzi revíziami

Zo stránky 3D liga wiki
Prejsť na navigáciu Prejsť na vyhľadávanie
Sebastian (diskusia | príspevky)
Sebastian (diskusia | príspevky)
Bez shrnutí editace
Riadok 13: Riadok 13:


<div style="display: flex; flex-wrap: wrap; gap: 8px;">
<div style="display: flex; flex-wrap: wrap; gap: 8px;">
[[File:RP2040-Zero-Pinout.jpg|350px]]
[[File:RP2040-Zero-Pinout.jpg|600px]]
<br>
[[File:RP2040-Zero-Board.jpg|350px]]
[[File:RP2040-Zero-Board.jpg|350px]]
[[File:RP2350_Box.jpg|350px]]
[[File:RP2350_Box.jpg|350px]]
Riadok 28: Riadok 29:
GPIO (General Purpose Input/Output) sú piny, cez ktoré doska komunikuje s okolitým svetom – môžu fungovať ako digitálny vstup (čítanie stavu, napr. tlačidlo), digitálny výstup (zapínanie/vypínanie, napr. LED) alebo majú aj špeciálne funkcie.
GPIO (General Purpose Input/Output) sú piny, cez ktoré doska komunikuje s okolitým svetom – môžu fungovať ako digitálny vstup (čítanie stavu, napr. tlačidlo), digitálny výstup (zapínanie/vypínanie, napr. LED) alebo majú aj špeciálne funkcie.


Typy funkcií, ktoré piny na RP2350 zvládajú (nie každý pin vie všetko naraz, funkciu si vždy nastavuje program):
Typy funkcií, ktoré piny na RP2350 zvládajú (nie každý pin vie všetko naraz, funkciu si vždy nastavuje program). Podrobné vysvetlenie a testovací kód pre jednotlivé protokoly nájdeš na ich podstránkach – klikni na názov funkcie v tabuľke:


{| class="wikitable"
{| class="wikitable"
! Funkcia !! Na čo slúži !! Príklad z našej stavebnice
! Funkcia !! Na čo slúži !! Príklad z našej stavebnice
|-
|-
| Digitálny vstup/výstup || Zapnutie/vypnutie, čítanie stavu tlačidla alebo spínača || Joystick SW (tlačidlo)
| [[RP2350-Zero/GPIO|Digitálny vstup/výstup]] || Zapnutie/vypnutie, čítanie stavu tlačidla alebo spínača || Joystick SW (tlačidlo)
|-
|-
| PWM (Pulse Width Modulation) || Riadenie servomotorov, stmievanie LED || Servá pri prieskumníkovi (GPIO4-6)
| [[RP2350-Zero/PWM|PWM]] (Pulse Width Modulation) || Riadenie servomotorov, stmievanie LED || Servá pri prieskumníkovi (GPIO4-6)
|-
|-
| ADC (analógový vstup) || Čítanie analógovej hodnoty (napätia) || Joystick VRX/VRY (GPIO26, GPIO27)
| [[RP2350-Zero/ADC|ADC]] (analógový vstup) || Čítanie analógovej hodnoty (napätia) || Joystick VRX/VRY (GPIO26, GPIO27)
|-
|-
| I2C || Komunikácia so senzormi/displejmi cez 2 vodiče (SDA, SCL) || zatiaľ nevyužité
| [[RP2350-Zero/I2C|I2C]] || Komunikácia so senzormi/displejmi cez 2 vodiče (SDA, SCL) || Gyroskop BNO055, laser VL53L0X
|-
|-
| SPI || Rýchlejšia komunikácia, napr. SD karta || zatiaľ nevyužité
| [[RP2350-Zero/SPI|SPI]] || Rýchlejšia komunikácia, napr. SD karta || zatiaľ nevyužité
|-
|-
| UART || Sériová komunikácia (napr. debug výpisy medzi dvoma doskami) || zatiaľ nevyužité
| [[RP2350-Zero/UART|UART]] || Sériová komunikácia (napr. debug výpisy medzi dvoma doskami) || Gyroskop BNO055 (alternatíva k I2C)
|}
|}


Dôležité: nie všetky piny majú '''ADC''' – vyhradené sú na to len niektoré. Skôr než pin použiješ na konkrétnu funkciu, over si v pinoute konkrétnej dosky RP2350-Zero, či ju daný pin podporuje.
Dôležité: nie všetky piny majú '''ADC''' – vyhradené sú na to len niektoré. Skôr než pin použiješ na konkrétnu funkciu, over si v pinoute konkrétnej dosky RP2350-Zero, či ju daný pin podporuje.


V doterajších manuáloch (rameno, prieskumník) sme zatiaľ využili len GPIO3-9 (digitálne výstupy pre servá a trigger/echo ultrazvuku) a GPIO26-27 (analógový vstup pre joystick). Zvyšné piny ostávajú voľné pre ďalšie rozšírenia, napríklad I2C senzor alebo SPI SD kartu.
V doterajších manuáloch (rameno, prieskumník) sme zatiaľ využili len GPIO3-9 (digitálne výstupy pre servá a trigger/echo ultrazvuku) a GPIO26-27 (analógový vstup pre joystick). Zvyšné piny ostávajú voľné pre ďalšie rozšírenia.
 
=== PWM ===
 
PWM (Pulse Width Modulation, modulácia šírky impulzu) funguje tak, že pin veľmi rýchlo prepína medzi HIGH a LOW. To, aké percento času je pin v stave HIGH (tzv. '''duty cycle'''), určuje "priemerný" účinok signálu – napríklad ako jasno svieti LED, akou rýchlosťou sa točí motor, alebo v akej polohe má byť servo.
 
RP2350 má hardvérovú PWM perifériu s viacerými tzv. "slice" jednotkami, pričom každý slice ovláda dva kanály (A a B). Vďaka tomu vie generovať PWM na viacerých pinoch súčasne bez zaťaženia procesora.
 
'''Servomotory (už poznáte)'''
 
Servá v našej stavebnici sú práve príkladom PWM: očakávajú impulz približne každých 20 ms (50 Hz), pričom dĺžka impulzu (typicky 1000–2000 μs) určuje:
* pri 180° serve – uhol natočenia,
* pri 360° serve – rýchlosť a smer otáčania.
 
Knižnica <code>Servo.h</code>, ktorú sme používali doteraz (napr. <code>servoLave.write(90)</code>), toto generovanie PWM impulzov robí za nás – nemusíme sa starať o presné časovanie.
 
'''Jednoduchý príklad – stmievanie LED'''
 
Ak chceš vidieť PWM "naživo" bez serva, stačí obyčajná LED na ľubovoľnom voľnom GPIO pine:
 
<syntaxhighlight lang="cpp">
const int PIN_LED = 10; // ľubovoľný voľný pin
 
void setup() {
  pinMode(PIN_LED, OUTPUT);
}
 
void loop() {
  // postupné rozjasňovanie
  for (int jas = 0; jas <= 255; jas++) {
    analogWrite(PIN_LED, jas);
    delay(5);
  }
  // postupné stmievanie
  for (int jas = 255; jas >= 0; jas--) {
    analogWrite(PIN_LED, jas);
    delay(5);
  }
}
</syntaxhighlight>
 
<code>analogWrite()</code> tu v skutočnosti nastavuje duty cycle PWM signálu (0 = stále LOW, 255 = stále HIGH), aj keď názov funkcie znie ako analógový výstup.
 
=== ADC ===
 
ADC (Analog-to-Digital Converter) prevádza analógové napätie (spojitá hodnota, napr. 0–3,3 V) na digitálne číslo, s ktorým už vie program ďalej pracovať. Na rozdiel od digitálneho vstupu, ktorý rozlišuje iba HIGH/LOW, ADC vie povedať aj "koľko presne".
 
Nie každý GPIO pin má ADC – táto funkcia je vyhradená len na niektoré piny. Presne ktoré piny to sú na RP2350-Zero, over si v [https://www.waveshare.com/wiki/RP2350-Zero#Arduino_IDE_Series oficiálnom pinoute], keďže sa forma dosky líši od klasického Pico layoutu.
 
'''Príklad – joystick'''
 
Joystick pri ramene je presne takýto prípad: VRX a VRY vracajú analógové napätie podľa toho, ako veľmi je páčka vychýlená. V Arduino frameworku sa hodnota číta funkciou <code>analogRead(pin)</code>, ktorá typicky vracia hodnotu 0–1023 (10-bit rozlíšenie).
 
<syntaxhighlight lang="cpp">
const int PIN_VRX = 26;
const int PIN_VRY = 27;
 
void setup() {
  Serial.begin(115200);
}
 
void loop() {
  int hodnotaX = analogRead(PIN_VRX);
  int hodnotaY = analogRead(PIN_VRY);
 
  Serial.print("VRX: ");
  Serial.print(hodnotaX);
  Serial.print("  VRY: ");
  Serial.println(hodnotaY);
 
  delay(200);
}
</syntaxhighlight>
 
Surová hodnota (0–1023) sama o sebe veľa nepovie – v praxi si ju zvyčajne prepočítaš na užitočnejší rozsah, napríklad <code>map(hodnotaX, 0, 1023, -100, 100)</code>, aby si dostal rýchlosť alebo výchylku v rozsahu, s ktorým sa ti ľahšie pracuje.
 
'''Poznámka:''' presnú hodnotu referenčného napätia a bitové rozlíšenie ADC na RP2350 si over v dokumentácii – pri práci s citlivejšími meraniami (napr. presné napätie z batérie) sa oplatí skontrolovať, či Arduino framework nepoužíva pre RP2350 iné predvolené nastavenia než klasický RP2040.
 
== I2C ==
 
I2C (Inter-Integrated Circuit) je zbernica, cez ktorú vie doska komunikovať s viacerými zariadeniami pomocou iba dvoch vodičov:
* '''SDA''' (Serial Data) – samotné dáta
* '''SCL''' (Serial Clock) – hodinový signál, ktorý synchronizuje prenos
 
Výhoda oproti napr. ultrazvuku (TRIG/ECHO) je, že na tie isté dva vodiče (SDA, SCL) sa dá pripojiť viacero zariadení naraz – každé má svoju vlastnú '''adresu''' (7-bitové číslo), podľa ktorej ho doska osloví. RP2350 sa správa ako "master" (riadiace zariadenie), senzory ako "slave".
 
Vo väčšine breakout dosiek (aj BNO055, aj VL53L0X) sú potrebné pull-up rezistory na SDA/SCL už priamo na doštičke, takže netreba pridávať vlastné.
 
'''Zariadenia v našej stavebnici'''
 
{| class="wikitable"
! Zariadenie !! Čo meria !! Predvolená I2C adresa
|-
| BNO055 || Gyroskop / akcelerometer / kompas (9-DOF IMU) || 0x28
|-
| VL53L0X || Laserový senzor vzdialenosti (Time-of-Flight) || 0x29
|}
 
Keďže majú tieto dve zariadenia rôzne adresy, dajú sa obe pripojiť na tú istú I2C zbernicu súčasne bez konfliktu.
 
'''Poznámka:''' konkrétne GPIO piny pre SDA/SCL si over v pinoute RP2350-Zero – v príkladoch nižšie použijeme GPIO0 (SDA) a GPIO1 (SCL), keďže sú v našej stavebnici zatiaľ voľné, ale dajú sa nastaviť aj inak.
 
=== I2C skener (test zapojenia) ===
 
Skôr než skúšaš konkrétny senzor, oplatí sa overiť, či ho doska na zbernici vôbec "vidí". Na to slúži klasický I2C skener – prejde všetky možné adresy a vypíše, na ktorých našiel odpoveď:
 
<syntaxhighlight lang="cpp">
#include <Wire.h>
 
const int PIN_SDA = 0;
const int PIN_SCL = 1;
 
void setup() {
  Wire.setSDA(PIN_SDA);
  Wire.setSCL(PIN_SCL);
  Wire.begin();
 
  Serial.begin(115200);
  delay(1000);
  Serial.println("I2C skener spusteny...");
}
 
void loop() {
  byte pocetNajdenych = 0;
 
  for (byte adresa = 1; adresa < 127; adresa++) {
    Wire.beginTransmission(adresa);
    byte chyba = Wire.endTransmission();
 
    if (chyba == 0) {
      Serial.print("Zariadenie najdene na adrese 0x");
      if (adresa < 16) Serial.print("0");
      Serial.println(adresa, HEX);
      pocetNajdenych++;
    }
  }
 
  if (pocetNajdenych == 0) {
    Serial.println("Ziadne I2C zariadenie nenajdene.");
  }
 
  delay(3000);
}
</syntaxhighlight>
 
Ak sa objaví <code>0x28</code>, je zapojený BNO055. Ak <code>0x29</code>, je zapojený VL53L0X. Ak sa nezobrazí nič, skontroluj zapojenie SDA/SCL/VCC/GND.


__notoc__
__notoc__

Verzia z 10:55, 3. september 2026

Opis

RP2350-Zero je malá vývojová doska od firmy Waveshare, postavená na čipe RP2350 (rovnaký čip ako v novšom Raspberry Pi Pico 2). Ide o kompaktnú alternatívu k bežnému Pico formátu – je výrazne menšia, a preto sa hodí presne tam, kde je málo miesta, ako je to aj v našej stavebnici.

Hlavné vlastnosti:

  • Čip RP2350 s dvoma jadrami, ktoré je možné prepnúť medzi Arm Cortex-M33 a RISC-V (Hazard3) – pre bežné použitie postačí predvolený Arm režim
  • Takt do cca 150 MHz
  • 520 KB SRAM priamo na čipe + externá flash pamäť na uloženie programu (a prípadne aj vlastných súborov)
  • USB-C konektor (napájanie aj nahrávanie firmvéru)
  • Tlačidlo BOOT (na prepnutie do režimu nahrávania firmvéru) a tlačidlo RESET
  • Jedna onboard RGB LED (WS2812/NeoPixel), ovládateľná jediným pinom
  • Podpora PIO (Programmable I/O) – špeciálna periféria RP2350, ktorá vie v hardvéri "napodobniť" takmer akýkoľvek komunikačný protokol


V našej stavebnici je RP2350-Zero "mozog" robota – riadi servá, číta senzory a komunikuje cez USB s počítačom.

Pre účely variability našej stavebnice sme k RP2350-Zero vybrali aj expanznú podložku s vyvedenými Vcc a GND pinmi. Má aj svoj vlastný držiak, ktorý sa pomocou M2 skrutiek priskrutkuje k expanznej podložke.

Poznámka: presné číslovanie pinov a niektoré detaily (napr. veľkosť flash pamäte na konkrétnej revízii dosky) si over v oficiálnej dokumentácii Waveshare – ide o pomerne nový produkt a údaje sa medzi revíziami môžu líšiť.

GPIO piny

GPIO (General Purpose Input/Output) sú piny, cez ktoré doska komunikuje s okolitým svetom – môžu fungovať ako digitálny vstup (čítanie stavu, napr. tlačidlo), digitálny výstup (zapínanie/vypínanie, napr. LED) alebo majú aj špeciálne funkcie.

Typy funkcií, ktoré piny na RP2350 zvládajú (nie každý pin vie všetko naraz, funkciu si vždy nastavuje program). Podrobné vysvetlenie a testovací kód pre jednotlivé protokoly nájdeš na ich podstránkach – klikni na názov funkcie v tabuľke:

Funkcia Na čo slúži Príklad z našej stavebnice
Digitálny vstup/výstup Zapnutie/vypnutie, čítanie stavu tlačidla alebo spínača Joystick SW (tlačidlo)
PWM (Pulse Width Modulation) Riadenie servomotorov, stmievanie LED Servá pri prieskumníkovi (GPIO4-6)
ADC (analógový vstup) Čítanie analógovej hodnoty (napätia) Joystick VRX/VRY (GPIO26, GPIO27)
I2C Komunikácia so senzormi/displejmi cez 2 vodiče (SDA, SCL) Gyroskop BNO055, laser VL53L0X
SPI Rýchlejšia komunikácia, napr. SD karta zatiaľ nevyužité
UART Sériová komunikácia (napr. debug výpisy medzi dvoma doskami) Gyroskop BNO055 (alternatíva k I2C)

Dôležité: nie všetky piny majú ADC – vyhradené sú na to len niektoré. Skôr než pin použiješ na konkrétnu funkciu, over si v pinoute konkrétnej dosky RP2350-Zero, či ju daný pin podporuje.

V doterajších manuáloch (rameno, prieskumník) sme zatiaľ využili len GPIO3-9 (digitálne výstupy pre servá a trigger/echo ultrazvuku) a GPIO26-27 (analógový vstup pre joystick). Zvyšné piny ostávajú voľné pre ďalšie rozšírenia.