フォト
無料ブログはココログ

« 楽しい酒 | トップページ | 誰もやめない会社 »

2013年2月18日 (月)

9つのI/Oポートで市販の8×8マトリクスLEDを駆動

Charlieplexing (2)で 市販の8x8のマトリクスLEDを9つのI/Oポートで駆動する方法について考えたので作ってみた。

 回路図は↓こんな感じ
8x8led1

 AVR AT90S2313を使ったが特に意味は無い。SCRは秋月で売っているMCR22-8を使った。

8x8led_avr

 Charlieplexing (2)に書いた方法では全てのLEDが点灯してしまうので↓の方法に変更して制御できた。

 ALL_OFF、カソードOFFにするときには時間待ちが必要で50usはCut&Tryで決めた。

  1. P(0-7)←’ZZZZZZZZ’, P8←Z  ; ALL_OFF
  2. P8←L                                  ; カソードON
  3. P(X)←H、P(X以外)←L            ;カラム(x)ON
  4. P8←Z                                  ;カソードOFF
  5. P(0-7)←表示データ(ActiveL) ;データ出力

 ↓任意の列の制御ソースコード

#define	SCR_C	6
#define	SCR_C_ON()	do {	PORTD &= ~_BV(SCR_C);	\
				DDRD  |= _BV(SCR_C);	\
			} while(0)			//PD6<-0, output
#define	SCR_C_OFF()	do {	DDRD  &= ~_BV(SCR_C);	\
				PORTD &= ~_BV(SCR_C);	\
			} while(0) 		//PD6 input, pullup off
#define	ALL_OFF()	do {	SCR_C_OFF();		\
				PORTB = 0x00;		\
				DDRB = 0x00;		\
			} while(0)
#define	COL_ON(c)	do {	PORTB = _BV(c);		\
				DDRB  = 0xFF;		\
			} while(0)

void disp_col(uint8_t col, uint8_t data) {
	ALL_OFF();
	_delay_us(50);
	SCR_C_ON();	/* cathord on */
	COL_ON(col);	/* colmun on */
	SCR_C_OFF();
	_delay_us(50);
	PORTB = ~data;	/* out column data (acctive Low) */
}

↓動いているところ
8x8led_v0000 ←リンク先にAVI


よく考えたら、8つのI/Oポートで駆動可能だった。
( 8つのI/Oポートで市販の8×8マトリクスLEDを駆動)

« 楽しい酒 | トップページ | 誰もやめない会社 »

AVR」カテゴリの記事

日記・コラム・つぶやき」カテゴリの記事

コメント

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/577514/56781554

この記事へのトラックバック一覧です: 9つのI/Oポートで市販の8×8マトリクスLEDを駆動:

« 楽しい酒 | トップページ | 誰もやめない会社 »