ようこそ!JQ2RVNのブログです。
PICを使っていろいろな物を作ろうと画策中です。
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
PICTNCの受信ルーチン。
次はrecv_one_bitです。 このルーチンは状態変化割り込みで判定したトーンを用いて NRZI変換をしたり、タイミングを見たりします。 ここで変数・定数の説明します。 <変数> R_TONE:状態変化割り込みで得られた現在のトーン rotor:前回のトーン <定数> ONE_BIT:1200bpsでの1ビットの時間(833μsec) ONE_5_BIT:1ビットの時間の1.5倍の時間 (↑ Timer2で使われるので、カウント数を計算する) R_TONEとrotorの0ビット目が同じなら → no_change R_TONEとrotorの0ビット目が違っていたら → bit_edge というように、サブルーチンにジャンプします。 後で書きますがrotorはbit_edgeのときは+1されますので、 結果的に前回の値が入っていることになります。 (0ビット目が反転される) 8ビット変数なので、ちょっともったいない気もしますが、 1ビット変数にすると、反転が面倒なので、 このようなレトリックを使ってるみたいです。 bit_edgeサブルーチン rotorを+1する。 Timer2の割り込み時間(PR2)をONE_5_BITにする。 TMR2IF(割り込みフラグ)とTMR2をクリアする。 Cビットを0にする no_changeサブルーチン TMR2IFが0の場合はrecv_one_bitに戻る。 (TMR2が規定時間過ぎていない状態) TMR2IFが1の場合、以下続行 PR2=ONE_BIT TMR2IF(割り込みフラグ)とTMR2をクリアする。 Cビットを1にする <ポイント> このルーチンから戻った時、 Cビットに受信した1ビットが入っています PICのシフト演算はCビットの値が入ってきますから 変数を使わずとも、シフトするだけで受信した信号が入ります (この辺は次回fine_start_flagにて) Timer2は割り込みを発生させません(TMR2IE=0) しかし、条件が一致すればフラグが立つ(TMR2IF=1になる)ので これで既定の時間が経過したかどうかの判断ができます PR
デコードがうまくいかない。
その原因を知るためにも、予備実験を行ってます。 まずは、ゼロクロス以外、何もない状態プログラムを組んで ちゃんと区別できているかを調査。 AVRでTNCを製作されている方も、同様の実験をされているので 参考にさせたいただきました。 (やっぱ、ちゃんとやっとかなあかんよねw) シリアル通信でチェックするのも、影響が出てしまいますので、 今回はLEDを光らせてチェックしてみます。 この回路で、1200Hzと2200HzそれぞれのSin波を入力してみました。 なお、音源はミニ・デジタル・シグナルジェネレータというソフトを使い、 PCから音を出しています。 まず、2200Hzですが、このときはHighのLEDのみが光りました。 こちらは成功ですね。 しかし、1200Hzを入力すると、両方共が光ってしまいます。 つまり、HighとLowを交互に検出してしまっているようです。 うーん、これは困った。。。 回路的にはオリジナルとほぼ同じなんですけど・・・ オリジナルとの違いといえば・・・ オリジナルはコンパレータ出力をピンにだして、またBポートに入れ、 その割り込みを見ています。 PicPacketMonitorの場合は、コンパレータの出力を外に出さずに コンパレータ割り込みでゼロクロスを検出しています。 この外に出すか出さないかで違いがあるんでしょうか?? 次はオリジナル通りの回路で試してみたいと思います |
カレンダー
プロフィール
コールサイン:
JQ2RVN
性別:
男性
自己紹介:
PICの開発を勉強中です。
目標はPICTNCの高性能版を作ること。 まずは、本家を解析しています。
カテゴリー
最新記事
最新コメント
[04/23 Eolande]
[04/16 太田和巳(JF2UJG)]
[09/10 je7ifp]
[08/06 JQ2RVN]
[08/03 OVC]
最新トラックバック
ブログ内検索
最古記事
(05/18)
(05/19)
(05/19)
(05/20)
(05/21)
アクセス解析
|