[[FrontPage]] #contents 2013/12/14からのアクセス回数 &counter; SPIインタフェースを持つ、12-bit DAC(デジタル・アナログ変換)MCP4922を使ってみます。 ((これは、LM4F120 Launchpadを使って音声合成をするための前実験です。)) ** MCP4922の使い方 [#q38a0160] [[DAコンバータ MCP4922を利用しD/A変換を行う>http://www.geocities.jp/zattouka/GarageHouse/micon/circuit/D_A.htm]] の例題を実際にArduinoで動かしながら、動作を確認していきます(ほとんど物まねですみません)。 MCP4922のSPIインタフェースでは、12-bitのデジタル信号の他に、bit12から15 に制御用のデータを追加しています。 - bit15: A/B~ アナログを出力するチャンネルAorBを指定します。 -- 0:チャンネルA(OUTA) -- 1:チャンネルB(OUTB) - bit14: BUF~ VREFの入力でバッファ制御を行うかの指示をします。 -- 0:バッファ制御をしない -- 1:バッファ制御をする - bit13: GA~ 出力するゲインを選択します。 -- 0:2x (VOUT = 2 * VREF * D/4096) -- 1:1x (VOUT = VREF * D/4096) - bit12: SHDN~ シャットダウン制御を行うかの指示をします。 -- 0:出力端子からは出力されず、出力端子はハイインピーダンスとなります -- 1:出力端子からアナログ値が出力されます *** Arduinoとの接続 [#j4ea499e] Arduinoとの接続では、VoutAにLEDを接続して動きをみてみます。 ((図は、フリーのfritzingを使用しました)) &ref(Arduino_MCP4922_bread.png); ** 動作確認 [#a631c5d9] *** 動作確認用スケッチ [#ne5c1418] 動作確認用スケッチは、上記のサイトのプログラムをそのまま使わせて頂きます。 #pre{{ #include "pins_arduino.h" #include <SPI.h> #define LDAC 9 // ラッチ動作出力ピン void setup() { // 制御するピンは全て出力に設定する pinMode(LDAC,OUTPUT) ; // SPIの初期化処理を行う SPI.begin() ; // SPIを行う為の初期化 SPI.setBitOrder(MSBFIRST) ; // ビットオーダー SPI.setClockDivider(SPI_CLOCK_DIV8) ;// クロック(CLK)をシステムクロックの1/8で使用(16MHz/8) SPI.setDataMode(SPI_MODE0) ; // クロック極性0(LOW) クロック位相0 } void loop() { int i ; for (i=0 ; i < 4096 ; i=i+4) { digitalWrite(LDAC,HIGH) ; digitalWrite(SS,LOW) ; SPI.transfer((i >> 8)|0x30) ; // Highバイト(0x30=OUTA/BUFなし/1x/シャットダウンなし) SPI.transfer(i & 0xff) ; // Lowバイトの出力 digitalWrite(SS,HIGH) ; digitalWrite(LDAC,LOW) ; // ラッチ信号を出す } } }} ** 動かしてみる [#pd8de738] スケッチを動かしてみます。LEDが点灯し、よく見ると明かりが細かく振動しているように見えます。 &ref(Arduino_MCP4922.png); 期待したとおりのノコギリ波が生成されているかオシロスコープで見てみました。 きちんとノコギリの波形がでています。これで無事MCP4922の使い方を確認できました。 &ref(arduino_signal_output.png); ** コメント [#zcfd4552] #vote(おもしろかった[52],そうでもない[2],わかりずらい[4]) #vote(おもしろかった[52],そうでもない[2],わかりずらい[5]) 皆様のご意見、ご希望をお待ちしております。 - *2の図が間違っています。MCP4922の14番ピンに5Vが結線されていますが、正しくは13番ピンに5Vです。 -- &new{2017-01-09 (月) 17:26:35}; #comment_kcaptcha