0

6 つの値 (4x 3 ビット + 1 ビット) を 16 ビット整数にエンコードし、シリアル経由で ATTINY84 に転送して 2 バイトに分割しています。これは、バイトを 16 ビット int に再アセンブルするまでは問題なく動作します。

例:

0001110000001100に変換7180され、バイト配列に分割される次のバイナリ状態を送信しています[18, 28]

そのバイト配列を EEPROM に入れ、次の電源サイクルで読み取ります。

電源を入れ直した後、シリアル デバッグ出力は次のようになります。

18
28
7180

素晴らしい。すべて良さそうで、その部分の私のコードは次のとおりです。

byte d0 = EEPROM.read(0);
byte d1 = EEPROM.read(1);
unsigned int w = d0 + (256 * d1);

しかし今、最も奇妙なことが起こります。ビットごとの読み取りを行うと、次のように返されます。

0011000000111000

should be:

0001110000001100

経由:

 for(byte t = 0; t < 16; t++) {
    serial.print(bitRead(w, t) ? "1" : "0");
  }

ビット表現が完全に逆になります。そんなことがあるものか?または、何かが足りないのかもしれません。

また、元の値を受け取るために実際の 3 ビットの位置を抽出すると、0..7すべてオフであることを確認しました。

どんな助けでも大歓迎です。

4

1 に答える 1