Shift-Register 74HC165 auslesen und Werte weiterverarbeiten

Hallo,
ich habe gerade eine kleine "Blockade":

Wenn ich die Eingänge eines 74HC595 schalten möchte, dann sende ich ja 1 oder 0 an die jeweilige stelle.

Klappt ja gut wenn man 8 Taster ausliest an Leds ausgibt und dazu folgendes verwendet:

if(Button1 == HIGH)
{
ledValue = ledValue +1;
}

if(Button2 == HIGH)
{
ledValue = ledValue +2;
}

if(Button3 == HIGH)
{
ledValue = ledValue +4;
}

if(Button4 == HIGH)
{
ledValue = ledValue +8;
}

if(Button5 == HIGH)
{
ledValue = ledValue +16;
}

if(Button6 == HIGH)
{
ledValue = ledValue +32;
}

if(Button7 == HIGH)
{
ledValue = ledValue +64;
}

if(Button8 == HIGH)
{
ledValue = ledValue +128;
}

Aber wie kann man die 1-sen und Nullen der jeweiligen Stelle als Variable speichern die der 74HC165 ausgibt? Also quasi die 8-Bit reihe aufspalten in seine einzelnen Bit? Ich stehe da leider etwas auf der Leitung.

Ich hoffe Ihr könnt mir dabei helfen.

Danke
Lg MrNiceGuy

Hallo,
hat denn keiner eine Idee wie man das realisieren könnte um schnell viele Taster mittels 74HC165 auszulesen?

Lg MrNiceGuy

hi,

mit einem AND geht das zb.
11011001 vom HC
00001000 vergleich mit AND
00001000 ergebnis

11011001 vom HC
00000100 vergleich mit AND
00000000 ergebnis

also :
if ((217 AND 8 ) == 8 ) {vierte_stelle = true;}
if ((217 AND 4) == 4) {dritte_stelle = true;}

[EDIT] die 8) ausgebessert damit sie 8 ) werden Uwe [/EDIT]

hi,

die 8) sollen 8 ) sein.
ein else mit false gehört natürlich dazu.

oder abgekürzt

dritte_stelle = ((217 AND 3) == 3) ? TRUE : FALSE;

gruß stefan

Der And-Vergleich ist aber bei vielen Schieberegistern eher aufwendig.

Wäre es auch möglich das mit einer If-Abfrage zu machen?

Nach diesem Vorbild z.B.:

for(int i=1;i < (numoftacts + 1) ;i++){
Tact = String("tact") + i;
}
??

Denn so müsste man es ja nur als 8-er Kette mal die anzahl der Register machen, aber ich bin mir nicht so sicher wie man das als Code ausdrücken kann, ohne jetzt jedes einzelne Register einzeln einprogrammieren zu müssen. So könnte man es auch später durch das einfache ändern des Multiplikators für die Anzahl der Register erweitern?

Lg

hi,

mit Deinem codebeispiel komm ' ich jetzt garnicht klar.
in einer for-schleife kann man mit

boolean stelle[7];

for (byte n = 0; n < 8; n++) {
  stelle[n] = ((217 AND pow(2, n)) == pow(2, n)) ? TRUE : FALSE;
}

hinkommen.

gruß stefan

Um ein Bit in einem Byte zu lesen gibt es die Funktionen BitRead) http://arduino.cc/en/Reference/BitRead

Grüße Uwe

Danke,
das sieht sehr brauchbar aus.

Muss jetzt leider eh erst mal warten bis meine ganzen Shift register eingetroffen sind, um mit meinen experimenten weiter zu kommen.

Danke

Lg MrNiceGuy

hi, uwe

Um ein Bit in einem Byte zu lesen gibt es die Funktionen BitRead

wieder was gelernt, brauchte ich noch nie bis jetzt.

gruß stefan