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
uwefed
March 31, 2013, 9:36pm
7
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