Das Breakout Board nutzt ein sehr weit verbreitetes Schieberegister, den 74LS595D. Dieser ist in der Arduino Literatur gut beschrieben udn wird beim HelvePic32 in genau der gleichen Weise verwendet. Für die 16 LEDs des Rings sind dementsprechend 2 dieser ICs nötig, da jeder IC nur 8 LED treiben kann.
Das Schieberegsiter ist “latched”, was bedeutet, dass das Register seinen Zustand hält bis die Daten geladen sind. Dies verhindert, dass die Anzeige flackert.
Die Pins sind fogende:
int enPin = nP[LEFT][3]; // Shift registers' Output Enable pin int latchPin = nP[LEFT][4]; // Shift registers' rclk pin int clkPin = nP[LEFT][5]; // Shift registers' srclk pin int clrPin = nP[LEFT][6]; // shift registers' srclr pin int datPin = nP[LEFT][7]; // shift registers' SER pin
Die Daten werden über eine einfache ShiftOut Funktion in das Register geschoden:
void shiftOut16(uint16_t data) { byte datamsb; byte datalsb; datamsb = (data&0xFF00)>>8; // mask out the MSB and shift it right 8 bits datalsb = data & 0xFF; // Mask out the LSB Serial.print(" "); Serial.print(datamsb,DEC); Serial.print(" "); Serial.print(datalsb,DEC); digitalWrite(latchPin, LOW); // first send latch low shiftOut(datPin, clkPin, MSBFIRST, datamsb); shiftOut(datPin, clkPin, MSBFIRST, datalsb); digitalWrite(latchPin, HIGH); // send latch high to indicate data is done sending }