Gast
#2830822
hallo, Ist es möglich ein shiftregister statt mit 0 - 255. Auch mit Binärcode Sprich 11001100 anzusteuern.
|
Anzeige
|
Arduino Shiftregister 8bit
Gast
#2830822
hallo, Ist es möglich ein shiftregister statt mit 0 - 255. Auch mit Binärcode Sprich 11001100 anzusteuern.
Gast
#2830826
ich meine Natürlich ob das in arduino geht.
Gast
#2830827
Binär oder Dezimal sind nur zwei verschiedene Darstellungen für die selbe Zahl...
Gast
#2830839
ok wie müsste die zeile aussehen wenn ich statt einer zahl 0 - 255. 00110011 einfügen will. shiftOut(dataPin, clockPin, LSBFIRST, j); im moment ist j die Variable mit dem wert 0-255
Gast
#2830844
Dann setzt du j einfach auf den entsprechenden Wert. Problem? Mario schrieb: > ok wie müsste die zeile aussehen wenn ich statt einer zahl 0 - 255. > 00110011 einfügen will. > > > shiftOut(dataPin, clockPin, LSBFIRST, j); > > im moment ist j die Variable mit dem wert 0-255 Macht keinen Unterschied. Ob du j = 51; oder j = 0xb00110011; oder j = 0x33; oder j = 'Q'; oder j = 50 + 1; oder ... schreibst, kommt alles aufs selbe raus. In j (ich nehme mal an, das wäre eine 8 Bit Variable) werden die 8 Bits auf das Muster +---+---+---+---+---+---+---+---+ | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 1 | +---+---+---+---+---+---+---+---+ gesetzt. Die verschiedenen Schreibweisen für Zahlen sind genau das: verschiedene Schreibweisen. Aber sie stehen alle für ein und dasselbe Bitmuster. Nämlich das Bitmuster, welches als Dezimalzahl interpretiert 51 ergibt. Die Schreibweisen haben ihre Berechtigung. Je nachdem was man macht, je nachdem was man tut, kann die eine Schreibweise besser ausdrücken, was eigentlich die Absicht an einer bestimmten Codestelle ist.
Gast
#2830862
Ja massive probleme leider. hab das eben mal versucht und das hat geklappt. wenn ich jetzt anstatt einem festen code einen zustand von einem digitalen eingang setzten will. sprich das anfangs byte vom schieberegister ist 00000000 und ich will jetzt die variable y in das vorhandene byte einfliesen lassen von links nach rechts dann müsste eine zeile doch wie folgt aussehen. shiftOut(dataPin, clockPin, LSBFIRST, 00000000 << y);
Gast
#2830869
Mario schrieb: > 00000000 << y Da kommt exakt 0 raus. Sag mal was du vorhast.
Gast
#2830879
Ohje ganz schwer zu erklären. ich möchte einen Digitalen eingang auslesen. Ergebniss 0 - 1. diese dann von links nach rechts in einen binärcode einfliesen lassen. das heist immer das aktuelle bit wird links reingeschoben und das letzte rechte bit entfällt. Und der aktuelle binärcode soll dann das shiftregister ansteuern. Sprich wenn der eingang 1 ist sieht der BIN nach 8 durchgängen so aus 11111111 und das ist dann gleichzeitig auch der zustand meines Schieberegisters. Hilfe Mario schrieb: > Ohje ganz schwer zu erklären. > > ich möchte einen Digitalen eingang auslesen. Ergebniss 0 - 1. > > diese dann von links nach rechts in einen binärcode einfliesen lassen. > das heist immer das aktuelle bit wird links reingeschoben und das letzte > rechte bit entfällt. > Und der aktuelle binärcode soll dann das shiftregister ansteuern. Stell diese Aufgabe noch zurück. Ohne saubere Tastenentprellung wird das nichts und sowas ist erstaunlich schwer zu realisieren.
Gast
#2830892
Ok waron liegt das problem genau den da ich einen Digitalen eingang habe kann das ergebniss eh nur 0 oder 1 sein. in meiner Schaltung habe Pullup Widerstände die den eingang gegen masse ziehen. Mario schrieb: > Ok waron liegt das problem genau den da ich einen Digitalen eingang habe > kann das ergebniss eh nur 0 oder 1 sein. Schon. Aber dein Programm fragt den Eingang ungefähr 10-tausend mal in der Sekunde ab. Und ich glaube nicht, dass du den Taster schnell genug drücken und wieder loslassen kannst, dass dein Programm da nur ein einziges mal eine 1 sieht.
Gast
#2830897
Wie funktioniert das eigentlich wenn ich zum Beispiel. x deklariere mit 0b00001000; x = 0b00001000; und ich will in das byte von links nach rechts daten einfliesen lassen. über die Variable y
Gast
#2830899
x|=y; x<<=1;
Gast
#2830902
OK das habe ich nicht bedacht. und wenn ich über die pause delay(100); dann sollte es doch klappen das alle 100ms ein bit reinkommt. oder sehe ich das schon wieder falsch.
Gast
#2830909
Hallo Troll, Habe das eben probiert allerdings verändert das nur das letzte bit. Ich bräuchte das aber so das es sich bei jeden eingang um eine bit verschiebt. Sprich: kommt entfällt 1 00110011 1 0 10011001 1 0 01001100 0 1 10100110 0
Gast
#2830913
Mario schrieb: > Ich bräuchte das aber so das es sich bei jeden eingang um eine bit > verschiebt. ??? > Sprich: > kommt entfällt > > > 1 00110011 1 > 0 10011001 1 > 0 01001100 0 > 1 10100110 0 OK, du willst offensichtlich von Links Daten in deine Variable reinschieben. x enthält (1<<7) bzw. (0<<7) y|=x; y>>=1; Oder wenn x irgendwas enthält und nur das schwächste Bit beachtet werden soll. y|=(x<<7); y>>=1; Guck dir mal Bitmanipulation an.
Gast
#2830914
Vielen danke werde ich morgen gleich mal machen Wünsche noch einen schönen Abend. Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|