Secțiuni de site
Alegerea editorului:
- Crearea unei comenzi rapide pe desktop pentru colegii de clasă
- Dacă pantofii nu se potrivesc cu Aliexpress: acțiunile corecte în acest caz Produsul Aliexpress are mărimea potrivită
- Disputa pe AliExpress Alăturați-vă disputei pe AliExpress
- 3 baze de informații distribuite
- Manager de conținut - responsabilități, salariu, pregătire Dezavantaje și avantaje de a lucra ca specialist în conținut
- Cum să te protejezi de minerit ascuns în browser?
- Recuperarea parolei în Ask
- Cum să pornești camera de pe un laptop
- De ce nu se redă muzica pe VKontakte?
- Cum să măriți dimensiunea unității C în detrimentul unității D fără a pierde date
Publicitate
Interfață serială SPI (3 fire). Bazele protocolului SPI Programarea Spi |
SPIîn Arduino, este unul dintre principalele protocoale pentru schimbul de date între placa Arduino și dispozitivele conectate. Împreună cu I2C și UART, acest protocol este adesea folosit pentru multe tipuri de dispozitive periferice, astfel încât cunoașterea principiilor de funcționare SPI este necesară pentru orice inginer Arduino. În acest articol ne vom uita pe scurt la principiile de bază, schema de interacțiune și metoda de conectare a senzorilor și ecranelor SPI la Arduino. SPI este un protocol de transfer de date utilizat pe scară largă între un microcontroler (Master) și dispozitive periferice (Slave). În proiectele noastre, o placă Arduino este folosită cel mai adesea ca Master. Interfața SPI a fost inventată și folosită de Motorola, dar în timp a devenit un standard industrial. Principalul avantaj al lucrului cu această interfață este viteza mare și capacitatea de a conecta mai multe dispozitive pe o singură magistrală de date. pini și știfturi SPIComunicarea prin interfața SPI arduino are loc între mai multe dispozitive care sunt situate aproape unul de celălalt. Plăcile Arduino sunt echipate cu pini separati pentru SPI. Asocierea are loc folosind patru contacte:
Interacțiunea dispozitivelor SPIInteracțiunea dispozitivului începe când ieșirea SS scade. Înainte de a începe lucrul, trebuie să determinați:
Următorul pas este să determinați în ce mod vor fi transferate informațiile. Alegerea modului este determinată de indicatori precum polaritatea și faza pulsului ceasului. Dacă nivelul este scăzut, se înregistrează 0, ridicat - 1. Există 4 moduri în total:
Inițial, Arduino a fost conceput pentru a transmite mai întâi datele cu bitul cel mai semnificativ, dar înainte de a începe, trebuie să clarificați acest lucru în documentație. Puteți demonstra modurile în imagine. Există două tipuri de conexiuni posibile în interfața SPI: independente și în cascadă. În primul caz, la conectare, Master se adresează fiecărui Slave individual, în al doilea caz, conexiunea are loc unul câte unul, adică. cascadă. Conectarea SPI la ArduinoFiecare model Arduino are propriii pini SPI. Aceste concluzii:
Cel mai recent controler Arduino Due extinde capacitățile utilizatorului și vă permite să implementați mai multe sarcini decât alte microcontrolere. De exemplu, este posibil să controlați automat dispozitivul slave și să selectați automat diferite configurații (viteza ceasului, modul etc.). Arduino SPI LibraryPentru a funcționa pe Arduino, a fost creată o bibliotecă separată care implementează SPI. Înainte de a începe codul, trebuie să adăugați #include Functii principale:
Avantajele și dezavantajele SPIAvantajele interfeței SPI:
Defecte:
Un exemplu de utilizare a Arduino SPI într-un proiect cu un senzor de presiunePentru a implementa proiectul avem nevoie de un Arduino, un senzor de presiune, un breadboard și fire. Un exemplu de conectare a senzorului este prezentat în figură. Folosind senzorul SCP1000, este posibil să recunoașteți parametri precum presiunea și temperatura și să transmiteți aceste valori prin SPI. Elemente de bază ale unei schițe de programÎn primul rând, registrele senzorului sunt înregistrate în cod folosind setup(). Mai multe valori sunt returnate de la dispozitiv - una în 19 biți pentru presiunea primită, alta în 16 biți pentru temperatură. După aceasta, se citesc doi octeți de temperatură și se citește presiunea în două etape. În primul rând, programul ia cei trei biți cei mai semnificativi, apoi următorii 16 biți, după care, folosind o schimbare de biți, aceste două valori sunt combinate într-una singură. Presiunea reală este valoarea de 19 cifre împărțită la 4. const int PRESIUNE = 0x1F; // prima etapă de determinare a presiunii (se detectează trei biți cei mai importanți) const int PRESSURE_LSB = 0x20; // a doua etapă, care definește 16 biți pentru presiune const int TEMPERATURA = 0x21; //16 biți pentru temperatură Pentru a citi datele de temperatură și a le converti în Celsius, se folosește următorul element de cod: int tempData = readRegister(0x21, 2); float realTemp = (float)tempData / 20,0; // pentru a determina valoarea reală a temperaturii în Celsius, trebuie să împărțiți numărul rezultat la 20 Serial.print(„Temp Serial.print(realTemp); Citirea biților de presiune și combinarea acestora: byte pressure_data_high = readRegister(0x1F, 1); presiune_date_high &= 0b00000111; unsigned int pressure_data_low = readRegister(0x20, 2); presiune lungă = ((pressure_data_high<< 16) | pressure_data_low) / 4; //определение давления в Паскалях. Scurte concluzii despre SPIScuturile și senzorii SPI se găsesc adesea în proiectele Arduino, așa că trebuie să știți cum funcționează acest protocol. În principiu, nu este nimic complicat în conectarea dispozitivelor SPI. Principalul lucru este să conectați firele corect și să utilizați metodele standard ale bibliotecii în ordinea corectă. Pentru unele dispozitive, de exemplu, carduri SD sau ecrane OLED, nu există, în principiu, alternative. SPI - Serial Peripheral Interface sau „Serial Peripheral Interface” este un protocol de transfer de date sincron pentru împerechere dispozitiv principal Cu dispozitive periferice (slave). Dispozitivul principal este adesea un microcontroler. Comunicarea între dispozitive are loc pe patru fire, motiv pentru care SPI este uneori numită „interfață cu patru fire”. Acestea sunt anvelopele: Există patru moduri de transfer de date ( SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), cauzată de combinarea polarității impulsurilor de ceas (lucrăm la nivelul ÎNALT sau JOS), Polaritatea ceasului, CPOL, și faza impulsurilor de ceas (sincronizare pe marginea ascendentă sau descendentă a pulsului de ceas), Faza ceasului, CPHA. Ultima coloană a tabelului conține ilustrații explicative. asupra lor Eşantion sunt indicate momentele în care datele de pe linie trebuie să fie gata și citite de dispozitive. Scrisoare Z Se observă că starea datelor de pe linie este necunoscută sau neimportantă. Interfața SPI oferă mai multe opțiuni pentru conectarea dispozitivelor slave: independentŞi cascadă. Când este conectat independent la magistrala SPI, dispozitivul master accesează fiecare dispozitiv slave individual. Cu o conexiune în cascadă, dispozitivele slave funcționează unul câte unul, ca în cascadă. Tipuri de conectare a dispozitivului pentru funcționare prin interfața SPI: independentă și în cascadă 2 Implementarea interfeței SPI pe plăcile familiei ArduinoÎn Arduino, magistralele de interfață SPI sunt situate pe anumite porturi. Fiecare placă are propria sa atribuire de pin. Pentru comoditate, concluziile sunt duplicate și, de asemenea, plasate pe un separat conector ICSP(În Circuit Serial Programming, programarea unui dispozitiv inclus într-un circuit folosind un protocol serial). Vă rugăm să rețineți că conectorul ICSP nu are un pin de selecție slave - SS, deoarece se presupune că Arduino va fi folosit ca dispozitiv principal în rețea. Dar, dacă este necesar, puteți aloca orice pin digital al Arduino ca SS. Figura arată corespondența standard a pinilor cu magistralele SPI pentru Arduino UNO și Nano. 3 Biblioteca standard pentru operare prin interfața SPIA fost scrisă o bibliotecă specială pentru Arduino care implementează protocolul SPI. Este instalat împreună cu mediul de dezvoltare Arduino IDE. Se conectează astfel: la începutul programului adăugăm #include SPI.h. Pentru a începe să utilizați protocolul SPI, trebuie să setați setările și apoi să inițializați protocolul utilizând procedura SPI.beginTransaction(). Puteți face acest lucru cu o singură instrucțiune: SPI.beginTransaction(SPISettings(14000000, MSBFIRST, SPI_MODE0)) Aceasta înseamnă că inițializam protocolul SPI la o frecvență de 14 MHz, transferul de date are loc începând cu MSB (bitul cel mai semnificativ), în mod SPI_MODE0. După inițializare, selectați dispozitivul slave mutând pinul SS corespunzător în stare SCĂZUT. Apoi transferăm datele pe dispozitivul slave cu comanda SPI.transfer(). După transfer ne întoarcem SS la stat RIDICAT. Lucrul cu protocolul este finalizat cu comanda SPI.endTransaction(). Este recomandabil să minimizați timpul de transfer între instrucțiunile SPI.beginTransaction() și SPI.endTransaction() pentru a evita problemele dacă alt dispozitiv încearcă să inițieze un transfer de date utilizând setări diferite. Dacă intenționați să utilizați pini Arduino standard în schiță, nu trebuie să îi descrieți la începutul programului, deoarece sunt deja definite în bibliotecă și au următoarele nume: #define PIN_SPI_SS (10) #define PIN_SPI_MOSI (11) #define PIN_SPI_MISO (12) #define PIN_SPI_SCK (13) Acești pini sunt definiți în fișier pins_arduino.h, care este pe parcurs %programfiles%\arduino-(versiunea)\hardware\arduino\avr\variants\(dacă ați instalat programul într-o locație standard). Adică, de exemplu, pentru a coborî pinul de selecție slave la starea „0”, puteți scrie: DigitalWrite(PIN_SPI_SS, LOW); 4 Conectarea unui registru de deplasare la ArduinoSă luăm în considerare aplicarea practică a interfeței SPI. Vom aprinde LED-urile controlând un registru de deplasare de 8 biți prin magistrala SPI. Să ne conectăm la Arduino registru de deplasare 74HC595. Vom conecta un LED cu o valoare nominală de 220 Ohmi la fiecare dintre cele 8 ieșiri ale registrului printr-un rezistor limitator. Diagrama este prezentată în figură. 5 Schiță pentru controlul unui registru de deplasare prin interfața SPISă scriem o schiță care implementează o „undă de călătorie” prin aprinderea secvențială a LED-urilor conectate la ieșirile registrului de deplasare. #include Mai întâi, să conectăm biblioteca SPI și să inițializam interfața SPI. Să definim pinul 8 ca pin de selecție a slave SS. Să ștergem registrul de deplasare trimițându-i valoarea „0”. Inițializați portul serial. Pentru a aprinde un anumit LED folosind un registru de deplasare, trebuie să aplicați un număr de 8 biți la intrarea acestuia. De exemplu, pentru ca primul LED să se aprindă, furnizăm numărul binar 00000001, pentru al doilea - 00000010, pentru al treilea - 00000100 etc. Aceste numere binare, când sunt convertite în sistemul numeric zecimal, formează următoarea secvență: 1, 2, 4, 8, 16, 32, 64, 128 și sunt puteri a două de la 0 la 7. În consecință, în ciclu buclă() Pe baza numărului de LED-uri, recalculăm de la 0 la 7. Funcție pow (bază, grad) Ridica 2 la puterea contorului de bucle. Microcontrolerele nu funcționează foarte precis cu numere de tip „dublu”, așa că folosim funcția de rotunjire pentru a converti rezultatul într-un număr întreg rundă(). Și transferăm numărul rezultat în registrul de deplasare. Pentru claritate, monitorul portului serial afișează valorile obținute în timpul acestei operațiuni: Unitatea „curge” prin descărcări - LED-urile se aprind într-un val. 6 „Val alergător” de la LED-uriLED-urile se aprind unul câte unul și observăm un „val” de lumini. LED-urile sunt controlate folosind un registru de deplasare, la care ne-am conectat prin interfața SPI. Ca rezultat, doar 3 pini Arduino sunt folosiți pentru a controla 8 LED-uri. Dacă am conecta LED-urile direct la porturile digitale ale Arduino, ar trebui să folosim un port separat pentru fiecare LED. Am studiat cel mai simplu exemplu de lucru Arduino cu magistrala SPI. Vom analiza mai detaliat funcționarea mai multor registre de deplasare cu conexiuni independente și în cascadă într-un articol separat. Interfața serială sincronă SPI este proiectată pentru intrare-ieșire de date în interfețe punct la punct cu un dispozitiv master (SPI-master) și un dispozitiv slave (SPI-slave) (Fig. 1.24). Circuitul de control SPI-master generează impulsuri de ceas SCK, care transmit simultan semnale la ieșirea MOSI și primesc semnale la intrarea MISO. Aceleași impulsuri de ceas SCK, care intră în slave SPI, controlează recepția semnalelor la intrarea sa MOSI și generarea de semnale la ieșirea sa MISO. Circuitele de semnal MOSI și MISO separate permit implementarea ușoară a comunicației full-duplex. Formate de date, parametri de semnal, caracteristici de sincronizare etc. nu sunt reglementate în interfață, de exemplu, rata de schimb de date este determinată doar de frecvența impulsurilor de ceas SCK generate de SPI-master. Distanța maximă depinde de nivelul de distorsiune a semnalului în liniile de comunicație, se presupune că este posibil un schimb de date fiabil la distanțe de până la câțiva metri. În esență, nu este o interfață cu drepturi depline, nici măcar pentru stratul fizic. De fapt, SPI implementează o procedură standard de intrare/ieșire a datelor în registrele de deplasare, nu sunt furnizați algoritmi de control al operațiunilor sau de control al datelor transmise. Toate procedurile de control necesare trebuie efectuate de către SPI-master. Acest lucru, pe de o parte, necesită utilizarea unor instrumente de control suplimentare și, pe de altă parte, simplifică cât mai mult posibil implementarea interfeței SPI în sine. Slave SPI este un registru cu deplasare standard cu numărul necesar de biți de date. De exemplu, microcontrolerele din familia AVR de la ATMEL acceptă intrarea/ieșirea datelor în ambele moduri SPI-master și SPI-slave. Ciclul de schimb standard implică transmiterea simultană a unui octet de date în ambele direcții (Fig. 1.24). La transmiterea mesajelor pe mai mulți octeți, SPI-slave trebuie să conțină un registru de deplasare de lățimea corespunzătoare, iar SPI-master trebuie să controleze schimbul secvenței necesare de octeți de date, procesând fiecare octet după următorul ciclu standard de operare a interfeței și asigurând începutul următorului ciclu de schimb standard. Este folosit nu numai pentru schimbul de date între microcontrolere, ci și pentru interfațarea microcontrolerelor cu ADC-uri externe (ADC) și DAC-uri (DAC), cipuri de memorie - SRAM, FRAM, SEERAM și multe alte dispozitive. Datorită formatului de date seriale și organizării logice simple a interfeței SPI, aceste cipuri sunt fabricate în pachete compacte cu 8-16 pini. În tabel 1.6 prezintă exemple de microcircuite cu diverse scopuri funcționale și de la diferiți producători cu o interfață SPI. Aceste exemple arată că formatul interfeței seriale poate reduce semnificativ numărul necesar de linii I/O. Tabelul 1.6
Una dintre problemele care adesea trebuie rezolvată în instrumentele de automatizare este legată de numărul limitat de linii I/O pe microcontrolere. De obicei, numărul de semnale transmise depășește semnificativ capacitățile porturilor paralele, dar algoritmii de procesare pentru majoritatea semnalelor transmise permit întârzieri suplimentare asociate cu transmisia lor în format serial. În aceste cazuri, utilizarea registrelor standard serial-paralel este eficientă. De exemplu, interfața SPI poate fi utilă pentru citirea stării unui număr mare de senzori on-off sau pentru introducerea datelor multi-biți într-un format paralel. În aceste scopuri, este convenabil să se utilizeze registre separate cu scriere paralelă și citire în serie (registru de schimb de 8 biți Parallel-In/Serial-Out), de exemplu CD74HCT166 (Fig. 1.25). Schema de conectare pentru șaisprezece senzori cu două poziții (S1 – S16) prin interfața SPI a microcontrolerului este prezentată în Fig. 1.26. Trebuie remarcat faptul că înainte de a porni interfața SPI, este necesar să se genereze un semnal pentru a scrie informații în registrele de la intrările paralele D0-D7. Pentru aceasta, puteți utiliza una dintre ieșirile microcontrolerului, în acest exemplu PC0. Orez. 1.25. Schema funcțională a registrului CD74HCT166 Orez. 1.26. Conectarea senzorilor cu două poziții la interfața SPI Orez. 1.27. Conectarea unui indicator cu șase cifre la interfața SPI Folosind registre cu înregistrare secvențială și ieșire paralelă a informațiilor (registru de deplasare pe 8 biți Serial-In, Parallel-Out) - SN74HC595, interfața SPI poate fi folosită și pentru ieșirea paralelă pe mai mulți octeți a informațiilor. Ca exemplu în Fig. Figura 1.27 prezintă o diagramă de conectare a unui indicator cu șase cifre și șapte segmente la un microcontroler. Spre deosebire de circuitul anterior, semnalul de ieșire paralel (PB1) trebuie generat după ce interfața SPI a terminat de transmis date prin mijloace din afara interfeței. De exemplu, algoritmul de interacțiune cu interfața trebuie să asigure monitorizarea numărului de octeți de date transferați, iar după finalizarea transferului ultimului octet, este necesar să se transmită suplimentar un semnal de ieșire paralel. O altă interfață care poate fi folosită pentru a conecta fără probleme un dispozitiv cu un proiect electronic este interfața SPI. SPI(Interfață periferică serială - interfață periferică serială), precum UART, este o interfață destul de veche, simplă și populară. Există multe dispozitive care lucrează pe această interfață (microcontrolere, EEPROM, ADC, DAC...). Îl vom folosi și pentru dispozitivele noastre.
Deci, cum funcționează interfața SPI? Înainte de începerea schimbului, datele sunt plasate în registre de deplasare, masterul pornește generatorul, generatorul „desprinde” 8 cicluri de ceas, în timpul acestor 8 cicluri de ceas registrele de deplasare „își schimbă” conținutul (masterul primește octetul slave, iar sclavul o primește pe a stăpânului) – asta e!
Dezavantajul interfeței este că inițiatorul schimbului este întotdeauna maestru. Aceasta înseamnă că, dacă s-a întâmplat ceva la periferie, maestrul va ști despre asta numai atunci când el însuși „decide” să conducă o sesiune de comunicare (se pierde eficiența). Producătorii de AVR au găsit o cale de a ocoli acest dezavantaj. Dacă SPI-ul microcontrolerului este configurat ca master, pinul SS poate fi configurat atât ca intrare, cât și ca ieșire. Dacă pinul este configurat ca ieșire, acesta este utilizat pentru a selecta dispozitivul slave. Dar dacă pinul SS este configurat ca intrare, atunci când pe acest pin apare un nivel scăzut, microcontrolerul va comuta automat SPI-ul în modul slave și va putea primi date de la un alt master. După sesiunea de schimb, SPI rămâne în modul slave pentru a-l transfera în modul master, trebuie să reconfigurați SPI.
Pentru a conecta dispozitivul la proiectul dvs. prin interfața SPI aveți nevoie de: 1 CONECTAREA DISPOZITIVELOR PRIN SPI. 2 SETARE SPI. SPI are patru moduri de operare (0, 1, 2, 3). Modul de funcționare depinde de marginea semnalului de ceas pe care se efectuează schimbul. În plus, puteți configura ce bit (cel mai semnificativ sau mai scăzut) este transmis primul. Pentru schimb, acest lucru nu contează - rezultatul va fi același (modurile de operare sunt necesare pentru a ajusta SPI la dispozitivele de la diferiți producători). Master și slave trebuie să funcționeze în același mod. Generator de algoritmi. Setări pentru sclav(pentru comunicarea cu dispozitivul de intrare): Faceți clic pe „OK”. Gata – SPI este inițializat și gata de utilizare. Asamblator. Puteți săpa mai adânc în fișa de date pentru controler, puteți lua o bucată de asma dintr-un proiect compilat în C, puteți traduce comenzile mnemonice Algorithm Builder - alegeți ceea ce vă place. init-SPI-slave: sbi 0x17,0x04 ldi r16,0x00 out 0x0E,r16 ldi r16,0xC0 out 0x0D,r16 CodeVisionAVR. Pentru a genera setări SPI, faceți clic pe pictograma roată ( CodeWisardAVR) pe bara de instrumente. În fereastra care se deschide, selectați mai întâi fila Chip, selectați microcontrolerul din ea și setați frecvența cu care va funcționa oscilatorul principal. Apoi, selectați și completați fila SPI în conformitate cu caracteristicile necesare. Setări pentru master (pentru comunicarea cu dispozitivul de ieșire):
// Inițializarea portului B // Func7=In Func6=In Func5=Out Func4=In Func3=Out Func2=Out Func1=In Func0=In // State7=T State6=T State5=0 State4=T State3=0 State2= 0 Stare1=T Stare0=T PORTB=0x00; DDRB=0x2C; // Inițializare SPI // Tip SPI: Master // Rată de ceas SPI: 2000.000 kHz // Faza ceas SPI: jumătate de ciclu // Polaritate ceas SPI: scăzută // Ordinea datelor SPI: MSB First SPCR=0xD0; SPSR=0x00; Setări pentru slave (pentru comunicarea cu dispozitivul de intrare):
// Faza ceasului SPI: jumătate de ciclu // Polaritate ceas SPI: Scăzută // Ordinea datelor SPI: MSB First SPCR= 0xC0 ; SPSR= 0x00 ;// Initializarea portului B // Func7=In Func6=In Func5=In Func4=Out Func3=In Func2=In Func1=In Func0=In // State7=T State6=T State5=T State4=0 State3=T State2= T Star1=T Star0=T PORTB=0x00; DDRB=0x10; // Inițializare SPI // Tip SPI: Slave // Rată de ceas SPI: 2000.000 kHz // Faza ceas SPI: jumătate de ciclu // Polaritate ceas SPI: scăzută // Ordinea datelor SPI: MSB First SPCR=0xC0; SPSR=0x00; Salvați proiectul generat ( File\Generate, Save and Exit Generator de algoritmi.
Asamblator. CodeVisionAVR. Pe lângă inițializare, CodeWisardAVR va crea și o procedură de gestionare a întreruperilor. Nu este necesar nimic suplimentar. // primirea/transmiterea datelor prin SPI în corpul de întrerupere interrupt void spi_isr(void) ( unsigned char data; data=SPDR; ) // pregătirea/transmiterea datelor prin SPI în corpul programului unsigned char data; SPDR=date; Asta pare să fie tot ce am vrut să spun despre SPI. (Vizitat de 5.231 ori, 1 vizite astăzi) Acum aveți o înțelegere generală a interfeței periferice seriale, puteți trece la modulul SPI. Dacă la microcontroler sunt conectate mai multe dispozitive periferice, orice pini de uz general pot fi utilizați ca pini de selecție suplimentari (SS). În acest caz, pinul SS standard trebuie întotdeauna configurat corect, chiar dacă nu este utilizat. Registrele modulului SPIMicrocontrolerul atmega16 folosește trei registre pentru a lucra cu modulul SPI: registru de control SPCR, Toate cele trei registre sunt pe opt biți. Configurația modulului SPI este setată folosind SPCR (SPI Control Register). SPIE– activează/dezactivează întreruperile din modulul SPI. Dacă acest bit este setat la 1, întreruperile SPI sunt activate. SPE– pornește/oprește modulul SPI. Dacă bitul este setat la 1, modulul SPI este activat. DORD– determină ordinea transferului datelor. Când bitul este setat la 1, conținutul registrului de date este transmis mai întâi bitul cel mai puțin semnificativ. Când un bit este șters, bitul cel mai semnificativ este primul. MSTR– determină modul de funcționare al microcontrolerului. Dacă bitul este setat la 1, microcontrolerul funcționează în modul Master. Dacă bitul este resetat, este în modul Slave. De obicei, microcontrolerul funcționează în modul master. CPOLŞi CPHA– determinați în ce mod funcționează modulul SPI. Modul de operare necesar depinde de dispozitivul periferic utilizat.
WCOL- scrieți steag de conflict. Indicatorul este setat la 1 dacă se încearcă scrierea în registrul de date SPDR în timpul transferului de date. Indicatorul este șters de hardware după citirea registrului SPSR și apoi accesarea registrului de date SPDR. SPI2X- bit de dublare a vitezei de transmisie. Setarea acestui bit la 1 dublează frecvența semnalului de ceas SCK. Microcontrolerul trebuie să funcționeze în modul master. Relația dintre biții SPR0, SPR1, SPI2X și frecvența de ceas SCK este prezentată în tabel. Unde Fosc este frecvența de ceas a microcontrolerului AVR.
Cod programCodul minim de program pentru lucrul cu modulul SPI constă din două funcții: Funcții de inițializare. #define SPI_PORTX PORTB #define SPI_DDRX DDRB #define SPI_MISO 6 /*inițializați modulul SPI în modul master*/ /*configurarea porturilor I/O /*rezoluție spi, cel mai semnificativ bit înainte, master, modul 0*/ Transmiterea/recepția datelor 1. stabilirea unui nivel logic scăzut pe linia SS Mai jos sunt câteva opțiuni pentru funcția de transmisie/recepție a datelor. Transferarea unui octet de date prin SPI Transmiterea și primirea unui octet de date prin SPI Transferarea mai multor octeți de date prin SPI //Exemplu de utilizare: … Transmiterea și primirea mai multor octeți de date prin SPI Un driver SPI simplu care combină toate funcțiile descrise mai sus - |
Citire: |
---|
Popular:
Nou
- Dacă pantofii nu se potrivesc cu Aliexpress: acțiunile corecte în acest caz Produsul Aliexpress are mărimea potrivită
- Disputa pe AliExpress Alăturați-vă disputei pe AliExpress
- 3 baze de informații distribuite
- Manager de conținut - responsabilități, salariu, pregătire Dezavantaje și avantaje de a lucra ca specialist în conținut
- Cum să te protejezi de minerit ascuns în browser?
- Recuperarea parolei în Ask
- Cum să pornești camera de pe un laptop
- De ce nu se redă muzica pe VKontakte?
- Cum să măriți dimensiunea unității C în detrimentul unității D fără a pierde date
- Cauzele defecțiunilor de pe placa de bază Dacă chipsetul de pe placa de bază se arde