DAコンバーター
MCP4922とarduino UNO
DACとしては、以前はMCP4922を使っていたが、最近は MCP4726を使うようになった。前者のinterfaceはSPIで、後者はI2Cである。arduinoでMCP4922を使ったことが無かったので、プログラムを書いてみた。
arduino UNOのSPIは、SS(10), MOSI(11), MISO(12), SCK(13)の4pinを使って行なわれる。今回は、ICにコマンドを送るだけなので、MISOは使わない。また、MCP4922のLDACは9pinに、SHDNはVccに接続した。SPIの使い方は、SPI.hを組み込んで、モードをセットして、書き込む。
serialからDAのデータを受け取るときに、どのような処理をしようか迷ったが、parseIntを使うと、数字をintに変換してくれるので、正の数だとchAを、負の数だとchBにデータを送るようにしてみた。
#include <SPI.h>
#define LDAC 9
void setup(){
Serial.begin(9600);
pinMode(LDAC,OUTPUT);
SPI.begin();
SPI.setBitOrder(MSBFIRST);
SPI.setClockDivider(SPI_CLOCK_DIV8);
SPI.setDataMode(SPI_MODE0);
}
void loop() {
if(Serial.available()>0){
int i=Serial.parseInt();
digitalWrite(LDAC,HIGH);
digitalWrite(SS,LOW);
if(i<0){i=-i-1;i|=0x8000;}
i|=0x3000;
SPI.transfer(i >> 8);
SPI.transfer(i & 0xff);
digitalWrite(SS,HIGH);
digitalWrite(LDAC,LOW);
delay(500);
}
}