AVRでTNC(4)
昨日、本日の土日かけて、AVRによるTNC製作のための実験の続きをしました。1200Hzと2200Hzの検出はできたのですが、周波数が変わったときの検出がいまひとつうまくいかないような状況です。ゼロクロス検出とデータ検出はひとつのワンチップマイコンで処理するのはむずかしいようです。割り込み処理が3つあるとどれがどのように影響しあうのか理解するのが大変です。進展があったときに、ここに続きを書いていきます。
なお、この記事はPuppyLinux4.00.1を無線LANカードを取り付けた8年ほど前のノートパソコンで走らせて書いています。PuppyLinux3.01では無線LANが使えなかったのですが、最近リリースされた4.00で今日試したところ、使えるようになりました。ただ、漢字変換の確定の際にエンターキーを押すと、時々カーソルが意図しない場所に飛んでいってしまいます。でも、古いパソコンがストレスなく使えるのは、大きな魅力です。
| 固定リンク
「ワンチップマイコン」カテゴリの記事
- 受信用TNCの製作(6)(2013.02.13)
- 受信用TNCの製作(5)(2012.12.03)
- 受信用TNCの製作(4)(2012.11.26)
- 受信用TNCの製作(3)(2012.11.25)
- 受信用TNCの製作(2)、XI-IV再び(85)(2012.11.25)
コメント
JI1IZRさん、こんにちわ。
初めてコメントさせていただきます。
周波数が変化したときの検出がうまくいってないようですので、
ピン変化割込みの前に、タイマー割り込みが発生してしまい、
NRZIでは変化なし=1としてしまっているのではないでしょうか?
私の場合、これを防ぐ方法としてタイマーの値を場合分けしています。
(結構昔からあるアルゴリズムのようです)
T = 1/1200 = 833μsとします
タイマーで割り込みをした場合、
タイマーには1Tで割り込みが発生するようにします。
一方、ピンが変化して割り込みが発生した場合、
タイマーには1.5Tで割り込みが発生するようにします。
つまり、ピンが変化していない=1の確定を、
AVRでTNC(3)にある図であれば、
赤い縦線のところでするということです。
この方法ならば、
1ビット時間の間変化がないかチェックすることになりますから
多少のずれがあっても問題ないはずです。
投稿: JQ2RVN | 2008年8月 1日 (金) 02時19分
JQ2RVNさん、コメントありがとうございます。今ひっかかっているのは、ピン変化あり=0の検出ができず、常に1となってしまうという点です。変化ありの場合のタイマ割り込みは、1.5tではなく0.5tとして、変化直後の0を捕らえようとしているのですが、どうも思ったようにいきません。とりあえずはTCM3105で検出して、ゼロクロス検出以外の部分がうまく動くようにしてから、ゼロクロス検出を見直すことを考えています。
投稿: ji1izr | 2008年8月 2日 (土) 00時28分
JI1IZRさん、こんにちわ。
そういうことでしたか~私の思い違いでしたね(汗
私はPIC畑の人間なのでAVRのことはかじった程度なんですが、
AVRの割り込みって、立ち上がりエッジと立ち下がりエッジを設定しませんでしたっけ?
PICとの違いで思いつくところはこれくらいな気がします。
あと、ゼロクロス検出で行う場合、
周波数判定→NRZI変換の受け渡しは、レジスタを介してのものになると思います。
なので、割り込みを使うことはできないのでは?
モジュール的に構成していくのならば、
メインループを回しながら、ピンの状態を読み取って
NRZI変換していく方がFBと思うのですが、いかがでしょう?
投稿: JQ2RVN | 2008年8月 2日 (土) 02時09分
JQ2RVNさん、更なるコメントありがとうございます。以前に検索したときにブログにたどり着き、時々拝見しています。ご指摘の割り込みの設定には立ち上がりと立下りのほか、論理変化というものが私の使用しているAVRにはあるので、これを試しているところです。また、AVRのレジスタは全部で32個あり、すべてPICのアキュームレータとほぼ同じ機能を持っているので、これを各割り込みとメインルーチンとに使い道を分けて、データの受け渡しが可能です。メインループ内ですべての処理という方法も考えましたが、割り込み処理に挑戦というところです。
投稿: ji1izr | 2008年8月 2日 (土) 16時39分