Beispielprogramme zu Tutorial #14 - Schieberegister
Das sind die Beispielprogramme, die im Youtube-Video verwendet wurden.
1. In das Schieberegister schreiben
/* Robotic Tutorials Beispielcode Tutorial 14: Schieberegister
* 26.12.2019
*
* Beispielcode, den ich verwendet habe, um zwei "8 Segment-Anzeigen" mit
* zwei Power Logic Shift Registern TPIC 6B595 anzusteuern. Die zwei Schieberegister sind
* mit ihren SER IN und SER OUT Pins in Reihe geschalten, die Steuer Pins (SRCLR, G, SRCK, RCK)
* sind jeweils parallel geschalten. Die 8 Segmente einer Anzeige sind kurze LED-Streifen, sie
* erhalten jeweils 12V von extern und sind wie folgt angeordnet:
*
* - ----0----
* | | |
* | 5 1
* | | |
* 7 ----6----
* | | |
* | 4 2
* | | |
* - ----3----
*
* Die Zahlen der Segmente passen sowohl zu den Zahlen der DRAIN-Anschlüsse als auch zu
* den entsprechenden Positionen der Bits in den 8-Bit char Variablen.
*
*/
// Definition von Variablen
char shadow = 0x00; // für Zwischenspeicher
char zero = 0x3f; // 0 0b0011 1111
char one = 0x06; // 1
char two = 0x5b; // 2
char three = 0x4f; // 3
char four = 0x66; // 4
char five = 0x6d; // 5
char six = 0x7d; // 6
char seven = 0x07; // 7
char eight = 0x7f; // 8
char nine = 0x6f; // 9
char ten = 0x80 | zero; // 10 (| ist ein bitwise OR)
char eleven = 0x80 | one; // 11
char twelve = 0x80 | two; // 12
char thirt = 0x80 | three; // 13
char fourt = 0x80 | four; // 14
char fift = 0x80 | five; // 15
char sixt = 0x80 | six; // 16
char sevent = 0x80 | seven; // 17
char eightt = 0x80 | eight; // 18
char ninet = 0x80 | nine; // 19
char a = 0x77; // A
char empty = 0x00; // "alle LEDs aus"
char symbol[22] = {zero, one, two, three, four, five, six, seven, eight, nine, ten, eleven, twelve,
thirt, fourt, fift, sixt, sevent, eightt, ninet, a, empty
}; // Array aller verfügbaren Zeichen
// Definition der Variablen für die Pins am Arduino
#define data 6 // SERIAL IN Pin des Schieberegister ist an DP6 des Arduino
#define srclr 2 // SRCLR Pin des Schieberegister ist an DP2 des Arduino
#define g 3 // ...
#define rclk 4
#define srclk 5
void setup() {
// Definition der Pins als Output
for (int j=2; j<=6; j++) {
pinMode(j, OUTPUT);
}
// Pins G und SRCLR des Schieberegisters werden nur einmal beschrieben
digitalWrite(g, LOW);
digitalWrite(srclr, HIGH);
}
void loop() {
// Diese for-Schleife geht durch alle Zeichen im Array symbol[] durch, zählt also immer von 0 bis 19 und A
for (int i = 0; i < 22; i++) {
digitalWrite(rclk, LOW); // setze den Storage Register Clock Pin auf 0
//shiftOut(data, srclk, LSBFIRST, symbol[i]); // sende die ersten 8 Bit (Schieberegister 2)
shiftOut(data, srclk, MSBFIRST, symbol[i]); // sende die zweiten 8 Bit (Schieberegister 1)
digitalWrite(rclk, HIGH); // setze den Storage Register Clock Pin auf 1 (steigende Flanke)
delay(700);
}
// Mit diesem Code ohne for-Schleife kann man die einzelnen Symbole testen.
// digitalWrite(rclk, LOW);
// shiftOut(data, srclk, MSBFIRST, symbol[18]);
// shiftOut(data, srclk, MSBFIRST, symbol[18]);
// digitalWrite(rclk, HIGH);
// delay(1000);
}
2. Aus dem Schieberegister lesen
/* Robotic Tutorials Beispielcode Tutorial 14: Schieberegister
* 26.12.2019
*/
char sent = 0b11110110;
byte received = 0x00;
// Definition der Variablen für die Pins am Arduino
#define serial_in 6 // SERIAL IN Pin des Schieberegister ist an DP6 des Arduino
#define srclr 2 // SRCLR Pin des Schieberegister ist an DP2 des Arduino
#define g 3 // ...
#define rclk 4
#define srclk 5
#define serial_out 7
void setup() {
// Definition der Pins als Output
for (int j=2; j<=6; j++) {
pinMode(j, OUTPUT);
}
// Pins G und SRCLR des Schieberegisters werden nur einmal beschrieben
digitalWrite(g, LOW);
digitalWrite(srclr, HIGH);
Serial.begin(9600);
delay(50);
}
void loop() {
// Mit diesem Code ohne for-Schleife kann man die einzelnen Symbole testen.
digitalWrite(rclk, LOW);
shiftOut(serial_in, srclk, MSBFIRST, sent);
digitalWrite(rclk, HIGH);
delay(100);
digitalWrite(srclk, LOW);
received = shiftIn(serial_out, srclk, MSBFIRST);
Serial.println(received, BIN);
delay(1000);
}
