モデム信号送出でハマっていましたが、ようやくと原因がわかりました。
正しくモデム信号が送られていないのではないかということで、前回は300bit分の送出所要時間を確認してみましたが、問題は無さそうでした。そこで、生成している周波数を確認してみようと考え、試しに3秒分の連続マーク(1300Hz)と連続スペース(2100Hz)を生成して実際の音を聞いてみました。すると、どうも低めの音が出ているように感じられたのです。試しに、ダイアルトーンの周波数を400Hzではなくて、1300Hzに設定して鳴らしてみると、明らかに音が違います!!
レジスタ設定値の算出に使ったGUIソフトを立ち上げて、FSK設定での周波数設定パラメータと、オシレータ設定での周波数設定パラメータを見比べて、ようやくと原因に気が付きました。FSK設定で算出されたパラメータはSi3210/3211用の値になっており、Si3215/3216用の値になっていなかったのです。Si3210/3211とSi3215/3216では、周波数生成に使う基本クロック周波数が異なっているので、周波数設定のパラメータ値が違ってきます。GUIソフトでは、使用するチップの種類に応じて、この違いを考慮して計算してくれるハズなのですが、どうやらFSK設定での処理がバグっているらしく、Si3215/3216が選択されていてもSi3210/3211用の値を算出しているようです。
オシレータ設定のタブでは、チップ種別に応じてちゃんと違う値を算出してくれます。どうやら、オシレータ設定の場合とFSK設定の場合では、周波数設定パラメータの算出手順は同じようなので、オシレータ設定のタブで設定値を求めてやりました。

上図がFSKのタブを使って周波数パラメータを求めた画面。下図が同様にオシレータ画面を使った時の画面です。同じ周波数を指定しているのに、Freq(Space/Mark)とOSC1/OSC2の値が全然違います。

ほんとは、正しいパラメータの導出方法に基づいて自分で計算して確認したいところですが、FSKパラメータの導出方法についてはデータシートにもAN32にも記載されていません。Freq/Ampはトーンと同じだろうと見当がつくのですが、Transistionパラメータについてはどういう値を設定すればいいのか全く見当がつかないので、Si3210用に算出された値をそのまま流用することにします。きっと、まっとうな顧客には代理店なりSilabsのサポートが対応してくれるのでしょう。
こうして求めた値を使うように変更して、試験をしてみたところ、メデタク番号が表示できるようになりました。

わかってみれば、たったこれだけのことなんですが、すっかりGUIソフトを信じていたので、ずいぶんと時間がかかってしましました。
正しくモデム信号が送られていないのではないかということで、前回は300bit分の送出所要時間を確認してみましたが、問題は無さそうでした。そこで、生成している周波数を確認してみようと考え、試しに3秒分の連続マーク(1300Hz)と連続スペース(2100Hz)を生成して実際の音を聞いてみました。すると、どうも低めの音が出ているように感じられたのです。試しに、ダイアルトーンの周波数を400Hzではなくて、1300Hzに設定して鳴らしてみると、明らかに音が違います!!
レジスタ設定値の算出に使ったGUIソフトを立ち上げて、FSK設定での周波数設定パラメータと、オシレータ設定での周波数設定パラメータを見比べて、ようやくと原因に気が付きました。FSK設定で算出されたパラメータはSi3210/3211用の値になっており、Si3215/3216用の値になっていなかったのです。Si3210/3211とSi3215/3216では、周波数生成に使う基本クロック周波数が異なっているので、周波数設定のパラメータ値が違ってきます。GUIソフトでは、使用するチップの種類に応じて、この違いを考慮して計算してくれるハズなのですが、どうやらFSK設定での処理がバグっているらしく、Si3215/3216が選択されていてもSi3210/3211用の値を算出しているようです。
オシレータ設定のタブでは、チップ種別に応じてちゃんと違う値を算出してくれます。どうやら、オシレータ設定の場合とFSK設定の場合では、周波数設定パラメータの算出手順は同じようなので、オシレータ設定のタブで設定値を求めてやりました。

上図がFSKのタブを使って周波数パラメータを求めた画面。下図が同様にオシレータ画面を使った時の画面です。同じ周波数を指定しているのに、Freq(Space/Mark)とOSC1/OSC2の値が全然違います。

ほんとは、正しいパラメータの導出方法に基づいて自分で計算して確認したいところですが、FSKパラメータの導出方法についてはデータシートにもAN32にも記載されていません。Freq/Ampはトーンと同じだろうと見当がつくのですが、Transistionパラメータについてはどういう値を設定すればいいのか全く見当がつかないので、Si3210用に算出された値をそのまま流用することにします。きっと、まっとうな顧客には代理店なりSilabsのサポートが対応してくれるのでしょう。
こうして求めた値を使うように変更して、試験をしてみたところ、メデタク番号が表示できるようになりました。

わかってみれば、たったこれだけのことなんですが、すっかりGUIソフトを信じていたので、ずいぶんと時間がかかってしましました。