=>[[helvepic32:|HelvePic32]]
==== Schieberegister ====
{{:helvepic32:bspringcoder:ringled.png?600|}}
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
}
=>[[helvepic32:|HelvePic32]]