SPI Och Arduino Gränssnitt

Innehållsförteckning:

SPI Och Arduino Gränssnitt
SPI Och Arduino Gränssnitt

Video: SPI Och Arduino Gränssnitt

Video: SPI Och Arduino Gränssnitt
Video: Видеоуроки по Arduino. Интерфейсы SPI (8-я серия, ч1) 2024, November
Anonim

Vi studerar SPI-gränssnittet och ansluter ett skiftregister till Arduino, som vi kommer åt med detta protokoll för att styra lysdioderna.

SPI-gränssnitt
SPI-gränssnitt

Nödvändig

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

Instruktioner

Steg 1

SPI - Seriellt perifert gränssnitt eller "Seriellt perifert gränssnitt" är ett synkron dataöverföringsprotokoll för gränssnitt mellan en huvudenhet och kringutrustning (slav). Befälhavaren är ofta en mikrokontroller. Kommunikation mellan enheter utförs över fyra ledningar, varför SPI ibland kallas ett "fyrtrådsgränssnitt". Dessa däck är:

MOSI (Master Out Slave In) - dataöverföringslinje från master till slavenheter;

MISO (Master In Slave Out) - överföringsledning från slaven till master;

SCLK (Serial Clock) - klockpulser för synkronisering som genereras av mastern;

SS (Slave Select) - rad för val av slavenhet; när den är på rad "0" förstår slaven att den nås.

Det finns fyra lägen för dataöverföring (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3) på grund av kombinationen av klockpuls polaritet (vi arbetar på HÖG eller LÅG nivå), Klockpolaritet, CPOL och klockpulsfasen (synkronisering) på den stigande eller fallande kanten av klockpulsen), Clock Phase, CPHA.

Figuren visar två alternativ för anslutning av enheter med SPI-protokollet: oberoende och kaskad. När den är oberoende ansluten till SPI-bussen kommunicerar mastern med varje slav individuellt. Med en kaskad utlöses slavenheter omväxlande, i en kaskad.

Typer av SPI-anslutningar
Typer av SPI-anslutningar

Steg 2

I Arduino finns SPI-bussarna på specifika hamnar. Varje styrelse har sin egen pin-uppgift. För enkelhets skull dupliceras stiften och placeras på en separat ICSP-kontakt (In Circuit Serial Programming). Observera att det inte finns någon slavvalstift på ICSP-kontakten - SS eftersom det antas att Arduino kommer att användas som master i nätverket. Men om det behövs kan du tilldela alla digitala stift av Arduino som en SS.

Figuren visar standardtilldelningen av stiften till SPI-bussarna för Arduino UNO och Nano.

SPI-implementering i Arduino
SPI-implementering i Arduino

Steg 3

Ett specialbibliotek har skrivits för Arduino som implementerar SPI-protokollet. Den är ansluten så här: i början av programmet, lägg till #include SPI.h

För att börja arbeta med SPI-protokollet måste du ställa in inställningarna och sedan initialisera protokollet med proceduren SPI.beginTransaction (). Du kan göra detta med en instruktion: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Detta innebär att vi initialiserar SPI-protokollet med en frekvens på 14 MHz, dataöverföring går, med början från MSB (mest betydande bit), i "0" -läget.

Efter initialisering väljer vi slavenheten genom att sätta motsvarande SS-stift i LÅG-tillstånd.

Sedan överför vi data till slavenheten med kommandot SPI.transfer ().

Efter överföring återgår vi SS till HIGH-tillståndet.

Arbetet med protokollet slutar med kommandot SPI.endTransaction (). Det är önskvärt att minimera körningstiden för överföringen mellan instruktionerna för SPI.beginTransaction () och SPI.endTransaction () så att det inte finns någon överlappning om en annan enhet försöker initiera dataöverföring med olika inställningar.

SPI-överföring
SPI-överföring

Steg 4

Låt oss överväga den praktiska tillämpningen av SPI-gränssnittet. Vi tänder lysdioderna genom att styra 8-bitars skiftregistret via SPI-bussen. Låt oss ansluta 74HC595-skiftregistret till Arduino. Vi ansluter till var och en av de 8 utgångarna via en lysdiod (genom ett begränsningsmotstånd). Diagrammet visas i figuren.

Ansluter skiftregister 74HC595 till Arduino
Ansluter skiftregister 74HC595 till Arduino

Steg 5

Låt oss skriva en sådan skiss.

Låt oss först ansluta SPI-biblioteket och initiera SPI-gränssnittet. Låt oss definiera stift 8 som slavvalstift. Låt oss rensa skiftregistret genom att skicka värdet "0" till det. Vi initialiserar den seriella porten.

För att tända en viss lysdiod med hjälp av ett skiftregister måste du använda ett 8-bitarsnummer på ingången. För att den första lysdioden ska tändas matar vi till exempel det binära numret 00000001, för det andra - 00000010, för det tredje - 00000100, etc. Dessa binära siffror i decimalnotation bildar följande sekvens: 1, 2, 4, 8, 16, 32, 64, 128 och är kraften två från 0 till 7.

Följaktligen, i slingan () av antalet lysdioder, beräknar vi om från 0 till 7. Pow (bas, grad) -funktionen höjer 2 till cykelräknarens effekt. Mikrokontroller fungerar inte särskilt exakt med siffror av "dubbel" -typ, så för att konvertera resultatet till ett heltal använder vi funktionen round (). Och vi överför det resulterande numret till skiftregistret. För tydlighetens skull visar den seriella portmonitorn de värden som erhålls under denna operation: en går genom siffrorna - lysdioderna lyser i en våg.

Skiss för styrning av skiftregistret via SPI-bussen
Skiss för styrning av skiftregistret via SPI-bussen

Steg 6

Lysdioderna tänds i tur och ordning och vi ser en "våg" av ljus. Lysdioderna styrs med hjälp av ett skiftregister, till vilket vi anslöt via SPI-gränssnittet. Som ett resultat används endast 3 Arduino-stift för att driva 8 lysdioder.

Vi har studerat det enklaste exemplet på hur en Arduino fungerar med en SPI-buss. Vi kommer att överväga anslutningen av skiftregister mer detaljerat i en separat artikel.

Rekommenderad: