Arduino-programmering - Spelen met schuifregisters (a.k.a Nog meer LED's)

Arduino-programmering - Spelen met schuifregisters (a.k.a Nog meer LED's) / DIY

Vandaag probeer ik je een beetje over Shift Registers te leren. Deze zijn een vrij belangrijk onderdeel van de Arduino-programmering, voornamelijk omdat ze het aantal uitgangen dat u kunt gebruiken, uitbreiden in ruil voor slechts 3 controlepennen. U kunt ook schuifregisters samen schakelen om nog meer uitgangen te krijgen.

Dit is echter een aanzienlijke sprong in de moeilijkheid van eerdere tutorials, en ik raad je ten zeerste aan een goed begrip te hebben van het vorige materiaal (links aan het einde van dit artikel), evenals de basisbegrippen van binary What Is Binary te begrijpen? [Technology Explained] What Is Binary? [Technology Explained] Aangezien binary zo absoluut fundamenteel is voor het bestaan ​​van computers, lijkt het vreemd dat we het onderwerp nooit eerder hebben aangepakt - dus vandaag had ik gedacht dat ik een kort overzicht zou geven van wat binary ... Lees meer welke Ik schreef de vorige keer.

Wat is een Shift-register?

Een uitgangsschuifregister ontvangt technisch gezien gegevens in serie en voert dit parallel uit. In de praktijk betekent dit dat we snel een aantal uitvoeropdrachten naar de chip kunnen sturen, het kunnen activeren en de uitgangen naar de betreffende pinnen worden gestuurd. In plaats van het itereren door elke pin, sturen we eenvoudig de vereiste output naar alle pins tegelijk, als een enkele byte of meer informatie.

Als het u helpt te begrijpen, kunt u een schuifregister zien als een 'array' van digitale uitgangen, maar we kunnen de gebruikelijke digitalWrite-opdrachten overslaan en eenvoudig een reeks bits verzenden om ze in of uit te schakelen.

Hoe werkt het?

Het schuifregister dat we gaan gebruiken - de 74HC595N opgenomen in de Oomlout starterkit - heeft slechts 3 controlepennen nodig. De eerste is een klok - je hoeft je hier niet al te veel zorgen over te maken omdat de Arduino seriële bibliotheken hem besturen - maar een klok is in feite gewoon een aan / uit elektrische puls die het tempo bepaalt voor het datasignaal.

De vergrendelingspen wordt gebruikt om het schuifregister te vertellen wanneer het zijn uitgangen aan en uit moet schakelen volgens de bits die we zojuist hebben verzonden - d.w.z. ze op hun plaats te vergrendelen.

Ten slotte is de datapen waar we de feitelijke seriële data met de bits naar toe stuurden om de aan / uit-status van de outputs van het schuifregister te bepalen.

Het hele proces kan in 4 stappen worden beschreven:

  1. Stel de gegevenspin in op hoog of laag voor de eerste uitvoerpin op het schuifregister.
  2. Puls de klok om de gegevens in het register te 'verplaatsen'.
  3. Ga verder met het instellen van de gegevens en het pulseren van de klok totdat u de vereiste status voor alle uitvoerpinnen hebt ingesteld.
  4. Puls de grendelpen om de uitvoerreeks te activeren.

Implementatie

U hebt de volgende componenten voor dit project nodig:

  • 7HC595N schuifregister-chip
  • 8 LEDS en geschikte weerstanden, of wat u maar wilt uitvoeren
  • De gebruikelijke breadboard, connectoren en een basis Arduino

Als je de Oomlout-starterkit hebt, kun je de breadboard-layout hier downloaden.

Dit is de montage video:

De lay-out van het bord:

En mijn geassembleerde versie:

Ik heb de oorspronkelijke code van Ooolmout aangepast, maar als je dat in plaats daarvan wilt proberen, kun je het hier volledig downloaden. Uitleg van de code is inbegrepen, dus kopieer en plak het hele ding van onder of van de pastebin om een ​​uitleg van de code te lezen.

/ * ------------------------------------------------ --------- * | Shift Registreer zelfstudie, gebaseerd op | * | Arduino Experimentation Kit CIRC-05 | * | .: 8 Meer leds:. (74HC595 Shift Register) | * ------------------------------------------------- -------- * | Gewijzigd door James @ MakeUseOf.com | * ------------------------------------------------- -------- * / // Pin-definities // 7HC595N heeft drie pinnen int-gegevens = 2; // waarbij we de bits naar besturingsuitgangen sturen int clock = 3; // houdt de gegevens synchroon op int latch = 4; // vertelt het schuifregister wanneer de output-sequentie moet worden geannuleerd () // stel de drie controlepennen in op output pinMode (data, OUTPUT); pinMode (klok, UITGANG); pinMode (latch, OUTPUT); Serial.begin (9600); // zodat we foutopsporingsberichten kunnen verzenden naar seriële monitor void loop () outputBytes (); // onze basisuitvoer die 8-bits schrijft om te laten zien hoe een schuifregister werkt. // outputIntegers (); // verzendt een geheel getal als gegevens in plaats van bytes, effectief meegeteld in binair.  void outputIntegers () for (int i = 0; i<256;i++) digitalWrite(latch, LOW); Serial.println(i); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, i); digitalWrite(latch, HIGH); delay(100);   void outputBytes() /* Bytes, or 8-bits, are represented by a B followed by 8 0 or 1s. In this instance, consider this to be like an array that we'll use to control the 8 LEDs. Here I've started the byte value as 00000001 */ byte dataValues = B00000001; // change this to adjust the starting pattern /* In the for loop, we begin by pulling the latch low, using the shiftOut Arduino function to talk to the shift register, sending it our byte of dataValues representing the state of the LEDs then pull the latch high to lock those into place. Finally, we shift the bits one place to the left, meaning the next iteration will turn on the next LED in the series. To see the exact binary value being sent, check the serial monitor. */ for (int i=0;i<8;i++) digitalWrite(latch, LOW); Serial.println(dataValues, BIN); // Debug, sending output to the serial monitor shiftOut(data, clock, MSBFIRST, dataValues); digitalWrite(latch, HIGH); dataValues = dataValues << 1; // Shift the bits one place to the left - change to >> om de richtingvertraging (100) aan te passen;  

Bitverschuiving (OutputBytes-functie)

In het voorbeeld van de eerste lus - outputBytes () - gebruikt de code een 8-bit-reeks (een byte) die vervolgens elke iteratie van de for-lus naar links verschuift. Het is belangrijk op te merken dat als u verder gaat dan mogelijk is, het bit simpelweg verloren is.

Bitverschuiving gebeurt met behulp van << or >> gevolgd door het aantal bits dat u wilt verplaatsen.

Bekijk het volgende voorbeeld en zorg dat u begrijpt wat er gebeurt:

byte val = B00011010 val = val << 3 // B11010000 val = val << 2 // B01000000, we lost those other bits! val = val >> 5 // B00000010 

In plaats daarvan integers verzenden (functie OutputIntegers)

Als u een geheel getal naar het schuifregister verzendt in plaats van naar een byte, wordt het getal eenvoudig omgezet in een reeks binaire bytes. In deze functie (uncomment in de loop en upload om het effect te zien), hebben we een for-lus die telt van 0-255 (het hoogste gehele getal dat we kunnen vertegenwoordigen met één byte), en stuurt dat in plaats daarvan. Het telt in principe in binair, dus de volgorde lijkt een beetje willekeurig, tenzij je LED's in een lange rij liggen.

Als u bijvoorbeeld het binaire uitgelegd artikel leest, weet u dat het nummer 44 wordt weergegeven als 00101100, dus LED's 3,5,6 gaan op dat punt in de reeks branden.

Daisy Chaining More Than One Shift Register

Het opmerkelijke aan Shift Registers is dat als ze meer dan 8 bits informatie krijgen (of hoe groot hun register ook is), ze de andere extra bits er weer uitschuiven. Dit betekent dat je een reeks van hen kunt verbinden, één lange keten van bits kunt invoegen en het afzonderlijk naar elk register kunt distribueren, allemaal zonder extra codering van jouw kant.

Hoewel we hier niet het proces of de schema's zullen beschrijven, als u meer dan één ploegregister heeft, kunt u het project hier proberen vanaf de officiële Arduino-site.

Andere artikelen in de serie:

  • Wat is Arduino en wat kun je ermee doen Wat is Arduino en wat kun je ermee doen? Wat is Arduino en wat kun je ermee doen? De Arduino is een opmerkelijk klein elektronisch apparaat, maar als je er nog nooit een hebt gebruikt, wat precies zijn ze dan, en wat kun je ermee doen? Lees verder ?
  • Wat is een Arduino-starterkit en wat zit erin? Wat zit er in een Arduino Starter Kit? [MakeUseOf Explains] Wat zit er in een Arduino Starter Kit? [MakeUseOf Explains] Ik heb eerder de Arduino open-source hardware hier op MakeUseOf geïntroduceerd, maar je zult meer nodig hebben dan alleen de echte Arduino om er iets uit te bouwen en daadwerkelijk aan de slag te gaan. Arduino "starter kits" zijn ... Lees meer
  • Meer coole onderdelen om te kopen met uw startpakket 8 meer coole componenten voor uw Arduino-projecten 8 meer coole componenten voor uw Arduino-projecten Dus u denkt erover om een ​​Arduino-starterkit te kopen, maar u vraagt ​​zich af of sommige basis-leds en -weerstanden zullen worden genoeg om je het weekend bezig te houden? Waarschijnlijk niet. Hier zijn nog eens 8 ... Lees meer
  • Aan de slag met uw Arduino-starterkit? Stuurprogramma's installeren en het board en de poort instellen Aan de slag met uw Arduino-starterkit - Stuurprogramma's installeren en het board en de poort instellen Aan de slag met uw Arduino-starterkit - Stuurprogramma's installeren en het board en de poort instellen Dus u hebt uzelf gekocht een Arduino-starterkit en mogelijk enkele andere willekeurige coole componenten - wat nu? Hoe begin je eigenlijk met het programmeren van dit Arduino-ding? Hoe stel je het in ... Lees meer
  • Fritzing, een gratis hulpmiddel voor het tekenen van schakelschema's Fritzing - de ultieme tool voor het schetsen van elektronica-projecten [Cross-platform] Fritzing - de ultieme tool voor het schetsen van elektronische projecten [Cross Platform] Ondanks klinken als een alcopop, is Fritzing eigenlijk een ongelooflijk stukje gratis software die je kunt gebruiken om circuit- en componentdiagrammen te maken voor gebruik met rapidprototyping-elektronicaborden zoals de fantastische open-source Arduino ... Lees meer
  • Een nadere blik op de structuur van een Arduino-app & het voorbeeld-knipperprogramma
  • Arduino Xmas tree lights project Een Arduino-project: Hoe maak je flitsende kerstlichten Ornamenten Een Arduino-project: Hoe maak je flitsende kerstverlichting Ornamenten Dit is het volgende deel in onze Arduino-serie, en deze keer leren we over en gebruiken we arrays om een ​​klein kerstboomornament te maken met verschillende knipperende reeksen. Dit zou een ... Lees Meer (AKA leren over arrays)
  • Wat is binair? Wat is binair? [Technology Explained] What Is Binary? [Technology Explained] Aangezien binary zo absoluut fundamenteel is voor het bestaan ​​van computers, lijkt het vreemd dat we het onderwerp nooit eerder hebben aangepakt - dus vandaag had ik gedacht dat ik een kort overzicht zou geven van wat binary ... Lees meer

Tot zover gaan we vandaag met schuifregisters, omdat ik denk dat we veel hebben behandeld. Zoals altijd zou ik u willen aanmoedigen om met de code te spelen en deze aan te passen, en u kunt gerust vragen stellen in de opmerkingen, of zelfs een link delen naar uw geweldige op een schuifregister gebaseerde project.

Ontdek meer over: Arduino.