コール入力が出来るIDGです
以前、AT90S2313を使って試していた物をBODの付いているATTiny26に移植した物です。 これだと電源を切っても勝手にコールが書き換わる事はありません、AT90S2313でもリセットICを付ければ同じ動作をします(リセットICも安くないので付属の物を使いました)。 本来はメインプログラムにコールを入れて書込むのが最も安定して良いのですが、書込み器を持ってない方の為に作りました(動作は同じです)。 「ARDF 用 IDジェネレータの作り方」は[別のMENU]をご覧下さい、CALLの入れ方など関連の説明もありますので参考にして下さい。 組立て例はMenu内の「IDジェネレータ (2)」です。 2004/JUL/15 | |
プログラム | プログラム(続き) |
---|---|
;************************************* ;Title : ADRF Signal_generater ;Date :2004/6/4 BY JA1HWO ;Last :Tiny26 7/8 Timer ;************************************* ; ADRF用の信号発生機で1分間にDE+CALL+MOE(MOI.S.H.5)+MOE+... ; 機器数の設定で5台分設定可、信号の番号の設定(MOE)の設定が出来。 ;例全部で3台でこのセットは2番目(MOI)等です。 ; 出力はCW信号の他、1KHz近くの音で変調した物と1分間のPTT信号を設定した。 ; CALL入力モードはSWを押しながら電源を入れる、直ぐBKと始まり数字、 ;文字が出るので必要な物の所でボタンを押していると"OK"が出て次の文字入力になる。 ; "BK"で押すと入力は終了、ミスしたら初めからやり直し!通り過ぎたら ;1回転するのを待つ。 .include "C:\AVRTOOLS\APPNOTES\Tn26def.inc" .eseg .org 0 TEST_DATA: .db $FF,$31,$FF,0 ; ? :$FF=Space 0=END .cseg .org 0 ;**** set **** ; PortA1 A-SW MO*SW Timer .equ sound =0 ;PortB0 .equ key =1 ;PortB1 CW Mode .equ PTT =2 ;PortB2 .equ PTTb =3 ;PortB3 not PTT for Handy transceiver ;PortB4.5 Xtal .equ in_sw =6 ;PortB6 input .def m_data =r0 .def back_f =r1 ;SREG .def back_i =r2 ;SREG .def tc_set =r3 ;for Timer .def mo_SW =r4 ;Signal No .def ac_SW =r5 ;Max SG .def kiki =r6 ;input PortA .def cunt_m =r7 ;1-7min counter .def call_no =r8 ;ward No .def Timer_c =r9 ;Minute .def temp =r16 .def gr0 =r17 ; .def gr1 =r18 ; .def gr2 =r19 ; .def ic_1 =r20 ;60sec counter .def ic_2 =r21 ;60sec counter 2 .def speed =r22 ;for KEY .def wcunt =r23 ;timer ;------------------------------------ rjmp star ;Reset reti ;External Interrupt0 reti ;Pin change reti ;Output Compare1A reti ;Output Compare1B reti ;Overflow1 rjmp T_60m ;Overflow0 reti ;USI_STARTaddr reti ;USI_OVFaddr reti ;EEPROM Ready reti ;Analog Comparator reti ;A/D変換完了 star: ldi temp,LOW(RAMEND) out SPL,temp ;RAM=128 ldi temp,0 ;all=input out DDRA,temp ldi temp,$ff out PortA,temp ;pull up ldi temp,0b00111111 ; out DDRB,temp ;PortB output/B6 input sbi PortB,in_sw ;pullup sbi ACSR,ACD ;Analog Comparator off sbi PortB,PTTb ;PTT Off in kiki,PinA ;PortA check com kiki sbic PinB,in_sw ;check SW rjmp m_n ;nomal to main ldi speed,120 ;cw span clr call_no ;-------------------------------------------- ;CALL input Mode call_in: ldi ZL,low(m_code*2) ldi ZH,high(m_code*2) call_1: lpm mov gr1,m_data ; and m_data,m_data breq call_in ;end to again rcall CW_set ;gr1=DATA to CW ldi gr1,$ff rcall CW_set ;"_" sbic PinB,in_sw ;check key ? rjmp call_2 ;nomal to next ldi speed,80 ldi gr1,$EF ;OK mark "O" rcall CW_set ; ldi gr1,$AF ;OK mark "K" rcall CW_set ; ldi speed,120 ldi gr1,$ff rcall CW_set ;"_" ;1文字 Save m_data to EEPROM mov gr0,call_no ;address mov gr1,m_data ;DATA cpi gr1,$8A ;"BK" brne call_11 clr gr1 call_11: rcall eepw ;EEPROM write inc call_no ldi temp,$0f ;Max 16 cp temp,call_no brcs m_n mov gr1,m_data cpi gr1,$8A ;"BK" breq m_n ;end! to main ldi gr1,$ff rcall CW_set ;"_" ldi gr1,$ff rcall CW_set ;"_" ldi gr1,$ff rcall CW_set ;"_" rjmp call_in ;next ward call_2: adiw ZL,1 rjmp call_1 ;Loop ; Nomal Mode m_n: ldi temp,1 mov cunt_m,temp clr ic_1 ;i_minute counter clr ic_2 ldi temp,5 ;in Clock=1/1024 out TCCR0,temp ;T/C0 ldi temp,-160 ;1024/160/1311=60S mov tc_set,temp out TCNT0,tc_set ; ldi temp,2 out TIMSK,temp ;Timse Interrupts ON ldi temp,0b00100000 ;スリープ許可/アイドル動作 out MCUCR,temp sei ;Interrupts on ;Timer ------------------------------------ mov temp,kiki ;Timer check andi temp,3 breq time ;0 to mov gr1,temp lsl temp ;*2 lsl temp ; *2 add temp,gr1 ;+1=5 lsl temp ;*2=10or20or30 TEST mov Timer_c,temp ;set Timer counter tim1: SLEEP and Timer_c,Timer_c ;timer end ? brne tim1 clr cunt_m ;begin time: mov temp,kiki ;MO check? swap temp ;Generater No(1-7) lsr temp andi temp,$07 brne s1 ;0=beacon inc temp ; clr kiki ;a_SW=0 s1: mov mo_SW,temp ;PortA 567 mov temp,kiki ;a_SW ? andi temp,0b00011100 lsr temp lsr temp brne s_2 ldi temp,1 s_2: cpi temp,5 brcs s_3 ldi temp,5 s_3: mov ac_SW,temp ;PortA 234 ;-------------------------------------------- | main: SLEEP and cunt_m,cunt_m ; brne main0 inc cunt_m main0: cp cunt_m,mo_SW ;time=mo_SW ? brne main ;no to ldi temp,8 ;Wait0.25*8=2 Sec main1: ldi speed,250 ;250*1mS rcall wait2 dec temp brne main1 ldi speed,80 ; sbi PortB,PTT ;PTT ON cbi PortB,PTTb ;PTT ON ldi gr1,$8f ;DE_ rcall CW_set ldi gr1,$3f rcall CW_set ldi gr1,$ff rcall CW_set clr gr0 ;CALL read and Send main01: rcall eepr ;gr0=address to gr1=data and gr1,gr1 breq main02 rcall CW_set ;gr1=DATA to CW inc gr0 rjmp main01 main02: ldi gr1,$ff ;" " rcall CW_set sbrs kiki,1 ;if bit1=H(SW ON) main2: ldi gr1,$df ;M rcall CW_set2 ldi gr1,$ef ;O rcall CW_set2 and kiki,kiki ;? beacon breq m2e+1 ;yes to 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 ldi gr1,$ff ;" " rcall CW_set2 cp cunt_m,mo_SW ;time=mo_SW ? breq main2 ;no to cbi PortB,key ;OFF Limit cbi PortB,PTT ;PTT Off sbi PortB,PTTb ;PTT Off rjmp main ;------------------------------------------------- ;gr1=DATA use temp sub Wait ;output PortB6 Set & Clear/key 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 PortB,key ;ON(H) rcall wait out SREG,back_f brcc c_3 ;s to rcall wait rcall wait c_3: cbi PortB,key ;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 T_60m: in back_i,SREG ;*1311=60S(1 minute) inc ic_1 brne t_601 inc ic_2 t_601: cpi ic_1,low(1311) ;1311 brne t_6e cpi ic_2,high(1311) brne t_6e ; clr ic_1 clr ic_2 inc cunt_m ;1.2..ac_SW dec Timer_c cp ac_SW,cunt_m ; brcs t_61 ;if(a SW < cunt_m) to rjmp t_6e t_61: clr cunt_m t_6e: out TCNT0,tc_set ;next out SREG,back_i reti ;------------------------------------------------- ;use :gr0=[address] to gr1=[data] eepr: out EEAR,gr0 sbi EECR,EERE sbi EECR,EERE in gr1,EEDR ret eepw: out EEAR,gr0 ; out EEDR,gr1 sbi EECR,EEMWE sbi EECR,EEWE eepwe: sbic EECR,EEWE rjmp eepwe ret ;------------------------------------------------- Wait: ;3.58MHz=0.2793(1mS) mov gr2,speed wa1: sbi PortB,sound ldi wcunt,224 ;4*224*0.279u=250uS wa2: nop dec wcunt brne wa2 cbi PortB,sound ldi wcunt,224 wa3: nop dec wcunt brne wa3 dec gr2 brne wa1 mov gr2,speed wa11: sbi PortB,sound ldi wcunt,224 ; wa12: nop dec wcunt brne wa12 cbi PortB,sound ldi wcunt,224 wa13: nop dec wcunt brne wa13 dec gr2 brne wa11 ret ;------------------------------------------------- Wait2: ;3.579904MHz=0.279337uS mov gr2,speed ;speed*1mS wa21: ldi wcunt,224 ; wa22: nop ; nop nop nop nop nop nop nop nop nop nop nop nop dec wcunt ;16*224*0.279337=1000uS(1mS) brne wa22 dec gr2 brne wa21 ret ;------------------------------------------------- m_code: ;BK(end_mark)A to Z and 1 to 0 + / (all=38+0) .db $8A,$5F,$87,$A7,$8F,$3F,$27,$CF ;BK A-G .db $07,$1F,$77,$AF,$47,$DF,$9F,$EF ;H-O .db $67,$D7,$4F,$0F,$BF,$2F,$17,$6F ;P-W .db $97,$B7,$C7,$7B,$3B,$1B,$0B,$03 ;X-Z 1-5 .db $83,$C3,$E3,$F3,$FB,$93,0 ;6-0 / ;------------------------------------------------- |
もどる [MAIN MENU]