説 明 | プログラム |
---|---|
80m用 IDジェネレータ
受信機(PJ-80)が我が家に来たので練習用としてSGが欲しくなりました、とりあえず送信機をコントロールすれば良いのでCWのKEY端子に付けるコントローラーを作る事にしました。 構造は簡単で1分間にDE+CALL+MOE(E.I.S.H.5)で後はMOEの連続になります。 単なるモールス信号の送出だけなので前回の[モールス・ガン]に少し手を加えれば出来そうです。 ただ、独特なルールがあるので順次問題点が出た所で修正したいと思います。 80mの場合CW信号で良いそうです。 (JA4WSH 田中さん有難う御座います) 初めてなので簡単に! モールス発生ではAT90S1200を使ったのでこれで作る事にしました、メインクロックは1MHz(5V時)なのでこれから1分間を作ります、内部発振なので精度は取れませんが練習用ですから「まあ・良いか」という感じです。 誤差は1分間が電圧の都合で多少変ります、例えば60秒の所が53秒とか65秒になる程度です。予め合わせこんで置けばそんなにずれないと思いますけど、競技では問題になりますが練習用の1台だけですからまあ問題は無いでしょう! 5Vで想定しましたが、セラロックにして3Vの乾電池動作だと数mAとなり節電可能です、でも006Pから落として使う予定なので5V動作としました。 細かい動作は! はっきり解らない事が多過ぎです、ホームページを見て来ると次の動作が必要の様です。 ●何台のコントローラが同時に動くのか(A-SW)。 ●このコントローラは何番目を担当するのか(MO-SW)。 MO-SWは前記のMOEを発生するのに必要な情報で予め使用直前に設定します。A-SWは全部で何台のコントローラが動作するのか設定し最大値でこれも同様直前に設定します。 当初出力はCW信号だけだと思っていたのですが、2mなどFM機で送信する場合変調してないとハンディ機が激しくコントロールされそのまま信号が出るのか少し疑問です。 そこで「PTT信号と音によって変調されたコントロール信号が必要ではないか」と思い出力はCW信号の他に音声出力とPTTも出す事にしました。 (国際ルールはA2信号の様でこれにも曲がりなりに対応出来る様にしました、今は必要有りません!) 3台のコントローラの場合(スイッチの設定) 1台目はA=3 MO=1に 2台目はA=3 MO=2に 3台目はA=3 MO=3に設定します。これで3台が1分交代で信号を出せる事になります。 今回作ったのは可能性としてこの様になっていますが練習用として1台で使う予定でA=2 MO=1又は2で使うと1分間隔で信号が出る事になります。本当は2台ぐらい作動させるとより実践的になると思います。 複数台をコントロールするには時計機能が正確でないとオーバーラップします、後で水晶かセラロックで合わせ込む方式にVer UPしたいと思います。 IC 設定など! ICはAT90S1200Aで内部発振(1MHz)を使っています。 ○ポートD3は音声出力 ○ポートD4はLEDを点灯させていますがCW出力です(Hアクティブ)。 ○ポートD5はPTT出力 ○ポートD6はPTT出力(Lアクティブ) ○ポートB7.6.5はMOのSW入力 ○ポートB4.3.2はA-SW入力 他は未使用です。 プログラム 動作はタイマーを使って1分間(タイマー1/1024/250と外部に240)を作り全体をコントロールしています。 信号を作る方法は前回の[モールス発生部]と同じです、特殊DATAを書き込んでそれを利用します。DATAはそちらに一覧表として出していますのでご覧下さい。 待ち時間に1KHz前後でスイッチして音声信号を作りモニター用として利用します、CWのスピードはパラメーターを書き換える事によって変更出来ます、この辺は好みで設定を変て下さい。 プログラムを利用する! プログラムですがコールの所に私の物が入っています、当然ここを変更してアセンブルしてICに書き込みます。[/1]を付けてもいいですね。 自分でコールを書き込める様にするにはかなりプログラムが面倒なので、今回はコールを入れるには書込み器を持っている方に限定します(すみません)。 まだ送信部は10W機をパワーを絞って使う予定、現在ICだけのむき出しの状態で机の上でLEDが点滅したりモニター音がピコピコ聞える状態です。[CWG_1.asm] 次のバージョンは水晶発振でタイマーを安定化する事でしょうか、送信機も3.5MHzと低周波並なので簡単に出来そうです。 2004/JUN/15 | ;************************************* ;Title : ADRF Signal_generater ;Date :2004/6/13 BY JA1HWO ;************************************* ;ADRF用の信号発生機で1分間にDE+CALL+MOE(MOI.S.H.5)+MOE+... ;機器数の設定で5台分設定と信号の番号の設定(MOE)の設定が出来ます。 ;出力はCW信号や1KHz近くの音で変調した物、1分間のPTT信号が取り出せます。 .include "C:\AVRTOOLS\APPNOTES\1200def.inc" .cseg .org 0 ;**** set **** .equ sound =3 ;PortD3 .equ LED =4 ;PortD4 CW Mode .equ PTT =5 ;PortD5 .equ PTTb =6 ;PortD6 not PTT for Handy transceiver ;PortB Set/No/Timer .def back_f =r0 ;SREG .def back_i =r1 ;SREG .def tc_set =r2 ;for Timer .def mo_SW =r4 ;Signal No .def ac_SW =r5 ;Max SG .def kiki =r6 ;input PortB .def cunt_m =r7 ;1-7min counter .def temp =r16 .def gr1 =r17 ; .def gr2 =r18 ; .def cunt_i =r20 ;60sec counter .def speed =r21 ;for A/D timer .def wcunt =r22 ;timer ;------------------------------------ rjmp star ;Reset reti ;Ex0 rjmp T_60m ;timer overflow reti ;Analog Comparator star: ldi temp,0 ;all=input out DDRB,temp ldi temp,$ff out PortB,temp ;pull up ldi temp,0b11111100 ;PortD 01=input out DDRD,temp ldi temp,$02 out PortD,temp ;input pull up sbi PortD,PTTb ;PTT Off clr cunt_i ;counter ldi temp,1 mov cunt_m,temp ldi temp,5 ;in Clock=1/1024 out TCCR0,temp ;T/C0 ldi temp,-250 ;*250=4Hz(0.25S) mov tc_set,temp out TCNT0,tc_set ; in kiki,PinB ;PortB check com kiki mov temp,kiki swap temp ;Generater No(1-7) lsr temp andi temp,$07 mov mo_SW,temp ;PortB567 mov temp,kiki ;ac_SW ? andi temp,0b00011100 lsr temp lsr temp mov ac_SW,temp ;PortB234 ldi temp,2 out TIMSK,temp ;Timse Interrupts ON sei ;Interrupts on ;-------------------------------------------- main: cp cunt_m,mo_SW ;time=mo_SW ? brne main ;no to ldi temp,8 ;Wait0.25*8=2 Sec main0: ldi speed,250 ;250*1mS rcall wait2 dec temp brne main0 ldi speed,150 ; sbi PortD,PTT ;PTT ON cbi PortD,PTTb ;PTT ON ldi gr1,$8f ;D rcall CW_set ldi gr1,$3f ;E rcall CW_set ldi gr1,$ff ;" " rcall CW_set ldi gr1,$77 ;J rcall CW_set ldi gr1,$5f ;A rcall CW_set ldi gr1,$7b ;1 rcall CW_set ldi gr1,$07 ;H rcall CW_set ldi gr1,$6f ;W rcall CW_set ldi gr1,$ef ;O rcall CW_set ldi gr1,$ff ;" " rcall CW_set ldi gr1,$ff ;" " rcall CW_set ldi speed,255 ; main2: ldi gr1,$df ;M rcall CW_set2 ldi gr1,$ef ;O rcall CW_set2 mov temp,mo_SW ;1.2.3.4.5 cpi temp,2 breq m22 brlo m21 cpi temp,4 brlo m23 breq m24 ldi gr1,$03 ;5 rjmp m2e m21: ldi gr1,$3f ;e rjmp m2e m22: ldi gr1,$1f ;i rjmp m2e m23: ldi gr1,$0f ;s rjmp m2e m24: ldi gr1,$07 ;h m2e: rcall CW_set2 ldi gr1,$ff ;" " rcall CW_set2 cp cunt_m,mo_SW ;time=mo_SW ? breq main2 ;no to cbi PortD,LED ;LED OFF Limit cbi PortD,PTT ;PTT Off sbi PortD,PTTb ;PTT Off rjmp main ;------------------------------------------------- ;gr1=DATA use temp sub Wait ;output PortD6 Set & Clear/LED or TX control CW_set: cpi gr1,$ff ;" "? breq C_5 c_2: sec ;carry Flag rol gr1 ;Rotate left in back_f,SREG sbi PortD,LED ;LED ON(H) rcall wait out SREG,back_f brcc c_3 ;s to rcall wait rcall wait c_3: cbi PortD,LED ;LED OFF rcall wait2 mov temp,gr1 ;end ? sec ;carry Flag rol temp ;Rotate left cpi temp,$ff brne c_2 C_5: rcall wait2 rcall wait2 ret CW_set2: cp cunt_m,mo_SW ;time=mo_SW ? breq cw_set ;no to ret ;------------------------------------------------- ;Interrupt minute counter (0.25S*240) T_60m: in back_i,SREG ;0.25S*240=60S(1 minute) inc cunt_i cpi cunt_i,240 ; brne t_6e ; clr cunt_i inc cunt_m ;1.2..ac_SW cp ac_SW,cunt_m ; brcs t_61 ;if(activ SW < cunt_m) to rjmp t_6e t_61: clr cunt_m inc cunt_m ; t_6e: out TCNT0,tc_set ;next out SREG,back_i reti ;------------------------------------------------- Wait: ;1MHz=1uS mov gr2,speed wa1: sbi PortD,sound ldi wcunt,83 ; wa2: dec wcunt ;3*83*1u=249uS brne wa2 cbi PortD,sound ldi wcunt,83 wa3: dec wcunt ;3*83*1u=249uS brne wa3 dec gr2 brne wa1 mov gr2,speed wa11: sbi PortD,sound ldi wcunt,83 ; wa12: dec wcunt ;3*83*1u=249uS brne wa12 cbi PortD,sound ldi wcunt,83 wa13: dec wcunt ;3*83*1u=249uS brne wa13 dec gr2 brne wa11 ret ;------------------------------------------------- Wait2: ;1MHz=1uS mov gr2,speed ;speed*1mS wa21: ldi wcunt,250 ;1=4uS wa22: nop dec wcunt ;4*250*1u=1000uS brne wa22 dec gr2 brne wa21 ret |
もどる [MAIN MENU]