徳島大学開放実践センター公開講座
川上 博
2013/09/07
第7回 2x2 のled matrixを点灯する
マイコンをはじめよう
2013年度 徳島大学 春夏の大学公開講座
徳島大学開放実践センター公開講座 今日のテーマ2
2x2 のled matrixを点灯する
徳島大学開放実践センター公開講座3 8x8 led matrix
徳島大学開放実践センター公開講座4
2x2 led matrix 回路をつくる
徳島大学開放実践センター公開講座5
sweep signal
2x2 led matrixとは
B PD5
PD4
PD3 PD2
A
行 1
行 2
b
330 330
a
列 1 列 2
pattern signal
列1 列2
行1
行2
徳島大学開放実践センター公開講座6
1サイクル
行1
列1 列2 列1 列2
行2
列1 列2
行1
行2
信号の時系列:動的な点灯法
①
② ③
④
①
②
③
④ 時間
徳島大学開放実践センター公開講座
int led2 = 2;int led3 = 3;int led4 = 4;int led5 = 5;
void setup() { pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); }
void loop() { digitalWrite(led4, HIGH); digitalWrite(led5, LOW); digitalWrite(led2, HIGH); digitalWrite(led3, LOW); delay(10); digitalWrite(led4, LOW); digitalWrite(led5, HIGH); digitalWrite(led2, LOW); digitalWrite(led3, HIGH); delay(10);}
// // Arduino// ___________// | |// | |// | ~5| row1// | 4| row2// | ~3| column1// | 2| column2// --\___/---
列1 列2
行1
行2
①
④
②
③
~32
~5
4
試してみる:Example701A
徳島大学開放実践センター公開講座8 関数を定義してみる:Example702A
const int led[] = {2, 3, 4, 5};
void setup() { for(int i=0; i<4; i++){ pinMode(led[i], OUTPUT); } }
void loop() { sweep(0); subPattern(1, 0); delay(10); sweep(1); subPattern(0, 1); delay(10);}
void sweep(int k){ digitalWrite(led[2], 1-k); digitalWrite(led[3], k);}
void subPattern(int p, int q){ digitalWrite(led[0], p); digitalWrite(led[1], q); }
徳島大学開放実践センター公開講座9 パタンをつくってみる:Example703A
const int led[] = {2, 3, 4, 5};int p[][4]={{1,0,0,0},{0,1,0,0},{0,0,0,1},{0,0,1,0}};
void setup() { for(int i=0; i<4; i++){ pinMode(led[i], OUTPUT); } }
void loop() { for(int i=0; i<4;i++){ myPattern(p[i]); }}
void sweep(int k){ digitalWrite(led[2], 1-k); digitalWrite(led[3], k);}
void myPattern(int m[]){ for(int i=0; i<50;i++){ sweep(0); subPattern(m[0],m[1]); delay(10); sweep(1); subPattern(m[2],m[3]); delay(10); }}
void subPattern(int c, int d){ digitalWrite(led[0], c); digitalWrite(led[1], d); }
徳島大学開放実践センター公開講座10
// // Arduino// ___________// | |// | |// | ~5| row1// | 4| row2// | ~3| column1// | 2| column2// --\___/---
void setup(){ DDRD=DDRD | B00111100;}
void loop(){ PORTD = B00010100; delay(500); PORTD = B00011000; delay(500); PORTD = B00101000; delay(500); PORTD = B00100100; delay(500);}
PORTDをつかう:Example704A
0 0 0 1 0 1 0 001234567
PORTDレジスタ
2~34~5
徳島大学開放実践センター公開講座11
ArduinoとATMEGA308P
1.3つのdigital I/O(DIO)が使える:B, C, D
2.各DIOには3つのレジスタ(メモリ)があるa) DDRx : 各ピンを入力0か出力1に設定する
b) PORTx : 各ピンの出力を 0, 1に設定する
c) PINx : 入力ピンの値を読み取る
DDRD=DDRD | B00111100;
PORTD = B00010100;
pinMode(pin, OUTPUT);
digitalWrite(pin, HIGH);
digitalRead(pin);
徳島大学開放実践センター公開講座12
(PCINT14/RESET) PC6(PCINT16/RXD) PD0(PCINT17/TXD) PD1(PCINT18/INT0) PD2(PCINT19/OC2B/INT1) PD3(PCINT20/XCK/T0) PD4VCCGND(PCINT6/XTAL1/TOSC1) PB6(PCINT7/XTAL2/TOSC2) PB7(PCINT21/OC0B/T1) PD5(PCINT22/OC0A/AIN0) PD6(PCINT23/AIN1) PD7(PCINT0/CLKO/ICP1) PB0
PC5 (ADC5/SCL/PCINT13)PC4 (ADC4/SDA/PCINT12)
PC3 (ADC3/PCINT11)PC2 (ADC2/PCINT10)
PC1 (ADC1/PCINT9)PC0 (ADC0/PCINT8)
GNDGNDGND
GND
7
8~9
~10~11
1213
GNDAREF
SDASCL
~6~5
4~3
2TX->1RX<-0
GND
GNDVin
A0(D14)A1(D15)A2(D16)A3(D17)A4(D18)A5(D19)
GND5V3.3VRESETIOREF(NC)
AREFAVCC
PB5 (SCK/PCINT5)PB4 (MISO/PCINT4)
PB3 (MOSI/OC2A/PCINT3)PB2 (SS/OC1B/PCINT2)
PB1 (OC1A/PCINT1)
123456789
1011121314
2827262524232221201918171615
ATMEGA328P
Arduino UNO R3
Power
AnalogDigital
3つのポート: B(8-13), C(analog), D(0-7)
徳島大学開放実践センター公開講座13
pattern matrixを読み込む : Example 705A// Example 705A// July 18, 2013 by H. Kawakami// Arduino// ___________// | | Pattern// | | a b B00 01 ba 00// | ~5| row1 c d B00 10 dc 00// | 4| row2// | ~3| column1// | 2| column2// --\___/---//// Binary|Hex (precede with 0x)// 0000|0 0001|1 0010|2 0011|3 0100|4 0101|5 0110|6 0111|7// 1000|8 1001|9 1010|A 1011|B 1100|C 1101|D 1110|E 1111|F//
int npat=4; //number of patternsbyte b[]={0x14,0x18,0x28,0x24};// {B00010100,B00011000,B00101000,B00100100};
void setup(){ DDRD=DDRD | 0x3C; // 0x3C=B00111100}
void loop(){ for(int i=0; i<npat; i++){ PORTD = b[i]; delay(500); }}
徳島大学開放実践センター公開講座14 // Example 706A
// July 18, 2013 by H. Kawakami// Arduino// ___________// | | Pattern// | | d c B00 01 dc 00// | ~5| row1 b a B00 10 ba 00// | 4| row2// | ~3| column1// | 2| column2// --\___/---//
unsigned long start, duration=1000; void setup(){ DDRD=DDRD | 0x3C; // 0x3C=B00111100}
void loop(){ for(int j=0; j<4; j++){ for(int i=0; i<4; i++){ start = millis(); while(start+duration>millis()){ PORTD = B00010000 | (j<<2); //d c B00 01 dc 00 delay(10); PORTD = B00100000 | (i<<2); //b a B00 10 ba 00 delay(10); } } }}
点灯時間を調整する : Example 706A
徳島大学開放実践センター公開講座15 1 byte = 8 bits
x x 1 1 1 1 x x
bit0bit1bit2bit3bit4bit5bit6bit7
0 0 1 1 1 1 0 0PD0PD1PD2PD3PD4PD5PD6PD7
3 C
Arduinoのピン番号
ATmega328Pのポート番号
DDRDレジスタ
DDRD = DDRD | 0x3C
7 0123456
徳島大学開放実践センター公開講座16 2進数と16進数
65(decimal)=1000001(binary)=41(hexadecimal)
65(decimal)=6*10^1+5*10^0
1000001(binary)=1*2^6+1*2^0
100 0001(binary)=4*16^1+1*16^0
65(decimal)=B1000001=0x41
徳島大学開放実践センター公開講座17
A B Y0 0 00 1 01 0 01 1 1
A B Y0 0 00 1 11 0 11 1 1
Y = A × B Y = A + B
A B A B
AB
ABY Y
Y = A
A Y0 11 0
A
AA
Y
_
_
演算
論理回路図
真理値表
ベン図
式
AND(論理積)
OR(論理和)
NOT(論理否定)
A B
A B Y0 0 00 1 11 0 11 1 0
Y = A + B
EX-OR(排他的論理和)
AB Y
Y = ̃A Y = A & B Y = A ¦ B Y = A ^ B
論理演算
徳島大学開放実践センター公開講座18
0 1 0 1 0 1 0 1
bit0bit1bit2bit3bit4bit5bit6bit7
0 0 0 0 1 1 1 1
1 0 1 0 1 0 1 0
0 0 0 0 0 1 0 1
0 1 0 1 1 1 1 1
0 1 0 1 1 0 1 0
A
B
~A
A&B
A|B
A^B
ビット毎の論理演算
徳島大学開放実践センター公開講座19 ビット毎の論理演算(公式)
a.7 a.6 a.5 a.4 a.3 a.2 a.1 a.0
bit0bit1bit2bit3bit4bit5bit6bit7
0 0 0 1 0 0 0 0
a.7 a.6 a.5 1 a.3 a.2 a.1 a.0
a.7 a.6 a.5 0 a.3 a.2 a.1 a.0
a
m
a|=m
a&=(~m)
set
clear
徳島大学開放実践センター公開講座20 ビット毎の論理演算(公式)
0 0 0 0 0 0 0 0
bit0bit1bit2bit3bit4bit5bit6bit7
0 0 0 1 0 0 0 0
0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0
a
m
a^=m
a^=m
0 0 0 1 0 0 0 0a^=m
0 0 0 0 0 0 0 0a^=m
徳島大学開放実践センター公開講座21 基礎資料4.数字の読み方
数 ラテン語 ギリシャ語 フランス語 例
1 uni mono un, une unicode, university, monorail, monolithic <-> hybrid 2 bi di deux bicycle, binary number(2進数),diode, dual, duet 3 ter tri trois triple, triode 4 quadri tetra quatre quad(4個組の),tetrapod 5 quinque penta cinq quintet, pentagon 6 sexa hexa six hexadecimal number(16進数) 7 septa hepta sept september(9月) 8 octa octo huit october(10月),octal number(8進数) 9 novem ennea neuf november(11月)10 decem deka dix december(12月),decimal number(10進数)11 undecem endeka onze 12 duodecem dodeka douze dodecahedron(12面体)
数を数える方法:2進法,8進法,10進法,16進法 2進法:2個の記号(シンボル),たとえば0と1,を使って数える方法 8進法:8個の記号(シンボル),たとえば0,2,3,4,5,6と7,を使って数える方法 10 進法:10個の記号(シンボル),たとえば 0, 1, 2, 3, 4, 5, 6, 7, 8 と 9,を使って数える方法 16進法:16個の記号(シンボル),たとえば 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, a, b, c, d, e と f,を使って数える方法