Arduino Shiftregister 8bit

#2830847
Lesenswert?

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
Lesenswert?

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 #2830879
Lesenswert?

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
#2830884
Lesenswert?

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.
#2830896
Lesenswert?

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 #2830909
Lesenswert?

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
Lesenswert?

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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren