2017-11-09 10 views
0

私が使用している化学実験室で行っている研究プロジェクトとADS8320チップ(データシートはhereです。私はProcessing.orgからthis codeを使用してデータを取得することができたもののラズベリーパイ3.上のSPIピン:私が取ったときに、私は65535の値を取得する必要があるデータシートに読んだから処理中のSPIデータでのビットシフトの使用

import processing.io.*; 
SPI adc; 

void setup() { 
    //printArray(SPI.list()); 
    adc = new SPI(SPI.list()[0]); 
    adc.settings(500000, SPI.MSBFIRST, SPI.MODE0); 
} 

void draw() { 
    // read in values over SPI from an analog-to-digital 
    // converter 
    // dummy write, actual values don't matter 
    byte[] out = { 0, 0 }; 
    byte[] in = adc.transfer(out); 
    // some input bit shifting according to the datasheet 
    int val = ((in[0] & 0x1f) << 5) | ((in[1] & 0xf8) >> 3); 
    // val is between 0 and 1023 
    println(val); 
} 

私は最高の電圧をとるときに127の値を得ています。良いプログラマーがほぼ一ヶ月前にそれを選んだわけではありませんが、問題はビットシフトラインにあると思います:

int val = ((in[0] & 0x1f) << 5) | ((in[1] & 0xf8) >> 3); 

これが問題になる場合は、どうすれば16ビットADSチップで動作するように設定できますか?このビットシフトが実際に何のためにあるのかを説明することもできます。私が見つけたすべての情報源が私をもっと混乱させたからです。これに関する助けがあれば助けになるでしょう!また、私が重要な情報を紛失している場合は、私に知らせてください。

+0

[あなたのプログラムをデバッグする](http://happycoding.io/tutorials/processing/debugging)と[mcve]にあなたの問題を絞り込むと、もっとうまくいくでしょう。 'in [0]'と 'in [1]'の値は何ですか?彼らはあなたが期待しているものですか?複雑な行を複数のステップに分割します。どちらのステップが期待どおりに動作していませんか?あなたが立ち往生した場合、追加のデータを読み込むことなく、そのカップルラインの[mcve]を投稿することができます。代わりに値をハードコーディングしてください。 –

+0

恐ろしい私はそれを分割し、私が価値を得ることができないかどうかを見ます。ラインは非常に複雑で、私はトンを混乱させた。私はそれを分割して、動作するコードを得ることができないか、少なくともあなたのためのより簡潔な例を持っているかどうかを見ていきます。 – Samsanit

+0

データシートの24ページによると、最初の6ビットと最後の2ビットを破棄し、2ではなく3バイトを読み込む必要があるかもしれません。結果として、あなたのビットシフト式は '' 'のように変わります。int val =(in [0]&0x03)<< 14)| ([1] << 6)| ([2]&0x3f); '' 'Wikipediaはビットシフト操作を含む[Cのビット演算](https://en.wikipedia.org/wiki/Bitwise_operations_in_C#Shift_operators)について話します。 – v1bri

答えて

1

コードの行は、チップから10ビットの値を読み取る方法です。入力0([0])はデータの上位5ビットを持ち、入力1([1]の)は下位5ビットを持っています。したがって、シフト操作。あなたのデータが10ビットであるとしましょう(0b00011111 AND入力[0])、それを左に5シフトします(0b11111000 AND入力[1])し、右に3シフトします。 OR val1 | val2と一緒に置くと、10ビットの値が残されます。しかし、チップのデータシートにアクセスすると、チップは16ビットのADCなので、読み取っていない余分な6ビットを読み取るには、別のピンが必要になります。さらに、正しいピンを[0]と[1]に接続していることを確認して、ビットストリームの方向を逆転させることができます。

関連する問題