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通信で使っていた以前の記事はこちら

音声合成LSIを使って、日本語の音声を出力する(ATP3012)

はじめに (ICはIntegrated Circuit(集積回路)の略、LSIはLarge Scale Integration(大規模集積回路)の略です。つまりICがたくさん集まったのがLSIです。)  今回は音声合…

回路を組む

 今回初めて知ったのですが、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通信で使うのも今後試してみようと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です