AVR 104 :ARDF 用 IDジェネレータ V


コントローラ(8Pin type)V

 前回のコントローラと同じです、IC AT90S2323は購入してからほとんど使って無かったのと、出力が単なるCW出力だけなので「今回使ってみようか!」となった訳です。
 3.52MHzなのでそのまま移植しました、少しよけいな所を削除してますが8ピンのこのICは小形に作れます、ただコスト的には20ピンの方が安いのですが使って見ました。

回路図 プログラム!

 コールサインの書換え、MO*の設定・A-SWの変更をすればARDF機器をCWでコントロール出来ます。
 FM機でF2を出すにはPTT出力を出す必要がありますがこの部分は削除したので必要な方は追加して下さい。入力の切替えは予めプログラムするので特に必要な物では無い。

 動作はこのままでMOEが出ます、PB0をLOWにすればMOIが出る様にしました、またA-SWは2に初期設定にしたので2台作れば1台づつ信号が交代で出ます。

動 作

 回路図の様に全体は簡単でSW入力が無いので見た感じ簡単です、でも動作はほとんど同じです。
 外部のコントロールは念の為トランジスタでコントロールした方が安心です、一瞬でも12V系の電源に接続するとICは破壊されます。

 電源は乾電池の3V動作としました、セラロック3.58を接続して3.52MHzを発振させ1.9Vでも動作しましたが1.8Vでは発振が停止しました。

 消費電流は5V動作で6.6mA・3V動作で2.6mA・2V動作で1.2mAでした。消費電力に付いては32Kの水晶だと電源スイッチも不要になるほど・・・ですが実験はしていません(次の機会にしたいと思います)。

 2004/JUN/22 

プログラムプログラム(続き)
;*************************************
;Title	: ADRF Signal_generater
;Date	:3.52MHz	BY JA1HWO
;Last	:6/20	AT90S2323
;*************************************
;ADRF用の信号発生機で1分間にDE+CALL+MOE(MOI.S.H.5)+MOE+...
;機器数の設定で5台分設定と信号の番号の設定(MOE)の設定が出来る。
;スイッチONでPortB0をLでMOI、何もしなければMOEになる。
.include "C:\AVRTOOLS\APPNOTES\2323def.inc"

.cseg
.org	0
;**** set ****
.equ	in_sw	=0		;PortB0 DATA input
.equ	sound	=1		;PortB1	
.equ	LED	=2		;PortB2 CW Mode

.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	a_SW	=r5		;Max SG
.def	cunt_m	=r7		;1-7min counter
.def	temp	=r16
.def	gr0	=r17		;
.def	gr1	=r18		;
.def	gr2	=r19		;Wait
.def	ic_1	=r20		;60sec counter
.def	ic_2	=r21		;60sec counter
.def	speed	=r22		;for A/D timer
.def	wcunt	=r23		;timer
;------------------------------------
	rjmp	star		;Reset
	reti			;Ex0
	rjmp	T_60m		;timer overflow

star:	ldi	temp,LOW(RAMEND)
	out	SPL,temp	;
	ldi	temp,0b11111110	;1=output 0=input
	out	DDRB,temp
	clr	ic_1		;counter
	clr	ic_2
	ldi	temp,1
	out	PortB,temp	;pull up
	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	;
	ldi	temp,2
	sbic	PinB,0		;
	ldi	temp,1
	mov	mo_SW,temp	;MO=1 or 2
	ldi	temp,2
	mov	a_SW,temp	;A=2
	ldi	temp,2
	out	TIMSK,temp	;Timse Interrupts ON
	sei			;Interrupts on
;--------------------------------------------
;DATA	8F 3F FF 77 5F 7B 07 6F EF FF	[DE JA1HWO ]
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,100	;CW SPEED 1=1mS
	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
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	PortB,LED	;LED OFF Limit
	rjmp	main
;gr1=DATA	use temp	sub Wait
;output PortB 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	PortB,LED	;LED ON(H)
	rcall	wait
	out	SREG,back_f
	brcc	c_3		;s to
	rcall	wait
	rcall	wait
c_3:	cbi	PortB,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
;use	back_i.ic_1.ic_2.cunt_m
T_60m:
	in	back_i,SREG	;*825=60S(1 minute)
	inc	ic_1
	brne	t_601
	inc	ic_2
t_601:
	cpi	ic_1,low(825)	;825=$339
	brne	t_6e
	cpi	ic_2,high(825)
	brne	t_6e		;
	clr	ic_1
	clr	ic_2
	inc	cunt_m		;1.2..a_SW
	cp	a_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:		;3.52MHz=0.284uS 1mS
	mov	gr2,speed
wa1:	sbi	PortB,sound
	ldi	wcunt,220	;
wa2:	nop			;4*220*0.284u=250uS
	dec	wcunt
	brne	wa2
	cbi	PortB,sound
	ldi	wcunt,220
wa3:	nop
	dec	wcunt		;4*220*0.284u=250uS
	brne	wa3
	dec	gr2
	brne	wa1
	mov	gr2,speed
wa11:	sbi	PortB,sound
	ldi	wcunt,220	;
wa12:	nop
	dec	wcunt		;4*220*0.284u=250uS
	brne	wa12
	cbi	PortB,sound
	ldi	wcunt,220
wa13:	nop
	dec	wcunt		;4*220*0.284u=250uS
	brne	wa13
	dec	gr2
	brne	wa11
	ret
;-------------------------------------------------
Wait2:		;3.52MHz=0.2841uS
	mov	gr2,speed	;speed*1mS
wa21:	ldi	wcunt,251	;
wa22:	nop			;
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop
	nop			;14*251*0.2841u=1000uS(1mS)
	dec	wcunt
	brne	wa22
	dec	gr2
	brne	wa21
	ret
;-------------------------------------------------

[もどる]もどる  [MAIN MENU

inserted by FC2 system