{"id":150,"date":"2015-10-04T15:47:00","date_gmt":"2015-10-04T15:47:00","guid":{"rendered":"http:\/\/thedutchguys.com\/?p=150"},"modified":"2022-03-29T22:20:53","modified_gmt":"2022-03-29T20:20:53","slug":"arduino-shift-register","status":"publish","type":"post","link":"https:\/\/thijsbekke.nl\/blog\/2015\/10\/04\/arduino-shift-register\/","title":{"rendered":"Arduino Shift register"},"content":{"rendered":"<span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Leestijd: <\/span> <span class=\"rt-time\">4<\/span> <span class=\"rt-label rt-postfix\">Minuten<\/span><\/span><p>&nbsp;<\/p>\n<p>Ze liggen al een tijdje in de la, de 74HC595 shift register (<a href=\"http:\/\/www.nxp.com\/documents\/data_sheet\/74HC_HCT595.pdf\" target=\"_blank\" rel=\"noopener\">Datasheet<\/a>). Ik vond altijd al dat AtTiny&#8217;s in sommige gevallen te weinig output pins hadden. Mede hierdoor heb ik een aantal 74HC595 gekocht op Ebay, maar tot op heden nog nooit gebruikt.<!--more--><\/p>\n<p>Met deze shift register kan je door middel van die pins op bijvoorbeeld je Arduino of Attiny 8&nbsp;digitale outputs aan of uitzetten.&nbsp;Je hebt hiervoor drie pins nodig. Een Clock, een data en een Latch. Wanneer je met een&nbsp;<a href=\"https:\/\/www.saleae.com\">Logic analyzer<\/a>&nbsp;gaat kijken wat er gebeurt zie je de logica. In het stukje wat ik heb gerecord stuurt Arduino getallen opeenvolgend naar de shift register.<\/p>\n<p><a href=\"https:\/\/thijsbekke.nl\/blog\/wp-content\/uploads\/2015\/10\/shift30.png\" rel=\"lightbox[150]\"><img loading=\"lazy\" class=\"wp-image-163 aligncenter\" src=\"https:\/\/thijsbekke.nl\/blog\/wp-content\/uploads\/2015\/10\/shift30.png\" alt=\"shift register logic analyzer 30\" width=\"400\" height=\"137\">&nbsp;<img loading=\"lazy\" class=\"wp-image-164 aligncenter\" src=\"https:\/\/thijsbekke.nl\/blog\/wp-content\/uploads\/2015\/10\/shift31.png\" alt=\"shift register logic analyzer 31\" width=\"420\" height=\"137\"><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Je ziet dat de zwarte wire (channel 0), \u00e9\u00e9n byte verstuurd in het tempo van het clock signaal (channel 2). En wanneer de latch (channel 1\/bruin) weer high gaat is \u00e9\u00e9n byte verstuurd. En wanneer je de binare getallen gaat omrekenen naar decimalen.<\/p>\n<ul>\n<li>00011110 = 30<\/li>\n<li>00011111 = 31<\/li>\n<\/ul>\n<p>Wanneer je dus 8 keer een 1 stuurt en vervolgens de high signaal geeft op de latch output. dan zijn alle ledjes aan, je stuurt binaire gegevens naar je shift register. Je kan zelfs <a href=\"http:\/\/thedutchguys.com\/2015\/10\/04\/158\/\">meerdere shift registers<\/a> aan elkaar koppelen zodat je met nog steeds drie digitale pinnen in gebruik 16 outputs hebt.<\/p>\n<h2>Arduino<\/h2>\n<p>Zie onderstaande afbeelding hoe je dit aansluit op je breadboard (<a href=\"https:\/\/www.arduino.cc\/en\/Tutorial\/ShiftOut\" target=\"_blank\" rel=\"noopener\">Meer info<\/a>)<\/p>\n<p><img loading=\"lazy\" class=\"wp-image-151 aligncenter\" src=\"https:\/\/thijsbekke.nl\/blog\/wp-content\/uploads\/2015\/10\/1-Shift-register.png\" alt=\"Shift register\" width=\"393\" height=\"300\"><\/p>\n<p>&nbsp;<\/p>\n<ul>\n<li>GND (pin 8) naar ground<\/li>\n<li>Vcc (pin 16) naar&nbsp;5V<\/li>\n<li>OE (pin 13) naar&nbsp;ground<\/li>\n<li>MR (pin 10) naar&nbsp;5V<\/li>\n<\/ul>\n<p>Het enigste nadeel aan deze setup is dat wanneer je de Arduino opstart alle ledjes aangaan. Je kan dit voorkomen om ook de OE en de MR pin te controleren met je Arduino. Maar op deze manier hou je meerdere Arduino pins over.<\/p>\n<ul>\n<li>DS (pin 14) naar&nbsp;Ardunio <span class=\"wikiword\">DigitalPin<\/span> 11<\/li>\n<li>SH_CP (pin 11) naar&nbsp;to Ardunio <span class=\"wikiword\">DigitalPin<\/span> 12<\/li>\n<li>ST_CP (pin 12) naar&nbsp;Ardunio <span class=\"wikiword\">DigitalPin<\/span> 8<\/li>\n<\/ul>\n<p>Deze worden ook wel de dataPin, de clockPin en de Latchpin genoemd. Wanneer de lampjes flikkeren is het mogelijk om een 0.1uF capacitor te plaatsen tussen de latchPin en de ground hiermee wordt dit uitgevlakt.<\/p>\n<p>&nbsp;<\/p>\n<h2>De code<\/h2>\n<p>&nbsp;<\/p>\n<p>En de code voor je Arduino<\/p>\n<pre class=\"lang:arduino decode:true \">\/\/ Set Pins\nint latchPin = 8;\nint clockPin = 12;\nint dataPin = 11;\n \n\/\/ create variables\nint ispeed;\nint output;\nboolean up;\n \nvoid setup() {\n  \/\/ initialise pin states\n  pinMode(latchPin, OUTPUT);\n  pinMode(clockPin, OUTPUT);\n  pinMode(dataPin, OUTPUT);\n}\n \nvoid loop() {\n  \/\/ initialise variable states\n  up = true;\n  output = 1;\n  ispeed = 40;\n \n  \/\/ scanner style led scrolling\n  for (int j = 0; j &lt; 253; j++){\n    \/\/ count from 0 to 255 and display the number\n    \/\/ on the LEDs\n    \/\/ take the latchPin low so\n      \/\/ the LEDs don't change while you're sending in bits:\n      digitalWrite(latchPin, LOW);\n      \/\/ shift out the bits:\n      shiftOut(dataPin, clockPin, MSBFIRST, output);\n      \/\/take the latch pin high so the LEDs will light up:\n      digitalWrite(latchPin, HIGH);\n      \/\/ pause before next value:\n      if (up){output = output &lt;&lt; 1;} else {output = output &gt;&gt; 1;}\n      if ((output == 0b10000000) || (output == 0b00000001)){up = !up;}\n      delay(ispeed);\n  }\n \n  \/\/ refresh rate example\n  for (int j = 0; j &lt; 200; j++){\n    \/\/ count from 0 to 255 and display the number\n    \/\/ on the LEDs\n    output = 1;\n    for (int i = 0; i &lt; 8; i++) {\n      \/\/ take the latchPin low so\n      \/\/ the LEDs don't change while you're sending in bits:\n      digitalWrite(latchPin, LOW);\n      \/\/ shift out the bits:\n      shiftOut(dataPin, clockPin, MSBFIRST, output);\n      \/\/take the latch pin high so the LEDs will light up:\n      digitalWrite(latchPin, HIGH);\n      \/\/ pause before next value:\n      output = output &lt;&lt; 1; delay(ispeed); } if(ispeed &gt; 1){ispeed = ispeed-1;}\n  }\n \n  \/\/ binary counter\n  ispeed = 250;\n  for (output = 0; output &lt; 256; output++){\n    \/\/ take the latchPin low so\n      \/\/ the LEDs don't change while you're sending in bits:\n      digitalWrite(latchPin, LOW);\n      \/\/ shift out the bits:\n      shiftOut(dataPin, clockPin, MSBFIRST, output);\n      \/\/take the latch pin high so the LEDs will light up:\n      digitalWrite(latchPin, HIGH);\n      \/\/ pause before next value:\n      delay(ispeed);\n  }\n}\n<\/pre>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/youtu.be\/7YcbXy6szZQ\">https:\/\/youtu.be\/7YcbXy6szZQ<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><span class=\"rt-reading-time\" style=\"display: block;\"><span class=\"rt-label rt-prefix\">Leestijd: <\/span> <span class=\"rt-time\">4<\/span> <span class=\"rt-label rt-postfix\">Minuten<\/span><\/span> &nbsp; Ze liggen al een tijdje in de la, de 74HC595 shift register (Datasheet). Ik vond altijd al dat AtTiny&#8217;s in sommige gevallen te weinig output pins hadden. Mede hierdoor heb ik een aantal 74HC595 gekocht op Ebay, maar tot op heden nog nooit gebruikt.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[3,4],"_links":{"self":[{"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/posts\/150"}],"collection":[{"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/comments?post=150"}],"version-history":[{"count":9,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/posts\/150\/revisions"}],"predecessor-version":[{"id":631,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/posts\/150\/revisions\/631"}],"wp:attachment":[{"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/media?parent=150"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/categories?post=150"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thijsbekke.nl\/blog\/wp-json\/wp\/v2\/tags?post=150"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}