- マトリクスLEDのアノードを74HC138Nの出力に接続(行)
- マトリクスLEDのカソードを74HC595の出力に接続(列)
- 74HC595を連結(1個目のQ7Sを2個目のDSに接続)
- 74HC138N、74HC595ともに入力はジャンパーピンでHL切り替え
- 74HC595のクロックはスライドスイッチで行う
- いわば手動ダイナミック制御
- 簡単な回路なのに手持ちのジャンパーピン全部使用
- とくにマトリクスLEDの下部に配線するのに腐心した
- 次はAtmega8で制御予定
動作風景
/* | |
atmega8 16pu | |
ISP | |
PC6 RESET | |
PB5 SCK | |
PB4 MISO | |
PB3 MOSI | |
ADC PC0 ADC0 | |
*/ | |
#define F_CPU 1000000UL // Clock Speed | |
#include <avr/io.h> | |
#include <avr/interrupt.h> | |
#include <util/delay.h> | |
/* DDRC |= (1 << PC0); */ | |
#define DSET(p,n) (DDR##p|=(1<<P##p##n)) | |
/* PORTC |= (1 << PC0); */ | |
#define PSET(p,n,d) \ | |
if ((d)) { \ | |
(PORT##p|=(1<<P##p##n));\ | |
} else { \ | |
(PORT##p&=~(1<<P##p##n));\ | |
} | |
volatile unsigned char v; | |
int | |
main(void) | |
{ | |
unsigned char j; | |
// port c output setting | |
DSET(B,0); | |
DSET(B,1); | |
DSET(B,6); | |
DSET(B,7); | |
DSET(D,4); | |
DSET(D,5); | |
DSET(D,6); | |
DSET(D,7); | |
ADMUX = (1<<REFS1) | (1<<REFS0) | (1<<ADLAR); | |
// ck/8 | |
ADCSRA = (1<<ADEN) | (0<<ADSC) | (1<<ADFR) | (1<<ADIE) | | |
(1<<ADPS2)| (1<<ADPS1)| (1<<ADPS0); | |
ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADFR) | (1<<ADIE) | | |
(0<<ADPS2)| (1<<ADPS1)| (1<<ADPS0); | |
sei(); | |
v = 0; | |
while (1) { | |
j = 0; | |
PSET(B,0,(v&(1<<j))>>j);j++; | |
PSET(B,1,(v&(1<<j))>>j);j++; | |
PSET(B,6,(v&(1<<j))>>j);j++; | |
PSET(B,7,(v&(1<<j))>>j);j++; | |
PSET(D,4,(v&(1<<j))>>j);j++; | |
PSET(D,5,(v&(1<<j))>>j);j++; | |
PSET(D,6,(v&(1<<j))>>j);j++; | |
PSET(D,7,(v&(1<<j))>>j);j++; | |
_delay_ms(10); | |
} | |
return 0; | |
} | |
ISR(ADC_vect) | |
{ | |
v = ADCH; | |
} |
![]() |
1日グラフ |
![]() |
1週間グラフ |
![]() |
http://www.jma.go.jpより |
/* | |
atmega8 16pu | |
matrix led(1088bgy) controller | |
ISP | |
PC6 RESET | |
PB5 SCK | |
PB4 MISO | |
PB3 MOSI | |
USART | |
PD0 RXD | |
PD1 TXD | |
LED | |
ROW PC0,PC1,PC2,PC3,PC4,PC5,PB0,PB1 | |
COL PB6,PB7,PD2,PD3,PD4,PD5,PD6,PD7 | |
*/ | |
#define F_CPU 1000000UL // Clock Speed | |
#define BAUD 9600 | |
#define MYUBRR (((F_CPU / (BAUD * 16UL))) - 1) | |
#include <avr/io.h> | |
#include <avr/interrupt.h> | |
#include <util/delay.h> | |
#include <stdio.h> | |
#include <stdlib.h> | |
/* DDRC |= (1 << PC0); */ | |
#define DSET(p,n) (DDR##p|=(1<<P##p##n)) | |
/* PORTC |= (1 << PC0); */ | |
#define PSET(p,n,d) \ | |
if ((d)) { \ | |
(PORT##p|=(1<<P##p##n));\ | |
} else { \ | |
(PORT##p&=~(1<<P##p##n));\ | |
} | |
void | |
init_port() | |
{ | |
// port c output setting | |
DSET(C,0); | |
DSET(C,1); | |
DSET(C,2); | |
DSET(C,3); | |
DSET(C,4); | |
DSET(C,5); | |
// port b output setting | |
DSET(B,0); | |
DSET(B,1); | |
DSET(B,6); | |
DSET(B,7); | |
// port d output setting | |
DSET(D,2); | |
DSET(D,3); | |
DSET(D,4); | |
DSET(D,5); | |
DSET(D,6); | |
DSET(D,7); | |
} | |
void | |
row(int i,int d) | |
{ | |
switch(i) { | |
case 0:PSET(C,0,d);break; | |
case 1:PSET(C,1,d);break; | |
case 2:PSET(C,2,d);break; | |
case 3:PSET(C,3,d);break; | |
case 4:PSET(C,4,d);break; | |
case 5:PSET(C,5,d);break; | |
case 6:PSET(B,0,d);break; | |
case 7:PSET(B,1,d);break; | |
} | |
} | |
void | |
col(int i,int d) | |
{ | |
switch(i) { | |
case 0:PSET(B,6,d);break; | |
case 1:PSET(B,7,d);break; | |
case 2:PSET(D,2,d);break; | |
case 3:PSET(D,3,d);break; | |
case 4:PSET(D,4,d);break; | |
case 5:PSET(D,5,d);break; | |
case 6:PSET(D,6,d);break; | |
case 7:PSET(D,7,d);break; | |
} | |
} | |
void | |
allcut() | |
{ | |
// col | |
PSET(B,6,0); | |
PSET(B,7,0); | |
PSET(D,2,0); | |
PSET(D,3,0); | |
PSET(D,4,0); | |
PSET(D,5,0); | |
PSET(D,6,0); | |
PSET(D,7,0); | |
// row | |
PSET(C,0,1); | |
PSET(C,1,1); | |
PSET(C,2,1); | |
PSET(C,3,1); | |
PSET(C,4,1); | |
PSET(C,5,1); | |
PSET(B,0,1); | |
PSET(B,1,1); | |
} | |
#define DELAY 500 | |
#define PERIOD 60000000 /* 60sec */ | |
#define INTERVAL 500000 /* 500ms */ | |
void | |
life(void) | |
{ | |
int i,j,k,a,b,live; | |
unsigned long t1,t2; | |
unsigned char m[2][8]; | |
allcut(); | |
t1 = t2 = k = a = 0; | |
for(i=0;i<8;i++) { | |
m[0][i] = 0x0; | |
m[1][i] = 0x0; | |
for(j=0;j<8;j++) { | |
if (rand()%2==0) { | |
m[0][i]|=(1<<j); | |
m[1][i]|=(1<<j); | |
} | |
} | |
} | |
while (t1 < PERIOD) { | |
if (t2 > INTERVAL) { | |
t2 = 0; | |
k++; | |
a = k % 2; | |
b = (k+1) % 2; | |
for(i=0;i<8;i++) { | |
for(j=0;j<8;j++) { | |
live = 0; | |
/*up left*/ | |
if ((m[b][(i+7)%8]&1<<(j+7)%8)) { | |
live++; | |
} | |
/*up*/ | |
if ((m[b][(i+7)%8]&1<<j)) { | |
live++; | |
} | |
/*up right*/ | |
if ((m[b][(i+7)%8]&1<<(j+1)%8)) { | |
live++; | |
} | |
/*left*/ | |
if ((m[b][i]&1<<(j+7)%8)) { | |
live++; | |
} | |
/*right*/ | |
if ((m[b][i]&1<<(j+1)%8)) { | |
live++; | |
} | |
/*down left*/ | |
if ((m[b][(i+1)%8]&1<<(j+7)%8)) { | |
live++; | |
} | |
/*down*/ | |
if ((m[b][(i+1)%8]&1<<j)) { | |
live++; | |
} | |
/*down right*/ | |
if ((m[b][(i+1)%8]&1<<(j+1)%8)) { | |
live++; | |
} | |
if (m[b][i]&1<<j) { | |
/*die*/ | |
if (live<=1 || live>=4) { | |
m[a][i]&=~(1<<j); | |
} else { | |
m[a][i]|=(1<<j); | |
} | |
} else { | |
/*born*/ | |
if (live==3) { | |
m[a][i]|=(1<<j); | |
} else { | |
m[a][i]&=~(1<<j); | |
} | |
} | |
} | |
} | |
} | |
for(i=0;i<8;i++) { | |
allcut(); | |
for(j=0;j<8;j++) { | |
col(j,(m[a][i]&1<<j)>>j); | |
if (i==j) { | |
row(j,0); | |
} | |
} | |
_delay_us(DELAY); | |
t1 += DELAY; | |
t2 += DELAY; | |
} | |
} | |
} | |
int | |
main(void) | |
{ | |
init_port(); | |
while (1) { | |
life(); | |
} | |
return 0; | |
} |
![]() |
左がUSB-UART変換モジュール、中央にマトリクスLED、右にAtmega8、上部にISPコネクタ |
![]() |
基板ウラ面 |
![]() |
ブレッドボード上UM3481、ブレッドボード下Atmega8とLED駆動トランジスタ等 |
![]() |
プッシュボタン、LEDケーブルとボード |
![]() |
LEDケーブルをボードに貼りつけ |
![]() |
ボードに壁掛け飾りをかぶせる |
/* | |
atmega8 16pu + um3281 | |
xmass ilumination | |
ISP | |
PC6 RESET | |
PB5 SCK | |
PB4 MISO | |
PB3 MOSI | |
INT0 PD2 | |
LED1 PC0 | |
LED2 PC1 | |
LED3 PC2 | |
TS PC3 | |
*/ | |
#define F_CPU 1000000UL // Clock Speed | |
#include <avr/io.h> | |
#include <avr/interrupt.h> | |
#include <util/delay.h> | |
/* DDRC |= (1 << PC0); */ | |
#define DSET(p,n) (DDR##p|=(1<<P##p##n)) | |
/* PORTC |= (1 << PC0); */ | |
#define PSET(p,n,d) \ | |
if ((d)) { \ | |
(PORT##p|=(1<<P##p##n));\ | |
} else { \ | |
(PORT##p&=~(1<<P##p##n));\ | |
} | |
#define DELAY 500 | |
#define INTERVAL 60000 | |
volatile int i = 0; | |
volatile unsigned long e = 0; | |
int | |
main(void) | |
{ | |
int j; | |
/* white led pattern */ | |
unsigned char m0[8] = { | |
0b11111111, | |
0b01010101, | |
0b11111111, | |
0b01010101, | |
0b11111111, | |
0b01010101, | |
0b11111111, | |
0b01010101 | |
}; | |
/* blue led pattern */ | |
unsigned char m1[8] = { | |
0b10101010, | |
0b00110011, | |
0b01100110, | |
0b11001100, | |
0b10101010, | |
0b01100110, | |
0b11001100, | |
0b11110000 | |
}; | |
/* red led pattern */ | |
unsigned char m2[8] = { | |
0b01010101, | |
0b11001100, | |
0b10011001, | |
0b11110000, | |
0b00111100, | |
0b01111000, | |
0b10101010, | |
0b01010101 | |
}; | |
// port c output setting | |
DSET(C,0); | |
DSET(C,1); | |
DSET(C,2); | |
DSET(C,3); | |
// pull up | |
PORTC = 0xFF; | |
PORTD = 0xFF; | |
// set interrupt | |
GICR |= (1<<INT0); | |
sei(); | |
// um3481 SL L | |
PSET(C,3,0); | |
i = 0; | |
while (1) { | |
if (e < INTERVAL) { | |
// drive led by pattern | |
for(j=0;j<8;j++) { | |
PSET(C,0,(m0[i]&1<<j)>>j); | |
PSET(C,1,(m1[i]&1<<j)>>j); | |
PSET(C,2,(m2[i]&1<<j)>>j); | |
_delay_ms(DELAY); | |
e += DELAY; | |
} | |
} else { | |
// led off | |
PSET(C,0,0); | |
PSET(C,1,0); | |
PSET(C,2,0); | |
} | |
} | |
return 0; | |
} | |
ISR(INT0_vect) | |
{ | |
// reset elapsed time | |
e = 0; | |
// switch led pattern | |
i += 1; | |
if (i>=8) { | |
i = 0; | |
} | |
// led off | |
PSET(C,0,0); | |
PSET(C,1,0); | |
PSET(C,2,0); | |
// um3481 SL H => next music | |
PSET(C,3,1); | |
_delay_ms(5); | |
PSET(C,3,0); | |
} |
/* | |
atmega8 16pu | |
matrix led(1088bgy) controller | |
ISP | |
PC6 RESET | |
PB5 SCK | |
PB4 MISO | |
PB3 MOSI | |
USART | |
PD0 RXD | |
PD1 TXD | |
LED | |
ROW PC0,PC1,PC2,PC3,PC4,PC5,PB0,PB1 | |
COL PB6,PB7,PD2,PD3,PD4,PD5,PD6,PD7 | |
*/ | |
#define F_CPU 1000000UL // Clock Speed | |
#define BAUD 9600 | |
#define MYUBRR (((F_CPU / (BAUD * 16UL))) - 1) | |
#include <avr/io.h> | |
#include <avr/interrupt.h> | |
#include <util/delay.h> | |
/* DDRC |= (1 << PC0); */ | |
#define DSET(p,n) (DDR##p|=(1<<P##p##n)) | |
/* PORTC |= (1 << PC0); */ | |
#define PSET(p,n,d) \ | |
if ((d)) { \ | |
(PORT##p|=(1<<P##p##n));\ | |
} else { \ | |
(PORT##p&=~(1<<P##p##n));\ | |
} | |
volatile unsigned char matrix[8] = { | |
0b11111111, | |
0b11111111, | |
0b11111111, | |
0b11111111, | |
0b11111111, | |
0b11111111, | |
0b11111111, | |
0b11111111 | |
}; | |
volatile unsigned char mindex; | |
void | |
USART_Init(unsigned int ubrr) | |
{ | |
/* Set baud rate */ | |
UBRRH = (ubrr>>8); | |
UBRRL = ubrr; | |
/* Enable receiver and transmitter */ | |
UCSRB = (1 << RXEN) | (1 << RXCIE); | |
/* Set frame format: 8 data bits, 1 stop bit */ | |
UCSRC = (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1); | |
/* all interrupt allow */ | |
sei(); | |
} | |
void | |
init_port() | |
{ | |
// port c output setting | |
DSET(C,0); | |
DSET(C,1); | |
DSET(C,2); | |
DSET(C,3); | |
DSET(C,4); | |
DSET(C,5); | |
// port b output setting | |
DSET(B,0); | |
DSET(B,1); | |
DSET(B,6); | |
DSET(B,7); | |
// port d output setting | |
DSET(D,2); | |
DSET(D,3); | |
DSET(D,4); | |
DSET(D,5); | |
DSET(D,6); | |
DSET(D,7); | |
} | |
void | |
row(int i,int d) | |
{ | |
switch(i) { | |
case 0:PSET(C,0,d);break; | |
case 1:PSET(C,1,d);break; | |
case 2:PSET(C,2,d);break; | |
case 3:PSET(C,3,d);break; | |
case 4:PSET(C,4,d);break; | |
case 5:PSET(C,5,d);break; | |
case 6:PSET(B,0,d);break; | |
case 7:PSET(B,1,d);break; | |
} | |
} | |
void | |
col(int i,int d) | |
{ | |
switch(i) { | |
case 0:PSET(B,6,d);break; | |
case 1:PSET(B,7,d);break; | |
case 2:PSET(D,2,d);break; | |
case 3:PSET(D,3,d);break; | |
case 4:PSET(D,4,d);break; | |
case 5:PSET(D,5,d);break; | |
case 6:PSET(D,6,d);break; | |
case 7:PSET(D,7,d);break; | |
} | |
} | |
void | |
allcut() | |
{ | |
// col | |
PSET(B,6,0); | |
PSET(B,7,0); | |
PSET(D,2,0); | |
PSET(D,3,0); | |
PSET(D,4,0); | |
PSET(D,5,0); | |
PSET(D,6,0); | |
PSET(D,7,0); | |
// row | |
PSET(C,0,1); | |
PSET(C,1,1); | |
PSET(C,2,1); | |
PSET(C,3,1); | |
PSET(C,4,1); | |
PSET(C,5,1); | |
PSET(B,0,1); | |
PSET(B,1,1); | |
} | |
#define DELAY 800 | |
int | |
main(void) | |
{ | |
int i,j; | |
init_port(); | |
USART_Init(MYUBRR); | |
mindex = 0; | |
while (1) { | |
for(i=0;i<8;i++) { | |
allcut(); | |
for(j=0;j<8;j++) { | |
col(j,(matrix[i]&1<<j)>>j); | |
if (i==j) { | |
row(j,0); | |
} | |
} | |
_delay_us(DELAY); | |
} | |
} | |
return 0; | |
} | |
ISR(USART_RXC_vect) | |
{ | |
matrix[mindex] = UDR; | |
if (mindex >= 7) { | |
mindex = 0; | |
} else { | |
mindex++; | |
} | |
} |
# encoding:utf-8 | |
require 'serialport' | |
$serial_port = '/dev/ttyUSB1' | |
$serial_baudrate = 9600 | |
$serial_databit = 8 | |
$serial_stopbit = 1 | |
$serial_paritycheck = 0 | |
sp = SerialPort.new($serial_port, $serial_baudrate, $serial_databit, $serial_stopbit, $serial_paritycheck) | |
sp.read_timeout=1000 | |
c = 0x00 | |
256.times do | |
sp.putc c | |
c+=1 | |
sleep 1 | |
end | |
sp.close |
# encoding:utf-8 | |
require 'serialport' | |
$serial_port = '/dev/ttyUSB1' | |
$serial_baudrate = 9600 | |
$serial_databit = 8 | |
$serial_stopbit = 1 | |
$serial_paritycheck = 0 | |
sp = SerialPort.new($serial_port, $serial_baudrate, $serial_databit, $serial_stopbit, $serial_paritycheck) | |
sp.read_timeout=1000 | |
sleep 1 | |
c = 0b01010101 | |
loop { | |
8.times do | |
sp.putc c | |
c = ~c | |
end | |
sleep(0.3) | |
8.times do | |
c = ~c | |
sp.putc c | |
end | |
sleep(0.3) | |
} | |
sp.close |
/* | |
atmega8 16pu | |
matrix led(1088bgy) controller | |
ISP | |
PC6 RESET | |
PB5 SCK | |
PB4 MISO | |
PB3 MOSI | |
USART | |
PD0 RXD | |
PD1 TXD | |
LED | |
ROW PC0,PC1,PC2,PC3,PC4,PC5,PB0,PB1 | |
COL PB6,PB7,PD2,PD3,PD4,PD5,PD6,PD7 | |
*/ | |
#include <avr/io.h> | |
#include <util/delay.h> | |
/* DDRC |= (1 << PC0); */ | |
#define DSET(p,n) (DDR##p|=(1<<P##p##n)) | |
/* PORTC |= (1 << PC0); */ | |
#define PSET(p,n,d) \ | |
if ((d)) { \ | |
(PORT##p|=(1<<P##p##n));\ | |
} else { \ | |
(PORT##p&=~(1<<P##p##n));\ | |
} | |
unsigned char matrix[8] = { | |
0b11111111, | |
0b10000001, | |
0b10111101, | |
0b10100101, | |
0b10100101, | |
0b10111101, | |
0b10000001, | |
0b11111111 | |
}; | |
void | |
init_port() | |
{ | |
// port c output setting | |
DSET(C,0); | |
DSET(C,1); | |
DSET(C,2); | |
DSET(C,3); | |
DSET(C,4); | |
DSET(C,5); | |
// port b output setting | |
DSET(B,0); | |
DSET(B,1); | |
DSET(B,6); | |
DSET(B,7); | |
// port d output setting | |
DSET(D,2); | |
DSET(D,3); | |
DSET(D,4); | |
DSET(D,5); | |
DSET(D,6); | |
DSET(D,7); | |
} | |
void | |
row(int i,int d) | |
{ | |
switch(i) { | |
case 0:PSET(C,0,d);break; | |
case 1:PSET(C,1,d);break; | |
case 2:PSET(C,2,d);break; | |
case 3:PSET(C,3,d);break; | |
case 4:PSET(C,4,d);break; | |
case 5:PSET(C,5,d);break; | |
case 6:PSET(B,0,d);break; | |
case 7:PSET(B,1,d);break; | |
} | |
} | |
void | |
col(int i,int d) | |
{ | |
switch(i) { | |
case 0:PSET(B,6,d);break; | |
case 1:PSET(B,7,d);break; | |
case 2:PSET(D,2,d);break; | |
case 3:PSET(D,3,d);break; | |
case 4:PSET(D,4,d);break; | |
case 5:PSET(D,5,d);break; | |
case 6:PSET(D,6,d);break; | |
case 7:PSET(D,7,d);break; | |
} | |
} | |
void | |
allcut() | |
{ | |
// col | |
PSET(B,6,0); | |
PSET(B,7,0); | |
PSET(D,2,0); | |
PSET(D,3,0); | |
PSET(D,4,0); | |
PSET(D,5,0); | |
PSET(D,6,0); | |
PSET(D,7,0); | |
// row | |
PSET(C,0,1); | |
PSET(C,1,1); | |
PSET(C,2,1); | |
PSET(C,3,1); | |
PSET(C,4,1); | |
PSET(C,5,1); | |
PSET(B,0,1); | |
PSET(B,1,1); | |
} | |
#define DELAY 1 | |
#define INTERVAL 300 | |
int | |
main(void) | |
{ | |
int i,j,k,elaps; | |
init_port(); | |
k = 0; | |
elaps = 0; | |
while (1) { | |
if (elaps > INTERVAL) { | |
k += 1; | |
elaps = 0; | |
} | |
for(i=0;i<8;i++) { | |
allcut(); | |
for(j=0;j<8;j++) { | |
col(j,((matrix[i]&1<<j)>>j)^(k&1)); | |
if (i==j) { | |
row(j,0); | |
} | |
} | |
_delay_ms(DELAY); | |
elaps += DELAY; | |
} | |
} | |
return 0; | |
} |
1 2 3 4 5 6 7 8pin01 ... col4
1 pin01 1 o o o o o o o o pin09
0 pin02 2 o o o o o o o o pin10
8 pin03 3 o o o o o o o o pin11
8 pin04 4 o o o o o o o o pin12
B pin05 5 o o o o o o o o pin13
G pin06 6 o o o o o o o o pin14
pin07 7 o o o o o o o o pin15
pin08 8 o o o o o o o o pin16
1行目の描画という感じかな。
H L L L L L L L
L o x x x x x x x
H x x x x x x x x
H x x x x x x x x
H x x x x x x x x
H x x x x x x x x
H x x x x x x x x
H x x x x x x x x
H x x x x x x x x
2行目の描画
H H L L L L L L
H x x x x x x x x
L o o x x x x x x
H x x x x x x x x
H x x x x x x x x
H x x x x x x x x
H x x x x x x x x
H x x x x x x x x
H x x x x x x x x
....
$ avrdude -p m8 -c ponyser -P /dev/ttyUSB0 -U flash:w:blink2.hexどうもデバイス識別コードがうまくPC側に伝わってない様子。
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.58s
avrdude: Device signature = 0x000102
avrdude: Expected signature for ATMEGA8 is 1E 93 07
Double check chip, or use -F to override this check.
avrdude done. Thank you.
![]() |
基盤裏、一番下がGND |
![]() |
回路全体 |
![]() |
回路拡大 |
![]() |
RS232C変換ケーブル |
$ avrdude -p m8 -c ponyser -P /dev/ttyUSB0 -U flash:w:blink2.hex
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.58s
avrdude: Device signature = 0x1e9307
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "blink2.hex"
avrdude: input file blink2.hex auto detected as Intel Hex
avrdude: writing flash (104 bytes):
Writing | ################################################## | 100% 20.37s
avrdude: 104 bytes of flash written
avrdude: verifying flash memory against blink2.hex:
avrdude: load data flash data from input file blink2.hex:
avrdude: input file blink2.hex auto detected as Intel Hex
avrdude: input file blink2.hex contains 104 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 19.97s
avrdude: verifying ...
avrdude: 104 bytes of flash verified
avrdude: safemode: Fuses OK
avrdude done. Thank you.
![]() |
ライターソフト |
![]() |
ATMEGA8-16PUとAVRプログラマ |
![]() |
部品取り付け前 |
![]() |
取り付け後 |