Hallo Jungs und Mädels,
die meisten werden schon beim Thread-Namen die Haare zu Berge stehen.
Ich blicke aber gerade nicht "durch"..
Folgendes Helferlein-µC:
OK: Schieberegister 1 x 8 Bit = 1 Schieberegister
OK: Schieberegister 2 x 8 Bit = 2 Schieberegister
NIcht OK: Schieberegister 4 x 8 Bit = 4 Schieberegister Daten-Chaos /
Ich schiebe in einem Schieberegister immer eine Variable mit 32 Stellen
hinein.(4 x HC9595 etc) Dies geht auch prinzipiell.
Ablauf:
- Variable für Shiften erzeugen, geht nicht immer "richtig"!
- Datenbasis: Array 2D ==> mit For schleife erzeuge ich ein long int
data2 mit 32 Bit stellen. (Aus Array 2D mach eine große Variable)
Die Ausgabe zum Shiftreg erfolgt in einer For-SChleife:
array[a1][b1] = TRUE; // a wird immer an der richtigen Stelle erzeugt. b
"springt in der Shiftausgabe "hin und her". Eig. Soll in diesem Fall
erzeugt werden:
0x80,0x00,0x80,0x00 aber es erscheint auch:
0x80,0x00,0x00,0x80
1 | a1 = 1;
|
2 | b1 = 1;
|
3 |
|
4 | array[a1][b1] = TRUE; // s.O.
|
5 |
|
6 | for(x=0;x<16;x++)
|
7 | {
|
8 | for(y=0;y<16;y++)
|
9 | {
|
10 | if(array[x][y] == TRUE) // Stelle als True/ON markiert?
|
11 | {
|
12 | data2 |= (1L << (31-y)) | (1L << (x));
|
13 | sent_Byte_SHIFT_MAX(data2); // Bit an Stelle x senden
|
14 | data2 = 0; // Damit nichts "vorheriges" geshiftet wird
|
15 | }
|
16 | else
|
17 | {
|
18 | sent_Byte_SHIFT_MAX(0); // Wenn keine Daten vorhanden sind, dennoch NUll senden
|
19 | }
|
20 | }
|
21 | }
|
Daher die Annahme, das das Array keine entsprechenden Daten enthält, so
beim starten alles auf Null Init:
1 | for (i= 0;i<16;i++)
|
2 | {
|
3 | for (j= 0;j<16;j++)
|
4 | {
|
5 | array[i][j] = OFF;
|
6 | }
|
7 | }
|
8 | // OFF == 0;
|
==> Mit dem Null Init steht der µC und es wird rein gar nix gesendet
Es kann doch nicht so schwer sein...
Danke!