/*
V0.2
overriding shiftOut
direct manipulation of latchPin and clockPin
to speed up
now down from ~110 us to ~25 us
needs some improvements for "addressing" the pins
V0.3
using digitalWriteFast
*/
#include <digitalWriteFast.h>
byte dataPin = 2;
byte clockPin = 3;
byte latchPin = 4;
uint8_t data = 0x01;
void setup()
{
pinMode(dataPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(latchPin, OUTPUT);
Serial.begin(115200);
//digitalWrite(dataPin, HIGH);
//while (Serial.available() == 0) {}
}
void loop()
{
//digitalWrite(latchPin, LOW);
digitalWriteFast(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, data);
//digitalWrite(latchPin, HIGH);
digitalWriteFast(latchPin, HIGH);
delay(200);
data++;
}
void shiftOut(uint8_t dataPin, uint8_t clockPin, uint8_t bitOrder, uint8_t val)
{
//Serial.println("shift");
uint8_t i;
for (i = 0; i < 8; i++)
{
if (bitOrder == LSBFIRST)
{
//digitalWrite(dataPin, val & 1);
digitalWriteFast(dataPin, val & 1);
val >>= 1;
}
else
{
//digitalWrite(dataPin, (val & 128) != 0);
digitalWriteFast(dataPin, (val & 128) != 0);
val <<= 1;
}
//digitalWrite(clockPin, HIGH);
digitalWriteFast(clockPin, HIGH);
//digitalWrite(clockPin, LOW);
digitalWriteFast(clockPin, LOW);
}
}