|
setup diary |
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); } }