pcb-mbus-aquestalk-pico-lsi

Public

botanicfields/pcb-mbus-aquestalk-pico-lsi

Loading…

Description

Imported from GitHub: botanicfields/PCB-MBUS-AquesTalk-pico-LSI · commit 765e56e · license CC0-1.0

Description

MBUS Module of AquesTalk pico LSI for M5Stack

README

PCB-MBUS-AquesTalk-pico-LSI

M5Stack用 AquesTalk pico LSIモジュール基板

M-BUS Module of AquesTalk pico LSI for M5Stack

1. 概要

 市販の音声合成専用LSI「AquesTalk pico LSI」(別売)をM-BUSモジュールとしてM5Stackに取り付けるための半完成基板です。
 AquesTalk pico LSIの詳細は、データシートを参照ください。
Data Sheet: 音声合成 LSI 「AquesTalk pico LSI」ATP3011
Data Sheet: 音声合成 LSI 「AquesTalk pico LSI」ATP3012

基板V04の変更点

 2022年10月末から基板V04を提供しています。詳細は、スピーカーの接続の項を参照ください。

  • ハンダジャンパJP8, JP9を追加しました。
  • ランドJ5を追加しました。

委託販売

(スイッチサイエンス扱い)M5Stack用 AquesTalk pico LSI モジュール基板

動作例

(YouTube)"AquesTalk pico LSI" speaks date and time
(YouTube)M-Bus Module of AquesTalk pico LSI drives the built-in speaker of M5Stack
(YouTube)M-Bus Module of AquesTalk pico LSI for M5Stack
(YouTube)M-Bus Module of AquesTalk pico LSI for M5Stack on Core2

組み立て例

 組み立てにはハンダ付けが必要です。

左側: ATP3011を搭載、音声アナログ信号をGPIO35に入力するためJP5をショート
右側: ATP3012を搭載、音声アナログ信号をGPIO35に入力するためJP6をショート

写真右: M5Stack 取り付け例、J4に外部スピーカを接続

1.1 特徴

  • AquesTalk pico LSI(28ピンDIPタイプ)1個を搭載できます。
  • ATP3011, ATP3012の両方に対応しています。
  • パワーアンプ(LM4871)を内蔵し、スピーカーを直接駆動できます。
  • AquestTalk pico LSIを3.3Vで動作させ、M-BUSに直結できます。
  • プロトモジュールのモールド(別売)を流用し、M5Stackに取り付けできます。
  • スピーカー以外のケーブル接続が不要です。
  • DIP スイッチで動作モード・通信モードを設定できます。
  • インタフェースをI2C, UART, SPIから選べます。
  • AquesTalk pico LSIの音声出力をM-BUSから取り込めます。
  • M5StackのリセットでAquesTalk pico LSIをリセットします。
  • スタンドアロンモードのためのランドがあります。

DIP: Dual In-line Package
I2C: Inte-Integrated Circuit
UART: Universal Asynchronous Receiver Transmitter
SPI: Serial Peripheral Interface

1.2 商品内容

※ AquesTalk pico LSIは付属しません。
※ プロトモジュールのモールドは付属しません。
※ スピーカーは付属しません。

商品写真

写真左: 内容物(基板V4)、写真右: 基板V4裏面

1.3 別途必要なもの

2. モジュール基板の組み立て

2.1 AquesTalk pico LSI の取り付け

 別売のAquestTalk pico LSI(28ピンDIPタイプ)1個を取り付けます。ATP3011とATP3012とでは挿入する穴が異なります。基板上のシルク印刷に従ってピンを挿入しハンダ付けします。モジュール基板裏面から飛び出しているピンを短く切ってください。

左: ATP3011, 右: ATP3012

ICソケットは使用できません

 ICソケットを使用すると、プロトモジュールのモールドには収まらなくなります。収まらなくなることを承知の上で1列タイプのICソケットを使用するとATP3011とATP3012を差し換えることができます。モジュール基板裏面からのピンの飛び出しの対処も大変になります。

2.2 モールドの取り付け

 プロトモジュールのモールドおよびネジ4本(別売)を流用して、M5StackのM-BUSモジュールに仕立てることができます。モールドを基板に取り付ける前に、ボリュームやスピーカー出力コネクタの部分をモールドから切り取ります。

モールドの入手先(スイッチサイエンス扱い)

2.3 スピーカーの接続

  • 付属のケーブルでJ4とスピーカー(付属せず)を接続します。GNDには接続しないでください。
  • (基板V4)J5にスピーカーを接続することができます。GNDには接続しないでください。
  • (基板V4)M5Stack(Core1)の内蔵スピーカーを使用できます。ATP3011の場合はJP8を、ATP3012の場合はJP9をショートしてください。M5Stack本体からGPIO25を使用しないでください。Core2は内蔵スピーカーの回路構成が異なるため、この方法は使えません。

左側: ATP3011を搭載、GPIO25, 35に接続するためJP8, JP5をショート(基板V4)
右側: ATP3012を搭載、GPIO35に接続するためJP6をショート、J5にスピーカを接続(基板V4)

参考:写真のスピーカーは以下を両面テープで固定しています。ATP3012の場合かろうじて収まります。上に重ねるモジュールやボトムによっては収まりません。
(秋月電子通商扱い)
マイクロスピーカー 赤/黒リード付 8Ω
マイクロスピーカー 青/白リード付 8Ω

M5Stackの内蔵スピーカーについて

 M-BUSのGPIO25は、M5Stack内部のオーディオアンプを通して内蔵スピーカーに繋がっています。AquesTalk pico LSIからの音声出力をGPIO25に入力すれば、内蔵スピーカーから音声を出すことができます。ボリューム(VR)の出力を用いることで音量調節が可能です。以下の写真は、ATP3011を載せたモジュールにおいてGPIO25とボリューム出力を導線で接続した例です。ATP3012の場合は、ボリューム出力は1つ左側のピンです。基板V4のJP8, JP9はこれらの導線を埋め込んだものです。M5Stack自身がGPIO25を使わないことが前提です。Core2は内蔵スピーカーの回路構成が異なるため、この方法は使えません。

VR: Variable Resistor

2.4 その他の端子

  • J2は、ICSPです。コネクタ等は実装していません。使用にはピンヘッダをハンダ付けするなどの処置が必要です。ICSPのVCCはAquesTalk pico LSIの電源端子に繋がっているほか、M-BUSの3.3Vにも繋がっています。ICSPは、モジュール基板をM5Stackから切り離し、単体にして接続してください。
    ICSP: In Circuit Serial Programming

  • J3は、スタンドアロンモードで使用するPC0-3およびGNDの端子です。コネクタ等は実装していません。使用には信号ケーブルを直接ハンダ付けするなどの処置が必要です。

スタンドアロン接続例

 M5Stack用 AquesTalk pico LSIモジュールをM-Busエクステンションに載せ、ダイオードマトリクススイッチ16基板を接続しています。M5Stackの電源とリセットを使用しています。
(スイッチサイエンス扱い)M-Busエクステンション基板キット
(スイッチサイエンス扱い)ダイオードマトリクススイッチ16基板

3. モジュールの設定

3.1 DIPスイッチによる動作モード・通信モードの設定

 動作モードおよび使用するインタフェース(通信モード)に合わせて、モジュール基板上のDIPスイッチを設定します。設定にはピンセットなどが必要です。おすすめはI2C接続です。出荷時の設定は、セーフモード・I2C接続です。DIPスイッチの設定はリセット時に反映されます。AquesTalk pico LSIのリセットはM5Stackのリセットに繋がっています。

1234動作モード通信モード備考
OFFOFFOFFONコマンド入力モードI2CI2CアドレスはEEPROMに設定した値(初期値0x2E)
OFFONOFFONセーフモードI2CI2Cアドレスは強制的に0x2E
OFFOFFOFFOFFコマンド入力モードUART設定されたスピードで動作 (*1)
OFFONOFFOFFセーフモードUART強制的に9600bpsで動作
OFF-ONOFF-SPI mode 3-
OFF-ONON-SPI mode 0サンプルプログラムはSPI mode 0で動作
ONOFF--スタンドアロンモード-PC0-3の信号入力によりプリセットメッセージを選択して再生
ONON--デモモード-プリセットメッセージを順番に自動再生

※ 1, 2, 3, 4は、DIPスイッチの番号。DIPスイッチはON=GNDのため、ON=0, OFF=1です。
(*1) ATP3011の場合、SLEEP解除後の'?'送信で自動設定します。ATP3012の場合EEPROMに設定します。

3.2 ハンダジャンパによる信号の接続

 モジュール基板裏面のジャンパJP1-JP9をハンダで短絡(クローズ)することにより、GPIOとAquesTalk pico LSIの信号ピンを接続できます。

ジャンパGPIO(Core1)GPIO(Core2)AquesTalk pico LSI出荷時
JP11613UART-TXオープン
JP21938SPI-MISOオープン
JP3533SPI-SSオープン
JP41319SLEEPオープン
JP53535Analog Out of ATP3011オープン
JP63535Analog Out of ATP3012オープン
JP7GNDGNDShut Down of Power Amplifierクローズ
JP82525Analog VR Out of ATP3011オープン
JP92525Analog VR Out of ATP3012オープン

JP1, JP2, JP3: インタフェース信号

 使用するインタフェースに合わせてJP1, JP2, JP3をハンダで短絡(クローズ)します。I2Cの場合はJP1, JP2, JP3を全てオープンのままで使用できます。他の用途に影響がなければJP1, JP2, JP3を短絡(クローズ)することで全てのインタフェースを使用可能です。出荷時はオープンです。

インタフェースJP1JP2JP3AquestTalk pico LSIピン=GPIO(Core1)AquestTalk pico LSIピン=GPIO(Core1)
I2C---SDA=21, SCL=22SDA=21, SCL=22
UARTクローズ--TX=16, RX=17TX=13, RX=14
SPI-クローズクローズSCK=18, MISO=19, MOSI=23, SS = 5SCK=18, MISO=38, MOSI=23, SS = 33

SDA: Serial DAta
SCL: Serial CLock
RX: Receive
TX: Transmit
MISO: Master In Slave Out
MOSI: Master Out Slave In
SCK: Serial ClocK
SS: Slave Select

JP4: SLEEP 信号

 AquesTalk pico LSIのSLEEPピンをGPIO13(Core2ではGPIO19)に接続できます。SLEEP=LowでAquesTalk pico LSIがスリープ状態になります。ATP3011のUART接続において9600bpsより速い速度が必要な場合、「セーフモード」ではなく「コマンド入力モード」に設定し、速度設定のためにSLEEPを使用します。出荷時はオープンです。

JP5, JP6: 音声信号の取り込み

 AquesTalk pico LSIの音声出力をGPIO35経由でM5Stackに取り込むことができます。ATP3011の場合はJP5を、ATP3012の場合はJP6をハンダで短絡(クローズ)します。出荷時はオープンです。

JP7: パワーアンプのシャットダウン

 JP7がクローズ(短絡)の場合、パワーアンプのシャットダウン(SD: Shut Down)信号をGNDに接続しパワーアンプを常に動作状態とします。JP7のハンダを取り除く(オープン)にすると、AquesTalk pico LSIのPLAY信号(負極性)がシャットダウン信号となり、パワーアンプの消費電力を減らすことができます。この設定では音声再生の前後でノイズが発生します。出荷時はクローズ(短絡)です。

JP8, JP9(基板V4): M5Stack(Core1)の内蔵スピーカーへの接続

 AquesTalk pico LSIの音声出力をボリューム調節後にGPIO25経由でM5Stack内蔵アンプ・スピーカーに接続することができます。ATP3011の場合はJP8を、ATP3012の場合はJP9をハンダで短絡(クローズ)します。出荷時はオープンです。

4. サンプルプログラム

 AquesTalk pico LSIをM5Stackに接続し、I2C(Wire), UART(Serial), SPIで動作させるプログラムです。デモの内容は同じです。Arduino-IDE環境で使用します。モジュール基板の設定を予め使用するインタフェースに合わせておく必要があります。

BF-034_Wireフォルダ

 AqeusTalk pico LSIをI2Cで動作させるサンプルプログラムです。

BF-034_Serialフォルダ

 AqeusTalk pico LSIをUARTで動作させるサンプルプログラムです。

BF-034_Spiフォルダ

 AqeusTalk pico LSIをSPIで動作させるサンプルプログラムです。

BF-034_Core2_Wireフォルダ

 Core2にモジュールを装着して、AqeusTalk pico LSIをI2Cで動作させるサンプルプログラムです。M5Stack Core1との違いは以下です

  • includeするヘッダーファイル
  • WireのGPIOピン番号、SleepのGPIOピン番号

4.1 ボタン操作 .. loop()

 ボタンを押すと、ソースコードのpreset_msgを発声します。初期値はpreset_msg[0]です。

M5ボタン停止中発声中
M5StackA1つ前のpreset_msgを発声発声を中断して1つ前のpreset_msgを発声
M5StackB現在のpreset_msgを発声発声を中断して停止
M5StackC1つ後のpreset_msgから連続して発声発声を中断して1つ後のpreset_msgから連続して発生

4.2 setup()

  • SLEEP ピンをHighにする(デフォルト: 実行する)
     JP4をクローズ(短絡)すると、GPIO13(Core2ではGPIO19)とAquesTalk pico LSIのSLEEPピンとが接続します。SLEEPをHIGHにしてSLEEPでない状態にします。

  • UARTスピードを設定(ATP3011が対象。UARTのみ。デフォルト: 実行しない)
     AquesTalk pico LSI (ATP3011) のUARTスピードを設定します。GPIO13(Core2ではGPIO19)がAquesTalk pico LSIのSLEEPピンと接続している必要があります。

  • UARTスピードを書き換え(ATP3012が対象。UARTのみ。デフォルト: 実行しない)
     AquesTalk pico LSI (ATP3012) のUARTスピードを書き換えます。

  • I2Cアドレスを書き換え(I2Cのみ。デフォルト: 実行しない)
     AquesTalk pico LSIのI2Cアドレスを書き換えます。

  • プリセットメッセージを書き込む(デフォルト: 実行しない)
     AquesTalk pico LSIにプリセットメッセージとして、ソースコード内のpreset_msgデータを書き込みます。時間がかかります。

  • EEPROMデータをダンプ(デフォルト: 実行しない)
     AquesTalk pico LSIのEEPROMデータをシリアルモニタに表示します。時間がかかります。

  • AquesTalk pico LSIのバージョンをシリアルモニタに表示

  • チャイムJを発声

  • チャイムKを発声

5. ライブラリ

 AquesTalk pico LSIを使用するためのライブラリです。

5.1 BF_AquesTalkPico.h

 I2C, UART, SPI共通の基本クラスです。接続するインタフェースに依ってI2C(Wire), UART(Serial), SPIのいずれかの派生クラスを使用する必要があります。

(1) virtual int Send(const char* msg) = 0

 AquesTalk pico LSIに文字列msgを送信します。送信の様子をシリアルモニタに出力します。純粋仮想関数として定義し、使用するインタフェースに合わせて派生クラスで実装します。

(2) virtual size_t Recv(char* res, size_t res_size) = 0

 AquesTalk pico LSIから文字列を受信します。受信完了は、'>'または'*'で判断します。純粋仮想関数として定義し、使用するインタフェースに合わせて派生クラスで実装します。

(3) virtual bool Busy() = 0

 発声中などAquesTalk pico LSIが処理中の場合trueを応答します。falseの場合発声が終了したと判断できます。純粋仮想関数として定義し、使用するインタフェースに合わせて派生クラスで実装します。I2C, SPIではおのずとポーリングができますが、UARTではSend()による明示的なポーリングが必要です。

(4) int ShowRes(int res_length_to_show = 1)

 AquesTalk pico LSIからの応答をシリアルモニタに出力します。res_length_to_showに2を渡すと、応答が1文字以下の場合にシリアルモニタへの出力を抑止できます。I2C、SPIのポーリングによる応答が正常('>', 1文字)の場合のシリアルモニタへの出力を省略できます。

(5) int DumpEeprom()

 AquesTalk pico LSIのEEPROM (アドレス0x000-0x3FF) の値をシリアルモニタに出力します。

(6) int WriteEeprom(int address, int data)

 AquesTalk pico LSIのEEPROMにデータを書き込みます。

(7) int WritePresetMsg(const char* msg[], int num_of_msg)

 AquesTalk pico LSIのEEPROMにプリセットメッセージを書き込みます。書き込みの様子をシリアルモニタに出力します。

(8) int WriteSpeed(int speed)

 発話速度をEEPROMに設定します。50~300を設定できます。デフォルトは100です。

(9) int WritePause(int pause)

 文末ポーズの長さをEEPROMに設定します。256~65535を設定できます。65535を設定すると自動になります。デフォルトは65535です。

(10) int WriteSerialSpeed(int serial_speed)

 AquesTalk pico LSI (ATP3012) のシリアル通信速度を書き換えます。デフォルトは9600です。

(11) int WriteI2cAddress(int i2c_address)

 AquesTalk pico LSIのI2Cアドレスを書き換えます。デフォルトは0x2Eです。

5.2 BF_AquesTalkPicoWire.h

 AquesTalk pico LSIとI2Cでインタフェースする派生クラスです。

int Begin(TwoWire &wire, int i2c_address = 0x2e);

 AquesTalk pico LSIを接続するI2CとI2Cアドレスを指定します。

5.3 BF_AquesTalkPicoSerial.h

 AquesTalk pico LSIとUARTでインタフェースする派生クラスです。

int Begin(Stream &stream);

 AquesTalk pico LSIを接続するUARTを指定します。

5.4 BF_AquesTalkPicoSpi.h

 AquesTalk pico LSIとSPIでインタフェースする派生クラスです。

int Begin(SPIClass &spi, int ss);

 AquesTalk pico LSIを接続するSPIとSSとして使用するGPIOを指定します。

6. BF-034_Clockフォルダ

 M5StackのLCDに日付・時刻を表示する置時計のデモです。

  • リセット後はsetupの状況を表示します。setupが完了しボタンCを押すと時計表示になります。
  • ボタンBで日付を音声で読み上げます。ボタンCで時刻を音声で読み上げます。

ご注意

 WiFi動作中に発声すると電圧低下を検出してリブートすることがあります。

参考情報

7. 参考

Comments

No comments yet. Be the first to ask about this board.

Askabout this board