忍者ブログ
ようこそ!JQ2RVNのブログです。 PICを使っていろいろな物を作ろうと画策中です。
[1] [2] [3]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

昨日に引き続き、ピン状態変化です。

昨日の内容をフローチャートにすると・・・
フローチャート
となります。


さて、このゼロクロス検出方式ですが、実力のほどは?
ということで、ネットを検索してみたところ、こんな記事→ を見つけました。

このページでの不具合原因は、ゼロクロスをする前にピークになること。
つまりは周波数特性の違いによって、高い周波数のほうが増幅されない。
ま、こんな感じの原因のようですね。


もし、自分の持っているリグの周波数特性が悪くて受信できなかったら・・・
と考えると、別の方法を探さないといけないかもしれません。

かといって、dsPICなんか使ってDSPをするとか・・・
ちょっと考えたくないなー


そんなわけで次回は、そこんところを考察してみたいと思います。

PR
PIC TNCのアセンブラソースを解析してみました。


まずは、ピン変化割り込みです。
ソースでは493行目からの処理です


割り込みが発生すると、
その時点のTimer0のカウント値を読みます。(レジスタはTMR0)
このカウント値は前回の割り込みで0にセットされているので、
つまりは、前回の割り込みからの経過時間がわかります。

ここでTMR0とCENTER_FREQのどちらが大きいかをチェックします。
(アセンブラではTMR0 - CENTER_FREQを計算し、符号を検査します。)

・ もし、TMR0のほうが大きいなら・・・
CENTER_FREQよりも低い周波数(波長が長い)トーンと考えられる。
Bell202の場合は1200Hzですね。
そして、R_TONE=0とします。

・ もし、CENTER_FREQのほうが大きいなら・・・
CENTER_FREQよりも高い周波数と考えられます。
2200Hzですね。
そして、R_TONE=1とします。


最後に、次のトーンのためにTMR0をクリア(0にする)します。

これにて、割り込みルーチンは終了です。




なお、CENTER_FREQの値ですが、1700Hzの1/2波長にします。
(コンパレータが0→1から1→0になるのは、サインカーブの0V以上のときなので)

PICが20MHzで動作しているとき、
4クロックで1サイクルとなりますので、1サイクルは0.2μsec。
Timer0のプリスケラは1:32に設定されてますので、
Timer0がカウントアップするのは、6.4μsecになります。

一方、1700Hzの1/2波長は294μsecです。

よって、6.4 ÷ 294 = 45.955になります。

なのでアセンブラの341行目にあるCENTER_FREQ equ d'45'となるわけです。



なお、341行目にあるコメントでは、"(TMR0/8)(10mhz and PS of 16)"
とありますが、20mhz動作のアセンブラなのに、なぜこう書かれているのかしら??
多分、以前の設計のまま、コメントをなおし忘れたのかもしれません。
プリスケラの設定などチェックしましたが、
20mhzにて、1:32、CENTER_FREQ=45という設定になってました。


忍者ブログ [PR]
カレンダー
02 2024/03 04
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
プロフィール
コールサイン:
JQ2RVN
性別:
男性
自己紹介:
PICの開発を勉強中です。
目標はPICTNCの高性能版を作ること。
まずは、本家を解析しています。
最新コメント
[04/23 Eolande]
[04/16 太田和巳(JF2UJG)]
[09/10 je7ifp]
[08/06 JQ2RVN]
[08/03 OVC]
最新トラックバック
バーコード
ブログ内検索
アクセス解析