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

MyList

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

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」カテゴリの記事

コメント

コメントを書く

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

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

トラックバック


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

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