ArduinoとAquesTalkをI2Cで接続してみました
配線は以下の通り
Pin | AquesTalk | -> | Arduino |
---|---|---|---|
1 | /RESET | RESET | |
4 | SMOD0 | GND | |
5 | SMOD1 | 5V | |
7 | VCC | 5V | |
8 | GND | GND | |
20 | VCC | 5V | |
22 | GND | GND | |
27 | SDA | A4 | |
28 | SCL | A5 |
SMOD0
と SMOD1
については技術資料の 表9.1 通信モード
を参照
I2Cで接続するには SMOD0 = 0
、 SMOD1 = 1
にする必要があります
あとは12番の AOUT
をアンプの IN+
、 GND
を IN-
に接続します
技術資料の 5. 基本回路
にある回路図を見ると、これ以外に VCC
と AOUT
にコンデンサが追加されています
これはバイパスコンデンサというものらしく電源の安定化やノイズの発生を抑えたりする役割があるそうです *1
とりあえず、無しでも動きました(ぇ
他に 9.2. I2C通信
の部分を見ると SDA
、 SCL
共に 5KΩ
程度のプルアップ抵抗が必要とあります
プルアップ抵抗なんですが調べたところ標準の Wire.h
を使う場合Arduino内蔵の抵抗で問題なさそうなので *2 *3
これも無しで試したところ、動きました
というわけでAquesTalk以外に特に部品を追加することなく準備ができました
動作確認に使用したスケッチはGitHubにありますがここに貼り付けておきます *4
#include <Wire.h>
#define PICO_I2C_ADDRESS 0x2E
void setup() {
Wire.begin();
}
void loop() {
isReady();
Wire.beginTransmission(PICO_I2C_ADDRESS);
Wire.write("yukkurisiteittene\r");
Wire.endTransmission();
// send once
while(1) {}
}
void isReady() {
while(1) {
Wire.requestFrom(PICO_I2C_ADDRESS, 1);
while(Wire.available() > 0){
if(Wire.read() == '>') {
return;
}
delay(10);
}
}
}