Comunicația pe SPI dintre Arduino Uno și GroundStudio Jade Nano+
Comunicația SPI
Interfața Serial Peripheral Interface (SPI) este o interfață de comunicare serială sincronă utilizată pentru a permite comunicarea între mai multe dispozitive, de obicei între un dispozitiv master și unul sau mai multe dispozitive slave. SPI este folosit în principal pentru transferul de date între componente electronice dintr-un sistem, cum ar fi microcontrolere, senzori, memorii EEPROM, display-uri, și altele. Iată cum funcționează SPI-ul:
Linii de comunicație: SPI folosește patru sau cinci linii de comunicație, în funcție de configurație:
a. SCK (Serial Clock): Aceasta este linia de ceas utilizată pentru a sincroniza transmiterea și recepția datelor între dispozitive. Semnalele de ceas sunt generate de dispozitivul master și sunt utilizate pentru a controla momentele la care datele sunt transferate.
b. MISO (Master In Slave Out): Aceasta este linia pe care dispozitivul slave (sclav) transmite datele către dispozitivul master (stăpân).
c. MOSI (Master Out Slave In): Aceasta este linia pe care dispozitivul master transmite datele către dispozitivul slave.
d. SS (Slave Select): Aceasta este o linie optională, dar importantă, care este folosită pentru a selecta dispozitivul slave cu care se dorește să se comunice dispozitivul master. Când linia SS este scăzută (setată la nivel logic "LOW"), dispozitivul slave asociat devine activ și ascultă comenzile de la dispozitivul master.
e. Sistemul de referință (Vcc și GND): Toate dispozitivele trebuie să aibă o conexiune comună pentru tensiune (Vcc) și masă (GND).
Funcționare sincronă: SPI este o interfață sincronă, ceea ce înseamnă că dispozitivele master și slave trebuie să fie sincronizate cu același semnal de ceas (SCK). Datele sunt transferate în mod secvențial la fiecare puls de ceas.
Transfer de date: Datele sunt transferate în blocuri de obicei de 8 sau 16 biți, dar pot fi configurate pentru a utiliza alte dimensiuni. Dispozitivul master trimite date pe linia MOSI și citește date de pe linia MISO. Fiecare dispozitiv slave are adesea un registru de date cu care comunica.
Moduri de funcționare: SPI oferă diferite moduri de funcționare (moduri de ceas și nivele de semnal) care trebuie definite înainte de a începe comunicarea. Cele mai comune moduri de ceas sunt modul 0 și modul 3, care variază în funcție de nivelurile de semnal ale SCK în timpul repausului și transmiterii.
Ordinea de transmisie a biților: SPI poate fi configurat pentru a transmite biții cel mai semnificativ în primul rând (MSB) sau cel mai puțin semnificativ în primul rând (LSB), în funcție de necesitățile aplicației.
Selectarea dispozitivelor slave: Dispozitivele slave sunt selectate prin scăderea liniei SS corespunzătoare lor la nivel logic "LOW". Aceasta semnalează dispozitivului slave că este momentul să asculte comenzile de la dispozitivul master.
Dezactivarea și terminarea comunicației: După terminarea transferului de date, linia SS este adusă la nivel logic "HIGH" pentru a dezactiva dispozitivul slave. Astfel, alte dispozitive pot fi selectate pentru comunicare.
În esență, SPI este o interfață rapidă și eficientă pentru comunicarea între dispozitive electronice într-un sistem, iar parametrii de funcționare, cum ar fi frecvența de ceas, modul de ceas și ordinea de transmisie a biților, trebuie să fie corect configurați pentru a asigura o comunicare corectă între dispozitivele SPI.
Placa Arduino Uno
Arduino Uno este o placă de dezvoltare open-source, bazată pe un microcontroler ATmega328P, și oferă următoarele caracteristici cheie:
Micro controller: Arduino Uno este echipat cu un microcontroler ATmega328P de la Atmel (acum parte a Microchip Technology).
Memorie: Dispune de 32 KB de flash pentru program, 2 KB de RAM și 1 KB de EEPROM.
Porturi digitale: Are 14 porturi digitale de intrare/ieșire, dintre care 6 pot fi utilizate ca ieșiri PWM.
Porturi analogice: Dispune de 6 porturi analogice pentru citirea valorilor analogice, cum ar fi senzorii de lumină sau temperatură.
Oscilator: Rulează la o frecvență de 16 MHz.
Conectivitate USB: Are un conector USB pentru programare și comunicare cu computerul.
Alimentare: Poate fi alimentat cu 5V de la USB sau cu o sursă de alimentare externă între 7V și 12V.
Compatibilitate: Este compatibil cu mediul de dezvoltare Arduino, ceea ce face programarea și dezvoltarea proiectelor accesibile și ușor de înțeles pentru începători.
Interfață: Dispune de o serie de pini pentru conectarea componentelor externe și este compatibil cu o gamă largă de shield-uri (plăci de expansiune).
Regulator de tensiune: Include un regulator de tensiune care poate converti o sursă de alimentare mai mare în 5V pentru a alimenta microcontrollerul și componentele conectate.
Arduino Uno este o placă de dezvoltare versatilă și populară, utilizată într-o varietate de proiecte electronice, de la roboți și senzori până la controlere de lumină și multe altele. Este recunoscută pentru ușurința de utilizare și comunitatea sa puternică de dezvoltatori și utilizatori.
Placa GroundStudio Jade Nano+
Această este o altă variantă a plăcilor de dezvoltare Arduino produsă de firma ARDUSHOP SRL din Sibiu. Iată o descriere succintă a GroundStudio Jade Nano+
Microcontroler: GroundStudio Jade Nano+ este echipat cu un microcontroler ATmega328PB. Acest microcontroler este o versiune îmbunătățită a ATmega328P, cu mai multe pini I/O și funcționalități suplimentare.
Memorie: Dispune de 32 KB de memorie flash pentru stocarea programului, 2 KB de SRAM și 1 KB de EEPROM, similar cu plăcile bazate pe ATmega328P.
Pini Digitali și Analogici: Placa are mai mulți pini digitali și analogici pentru conectarea senzorilor, acționărilor și altor componente externe.
Viteză a Ceasului: Funcționează la o viteză a ceasului de 16 MHz, similar cu alte plăci Arduino bazate pe ATmega328.
Conectivitate USB: La fel ca și celelalte plăci Arduino, include o interfață USB pentru programare și comunicare cu un computer.
Factor de Formă: Placa GroundStudio Jade Nano+ este relativ mică ca dimensiune, ceea ce îl face potrivit pentru proiecte cu spațiu limitat. Este mai compact decât Arduino Uno sau Nano.
Opțiuni de Alimentare: Poate fi alimentat prin USB-C sau printr-o sursă de alimentare externă între 8V și 12V direct pe pinii VIN si GND, similar cu celelalte plăci Arduino.
Compatibilitate: Placa este compatibilă cu mediul de dezvoltare Arduino IDE, ceea ce vă permite să scrieți, să compilați și să încărcați codul pe placă în mod ușor.
Funcționalități Îmbunătățite: Microcontrolerul ATmega328PB de pe această placă dispune de unele îmbunătățiri față de ATmega328P, cum ar fi mai multe interfețe UART, I2C și 2xSPI, temporizatoare suplimentare și mai mulți pini GPIO. Aceste caracteristici îl fac potrivit pentru o gamă mai largă de aplicații.
Placa GroundStudio Jade Nano+ se poate folosi pentru proiecte care necesită un factor de formă compact din cauza avantajului dimensiunilor mici (43.2mm x 18.5mm) și funcționalitățile suplimentare oferite de microcontrolerul ATmega328PB. Este potrivit pentru o varietate de sisteme încorporate și proiecte electronice DIY.
Conexiunile dintre Arduino Uno și o placă GroundStudio Jade Nano+
Comunicarea pe interfața SPI (Serial Peripheral Interface) între o placă Arduino Uno și o placă GroundStudio Jade Nano+ implică folosirea a trei linii de comunicație principale:
SCK (Serial Clock) - Arduino Uno Pin 13 se va conecta la pinul 13 de pe Jade Nano+ - Aceasta este linia de ceas folosită pentru a sincroniza transferul de date între cele două plăci. În mod obișnuit, o placă va acționa ca master (stăpân) și va genera semnale de ceas, iar cealaltă va acționa ca slave (sclav) și va răspunde la semnalele de ceas.
MISO (Master In Slave Out) - Arduino Uno Pin 12 se va conecta la pinul 12 de pe Jade Nano+ - Aceasta este linia pe care placa slave (sclav) trimite datele către placa master (stăpân). Este utilizată pentru transmiterea datelor de la placa sclav la placa stăpân.
MOSI (Master Out Slave In) - Arduino Uno Pin 11 se va conecta la pinul 11 de pe Jade Nano+ - Aceasta este linia pe care placa master (stăpân) trimite datele către placa slave (sclav). Este utilizată pentru transmiterea datelor de la placa stăpân la placa sclav.
În plus, este necesară o linie suplimentară SS0 (Slave Select) - Arduino Uno Pin 10 se va conecta la pinul 10 de pe Jade Nano+- Această linie este folosită pentru a selecta placa slave cu care se dorește să se comunice. Atunci când se dorește comunicarea cu o anumită placă sclavă, linia SS corespunzătoare acelei plăci trebuie să fie scăzută (setată la nivel logic "LOW").
Dezvoltarea codului în PlatformIO
Pentru a crea un proiect pentru Arduino în PlatformIO, urmați acești pași:
1. Instalați PlatformIO: Dacă nu aveți deja PlatformIO instalat, îl puteți instala ca o extensie pentru un alt IDE populare, cum ar fi Visual Studio Code sau Atom. Instalați IDE-ul și apoi adăugați extensia PlatformIO din piața de extensii a IDE-ului.
2. Creați un proiect nou:
- Deschideți IDE-ul în care ați instalat PlatformIO.
- Navigați la meniul "File" (Fișier) și selectați "New Project" (Proiect Nou).
- Selectați "Arduino" ca platformă.
3. Configurați proiectul:
- Alegeți placa Arduino pe care o utilizați (de exemplu, "Arduino Uno").
- Puteți specifica și un director pentru proiectul dvs.
4.Scrieți codul sursă:
- După crearea proiectului, veți avea un fișier sursă `main.cpp` sau `src/main.cpp`, unde puteți începe să scrieți codul pentru Arduino .
5. Încărcați codul pe placa Arduino :
- Conectați Arduino la computer prin intermediul unui cablu USB.
- Asigurați-vă că ați selectat placa și portul corect în configurarea proiectului.
- Apăsați butonul de încărcare (în IDE) pentru a compila și încărca codul pe placa Arduino .
6. Monitorizați serialul (opțional):
- Puteți utiliza un terminal serial pentru a monitoriza ieșirea serială a Arduino . Aceasta vă permite să vizualizați informațiile și datele trimise de la Arduino către computer.
Aceștia sunt pașii de bază pentru a crea și încărca un proiect Arduino Uno cu PlatformIO. PlatformIO oferă un set bogat de funcționalități pentru dezvoltatori, inclusiv gestionarea bibliotecilor, debug și multe altele. Puteți să explorați documentația PlatformIO pentru mai multe informații și pentru a descoperi toate caracteristicile oferite de acest mediu de dezvoltare.
Componente
Schema electronică/sistem
Cod de test
Master-ul citește datele de pe SPI și afișează valoarea potențiometrului .Slave-ul citește un potențiometru și trimite datele analogice citite de pe A1 către Arduino Uno pe SPI .
Rezultatul comunicației SPI
Transmisia a două valori a potențiometrului și cum se vede semnalul pe osciloscop:
Cifra 5
Documentație proiect:
- https://www.arduino.cc/reference/en/language/functions/analog-io/analogread/
- https://docs.platformio.org/en/stable/boards/atmelavr/ATmega328PB.html
- https://arduino.stackexchange.com/questions/16348/how-do-you-use-spi-on-an-arduino
- https://www.circuitbasics.com/how-to-set-up-spi-communication-for-arduino/
- https://github.com/GroundStudio/GroundStudio_Jade_NanoPlus/blob/main/Documentation/REV0.0.2/RZLLCW_GS%20REV0.0.2%20GroundStudio%20Jade%20Nano%2B%20Pinout.pdf
- https://github.com/GroundStudio/GroundStudio_Jade_NanoPlus/blob/main/Documentation/REV0.0.2/RZLLCW_GS%20REV0.0.2%20GroundStudio%20Jade%20Nano%2B%20Schematic.pdf
Afiliere eMag:
Linkurile de la secțiunea "Componente" conțin adresa mea de afiliere la eMag.ro, iar dacă cumperi folosind aceste linkuri vei susține blogul meu. Mulțumesc!eMag Genius:
Hai și tu în Genius! Abonează-te la Genius 12 luni și primești beneficii premium și 20 lei card cadou eMAG. Profită acum! eMag Genius
Mulțumesc pentru atenție!
Pentru întrebări și/sau consultanță tehnică vă stau la dispozitie pe blog mai jos în secțiunea de comentarii sau pe email simedruflorin@automatic-house.ro. O zi plăcută tuturor !