第 2 回 トレーニングシステムの製作、テスト

本日の内容


このドキュメントは http://edu.net.c.dendai.ac.jp/ 上で公開されています。

2-1. トレーニング用ハードウェア

ここでは AVR のPORTB に LED を接続し、 PORTD の 4番端子にはスイッチを 繋ぎ、 In-System Programmer を接続できる回路を作ります。 これを使用して組み込み系のソフトウェア開発の基礎を学びます。

ブレッドボード トレーニング用の回路はブレッドボードで作ります (写真参照 クリックすると拡大します)。 これは多数の穴のあいたボードで、 IC などをそのままさすことができます。 また専用の導線を使うことで半田付け無しで回路を構成することができます。

LED に関する電力の計算

PORT B 全てに LED を接続します。 そのために、 まず、マイコンの出力電力で 8 本の LED を点灯できるか確認します。 通常の赤色 LED は電圧降下が最大で 2V程度で、電流は 10から20mA 流せば明 るく点灯します。 データシート p.177 Electorical Characteristics によると、全電流の合計は 200mA です が、電流を取り出したときの出力電圧は VOHに書かれているよう に電源電圧や出力電流に依存するようです。 さらに、p.192 Figure 105 をご覧下さい。このグラフは電源電圧 5V のもの ですが、I/Oピンから取り出す電流により、出力電圧が落ちていくことが分か ります。 電源電圧 5V では 10mA で 0.3V、20mA で 0.5V の電圧降下が起きるようなので、 電源電圧 4.5V でも、 10mA では 4.2V、20mA では 4V 程度の電圧が得られる と予想できます。

一般I/Oポート

使用する LED ですが、 ここでは秋月電子で販売している C-551SR ( データシート) カソードコモン1文字タイプを接続します。 これには 8 個の LED が内蔵されています。 ATtiny2313 から取り出せる電流は 200mA なので、一つあたり 25mA 程度が限度です。 一方、 C-551SR の一個の LED の電圧降下は 1.8から2.2V です。 乾電池 3 本で動かす場合、電圧の変動を考えて最大 5V とすると落さなけれ ばならない電圧は 5 - 1.8 = 3.2V です。これを抵抗で落すことを考えます。 この時、例えば限界値までではなく、10mA 流すとすると接続すべき抵抗値は 3.2/0.01 ≒ 320 Ωです。 これより大きい(安全側)の抵抗値はE12 系列だと 330Ω となります。 但し、 10mA 流す必要もないのであれば、これより大きい抵抗値でも構いませ ん。 例えば、 1kΩ でも問題無く点灯します。

ブレッドボードの構成

ブレッドボードの構成は 3 段構成にします。 上段にマイコン、中段に 7 セグメント LED を配置します。 ただし、配線はなるべく直線的かつシンプルになるように工夫します。

電源

電源を配線します。 ブレッドボード上で赤や黒または青で表示されている専用のライン同士に電気 が流れるように電池ボックスやジャンパ線を繋ぎます。

ATtiny2313

ATtiny2313 の IC ソケットを上段に配置します。一番ピンが下に来るようにします。 20 番ピンを電源に、10 番ピンをグランドに接続します。

Reset

リセットをプルアップ抵抗を接続して、VCCに接続します。 プルアップ抵抗はデータシート p.151 にあるように 10kΩ以上の抵抗で プルアップしてください。

LED

電源のパイロットランプ用に抵抗を介して 1つ LED を接続してグランドに落 とします。 明るく光らせるには330Ω などの抵抗を使用しますが、常時点けること になるので、暗くてよいなら 10kΩ 程度の抵抗でも構いません。

ブレッドボードの中段または下段に 7 セグメント LED C-551SR を配置します。 カソードは 3, 8 番ピンなのでどちらか一方をグランドに接続します。 PB0〜PB7 は 12番ピンから 19番ピンなので、そこからそれぞれに 330Ω 程度の抵抗を接続します、そして、接続した抵抗から順に C-551 に接続しま す。 配線を重ならず単純にするために、 PB0からPB7 を、それぞれ順に 1,2,4,5,6,7,9,10 に接続します。 これにより、 7 SEG には PB0 から順に E, D, C, DP, B, A, F, G に接続す ることになります。

スイッチ

PD4 を 10kΩをプルダウン抵抗としてグランドに繋ぎ、また、プッシュ スイッチにつなぎます。スイッチのもう一方は VCC に繋ぎます。 これにより、スイッチを押していないときは 0V になり、スイッチを押すと VCC になります。

ISPとの接続

In System Programmer との接続は次の通りになります。

ISP意味ATtiny2343
1miso18
2VCC20
3sck19(データシートでsclとあるのは誤り)
4mosi17
5rst1
6GND10

AVRISP mkII のコネクタはそのままではブレッドボードに刺せませんので、変 換基板を作成します。

ブレッドボードに差した変換基板
ブレッドボードに差した変換基板(裏)
変換基板とプログラマの接続例

テスト回路用の部品表

部品数量
AVR マイコン ATtiny2313 1個
ブレッドボード 60 列が 3〜4 段のもの 1 つ。専用の配線材も含む
カソードコモン 7 セグメント 1 桁の LED (C-551SR) 1個
単体の LED 1個
タクトスイッチ IC ピッチの基板用 1 個
330Ω 抵抗 8 本
10kΩ 抵抗 3 本
電池ボックス スイッチ付。単3、または単4三本直列用
電池 電池ボックスに適合した物 3 本
変換基板(配布します) 1枚
変換基板用ピンヘッダ1 2×3 1つ
変換基板用ピンヘッダ2 L型 1×6 1つ

2-2. テスト用ソフトウェア

以下にサンプルプログラムを 2 例示します。 このプログラムをアセンブルし、作成した回路に ISPで AVR に書き込み、開 発環境が完成したことを確かめて下さい。

プログラムの作成と書き込み

  1. Atmel Studio を立ち上げます
  2. 実行するプログラムごとにプロジェクトを作成します
    1. Template に AVR Assembler Project を選び、プロジェクト名を入れま す
    2. Device Selection ウィンドウでは、 tinyAVR-8bit を選び、 ATtiny2313 を選択し、 Ok を押します
  3. プロジェクト名.asm のウィンドウにテストプログラムを貼り付けま す
  4. プロジェクトをビルドします
  5. 回路の電源が入れます
  6. Tool→Device Programming を選びます
  7. Tool に「AVRISP mkII」が Interface に「ISP」を表示させて Apply を押します
  8. memory タブを押します
  9. ファイル名は拡張子が必ず .elf になっているので、「...」を選び、書 き込みたい hex ファイルを選びます
  10. programボタンを押します

スイッチ点灯

このプログラムはスイッチの状態により LED の点灯、消灯を切替えます。


/*
 * switch.asm
 *
 *  Created: 2012/10/11 5:40:13
 *   Author: sakamoto
 */ 
.device attiny2313
.include <tn2313def.inc>
.cseg
.org	0x0000
	rjmp reset
.org	INT_VECTORS_SIZE
reset:
	ldi	r16,low(RAMEND)
	out SPL,r16
	ldi	r16,0xff
	out	ddrb, r16
	ldi	r16,0
	out	ddrd,r16
	ldi	r16,1<<4
	out	portd, r16
.def	pattern = r16
main:
	sbic	pind, 4
	rjmp	swon
swoff:
	ldi	pattern,0xff
	out	portb,pattern
	rjmp	main
swon:
	ldi	pattern,0x00
	out	portb,pattern
	rjmp	main
.exit

sw をマイコン内部でプルアップする場合


/*
 * switch.asm
 *
 *  Created: 2012/10/11 5:40:13
 *  Revised: 2017/9/21
 *   Author: sakamoto
 */ 
.device attiny2313
.include <tn2313def.inc>
.cseg
.org	0x0000
	rjmp reset
.org	INT_VECTORS_SIZE
.equ    sw = 4
reset:
	ldi	r16,low(RAMEND)
	out SPL,r16
	ldi	r16,0xff
	out	ddrb, r16
	ldi	r16,0
	out	ddrd,r16
        sbi     portd, sw ; pull up
        in      r16, MCUCR
        cbr     r16,PUD ; clear pull up disable flag
        out     MCUCR,r16
.def	pattern = r16
main:
	sbis	pind, 4
	rjmp	swon
swoff:
	ldi	pattern,0xff
	out	portb,pattern
	rjmp	main
swon:
	ldi	pattern,0x00
	out	portb,pattern
	rjmp	main
.exit

フラッシャ

このプログラムは、全ての LED に対して点灯、消灯を定期的に繰り返します。


/*
 * flash.asm
 *
 *  Created: 2012/10/11 15:39:43
 *   Author: sakamoto
 */ 
.device attiny2313
.include <tn2313def.inc>
.cseg
.org	0x0000
	rjmp	reset
.org	0x0013
reset:
	ldi	r16,low(RAMEND)
	out	SPL,r16
	ldi	r16,0xff
	out	ddrb, r16

.def	pattern = r16
.equ	time = 3
main:
	ldi	pattern,0x00
	out	portb,pattern
	rcall	wait
	ldi	pattern,0xff
	out	portb,pattern
	rcall	wait
	rjmp	main

.def	wreg0 = r20
.def	wreg1 = r21
.def	wreg2 = r22
wait:
	ldi	wreg0,time
wait0:
	ldi	wreg1,0
wait1:
	ldi	wreg2,0
wait2:
	nop
	dec	wreg2
	brne	wait2
	dec	wreg1
	brne	wait1
	dec	wreg0
	brne	wait0
	ret
.exit

2-3. Macintosh における開発

Macintosh 上の OS MacOSX でも、この演習を行うことができます。 但し、 Atmel Studio が用意されているというわけでは無いので、同等ではあ りません。

環境構築

CrossPack for AVR® Development
the GNU compiler suite, a C library for the AVR, the AVRDUDE uploader and several other useful tools.
AVRA
Assember for the Atmel AVR microcontroller family

坂本直志 <sakamoto@c.dendai.ac.jp>
東京電機大学工学部情報通信工学科