問題タブ [adc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
microcontroller - ADC伝達関数
ずっと前に亡くなった人からプロジェクトを引き継ぎました。
現在、ADC モジュールを調べていますが、コードの意味がわかりません。
Process: Reading volts(0 ~ +10v) --> Amplifier(INA114) --> AD7609.
そのためのコードは次のとおりです。
- に格納された 8 チャンネルの完全な変換後
data[9]
データをマイクロボルトに変換??
//convert to microvolts and store the readings // unsigned long temp[], data[] temp[0] = ((data[0]<<2)& 0x3FFFC) + ((data[1]>>14)& 0x0003); temp[1] = ((data[1]<<4)& 0x3FFF0) + ((data[2]>>12)& 0x000F); temp[2] = ((data[2]<<6)& 0x3FFC0) + ((data[3]>>10)& 0x003F); temp[3] = ((data[3]<<8)& 0x3FF00) + ((data[4]>>8)& 0x00FF); temp[4] = ((data[4]<<10)& 0x3FC00) + ((data[5]>>6)& 0x03FF); temp[5] = ((data[5]<<12) & 0x3F000) + ((data[6]>>4)& 0x0FFF); temp[6] = ((data[6]<<14)& 0x3FFF0) + ((data[7]>>2)& 0x3FFF); temp[7] = ((data[7]<<16)& 0x3FFFC) + (data[8]& 0xFFFF);
これらのコードが何をしているのかわかりません...? シフトすることは知っていますが、どのようにしてマイクロデータ形式になるのでしょうか?
- 伝達関数
//store the final value in the raw data array adstor[]
adstor[i] = (signed long)(((temp[i]*2000)/131072)*10000);
131072 = 2^(18-1)
しかし、他の値がどこから来るのかわかりません
AD7609 のデータシートThe FSR for the AD7609 is 40 V for the ±10 V range and 20 V for the ±5 V range
に20v
は2000???
誰も手がかりを持っていますか??
ありがとう
------------------- ここから質問を更新 ----------------------
18 ビットのデータ [0] の連結値 + データ [1] の 16 ビットの連結値が、ADC 伝達関数の後でマイクロボルトになる方法がわかりません。
データ[9]
+---+---+--- +---+---+---+---+---+---++---+---+---++---+---+---++
analog volts | 1.902v | 1.921v | 1.887v | 1.934v |
+-----------++-----------+------------+------------+------------+
digital value| 12,464 | 12,589 | 12,366 | 12,674 |
+---+---+---++---+---+---++---+---+---++---+---+---++---+---+---+
data[3:0]
1 resolution = 20v/2^17-1 = 152.59 uV/bit
とから例を作るだけです1.902v/152.59uv = 12,464
連結を介して取得します。
temp[0] = ((data[0]<<2)& 0x3FFFC) + ((data[1]>>14)& 0x0003) = C2C0
temp[1] = ((data[1]<<4)& 0x3FFF0) + ((data[2]>>12)& 0x000F) = 312D3
temp[2] = ((data[1]<<6)& 0x3FFC0) + ((data[3]>>10)& 0x003F) = 138C
次に、それらを伝達関数に入れてマイクロボルトを取得します
adstor[i] = (signed long)(((temp[i]*2000)/131072)*10000);
adstor[0]= 7,607,421 with temp[0] !=1.902*e6
adstor[1]= 30,735,321 with temp[1] != 1.921*e6
adstor[2]= 763,549 with temp[2]
お気づきのとおり、表のアナログ値とはかなり異なります。
なぜデータをビットシフトする必要があるのか<<
、>>
そして2つのデータを合計する必要があるのか\u200b\u200bわかりません[]??
ありがとう、
uart - Nordic 評価ボードの UART を使用した ADC の例
2日前にnordic評価ボードを購入しました。フォーラムを検索して、バッテリーの電圧レベルを有効にしてテストし、UART 経由で監視しています。数時間の試行錯誤の後。北欧の 2 つの例を 1 つにまとめることができましたが、UART の電圧レベルを確認できません。UART を出力として使用する ADC の例を教えてください。残りは私がします。
ありがとう
編集:
avr - 浮動小数点演算の異常
atmega2560を使用して温度センサーtmp36から温度を読み取っています。温度センサーのデジタル値を読み取り、2 つの atmega2560 マイクロコントローラーで読み取り可能な形式に変換した後、異なる答えが得られます。なぜこのような答えが得られるのか。? コードの一部を以下に示します。
私が得た1つのATMEGA2560の回答は次のとおりです。
temp_buf: 55、temp_volt: 447、temp: 22.4
別の ATMEGA2560 で得たものは次のとおりです。
temp_buf: 53、temp_volt: -861、temp: 0.00
このため、この調整を行いました
同じコードを使用しているのに、2 つのマイクロコントローラーの動作が異なるのはなぜですか?
java - Androidフォンでadcとdacに直接アクセスする方法は?
私は、Android 用の補聴器アプリケーションを作成しようとするプロジェクトの初期段階にいます。Pure Data、C サウンド、および基本的にマイクからの入力を取得してヘッドフォンで再生する基本的な Android サウンド ライブラリにいくつかのパッチを作成しました。フィルタリングや増幅はありません。
Csound は最高のパフォーマンスを発揮しましたが、遅延によりツールが使用できなくなりました。Android L が役立つことはわかっていますが、私の目標は、低コストの補聴器デバイスを作成することです。そのため、古い携帯電話ではおそらく取得できません。
次のアイデアは、adc と dac の値に直接アクセスできるかどうかを確認し、C を使用して独自のバージョンの AudioTrack とオーディオ レコードを NDK を使用して作成することです。基本的に、これらの値が入ってくるメモリ内の場所を指しています。
これは可能ですか?また、何を研究すればよいですか?DAC と ADC に直接アクセスする方法についてオンラインで見つけることができません。
お時間をいただきありがとうございます。
android - eclipse adc に自分の電話を認識させるにはどうすればよいですか?
実際のハードウェア電話でアプリを実行しようとしています。
私はadbをインストールしており、サーバーを強制終了してからサーバーを起動しようとしましたが、adbデバイスを書き込むたびに、デバイスが正常に表示されます。
次に、Eclipse の DDMS に移動すると、電話も問題なく接続されており、ディスプレイからスクリーンショットを撮ることもできます。
しかし、アプリを実行しようとすると、ポップアウト (Android デバイス チューザー) ウィンドウが空になります。そこには仮想マシンしかありません。
これを Windows PC で実行したところ、問題なく動作し、アプリを実行できました。Eclipse を数回再インストールしましたが、うまくいきませんでした。
assembly - Atmega328p ADC アセンブリが変換されない
これが私のコードです。ボードにプルアップ抵抗を配置する必要があるため、INT0 フラグによって変換が行われ、PORTB に出力されます。PC0 で ADC0 を使用していますが、動作しません。PORTB に出力される値は 1 つだけです。手伝って頂けますか?
binary - 整数を使用して8ビットバイナリをBCDに変換する
こんにちは、私が VHDL でやろうとしているのは、8 ビットのバイナリ値を取り、それを BCD として表現することですが、この値は最大入力の 9 の一部でなければならないという問題があります。
1- 入力を整数に変換します。例: 1000 0000 -> 128
2- 整数を 255 で割ってから 90 を掛けます (1 の桁と小数点以下の最初の桁がすべて小数点以下になるように 90 を掛けます)
例: 128/255*90 = 45.17 (これを signal_in とします)
3. 20 で割って 45 の 2 桁を抽出し、それらを別の整数として保存します。たとえば、次のようなものを使用します。
LSB_int = signal_in mod 10
次に、信号を 10 で割って 4.517 に変更し、それを MSB_int に等しくします (小数点以下を切り捨てて 4 を右に格納します)。
4.LSB_intとMSB_intの両方を4桁のBCDに変換します
..そして私はそこから完璧になるでしょう...しかし悲しいことに、私は非常に多くの問題を抱えました...さまざまなデータ型(署名されていないstd_logic_vectors)と除算で.だから、私の思考プロセスの欠陥と私がすべきことについて助けが必要ですこれを行うときは注意してください..
私は実際に自分のコードをやり直して、これを保存したと思っていました..しかし、私はそうしませんでした..私はまだこの解決策がうまくいくと信じています.古いコードだと思うものを返信します...すべてを思い出すことができたらすぐに..
これが私の新しいコードに関する私の他の質問です..(私が何かをしたことを示すためだけに..) VHDLで8ビットの2進数をBCDに変換する
linux - ADC を使用して正弦波を生成する
ボードに adc モジュールがあります。信号発生器で正弦波を作成し、この発生器の出力を ADC ピンに与えます。最後に、このピンの値を定期的に読み取ります。ソフトウェアで正弦波を作成しようとしています。
また、adcピンの値は使用しません。波を作るにはこの値が重要なのではないでしょうか?