21
徳島大学 開放実践センター 公開講座 川上 博 2013/09/07 第7回 2x2 のled matrixを点灯する マイコンをはじめよう 2013年度 徳島大学 春夏の大学公開講座

マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座

川上 博

2013/09/07

第7回 2x2 のled matrixを点灯する

マイコンをはじめよう

2013年度 徳島大学 春夏の大学公開講座

Page 2: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座 今日のテーマ2

2x2 のled matrixを点灯する

Page 3: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座3 8x8 led matrix

Page 4: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座4

2x2 led matrix 回路をつくる

Page 5: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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

Page 6: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座6

1サイクル

行1

列1 列2 列1 列2

行2

列1 列2

行1

行2

信号の時系列:動的な点灯法

② ③

④ 時間

Page 7: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座

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

Page 8: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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); }

Page 9: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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); }

Page 10: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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

Page 11: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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);

Page 12: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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)

Page 13: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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); }}

Page 14: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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

Page 15: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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

Page 16: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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

Page 17: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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

論理演算

Page 18: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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

ビット毎の論理演算

Page 19: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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

Page 20: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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

Page 21: マイコンをはじめよう - cms.db.tokushima-u.ac.jpcms.db.tokushima-u.ac.jp/DAV/person/S10723/マイコンをはし... · 徳島大学 開放実践センター 公開講座

徳島大学開放実践センター公開講座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,を使って数える方法