ATP3012をI2C通信で使う
はじめに
今回は音声合成LSIのATP3012を、I2C通信で使ってみました。UART通信であれば何度も使ったことがあるのですが、I2C通信で使うのはこれが初めてです。
I2C通信は2線だけで複数のデバイスと通信できるので、回路的には単純なのですが、プログラムが難しいのではないかということで避けていました。ATP3012のデータシートはI2C通信について日本語で詳しく説明されていて、Arduino IDEのスケッチ例と照らし合わせたらなんとか使えました。
ATP3012のデータシートは読めば読むほど理解が深まるので、これからICやLSIを使いたい方におすすめです。
▼今回使用したATP3012はこちら
https://akizukidenshi.com/catalog/g/gI-09973/
▼UART通信で使っていた以前の記事はこちら
回路を組む
今回初めて知ったのですが、I2C通信の信号線であるSDAとSCLにはプルアップ抵抗が必要です。データシートに「5KΩ程度のプルアップ抵抗が必要」と書いてありましたので、4.7KΩの抵抗を使っています。
▼実際の回路。UART通信の場合とは通信用のピンが異なっています。
プログラムを書く
I2C通信は2線だけで複数のデバイスと通信できるのですが、どのデバイスと通信するのかをアドレスで指定できます。ATP3012のスレーブアドレスは出荷時設定だと0x2Eだとデータシートに書いてあったので、送信先のアドレスを0x2Eにしています。
また改行文字の[CR]が送信されてから発声を開始するので、0x0Dを送信します。これもデータシートのコマンドのところに書いていました。
今回のプログラムはArduino IDEのWire.hを使っています。スケッチ例を少しだけ書き換えただけのものです。UART通信だとSerial.printlnで改行文字も送られるのですが、Wire.hだと同じようなものが無さそうだったので改行文字の0x0Dを送信しています。
▼I2C通信用のプログラム。2秒ごとに「あいうえお」と発声します。
最後に
I2C通信の使い方がなんとなくわかったので、以前購入したI/Oエキスパンダをそろそろ使ってみようと思います。ピンを増やすことができるようなICなのですが、I2C通信で使うものだったのでまだ使っていませんでした。複数のデバイスをI2C通信で使うのも今後試してみようと思います。