ラッチを入れてみる

  • 投稿日:
  • 更新日:2008/12/21
  • by
  • カテゴリ: ,

I/O回路の要求には高速応答性が必要で、到底AVRの割り込み反応時間では間に合わないことがわかったので、バッファを入れる実験をしました。

例により、簡略化した回路です。 手持ちのラッチがLS373しかなかったので、電圧が混在しています。

20081221-Test.PNG

プログラムのほうは、なんかoutしたら、そのタイミングでデータを出力し、inで読めるようにしてみました。単純にデータをインクリメントしているだけです。

.org	0
	rjmp	RESET
	rjmp	INT_IN
	rjmp	INT_OUT
INT_IN:
	inc		Data
	; buffer input close
	cbi		PORTB, 1
	reti
INT_OUT:
	; output data
	mov		Temp, Data
	ori		Temp, 0x40
	out		PORTC, Temp
	mov		Temp, Data
	ori		Temp, 0x3f
	out		PORTD, Temp
	; load data to the buffer
	sbi		PORTB, 1
	reti
RESET:
	ldi		Temp, low(RAMEND)
	out		SPL, Temp
	ldi		Temp, high(RAMEND)
	out		SPH, Temp
	ldi		Data, 0x00
	ldi		Temp, 0x12
	out		DDRB, Temp
	ldi		Temp, 0x3f
	out		DDRC, Temp
	ldi		Temp, 0xc0
	out		DDRD, Temp
	ldi		Temp, 0x0a
	out		MCUCR, Temp
	ldi		Temp, 0xc0
	out		GICR, Temp
	sei
LOOP:
	rjmp	LOOP

とりあえずの「データを読ませる」という結果としては良好です。 AVRからのデータらしきものがPC側から読めています。

ただ、なんかD0がふらふらする変な挙動です。 outしないでinし続けると0が入力され続けるはずなのに、ときどき1が混じります。 out/inを交互に繰り返すと、大部分が2回ずつ同じ値を読んで、次は2インクリメントします。

データラインがショートしたりているわけではなさそうなのですが、いまのところ原因はわかりません。接触が悪い可能性はありますが、直しても同じなのが謎。そこら辺から剥ぎ取ったラッチが変なのかも。

とりあえずラッチ意味があったということで勘弁しといてあげよう(弱気)。


こちらもよく読まれています