v0.1.1 Start document voor HC595 IC door HU IICT.
Een (output) schuifregister is een chip waar je stap voor stap bitjes in kan schuiven. Het schuifregister heeft een aantal ‘stages’ achter elkaar, in het onderstaande plaatje.

Alle stages zijn verbonden met een gemeenschappelijk klok signaal. Als dit kloksignaal verandert van laag naar hoog neemt iedere stage de waarde van de voorgaande over, en de eerste neemt de waarde op zijn ingang over. Hiermee kan je (in 4 stappen) de 4 stages ieder in een door jou gewenste toestand (hoog of laag) brengen. De uitgangen van de schuifregister stages (Q1 t/m Q4) kan je gebruiken als uitgangspinnen, bv. om LEDs aan te sturen. Met een schuifregister van 4 stages kan je zo 4 LEDs aansturen. Om een schuifregister op deze wijze aan te sturen zijn maar 2 GPIO pinnen nodig, ongeacht het aantal stages. Dit is handig als je meer uitgangen wil hebben dan je GPIOs ter beschikking hebt, of als je LEDs op afstand van je microcontroller zitten, en je het aantal draadjes naar de LEDs wil beperken.
De 74HC595 chip is een veelgebruikt 8-stage (output) schuifregister. We gaan deze chip gebruiken om 8 LEDs aan te sturen.
Deze chip heeft behalve 8 schuifregister stages ook nog een opslag (‘holding’ of ‘latch’) register waarin de 8 bitjes opgeslagen worden, zodat het schuiven niet zichtbaar is op de uitgangspinnen.

Om 8 waarden op de uitgangspinnen van een 74HC595 chip te krijgen moeten we dus het volgende doen:

De 74HC595 schuifregister heeft drie ingangen die aan de micro-controller moeten worden aangesloten: shift-clock (SHCP = SHift Clock Pulse), data (DS), en hold-clock (STCP = STorage Clock Pulse). Verder moet je natuurlijk GND en VCC (3.3V) aansluiten, en MR (Master Reclear) aan VCC en OE (Output Enable) aan GND.

We kunnen de 8 LEDs direct aansluiten op de HC595 om een 8 bit binair getal voor te stellen. De anode kant naar de IC (Q0-Q7) en de kathode kant naar ground. Dit heet sourcing current in tegenstelling tot sinking current wanneer een schuifregister geen spanning kan leveren.

Dit is een software implementatie:
int latchPin = 8;
int clockPin = 12;
int dataPin = 11;
// anyNumber < 256, decimal 123 is binary 01111011
int anyNumber = 123;
void setup() {
//set pins to output
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
}
void loop() {
// latchPin low, LEDs do not turn on while sending bits
digitalWrite(latchPin, LOW);
// shift out the bits
shiftOut(dataPin, clockPin, MSBFIRST, anyNumber);
//take the latch pin high, LEDs turn on
digitalWrite(latchPin, HIGH);
}
Waar staat MSBFIRST voor? Wat doet dit? Kan je de data ook op een andere manier versturen? Probeer dit.
Bovenstaand is een software implementatie. Met een engelse term noemen we dit ook wel bit-banging.
Met de SPI bibliotheek kan je ook een hardware implementatie maken.
(Niet alle pinnen van de Arduino Uno ondersteunen hardware SPI.)
Wat zouden de voordelen zijn van het gebruik van SPI in plaats van ShiftOut()?
NB: Het 74HC595 schuifregister is geen SPI device. We kunnen SPI gebruiken om een ‘bitstream’ te genereren.