MCP4725 DAC
MCP4725
I2C経由で設定した電圧が出力できる便利もの
http://akizukidenshi.com/catalog/g/gK-08677/
amazonからでも安く購入可能
ちょっとしたプログラム電源として各種のテストで使える。<=5.5Vまで
【準備】
ここはいっぱい解説しているから他のサイトを参考に
IDEからスケッチーライブラリーをインクルードーライブラリを管理
MCP4725で検索、インストール
シリアルモニターから入力した0-4095の値に応じて出力を変化させるスケッチを作成してみた。
***********************
//standard MCP4725 using adafruit
// from serial monitor, set DAC value
#include <Wire.h>
#include <Adafruit_MCP4725.h>
#define MCP4725_ADDR1 0x60 //MCP4725 address
Adafruit_MCP4725 dac;
void setup(void) {
Serial.begin(9600);
dac.begin(MCP4725_ADDR1); //Begins the I2C communication
dac.setVoltage(0, false); //set zero volt
}
void loop(void) {
int data_size = Serial.available();
if (Serial.available() > 0)
{
delay(20);
int data_size = Serial.available();
byte buf[data_size];
Serial.print("data size:");
Serial.println(data_size);
for (int i = 0 ; i < data_size ; i++)
{
buf[i] = Serial.read()-'0';
}
Serial.println();
long recv_data=0;
long dub = 1;
for (byte i = 0 ; i < data_size ; i++)
{
recv_data += buf[(data_size - 1) - i] * dub;
dub *= 10;
}
Serial.println(String(recv_data));
if (recv_data < 4096){
dac.setVoltage(recv_data, false);
}else{
dac.setVoltage(4095, false);
}
}//if
}
ポイントは、
Serial.read()-'0';のところで、Strからintに変換
あと
for (byte i = 0 ; i < data_size ; i++)
{
recv_data += buf[(data_size - 1) - i] * dub;
dub *= 10;
}
のところ。文字列が逆に格納されるので、順番に読みだし10進数の数字に変換するところ。
Vcc=4.72の時に、4.36Vが最大電圧出力。
スケッチ例:シリアルモニタから、出力を変化させる
【3つ以上複数のIC2を使う方法】
http://mitchtronic.blogspot.com/2017/03/addressing-multiple-mcp4724s-in-same.html
I2Cのアドレスは2つまでは、AOピンがHighかLowで変更できるが、3つ目のアドレスは工場出荷時に書き込まれていて後から変更できない(はず)。
簡単な方法が、上で紹介されている。
要するに、出力命令を送るMCP4725だけ、A0をHighにしてから送付してやるという考え方。
MCP4725に限った話ではなく、複数の同じアドレスのI2Cを使う方法としては、
あと一般的な方法としてソフトI2Cというのもあり。
https://github.com/todbot/SoftI2CMaster
一番固いが、”高い”のが
http://akizukidenshi.com/catalog/g/gI-09098/
I2Cのマルチプレクサを使う(スイッチで切り替えて使う)
趣味の程度で複数つけるなら上の方法がお手軽で、結構なお値段がするけど確実な方法
安いマイコンを使う
Attinyなどの小型マイコンを使う。
上記のマルチプレクサは8個なんかを使うときはよいけど、2つ増加させて4つ使いたいというときはあり。AttinyをArduino化して、2つのArduinoをマスタースレーブで接続して使う方法。Attiny85を使ったとして200円ぐらいでできる。
I2C経由で設定した電圧が出力できる便利もの
http://akizukidenshi.com/catalog/g/gK-08677/
amazonからでも安く購入可能
ちょっとしたプログラム電源として各種のテストで使える。<=5.5Vまで
【準備】
ここはいっぱい解説しているから他のサイトを参考に
IDEからスケッチーライブラリーをインクルードーライブラリを管理
MCP4725で検索、インストール
シリアルモニターから入力した0-4095の値に応じて出力を変化させるスケッチを作成してみた。
***********************
//standard MCP4725 using adafruit
// from serial monitor, set DAC value
#include <Wire.h>
#include <Adafruit_MCP4725.h>
#define MCP4725_ADDR1 0x60 //MCP4725 address
Adafruit_MCP4725 dac;
void setup(void) {
Serial.begin(9600);
dac.begin(MCP4725_ADDR1); //Begins the I2C communication
dac.setVoltage(0, false); //set zero volt
}
void loop(void) {
int data_size = Serial.available();
if (Serial.available() > 0)
{
delay(20);
int data_size = Serial.available();
byte buf[data_size];
Serial.print("data size:");
Serial.println(data_size);
for (int i = 0 ; i < data_size ; i++)
{
buf[i] = Serial.read()-'0';
}
Serial.println();
long recv_data=0;
long dub = 1;
for (byte i = 0 ; i < data_size ; i++)
{
recv_data += buf[(data_size - 1) - i] * dub;
dub *= 10;
}
Serial.println(String(recv_data));
if (recv_data < 4096){
dac.setVoltage(recv_data, false);
}else{
dac.setVoltage(4095, false);
}
}//if
}
ポイントは、
Serial.read()-'0';のところで、Strからintに変換
あと
for (byte i = 0 ; i < data_size ; i++)
{
recv_data += buf[(data_size - 1) - i] * dub;
dub *= 10;
}
のところ。文字列が逆に格納されるので、順番に読みだし10進数の数字に変換するところ。
Vcc=4.72の時に、4.36Vが最大電圧出力。
スケッチ例:シリアルモニタから、出力を変化させる
【3つ以上複数のIC2を使う方法】
http://mitchtronic.blogspot.com/2017/03/addressing-multiple-mcp4724s-in-same.html
I2Cのアドレスは2つまでは、AOピンがHighかLowで変更できるが、3つ目のアドレスは工場出荷時に書き込まれていて後から変更できない(はず)。
簡単な方法が、上で紹介されている。
要するに、出力命令を送るMCP4725だけ、A0をHighにしてから送付してやるという考え方。
MCP4725に限った話ではなく、複数の同じアドレスのI2Cを使う方法としては、
あと一般的な方法としてソフトI2Cというのもあり。
https://github.com/todbot/SoftI2CMaster
一番固いが、”高い”のが
http://akizukidenshi.com/catalog/g/gI-09098/
I2Cのマルチプレクサを使う(スイッチで切り替えて使う)
趣味の程度で複数つけるなら上の方法がお手軽で、結構なお値段がするけど確実な方法
安いマイコンを使う
Attinyなどの小型マイコンを使う。
上記のマルチプレクサは8個なんかを使うときはよいけど、2つ増加させて4つ使いたいというときはあり。AttinyをArduino化して、2つのArduinoをマスタースレーブで接続して使う方法。Attiny85を使ったとして200円ぐらいでできる。
コメント
コメントを投稿