SPI Og Arduino-grensesnitt

Innholdsfortegnelse:

SPI Og Arduino-grensesnitt
SPI Og Arduino-grensesnitt

Video: SPI Og Arduino-grensesnitt

Video: SPI Og Arduino-grensesnitt
Video: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, Kan
Anonim

Vi studerer SPI-grensesnittet og kobler et skiftregister til Arduino, som vi får tilgang til ved hjelp av denne protokollen for å kontrollere lysdiodene.

SPI-grensesnitt
SPI-grensesnitt

Nødvendig

  • - Arduino;
  • - skiftregister 74HC595;
  • - 8 lysdioder;
  • - 8 motstander på 220 Ohm.

Bruksanvisning

Trinn 1

SPI - Serial Peripheral Interface eller "Serial Peripheral Interface" er en synkron dataoverføringsprotokoll for grensesnitt mellom en hovedenhet og perifere enheter (slave). Mesteren er ofte en mikrokontroller. Kommunikasjon mellom enheter utføres over fire ledninger, og det er derfor SPI noen ganger blir referert til som et "firetrådsgrensesnitt". Disse dekkene er:

MOSI (Master Out Slave In) - dataoverføringslinje fra master til slaveenheter;

MISO (Master In Slave Out) - overføringslinje fra slave til master;

SCLK (Serial Clock) - synkronisering av klokkepulser generert av masteren;

SS (Slave Select) - linje for valg av slaveenhet; når den er på linje "0", forstår slaven "at den blir åpnet.

Det er fire moduser for dataoverføring (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), på grunn av kombinasjonen av klokkepolaritet (vi jobber på HØYT eller LAVT nivå), Klokkepolaritet, CPOL og fasen til klokkepulsene (synkronisering på den stigende eller fallende kanten av klokkepulsen), Clock Phase, CPHA.

Figuren viser to alternativer for tilkobling av enheter ved hjelp av SPI-protokollen: uavhengig og kaskad. Når uavhengig koblet til SPI-bussen, kommuniserer mesteren med hver slave individuelt. Med en kaskade - slaveenheter utløses vekselvis, i en kaskade.

Typer SPI-tilkoblinger
Typer SPI-tilkoblinger

Steg 2

I Arduino er SPI-bussene på bestemte porter. Hvert brett har sin egen pin-oppgave. For enkelhets skyld dupliseres pinnene og plasseres på en separat ICSP-kontakt (In Circuit Serial Programming). Vær oppmerksom på at det ikke er noen slavevalgpinne på ICSP-kontakten - SS siden det antas at Arduino vil bli brukt som master på nettverket. Men om nødvendig kan du tilordne hvilken som helst digital pin av Arduino som en SS.

Figuren viser standard tildelingen av pinnene til SPI-bussene for Arduino UNO og Nano.

SPI-implementering i Arduino
SPI-implementering i Arduino

Trinn 3

Det er skrevet et spesialbibliotek for Arduino som implementerer SPI-protokollen. Den er koblet slik: i begynnelsen av programmet, legg til #include SPI.h

For å begynne å jobbe med SPI-protokollen, må du angi innstillingene og deretter initialisere protokollen ved hjelp av SPI.beginTransaction () -prosedyren. Du kan gjøre dette med en instruksjon: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Dette betyr at vi initialiserer SPI-protokollen med en frekvens på 14 MHz, dataoverføring går, fra MSB (viktigste bit), i "0" -modus.

Etter initialisering velger vi slaveenheten ved å sette den tilsvarende SS-pinnen i LAV-tilstand.

Deretter overfører vi dataene til slaveenheten med SPI.transfer () -kommandoen.

Etter overføring returnerer vi SS til HIGH-staten.

Arbeid med protokollen slutter med SPI.endTransaction () -kommandoen. Det er ønskelig å minimere kjøringstiden for overføringen mellom SPI.beginTransaction () og SPI.endTransaction () instruksjonene, slik at det ikke er noen overlapping hvis en annen enhet prøver å initialisere dataoverføring ved hjelp av forskjellige innstillinger.

SPI-overføring
SPI-overføring

Trinn 4

La oss vurdere den praktiske anvendelsen av SPI-grensesnittet. Vi vil tenne lysdiodene ved å kontrollere 8-biters skiftregister via SPI-bussen. La oss koble 74HC595 skiftregister til Arduino. Vi kobler til hver av de 8 utgangene via en LED (gjennom en begrensningsmotstand). Diagrammet er vist i figuren.

Kobler skiftregister 74HC595 til Arduino
Kobler skiftregister 74HC595 til Arduino

Trinn 5

La oss skrive en slik skisse.

La oss først koble til SPI-biblioteket og initialisere SPI-grensesnittet. La oss definere pin 8 som slavevalg pin. La oss tømme skiftregisteret ved å sende verdien "0" til det. Vi initialiserer den serielle porten.

For å tenne en bestemt LED ved hjelp av et skiftregister, må du bruke et 8-bit nummer på inngangen. For eksempel, for at den første lysdioden skal lyse, mater vi binært nummer 00000001, for den andre - 00000010, for den tredje - 00000100, etc. Disse binære tallene i desimaltegning danner følgende sekvens: 1, 2, 4, 8, 16, 32, 64, 128 og er krefter på to fra 0 til 7.

Følgelig, i sløyfen () av antall lysdioder, beregner vi på nytt fra 0 til 7. Pow (base, grad) -funksjonen hever 2 til syklusstellerens effekt. Mikrokontrollere fungerer ikke veldig nøyaktig med tall av "dobbel" type, så for å konvertere resultatet til et heltall, bruker vi funksjonen round (). Og vi overfører det resulterende nummeret til skiftregisteret. For klarhetens skyld viser seriell portmonitor verdiene som oppnås under denne operasjonen: en går gjennom sifrene - LED-lampene lyser i en bølge.

Skisse for styring av skiftregisteret via SPI-bussen
Skisse for styring av skiftregisteret via SPI-bussen

Trinn 6

Lysdiodene lyser etter tur, og vi observerer en vandrende "bølge" av lys. Lysdiodene styres ved hjelp av et skiftregister, som vi koblet til via SPI-grensesnittet. Som et resultat brukes bare 3 Arduino-pinner til å kjøre 8 lysdioder.

Vi har studert det enkleste eksemplet på hvordan en Arduino fungerer med en SPI-buss. Vi vil vurdere tilkoblingen av skiftregister mer detaljert i en egen artikkel.

Anbefalt: