JJ1WKN Log

自作や移動運用関連のログです。

AVR HIDaspx ライタの製作

2009-03-31 | AVR
先日作ったPICライタ基板の下半分の空きエリアにAVR用のライタを作成しました。

以前作ったシリアルポート接続のライタでも良かったのですが、シリアルポートが付いたPCも少なくなりつつあるので、USB接続のライタにしました。

今回作ったのは 千秋ゼミさん で開発されているHIDライタです。
USB機器を使用する場合は、シリアルをUSBに変換するドライバを組み込む必要がありますが、このライタはキーボードやマウスなどのインターフェース(HID)を使用するので、どのPCでも標準のドライバが組み込み済みなので、ライタ用にドライバを組み込む必要がありません。

当然、USB-シリアル変換用のICも必要ありません。
ところが、USBとのやり取りをしてAVRに書き込むためのプログラムが書き込まれたAVRが必要となります。
いわゆる鶏が先か卵が先かという問題です。
今回は以前に作成したシリアル接続ライタで書き込むことにしましたが、初めてライタを作る場合は簡易的なシリアルライタで書き込むなどしないといけません。

作成した基板です。
中央がライタプログラムが書き込まれたAVRです。
通常はISPでターゲット基板のAVRに書き込むのですが、今回は書き込み用の最低限のターゲット回路を作成して、ISPで書き込むようにしました。
ターゲット回路にはPICライタで使用したゼロプレッシャーソケットを付けて、取り外しが楽にできるようにしました。
AVRはISPのピン接続がバラバラなので、PICのように同じソケットで多種に対応はできません。
今回は秋月で200円と安くなったATmega8用の接続にしました。
これでターゲット基板にISPソケットを用意しなくても済みますし、ISPに使用するピンも通常のI/Oとして使えるので設計の範囲が広がります。
もちろんISPコネクタも付けてありますので、従来通りISP書き込みも可能です。


USB接続で書き込んでいるところです。


先ずはブレッドボードでLEDピカピカのテストです。

PIC RCD ライター V2.5 の製作

2009-03-22 | PIC
最近PICでプログラムを組んでいますが、ソケットへの抜き差しが面倒なので、ゼロプレッシャーソケットを使ってPICライターを作りました。


作ったのは FENG3 さんのRDCライターですが、現在はV2.5になっていますので、この回路にしました。
今回のバージョンではPIC12F648Aなどにアダプタ無しで書き込めるようになりました。

28ピンのゼロプレッシャーソケットがあったので、これを使いました。
基板への半田付けはせずにソケットで取り外しができるようにしました。

出来上がったライターの基板です。
下半分に空きエリアがあって、DSUB9ピンコネクタだけが付いていますが、、ここにAVRライターを作る予定です。



PIC 12F683 ビーコン発生装置の実験

2009-03-14 | PIC
136kHzCW送信機用にビーコン発生装置を作りましたが、AMやSSB送信機のテストに使えるように、トーン信号が出るようにしました。

CW用ビーコン発生装置のプログラムを少し改造して、キーダウンしている間に別のポートに800Hzくらいのトーン信号を出力するようにしました。
使用したのはPIC 12F683ですが、前回と同様に他のデバイスでもOKです。

今回は改造したプログラムのテストなので、ブレッドボードを使いました。
LEDはキーの代わりに確認用です。


プログラムを解説します。
DLT1とDLT3は、短点と長点を生成するためのループ回数です。
DLTは、トーン信号の半分の長さです。
const DLT1 as word = 160 '200ms / 1.25ms(800Hz) = 160
const DLT3 as word = 480 '600ms / 1.25ms(800Hz) = 480
const DLT as word = 625	 '800Hz=1.25ms 1250us/2=625us
dim i as word

toneはトーンの半周期の待ちルーチンです。
tone1とtone3で、GPIO.1をON/OFFして短点、長点分のトーンを発生させます。
sub procedure tone
  Delay_us(DLT)
end sub

sub procedure tone1
  for i=1 to DLT1
    GPIO.1 = 1
    tone
    GPIO.1 = 0
    tone
  next i
end sub

sub procedure tone3
  for i=1 to DLT3
    GPIO.1 = 1
    tone
    GPIO.1 = 0
    tone
  next i
end sub

key1とkey3では、キーダウンしている間にtoneを呼んで、トーンを発生させています。
sub procedure key1
	GPIO.0 = 1
	tone1
	GPIO.0 = 0
	dly1
end sub

sub procedure key3
	GPIO.0 = 1
	tone3
	GPIO.0 = 0
	dly1
end sub


PIC 12F675 ビーコン発生装置の製作

2009-03-08 | PIC
mikroBasicの練習としてビーコン発生装置を作りました。
LEDピカピカでもいいのですが、少し実用的なものにしてみました。

PICはジャンク箱にあったPIC12F675を使用しましたが、基本的にLEDピカピカと同じなので、mikroBasicが対応していればどんなPICでもかまいません。

PIC12F675は10ビットA/Dコンバーター内蔵でこの手の用途には贅沢過ぎます。
作成した基板です。回路図は省略しますが、PIC、10kΩ、104、2SC1815と電源SWです。


先日作った136kHzCW送信機に組み込んでみました。
トランジスタのコレクタとエミッタをキー端子に接続します。
これでどこまで飛ぶかの実験が楽になります。


プログラムを上から順番に解説します。
最初はコメントです。
ポートの割り当てやハードの概要を書いておくと後で見たとき便利です。
この他にコンフィギュレーションに関する設定値も記述しておきますが、デバイス依存なのでここでは省略します。
アセンブラだとソースに記述するのですが、mikiroBasicではプロジェクトの設定値となります。
---ここから---
'CW Beacon 2009.03.07 JJ1WKN
'mikroBasic for PIC V6.0

'Device: PIC12F675
'OSC: 4.000MHz Internal
'HardWare:
' 1:Vdd +3.5V
' 8:Vss
' 7:GPIO.0 -10k ohm-B/Tr
' Tr:2SC1815Gr E/Tr-Vss C/Tr-Key
---ここまで---

プログラムの本体です。
定数を宣言します。
DELAY_1は短点、DELAY_3は長点の秒数です。
好みのスピードに設定してください。
DELAY_RXは次の送信までの待ち時間です。
1分おきに「VVV DE JJ1WKN」を送信します。
---ここから---
program CW1

const DELAY_1 as word = 200 '0.2s
const DELAY_3 as word = 600 '0.6s
const DELAY_RX as word = 34433 'fill to 60s
---ここまで---

dly_1()とdly_31()は短点、長点分の待ち時間を作ります。
Delay_msはmikroBasicに用意されているライブラリ関数で、「ms」単位で指定するだけで、正確な待ち時間を生成してくれるので便利です。
ところが、「Delay_ms()」は記述したところにその都度展開されるインラインライブラリなので、プログラムメモリ節約のため、procedureとして共通化します。
dly_1()とdly_3()はprocedureに引数で待ち時間を与えてもいいのですが、引数の受け渡しでメモリを消費しますので、分けました。
この当たりはどちらの方がメモリの消費が少ないかをアセンブルリストを見ながら決めて行きます。
---ここから---
sub procedure dly_1()
Delay_ms(DELAY_1)
end sub

sub procedure dly_3()
Delay_ms(DELAY_3)
end sub
---ここまで---

procedure key_1()とprocedure key_3()はGPIOの0ビット(7番ピン)を制御してキーイングを行います。
「1」を出力すると、7番ピンはVdd(ここでは3.5V)になり、10kΩ経由で接続されているトランジスタがONします。
すると、コレクタからエミッタへ電流が流れますので、送信機のキーに接続します。
---ここから---
sub procedure key_1()
GPIO.0 = 1
dly_1()
GPIO.0 = 0
dly_1()
end sub

sub procedure key_3()
GPIO.0 = 1
dly_3()
GPIO.0 = 0
dly_1()
end sub
---ここまで---

いよいよモールスコードの生成です。
プログラムメモリを節約するために、モールスコードを2つずつ区切ります。
例えば「1」は「・----」なので「・- -- -」=「AMT」となります。
このように分割すれば、5回のコールが3回で済みプログラムメモリを節約できます。
という訳で、2単位までで構成されるETIMANのコードを送信するprocedureです。
---ここから---
sub procedure tx_E() '*
key_1()
end sub

sub procedure tx_T() '-
key_3()
end sub

sub procedure tx_I() '**
key_1()
key_1()
end sub

sub procedure tx_M() '--
key_3()
key_3()
end sub

sub procedure tx_A() '*-
key_1()
key_3()
end sub

sub procedure tx_N() '-*
key_3()
key_1()
end sub
---ここまで---

後はビーコンで送信したい文章に出てくるコードを送信するprocedureを作ります。
「V」=「・・・-=「・・ ・-」=「IA」
コードの送信後にはdly_1()で短点1つ分の待ちを作ります。
---ここから---
sub procedure tx_V() '** *-
tx_I()
tx_A()
dly_1()
end sub

sub procedure tx_J() '*- --
tx_A()
tx_M()
dly_1()
end sub

sub procedure tx_D() '-* *
tx_N()
tx_E()
dly_1()
end sub

sub procedure tx_W() '*- -
tx_A()
tx_T()
dly_1()
end sub

sub procedure tx_K() '-* -
tx_N()
tx_T()
dly_1()
end sub

sub procedure tx_1() '*- -- -
tx_A()
tx_M()
tx_T()
dly_1()
end sub
---ここまで---

ここからがメインルーチンです。
パワーオンリセット後はここから実行されます。
最初に各種レジスタの初期設定を行います。
使用するPICのデバイスごとに違いますので、マニュアルを参考にして設定してください。
---ここから---
main:

CMCON = %00000111
TRISIO = %00101000
ANSEL = %00000000
---ここまで---

ここからがビーコンメッセージの送信です。
無限ループの中に、送信文を配置しています。
単語の区切りはdly_3()で長点1つ分空けます。
「ETIMAN」はコードの後に短点1つ分を追加しますが、この送信文では「E」と「N」は単語の最後に位置していますので省略しています。
メッセージ送信後は60秒になるまで待ちます。
待ち時間はmikoroBasicのデバッガーを動作させて時間を測定して、DELAY_RXの値を決めます。
---ここから---
while true

tx_V()
tx_V()
tx_V()
dly_3()

tx_D()
tx_E()
dly_3()

tx_J()
tx_J()
tx_1()
tx_W()
tx_K()
tx_N()

Delay_ms(DELAY_RX)
wend

end.
---ここまで---


136kHz用受信アンテナの製作

2009-03-07 | 野毛トラ28
受信用のアンテナを作りました。

送信用と同様にバーアンテナにしました。
今回は太目の線をまいたので、2.7mHでした。
500pF程度で同調するので、手持ちのバリコンを捜したところ、250pFの3連バリコンがあったので、750pFとして使用しました。
10回くらい巻いたリンクコイルから受信機へ接続しました。



受信感度ですが、大分向上しました。
500kHzくらいまでカバーしているようで、長波用のアンテナとして使えそうです。

mikroBasic for PIC のインストールと日本語化

2009-03-04 | PIC
PicVcをF直化しようと検討しています。
周波数とロータリーエンコーダーの回転数のグラフから周波数を一定の割合で変化させたときの回転数を読み取れば 回転数⇒電圧⇒PWMに設定する値 がわかります。
周波数が直線的に変化するようにPWMに設定する値を加減してやればうまくいきそうです。

PicVcはmikroelektronika社のmikroC for PIC言語で書かれていますが、Basicの方が慣れているので、同社から出ているmikroBasic for PICをインストールしてみました。
両方のマニュアルを見比べてみましたが、言語が異なるだけで、機能的にはほぼ同じです。
BASICで構造体やポインタが使えたりします。

早速同社のHPからフリー版をダウンロードしてインストールしました。
最新版はV7で、2Kまでの制限があります。

色々調べているうちに日本語化ツールが公開されていて、ダウンロードして適用してみましたが、V7には対応していないようです。
同社のHPには最新版しか公開されていませんので、V6をようやく捜して日本語化ができました。

起動してサンプルプログラムをコンパイルしたところです。


日本語HELPもあるので、とっても便利です。
また、標準で用意されているライブラリも充実しており、LCDなどの定番からSDカードのアクセスライブラリまであるのにはビックリです。