「8x8ドットマトリクスディスプレイの接続方法」のディスプレイですが、その仕組み上、ダイナミックに点灯させる必要があります。本来ならデコーダとか使うのでしょうけど、手元にICがありません。仕方なくポートで制御します。C/A-3880EGは、24ピンもありますので、ATtiny2313のポート数では足りません。2色表示は諦めます。
それぞれの端折ったピン配&接続図です。
ATtiny2313
+-----------+
-|1 20|- VCC
23 <--- PD0 -|2 19|- PB7 ---> 22
20 <--- PD1 -|3 18|- PB6 ---> 19
17 <--- PA1 -|4 17|- PB5 ---> 16
14 <--- PA0 -|5 16|- PB4 ---> 13
11 <--- PD2 -|6 15|- PB3 ---> 3
8 <--- PD3 -|7 14|- PB2 ---> 6
5 <--- PD4 -|8 13|- PB1 ---> 9
2 <--- PD5 -|9 12|- PB0 ---> 12
GND -|10 11|-
+-----------+
A-3880EG
+---------------------------+
COL5-b -|1 24|- COL1-b
COL5-a -|2 23|- COL1-a
ROW5 -|3 22|- ROW1
COL6-b -|4 21|- COL2-b
COL6-a -|5 20|- COL2-a
ROW6 -|6 19|- ROW2
COL7-b -|7 18|- COL3-b
COL7-a -|8 17|- COL3-a
ROW7 -|9 16|- ROW3
COL8-b -|10 15|- COL4-b
COL8-a -|11 14|- COL4-a
ROW8 -|12 13|- ROW4
+---------------------------+
繋げるとこのようになります。
そしてプログラム。
1 #include <avr/io.h>
2 #include <util/delay.h>
3
4 void anode(int row)
5 {
6 int shift=8-row;
7 PORTB |= (1<<shift);
8 }
9
10 void cathnode(int col)
11 {
12 switch(col){
13 case 1: PORTD &= ~0b00000001;break;
14 case 2: PORTD &= ~0b00000010;break;
15 case 3: PORTA &= ~0b00000010;break;
16 case 4: PORTA &= ~0b00000001;break;
17 case 5: PORTD &= ~0b00100000;break;
18 case 6: PORTD &= ~0b00010000;break;
19 case 7: PORTD &= ~0b00001000;break;
20 default: PORTD &= ~0b00000100;break;
21 }
22 }
23
24 void clear()
25 {
26 // anode_off
27 PORTB = 0b00000000;
28
29 // cathode_off
30 PORTD |= 0b00111111;
31 PORTA |= 0b00000011;
32 }
33
34 void set(int row,int col)
35 {
36 clear();
37
38 anode(row);
39 cathnode(col);
40 }
41
42 int main()
43 {
44 int row,col;
45 DDRB = 0b11111111; //ATtiny2313 pin.12-19 PB0-7 OUT
46 DDRD = 0b00111111; //ATtiny2313 pin.2,3,6-9 PD0-5 OUT
47 DDRA = 0b00111111; //ATtiny2313 pin.4,5 PA0-1 OUT
48
49 while(1)
50 for(row=1;row<=8;row++)
51 for(col=1;col<=8;col++){
52 set(row,col);
53 _delay_ms(20);
54 }
55
56 return 0;
57 }
非表示状態は、カソードをポートでHにして、アノードをLにしています。
表示するときに、カソードをポートでLにして、アノードをHにしています。
これが正しい制御方法かは知りませんが、とりあえず暗闇で怪しく光るようになりました。

ソースはいつものようにgithubに登録しています。
takk@deb83:~$ git clone https://github.com/takkete/bread.git Cloning into 'bread'... remote: Counting objects: 69, done. remote: Compressing objects: 100% (44/44), done. remote: Total 69 (delta 12), reused 0 (delta 0), pack-reused 17 Unpacking objects: 100% (69/69), done. Checking connectivity... done. takk@deb83:~$ cd bread/mcu/avr/attiny2313/device/a-3880eg/ takk@deb83:~/bread/mcu/avr/attiny2313/device/a-3880eg$ ls hello.c makefile takk@deb83:~/bread/mcu/avr/attiny2313/device/a-3880eg$

コメント