ここのところPICばかり扱っていたので、そろそろAVRをいじりたくなってきました。手元にあるPICは使う前にデータシートで搭載している周辺機能を調べて、不必要な機能をプログラムで停止させないとデジタルI/Oが使えなかったりするのでちょっと面倒です。AVRはそんなことをしなくても使えるので扱いやすいですね。
今回使うAVRは、相変わらずですが秋月電子のお楽しみ袋に入っていたATtiny861AとAT90S8515です。どちらも馴染みのないもので、Arduino IDEにもボード情報はありませんでした。
でもラッキーな事に、ATtiny861AはATtiny85を使いたくてArduino IDEに登録したATTinycoreパッケージでサポートされていました。
内部クロック8MHzで動作するので、さっそく基本のBlinkを動かしてみました。
LiquidCrystalライブラリなんかも動きました。普通にArduinoとして開発できます。ナイスですねぇ。
問題はAT90S8515の方です。
古いAVRなのかウェブにもArduino IDEでの開発情報はあまりありませんでした。さらに探してみるとこことかこことかここにAT90S8515のボード情報の登録方法が説明されていました。英語で書かれていないサイトの説明は読めませんが、設定方法は大体分かります。これらの情報を総合して以下の設定を行いました。ちなみにArduino IDEはUbuntu環境で使用していますので、設定ファイルを置くフォルダーはWindowとは異なっています。
1) boards.txtに以下の記述を追加する
s8515.name=AT90S8515-8PC
s8515.upload.tool=avrdude
s8515.upload.maximum_data_size=8192
s8515.upload.protocol=Arduino as ISP
s8515.upload.speed=9600
s8515.build.mcu=at90s8515
s8515.build.f_cpu=8000000L
s8515.build.board=AVR_8515
s8515.build.core=arduino
s8515.build.variant=s8515
Ubuntuの場合、boards.txtファイルは現在のバージョン1.8.12ではarduino-1.8.12/hardware/arduino/avrの下にありますが、ここに追加しても設定は反映されませんでした。実際に使われるのは隠しフォルダーの.arduino15/packages/arduino/hardware/avr/1.8.2の中のboards.txtでした。もしかすると、環境によってはフォルダー位置が異なるかもしれません。
2) .arduino15/packages/arduino/hardware/avr/1.8.2/variants/の下にs8515フォルダーを作り、以下の内容のpins_arduino.hを作成する。
#ifndef Pins_Arduino_h
#define Pins_Arduino_h
#include <avr/pgmspace.h>
#define NUM_DIGITAL_PINS 32
#define NUM_ANALOG_INPUTS 0
static const uint8_t SS = 4;
static const uint8_t MOSI = 5;
static const uint8_t MISO = 6;
static const uint8_t SCK = 7;
//static const uint8_t LED_BUILTIN = 34;
// ATMEL AT90S8515 / ARDUINO PINS
// PIN# PIN#
// +---V---+
// 0 PB0 1 | | 40 VCC
// 1 PB1 2 | | 39 PA0 16
// 2 PB2 3 | | 38 PA1 17
// 3 PB3 4 | | 37 PA2 18
// 4 PB4 5 | | 36 PA3 19
// 5 PB5 6 | | 35 PA4 20
// 6 PB6 7 | | 34 PA5 21
// 7 PB7 8 | | 33 PA6 22
// RESET 9 | | 32 PA7 23
// 8 PD0 10 | | 31 ICP
// 9 PD1 11 | | 30 ALE
// 10 PD2 12 | | 29 OC1B
// 11 PD3 13 | | 28 PC7 24
// 12 PD4 14 | | 27 PC6 25
// 13 PD5 15 | | 26 PC5 26
// 14 PD6 16 | | 25 PC4 27
// 15 PD7 17 | | 24 PC3 28
// XTAL2 18 | | 23 PC2 29
// XTAL1 19 | | 22 PC1 30
// GND 20 | | 21 PC0 31
// +-------+
#ifdef ARDUINO_MAIN
const uint16_t PROGMEM port_to_mode_PGM[] = {
(uint16_t) &DDRD,
(uint16_t) &DDRC,
(uint16_t) &DDRB,
(uint16_t) &DDRA,
};
const uint16_t PROGMEM port_to_output_PGM[] = {
(uint16_t) &PORTD,
(uint16_t) &PORTC,
(uint16_t) &PORTB,
(uint16_t) &PORTA,
};
const uint16_t PROGMEM port_to_input_PGM[] = {
(uint16_t) &PIND,
(uint16_t) &PINC,
(uint16_t) &PINB,
(uint16_t) &PINA,
};
const uint8_t PROGMEM digital_pin_to_port_PGM[] = {
PB, PB, PB, PB,
PB, PB, PB, PB,
PD, PD, PD, PD,
PD, PD, PD, PD,
PC, PC, PC, PC,
PC, PC, PC, PC,
PA, PA, PA, PA,
PA, PA, PA, PA,
};
const uint8_t PROGMEM digital_pin_to_bit_mask_PGM[] = {
_BV(0), _BV(1), _BV(2), _BV(3),
_BV(4), _BV(5), _BV(6), _BV(7),
_BV(0), _BV(1), _BV(2), _BV(3),
_BV(4), _BV(5), _BV(6), _BV(7),
_BV(0), _BV(1), _BV(2), _BV(3),
_BV(4), _BV(5), _BV(6), _BV(7),
_BV(7), _BV(6), _BV(5), _BV(4),
_BV(3), _BV(2), _BV(1), _BV(0),
};
const uint8_t PROGMEM digital_pin_to_timer_PGM[] = {
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER, NOT_ON_TIMER,
};
#endif
#endif
3) Arduino IDEを起動してボード選択のメニューでAT90S8515-8PCを選ぶ
これでスケッチ作成が行えるようになりました。
AT90S8515は内部クロック機能がないので、動作させるためには外部に振動子が必要になります。たまたま、お楽しみ袋の中に4MHzのクリスタルと15pFの積層セラミックコンデンサーが入っていたのでこれを接続してみました。
配線してBlinkを書き込んでみると、ちゃんと動作しました。
LiquidCrystalライブラリなども試してみましたが、問題なく動作しました。
これでお楽しみ袋のAVRを利用して何か作れそうです。
※コメント投稿者のブログIDはブログ作成者のみに通知されます