レトロでハードな物語

レトロなゲーム機・マイコン・中古デバイスなどをArduinoやAVRで再活用する方法を模索しています。

馴染みのないAVRをArduino IDEで開発できるようにする

2020年02月28日 | 電子工作

ここのところ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を利用して何か作れそうです。



最新の画像もっと見る

コメントを投稿