pythonは元のAD7606Bの補数データ配列を元のコードデータ配列に変換して処理します。
2022-02-21 09:46:43
pythonでAD7606Bの生補数データ配列を生コードデータ配列に変換し、電圧値として処理する。
まず、補完コードと元のコードとの変換がどのように行われるかを理解する必要があり、最初に
- 正の数の補数は、元のコードと等しい
- 負の数の補数は、符号ビットを変更せず、他のビットを反転させ、1を加えたものに等しい。
つまり、16ビットのAD補数値が与えられたら、まず、最初のビットが1かどうかで、そのAD値が正か負かを判断することができるのです
- 符号ビットが0(正)に等しいので、元のコード=補数
- 符号ビットが1(負数)に等しい場合、補数符号ビットは変更せず、残りのビットを反転させ、全体を1加算したものが補数の元符号の絶対値となる、この時、計算した元符号も負符号に加算して最終的なAD値となることに注意すること
によると
AD7606データシート
を使用することができます。
AD7606B のパラレル・データは 16 ビットで、すなわちデータ範囲は 0b 1000 0000 0000 ~ 0b 0111 1111 1111 1111 ~ であることがわかります。 <スパン ± 5 V \Ȃ 5V
<スパン <スパン <スパン ± 5 V の範囲を例として挙げています。import numpy as np
int_number_array = np.array([0xFFFF,0x1FFF,0X0FEE,0x15AC,0x159E,0x3C55,0x0001,0x0010])# array with 8 data, representing the complement data read by the eight channels of the AD7606B
index = np.argwhere(int_number_array & 0b1000000000000000 == 0b1000000000000000)# find the array of sign bits for 1 (negative), return the index array
int_number_array[index] = -((int_number_array[index] ^ 0b111111111111111111) + 1)# to complement the code into the original code (by bit iso or equivalent to inverse by bit) positive numbers remain unchanged, negative numbers to inverse plus 1, and finally add the negative sign
number_array = int_number_array / 32768 * 5 # the original hexadecimal code data into voltage values
print(number_array)
最終的な計算結果は
[-1.52587891e-04 1.24984741e-+00 6.22253418e-01 8.46557617e-01 8.44421387e-01 2.35671997e-+00 1.52587891e-04 2.44140625e-03] となる。
は各チャンネルのある瞬間の電圧値を表し、AD サンプルを一定時間連続処理すると、8 チャンネル分の波形をプロットすることができます。
関連
-
[解決済み】TypeError: imshow()で配列をプロットすると、画像データの寸法が不正になる
-
Python ベースの MUI サイドスライディングメニュー a-tab ジャンプ
-
[解決済み] python flask インポートエラー
-
[解決済み] オフセットロールフォワードと月オフセット追加後のパンダの境界外ナノ秒のタイムスタンプ
-
[解決済み] scikit-learnのcross_val_predictの精度スコアはどのように計算されるのですか?
-
[解決済み] Python 3 で os.environ を pickle するには?
-
[解決済み] jinja2 テンプレートが見つからず、内部サーバーエラーが発生する。
-
[解決済み] この単純なベンチマークで、なぜSQLiteはRedisより速いのか?
-
Pythonでrequirements.txtのすべてを解説する
-
Python 3.6: "Guess the Number Game" TypeError: '<' は 'str' と 'int' のインスタンスの間でサポートされていません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Youtube_dl : ERROR : YouTubeは言った。動画データを抽出できない
-
[解決済み】pythonでimmutable辞書を作成する方法は?
-
Python スクリプトフレームワーク webpy テンプレート割り当て実装
-
[解決済み] テストの点数を5つ入力させるプログラムを作成しなさい。それをレターグレードに対応させる
-
[解決済み] Python 3でexecfileの代替?[重複]です。
-
[解決済み] Pythonのプロットでギリシャ文字などを入力する
-
[解決済み] モジュール 'pandas' には 'rolling_mean' という属性がありません。
-
[解決済み] Pycharm エラー Django はこの環境ではインポートできません。
-
[解決済み] pandas のデータフレームで unix 時間を読み取り可能な日付に変換する
-
.dtアクセサは、datetimelikeな値でのみ使用可能です。