N.Yamazaki's blog

主に音声合成について思ったことを書いてみようと思います。
<< 音声テスターを作ってみた(その2 ソフト編) | main | 隠しコマンドで声質をチューニングする >>
[AquesTalk pico LSI] UARTボーレート設定の注意点
音声合成LSI ATP3011F4をUART経由で動かすときの注意点です。
(I2CやSPIでは当てはまりません)

ATP3011F4は、リセット後にホストからの'?'を受信することで、ボーレートを認識して自身のボーレートを調整するようになっています。

今回は、この時のLSIの動作タイミングについて少し詳しく書いておきます。

まず、リセット後(電源投入後)、内部クロックが安定するまで約65msec待ってからLSIが動き出します。LSI内部の初期化処理は殆ど時間がかからないので、基本的にこの時間経過後からRXD端子が受信可能になります。データシートではクロックの誤差等のマージンを考えて80msec以降と記述しています。

ボーレートはLSIの起動直後のRXD端子の立ち上がり"間隔"で検出しています。そのため'?'を送信する前に他の文字を送ったり、RXD端子が不安定な電圧レベルであると、正しくボーレートが同期できなくなります。

見過ごしがちな点は、RXD端子が受信可能になる前にHIレベルに安定させておく必要がある事です。具体的にはリセット後50msec以内にHIレベルに安定させればよいでしょう(65msecのマージンをとって50msec)。
この点は、ソフト制御のUARTでは特に注意が必要です。リセット後のポートは入力端子として初期化されることが多いので、この場合、リセット直後はRXD端子が浮いた不安定な状態になり誤動作の原因となります。これはRXD端子のプルアップで解決できますね。

ちなみに、Arduinoはリセット後からスケッチが動き出すまで、かなりの時間を要しますのこの点も注意してください。

注意事項のまとめ
その1:リセット後50msec以内にRXD端子をHIに安定させる。
その2:リセット後80msec経過してから'?'を送る。

ところで、本来は、ボーレートをEEROMなどで固定値に設定するような仕様にしたかったのですが、(ATmega328の)内蔵クロックの精度が+-10%と非常にバラついているため、このような仕様になっています。

| AquesTalk pico LSI | 13:30 | - | - |
PROFILE
Follow
CATEGORIES
LATEST ENTRIES
SEARCH THIS SITE
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND
SONY MDR-CD900ST
SONY MDR-CD900ST (JUGEMレビュー »)

普段これで開発しています。
RECOMMEND
RECOMMEND
RECOMMEND
RECOMMEND