Advertentie

Arduino programmerenVandaag probeer ik je een beetje te leren over Shift Registers. Dit is een vrij belangrijk onderdeel van Arduino-programmering, in feite omdat ze het aantal uitgangen dat u kunt gebruiken uitbreiden, in ruil voor slechts 3 bedieningspennen. U kunt ook schuifregisters in serie schakelen om nog meer uitgangen te krijgen.

Dit is echter een aanzienlijke sprong in moeilijkheden ten opzichte van eerdere tutorials, en ik raad sterk aan om een echt goed begrip van het vorige materiaal (links aan het einde van dit artikel), evenals begrip de basisprincipes van binair Wat is binair? [Technologie uitgelegd]Aangezien binair zo absoluut fundamenteel is voor het bestaan ​​van computers, lijkt het vreemd dat we het onderwerp nog nooit eerder hebben aangepakt - dus vandaag dacht ik dat ik een kort overzicht zou geven van wat binair is ... Lees verder die ik de vorige keer schreef.

Wat is een schuifregister?

Een uitgangsschuifregister ontvangt technisch gesproken gegevens in serie en voert deze parallel uit. Praktisch gezien betekent dit dat we snel een aantal uitvoeropdrachten naar de chip kunnen sturen, deze kunnen activeren en dat de uitgangen naar de relevante pinnen worden gestuurd. In plaats van elke pin te herhalen, sturen we eenvoudig de vereiste uitvoer naar alle pinnen tegelijk, als een enkele byte of meer informatie.

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

Hoe werkt het?

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

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

Ten slotte is de gegevenspin waar we de werkelijke seriële gegevens met de bits naartoe hebben gestuurd om de aan / uit-status van de uitgangen 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. Pulse de klok om de gegevens in het register te 'verschuiven'.
  3. Ga door met het instellen van de gegevens en het pulseren van de klok totdat u de vereiste status voor alle uitgangspinnen hebt ingesteld.
  4. Druk op de vergrendelpen om de uitvoerreeks te activeren.

Implementatie

Voor dit project heeft u de volgende componenten nodig:

  • 7HC595N schuifregisterchip
  • 8 LEDS en geschikte weerstanden, of wat je maar wilt uitvoeren
  • Het gebruikelijke breadboard, connectoren en een standaard Arduino

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

Hier is de montagevideo:

De bordindeling:

Arduino programmeren

En mijn geassembleerde versie:

Arduino Programming - Spelen met schuifregisters (ook bekend als nog meer LED's) zelfgemaakte schuifregister-tutorial

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

/ * * | Shift Register-zelfstudie, gebaseerd op | * | Arduino Experimentation Kit CIRC-05 | * |.: 8 meer LED's:. (74HC595 Shift Register) | * * | Gewijzigd door James @ MakeUseOf.com | * * / // Pin-definities. // 7HC595N heeft drie pinnen. int data = 2; // waar we de bits naar sturen om de uitgangen int clock = 3 te besturen; // houdt de gegevens gesynchroniseerd. int latch = 4; // vertelt het schuifregister wanneer de outputsequentie nietig setup () moet worden geactiveerd {// stel de drie controlepennen in om pinMode uit te voeren (data, OUTPUT); pinMode (klok, OUTPUT); pinMode (vergrendeling, 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, waarbij effectief in binair wordt geteld. } void outputIntegers () {for (int i = 0; i <256; i ++) {digitalWrite (latch, LOW); Serial.println (i); // Debug, output verzenden naar de seriële monitor shiftOut (data, klok, MSBFIRST, i); digitalWrite (vergrendeling, HOOG); vertraging (100); }} void outputBytes () {/ * Bytes, of 8-bits, worden vertegenwoordigd door een B gevolgd door 8 0 of 1s. Beschouw in dit geval dit als een array die we zullen gebruiken om de 8 LED's te bedienen. Hier heb ik de bytewaarde gestart als 00000001 * / byte dataValues ​​= B00000001; // verander dit om het startpatroon aan te passen / * In de for-lus beginnen we door de grendel laag te trekken, met behulp van de shiftOut Arduino-functie om praat met het schuifregister en stuur het onze byte aan gegevens Waarden die de status van de LED's vertegenwoordigen, trek dan de grendel omhoog om die in te vergrendelen plaats. Ten slotte verschuiven we de bits één plaats naar links, wat betekent dat de volgende iteratie de volgende LED in de serie zal inschakelen. Controleer de seriële monitor om de exacte binaire waarde te zien die wordt verzonden. * / for (int i = 0; i <8; i ++) {digitalWrite (latch, LOW); Serial.println (dataValues, BIN); // Debug, output verzenden naar de seriële monitor shiftOut (data, klok, MSBFIRST, dataValues); digitalWrite (vergrendeling, HOOG); dataValues ​​= dataValues ​​<< 1; // Verschuif de bits één plaats naar links - verander naar >> om de richtingvertraging aan te passen (100); } }

Bit-shifting (OutputBytes-functie)

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

Bitverschuiving gebeurt met << of >> gevolgd door het aantal bits waarmee u wilt verschuiven.

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

byte val = B00011010. val = val << 3 // B11010000. val = val << 2 // B01000000, we zijn die andere bits kwijt! val = val >> 5 // B00000010. 

In plaats daarvan gehele getallen verzenden (functie OutputIntegers)

Als u een geheel getal naar het schuifregister stuurt in plaats van een byte, wordt het nummer eenvoudig omgezet in een binaire bytereeks. In deze functie (commentaar in de lus 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 dat in plaats daarvan verzendt. Het telt in feite in binair, dus de reeks lijkt misschien een beetje willekeurig, tenzij je LED's in een lange rij zijn opgesteld.

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

Arduino Programming - Spelen met schuifregisters (ook bekend als nog meer LED's) binair 44

Daisy Chaining More Than One Shift Register

Het opmerkelijke van Shift Registers is dat als ze meer dan 8-bits informatie krijgen (of hoe groot hun register ook is), ze de andere extra bits weer zullen verschuiven. Dit betekent dat u een reeks van hen met elkaar kunt verbinden, een lange reeks bits kunt invoegen en deze afzonderlijk naar elk register kunt laten distribueren, allemaal zonder aanvullende codering van uw kant.

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

Andere artikelen in de serie:

  • Wat is Arduino en wat kun je ermee doen Wat is Arduino en wat kun je ermee?De Arduino is een opmerkelijk klein elektronisch apparaat, maar als je er nog nooit een hebt gebruikt, wat zijn dat dan precies en wat kun je ermee doen? Lees verder ?
  • Wat is een Arduino-starterkit en wat bevat deze? 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 hebt meer nodig dan alleen de daadwerkelijke Arduino om er iets uit te bouwen en daadwerkelijk aan de slag te gaan. Arduino "starterkits" zijn ... Lees verder
  • Meer coole componenten om te kopen met uw starterkit 8 meer coole componenten voor uw Arduino-projectenDus u denkt erover om een ​​Arduino-starterkit te kopen, maar vraagt ​​u zich af of enkele basis-LED's en weerstanden voldoende zullen zijn om u een weekend bezig te houden? Waarschijnlijk niet. Hier zijn er nog 8 ... Lees verder
  • Aan de slag met uw Arduino Starter Kit? Stuurprogramma's installeren en het bord en de poort instellen Aan de slag met uw Arduino-starterkit - Stuurprogramma's installeren en het bord en de poort instellenDus je hebt een Arduino-starterkit voor jezelf gekocht, 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 verder
  • Fritzing, een gratis tool voor het tekenen van schakelschema's Fritzing - De ultieme tool voor het uittekenen van elektronische projecten [Cross Platform]Ondanks dat het klinkt als een alcopop, is Fritzing eigenlijk een ongelooflijk beetje gratis software die je kunt gebruiken om te maken circuit- en componentdiagrammen voor gebruik met rapid-prototyping elektronische printplaten zoals de fantastische open-source Arduino ... Lees verder
  • Een nadere blik op de structuur van een Arduino-app en het voorbeeldknipperprogramma Eerste stappen met de Arduino: een nadere blik op de printplaat en de structuur van een programmaDe laatste keer dat ik je verliet, heb je je Arduino ingesteld om met Mac of Windows te werken, en heb ik een eenvoudige test-app geüpload die de ingebouwde LED knipperde. Vandaag ga ik de code uitleggen ... Lees verder
  • Arduino Xmas Tree Lights-project Een Arduino-project: Flashy Christmas Lights-ornamenten makenDit is het volgende deel van onze lerende 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 verder (AKA leert over arrays)
  • Wat is binair? Wat is binair? [Technologie uitgelegd]Aangezien binair zo absoluut fundamenteel is voor het bestaan ​​van computers, lijkt het vreemd dat we het onderwerp nog nooit eerder hebben aangepakt - dus vandaag dacht ik dat ik een kort overzicht zou geven van wat binair is ... Lees verder

Dat is voor zover we vandaag gaan met schuifregisters, omdat ik denk dat we veel hebben besproken. Zoals altijd zou ik je willen aanmoedigen om mee te spelen en de code aan te passen, en voel je vrij om al je vragen te stellen in de reacties, of zelfs een link te delen naar je geweldige op shift-register gebaseerde project.

James heeft een BSc in Artificial Intelligence en is CompTIA A + en Network + gecertificeerd. Hij is de hoofdontwikkelaar van MakeUseOf en brengt zijn vrije tijd door met het spelen van VR paintball en bordspellen. Hij bouwt al pc's sinds hij een kind was.