配線がごちゃごちゃになってきた
Timer1を使って1msごとに割り込みを入れ(Timer0と平行に。18Fシリーズは2段階の割り込み優先度が設定できますが、プログラムメモリがめっさ大きくなってしまったので却下^^;)カウント用の1msフラグを立てて、あらかじめ設定WPM値から計算した短点時間をカウントし、短点とウエイトを加えた長点を出す関数に渡してパドルの状態(dot, dash, スクイーズ)に応じた符号を作り、さらに送受信制御関数に渡してブレークイン動作を行うという構成です。
一応回路図を。部品は秋月でほとんど揃えられます。
これでも汎用VFOとしては十分。PICのピン数はかなり厳しい...
プログラムが複雑になってきてかなり手間取りましたが、一応キーヤーとしても動作するところまでこぎつけました。ただし、長短点メモリのないIambicAもどきのためまだまだスムーズに打てません。最低限長短点メモリはつけないといけませんね。
また、ブレークイン制御では送受のたびにDDSに周波数設定コマンドを送っているわけですが(送信受信で局発周波数が変わるため)、しばらく打ち続けているとLCD表示が乱れてしまいます。SPIコマンドが衝突するのかもしれない、ということで送信中のビジーウエイト命令も置いてみましたが効果ないところを見ると、どうやらピン数を節約しようとSPIのSCLKとDATAラインをDDSとLCDで共通化したところが怪しいという結論に^^;ブレッドボードで組んでいるので信号が不安定なのかもしれませんが、やっぱりケチるとダメですかねぇ。
今回まで使用したPICは18F14K22という20ピンPICで、CWトランシーバーとしてキーヤーやら詰め込もうとするとピン数の少ないSPI LCDを使用しているとはいえもう限界なのでしょう。これから先は上位で28ピンの18F26K22に切り替えようと思います。これも秋月にありますが220円と安い上にプログラムメモリも64KB、SRAM3896byte、EEPROMも1024byteと強力。18Fの中でもコスパ高いです。
18F14K22と18F26K22のツーショット
新しいPICはいろいろと強力なのに安いという不思議
それと、もうひとつポイントを。DDSなどを含めてすべて3.3V動作にしています。消費電流はそれなりに抑えられるので、電池運用を想定した作り物には良さそう。かな?
0 件のコメント:
コメントを投稿