SPI- En Arduino-interface

Inhoudsopgave:

SPI- En Arduino-interface
SPI- En Arduino-interface

Video: SPI- En Arduino-interface

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

We bestuderen de SPI-interface en verbinden een schuifregister met de Arduino, waar we via dit protocol toegang toe zullen krijgen om de LED's aan te sturen.

SPI-interface
SPI-interface

Noodzakelijk

  • -Arduino;
  • - schuifregister 74HC595;
  • - 8 LED's;
  • - 8 weerstanden van 220 Ohm.

instructies:

Stap 1

SPI - Serial Peripheral Interface of "Serial Peripheral Interface" is een protocol voor synchrone gegevensoverdracht voor het koppelen van een masterapparaat met randapparatuur (slave). De master is vaak een microcontroller. De communicatie tussen apparaten verloopt via vier draden, daarom wordt SPI soms een "vierdraads interface" genoemd. Deze banden zijn:

MOSI (Master Out Slave In) - datatransmissielijn van de master naar de slave-apparaten;

MISO (Master In Slave Out) - transmissielijn van de slave naar de master;

SCLK (Serial Clock) - synchronisatieklokpulsen gegenereerd door de master;

SS (Slave Select) - selectielijn voor slave-apparaten; wanneer op regel "0", "begrijpt" de slaaf dat er toegang wordt verkregen.

Er zijn vier modi voor gegevensoverdracht (SPI_MODE0, SPI_MODE1, SPI_MODE2, SPI_MODE3), vanwege de combinatie van klokpulspolariteit (we werken op het HOOG of LAAG niveau), klokpolariteit, CPOL en de fase van de klokpulsen (synchronisatie op de stijgende of dalende flank van de klokpuls), Clock Phase, CPHA.

De afbeelding toont twee opties voor het aansluiten van apparaten met behulp van het SPI-protocol: onafhankelijk en trapsgewijs. Bij onafhankelijke aansluiting op de SPI-bus communiceert de master afzonderlijk met elke slave. Bij een cascade worden slave-apparaten afwisselend in een cascade geactiveerd.

Soorten SPI-verbindingen
Soorten SPI-verbindingen

Stap 2

In de Arduino bevinden de SPI-bussen zich op specifieke poorten. Elk bord heeft zijn eigen pintoewijzing. Voor het gemak zijn de pinnen gedupliceerd en op een aparte ICSP-connector (In Circuit Serial Programming) geplaatst. Houd er rekening mee dat er geen slave-selectiepin op de ICSP-connector zit - SS, aangezien er wordt van uitgegaan dat de Arduino als master op het netwerk zal worden gebruikt. Maar indien nodig kunt u elke digitale pin van de Arduino als een SS toewijzen.

De afbeelding toont de standaardtoewijzing van de pinnen aan de SPI-bussen voor de Arduino UNO en Nano.

SPI-implementatie in Arduino
SPI-implementatie in Arduino

Stap 3

Voor Arduino is een speciale bibliotheek geschreven die het SPI-protocol implementeert. Het is als volgt verbonden: voeg aan het begin van het programma #include SPI.h. toe

Om met het SPI-protocol te gaan werken, moet u de instellingen instellen en vervolgens het protocol initialiseren met behulp van de procedure SPI.beginTransaction (). U kunt dit doen met één instructie: SPI.beginTransaction (SPISettings (14000000, MSBFIRST, SPI_MODE0)).

Dit betekent dat we het SPI-protocol initialiseren op een frequentie van 14 MHz, de gegevensoverdracht gaat, beginnend bij MSB (most significant bit), in de "0"-modus.

Na initialisatie selecteren we het slave-apparaat door de bijbehorende SS-pin in de LOW-status te zetten.

Vervolgens dragen we de gegevens over naar het slave-apparaat met de opdracht SPI.transfer ().

Na verzending brengen we SS terug naar de HIGH-status.

Werken met het protocol eindigt met de opdracht SPI.endTransaction (). Het is wenselijk om de uitvoeringstijd van de overdracht tussen de instructies SPI.beginTransaction () en SPI.endTransaction () te minimaliseren, zodat er geen overlapping is als een ander apparaat probeert de gegevensoverdracht te initialiseren met verschillende instellingen.

SPI-transmissie
SPI-transmissie

Stap 4

Laten we eens kijken naar de praktische toepassing van de SPI-interface. We zullen de LED's verlichten door het 8-bits schuifregister aan te sturen via de SPI-bus. Laten we het schuifregister 74HC595 verbinden met de Arduino. We verbinden ons met elk van de 8 uitgangen via een LED (via een begrenzingsweerstand). Het diagram is weergegeven in de afbeelding.

Schuifregister 74HC595 aansluiten op Arduino
Schuifregister 74HC595 aansluiten op Arduino

Stap 5

Laten we zo'n schets schrijven.

Laten we eerst de SPI-bibliotheek aansluiten en de SPI-interface initialiseren. Laten we pin 8 definiëren als de slave-selectiepin. Laten we het schuifregister wissen door er de waarde "0" naar te sturen. We initialiseren de seriële poort.

Om een specifieke LED te laten branden met behulp van een schuifregister, moet u een 8-bits nummer op de invoer ervan toepassen. Om bijvoorbeeld de eerste LED te laten oplichten, voeren we het binaire getal 00000001 in, voor de tweede - 00000010, voor de derde - 00000100, enz. Deze binaire getallen in decimale notatie vormen de volgende reeks: 1, 2, 4, 8, 16, 32, 64, 128 en zijn machten van twee van 0 tot 7.

Dienovereenkomstig herberekenen we in de lus () met het aantal LED's van 0 tot 7. De functie pow (basis, graad) verhoogt 2 tot de macht van de cyclusteller. Microcontrollers werken niet erg nauwkeurig met getallen van het "dubbele" type, dus om het resultaat naar een geheel getal om te zetten, gebruiken we de functie round (). En we dragen het resulterende nummer over naar het schuifregister. Voor de duidelijkheid geeft de seriële poortmonitor de waarden weer die tijdens deze operatie worden verkregen: men loopt door de cijfers - de LED's lichten op in een golf.

Schets voor het aansturen van het schuifregister via de SPI-bus
Schets voor het aansturen van het schuifregister via de SPI-bus

Stap 6

De LED's lichten beurtelings op en we observeren een reizende "golf" van licht. De LED's worden aangestuurd met een schuifregister, waarop we via de SPI-interface hebben aangesloten. Als gevolg hiervan worden slechts 3 Arduino-pinnen gebruikt om 8 LED's aan te sturen.

We hebben het eenvoudigste voorbeeld bestudeerd van hoe een Arduino werkt met een SPI-bus. We zullen in een apart artikel nader ingaan op de aansluiting van schuifregisters.

Aanbevolen: