CubeLED

>よく皆さんが作っていらっしゃるCubeLEDを制御してみました。
3*3*3=27個です。

制作は、例のごとく後輩です//

一枚のC型基盤にLEDも制御系も全部載ってます。

ピカピカさせました。

使用したLEDは
http://akizukidenshi.com/catalog/g/gI-01786/
です。
綺麗にみえたので。

回路図って前の電光掲示板の時みたいな感じかなぁと思いつつ、でも3次元だからAND回路とか組み合わせるのかなーって考えてたら、
意外と普通で残念です。

制御線は12本です。
段の選択が3本、場所の選択が9本です。
つまり、XYはダイナミック点灯していなくて、XYとZでダイナミック点灯しているわけです。

制御はATMega168Pを1MHzで動作させてます。

回路図も、LEDをつなぐだけ。

※この回路は、僕が床に落として踏んでしまったため、現在ひし餅のようになっております。

プログラムは

#include <avr/io.h>
#include <util/delay.h>

/*

PD4 PD3 PD2

PB5 PB4 PB3

PB2 PB1 PB0

*/

#define F_1 PORTC|=0b00000001;PORTC&=0b11111001//PC0
#define F_2 PORTC|=0b00000010;PORTC&=0b11111010//PC1
#define F_3 PORTC|=0b00000100;PORTC&=0b11111100//PC2
#define DARK PORTC&=0b11111000

#define LIGHTTIME 1

void output(uint16_t data);//9ビットのデータを入れる(上位7ビットは捨てる,左上(PD2)から)

uint16_t data[3];

void init_io();
void floor_select(uint8_t floor);
void delay_ms(uint16_t ms);
void delay_us(uint16_t us);
void draw();
void keep(uint16_t keeptime);//たぶん10000で1秒ぐらい

int main(){
init_io();

while(1){
data[0]=0b101010101;
data[1]=0b010101010;
data[2]=0b101010101;
keep(2500);

data[0]=0b010101010;
data[1]=0b101010101;
data[2]=0b010101010;
keep(2500);
}

}

void keep(uint16_t keeptime){
for(uint16_t k=0;k<=keeptime;k++){
draw();
}
}

void draw(){
output(data[0]);
F_1;
delay_us(LIGHTTIME);
DARK;

output(data[1]);
F_2;
delay_us(LIGHTTIME);
DARK;

output(data[2]);
F_3;
delay_us(LIGHTTIME);
DARK;
}

void output(uint16_t data){
PORTD=((data&0b111000000)>>4)&0b00011100;
PORTB=(data&0b000111111)&0b000111111;
}

void init_io(){
DDRC=0xff;//フロア選択用
DDRB=0xff;
DDRD=0xff;
}
void delay_ms(uint16_t ms){
while(ms–){
_delay_ms(1);
}
}

void delay_us(uint16_t us){
while(us–){
_delay_us(1);
}
}

こんな感じで動きました!

本当は動画もアップしたいのですがあまり綺麗でないのと、光り方のバリエーションをまだあんまり作ってないので動画に出来なかったんです……

それに写真見てもあまり綺麗じゃないですが、本物はめっちゃ綺麗です!

皆さんも作ってみてはどうでしょう?

2 thoughts on “CubeLED

コメントを残す

メールアドレスが公開されることはありません。

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>