JapaninoでATtiny13 書込み (8/18)

(2016/10/29に図、回路追記)
(2016/8/21に追記)
昔入手したJapaninoだが、秋月で50円マイコン、ATtiny13A-PU(DIP型)を新たに買った。
8PINで3.3Vでボタン電池で動く。
しかし1KBしか容量がないので簡単なプログラムしか書けない。
Arduino IDE上でATtiny13や10を開発するにはbitDuinoというソフトを入れる。
そしてATtinyに書込むためには、JapaninoにArduino ISPというスケッチを書込んで、ATtinyに直接プログラムを書込み出来るArduino ISPライタに出来る(別途ハードウェアライタ(AVR ISPmkⅡ等:メーカ純正)を買わなくていい)。もちろんライタにしたからといって、別のスケッチを書き込めなくなる訳でもない。

環境はWindows10 Home 64bit Annversary Update済み 8GBMemory。

Japaninoの準備:
学研のサイトからJapanino 0018とUSBドライバをダウンロード。
0018はzipで展開してインストールはしない。
USBドライバをインストールして、JapaninoをUSB接続。
デバイスマネージャーでポート(COMとLPT)に、「Silicon Labs CP210x USB to UART Bridge(COM n)」(nは任意)が表示されればOK。
Arduino IDEを起動し、[ツール][マイコンボード][Gakken Japanino (学研 大人の科学 ジャパニーノ)]を選択。
[ツール][シリアルポート][COM n]で、nはデバイスマネージャーで表示されたCOMをチェックONにする。
(arduinoIDE 0018 では書込装置の選択肢はまだ無い。なので1.0x以降の[ツール][書込装置]があった場合、IDEを0018に切り替える事。ちなみに工場出荷時の書込装置はAVRISP mkII。この後書込装置を変更するので元に戻す場合に備えて明記しておく)。
動作確認:
[ファイル][スケッチ例][Digital][Blink]を選んで、[→|]ボタン(マイコンボードに書き込む)で、led = 13のままでJapanino基板上の内蔵LEDを点滅させる。
配線:
次のサイト様を参照して、ATtiny13とJapaninoをつなぐ。
Arduino IDEでATtiny他の開発(Arduino-ISP編) - kosakalab
a0034780_09471722.jpg
下の方にあるATtiny13の図だが、見づらいので、説明すると、
まず、ICの向きが凹んだ部分が左なのだが実物では凹みは無く、円形の凹みが代わりにある。
これを左にする(印刷文字が逆さにならないように)。円形の凹みはRESETピン(Pin 1=PB 5)を指している(注意:Pin 1はArduino IDEではPin No.1ではない!!)。
Japaninoのコネクタ右に5VからD10までそろっているので、それを使う。
Japanino → ATtiny13
+5V → VCC(Pin 8)
GND → GND(Pin 4)
D10 → RESET(Pin 1:PB5)** JapaninoのRESETではない!!
D11 → MOSI(Pin 5:PB0)
D12 → MISO(Pin 6:PB1)
D13 → SCK(Pin 7:PB2)
配線図のプログラム動作確認用LEDは、GND(青ライン)に短い方(カソード)、長い方(アノード)を抵抗100Ω以上のを経由してATtiny13のPin 2:PB3につなぐ。
a0034780_09364331.jpg
Japanino(arduino)側のピンである+5VとGNDを除く4ピンは書込みに使うピンで、今回プログラムで使用しないので繋げたままでよい。

Japaninoをライタにする(スケッチArduino ISPを書き込む):
[ファイル][スケッチ例][ArduinoISP]を選ぶ。
[ツール][マイコンボード][Gakken Japanino (学研 大人の科学 ジャパニーノ)]である事を確認。
[→|]ボタンを押してマイコンボード - Japanino に書込む。
書込み中、下のログ画面では赤文字で色々表示されるが、最終的には「avrdude done. Thank you.」と出て成功する。
(Japanino基板上の書込みLEDが点滅し、近くのTXのLEDがちょっとだけ点滅する。)

これで、JapaninoはArduino ISPというAVR汎用の、直接プログラムを書き込むライタになった。
Arduino IDEではなく、別のソフトを使えばブートローダもHEXファイルも書き込めるらしい。

これで終わりではない。
Arduino 0018(0022でも同じ)だと、このArduino ISPを使ってATtinyにプログラムを書き込めない。そこで、再度1.0系の最新版であるArdunio 1.0.5-r2をzipでダウンロードする。
arduino 1.0.5 download
Arduino 1.0.x - 1.0.5 Windows(Windows Installerではない方)を選び、zipをダウンロードして、展開する。

ATtiny対応bitDuinoのダウンロード:
最初の「配線」のサイト様の、2015年最新版のbitDuinoが含まれるhardware.zipをダウンロード。
→「ATmega/ATtiny記述ファイルアーカイブ hardware.zip(2015.03.19版) … こちらからダウンロード」

以下のサイト様でJapaninoがライタとして動いている。後で示すが、手順だけ参照。ファイルはダウンロード不要。
【AVRマイコン】ArduinoISP + ATTiny2313 - ふふふのブログ

ちなみに、こちらのサイト様では同サイトにある2ファイル(hardware, arvdude.conf)をダウンロードして0022で書込めた事を確認されているが、なぜか私の環境では0018を含めてNGだった。(サイト様のMac環境だと違うのか、.DS_StoreファイルはMac特有のファイルなので不要だが無害なのでそのままコピーしている)
そこで1.0.5-r2にしたところ、うまくいったという次第。

(2016/8/21追記)
もしかしたら後の記事(8/19)で、
===============
avrdudeはarduino 1.0.5-r2をインストールしたディレクトリのhardware/tools/avr/binにある。
avrdude.confは前回と同様の以下のサイト様から持ってくる。
【AVRマイコン】ArduinoISP + ATTiny2313 - ふふふのブログ
これをとりあえずavrdude.exeと同じディレクトリに置く。
===============
とやっているので、avrdude.confが有効になっているのかもしれない。ふふふ様はMacなので置く場所が違って有効にならなかったのかも。
0.3秒が1秒になったのもそれが原因かも。
(2016/8/21ここまで)

ふふふのブログ様の手順を参考に(WindowsなのでGUIで)、
1.0.5.-r2を展開したディレクトリの[hardware]直下にhardware.zipの[hardware]の中身をコピーする。hardwareの下にhardwareディレクトリが出来るわけではない。

サンプルプログラムをATtiny13に書込み:
これですべての環境は整った。それではちっちゃいICに任意のプログラムを書き込んでいこう。
まずIDEは、0018は終了して、1.05-r2を起動。
[ツール][マイコンボード][ATtiny13 (internal 9.6MHz clock)]を選択。
[ツール][シリアルポート][COM n]で、nはデバイスマネージャーで表示されたCOMをチェックONにする。
[ツール][書込装置][Ardunio as ISP]をチェックONにする。(0018や0022にはこの項目がそもそも無い - ブートローダだけ)
次のサンプルプログラムを新規に入力する。
const int ledPin = 3; // the number of the LED pin
void setup()
{
pinMode(ledPin, OUTPUT);
}
void loop()
{
digitalWrite(ledPin, 1);
delay(100);
digitalWrite(ledPin, 0);
delay(100);
}

3という所がミソ。配線でPB3のピンにつないでいるからなのか、1では光らない。
あとは、[→]ボタン(マイコンボードに書込む)で、ATtiny13に書込む。
書込み中は、Japanino基板上のLEDがTX LEDと一緒にずっと点滅を繰り返す。
Japaninoに書込むのよりはシリアル通信の頻度が高いようで、区別がつく。
書込み中、下のログ画面では赤文字で色々表示されるが、最終的には成功する。
うまく書き込みが終わるとすぐにLEDが0.3秒おきぐらいで点滅を始める。(別のICでは1秒だった)

やー、苦労した。最初「配線」側のサイト様の通り色々やってもJapaninoではできないのかと思った。後のサイト様で0022でJapaninoでうまくいったとの事だったのだが、それでもうまくいかなかった。0018と0022でスケッチのArduino ISPが書き込めるのに、簡単なサンプルスケッチはコンパイルエラー(WProgram.hがなかったりインタラプト関数が使えないなど)になり、逆に1.0.5-r2ではサンプルはコンパイル出来るがArduino ISPはコンパイル出来ず(define定義が無いなど)、LEDが光らないので、ATtinyに書込めてるかどうかわからなく、Arduino ISP自体の書込みを疑ったりした。
最終的にはピン番号を1から3に変えたら光ったので、結局以下の3つを行った事になる。

Japanino 0018:JapaninoにスケッチArduino ISPを書き込み、ライタに変える
JapaninoとATtiny13をつなぐ回路をブレッドボード上に組む
Ardunio 1.0.5-r2:ライタJapaninoを通して、ATtiny13に任意のスケッチを書き込む(hardware.zip必要)

2つのIDEはzipを別々の場所に展開しているので共存できる。ただしCOMポートを占有するので、2つ同時には起動できない。(ライタに変身させたらほとんど0018は起動しない)
サンプルはログ画面の赤文字を見ると832バイトと出ている。
pinMode関数やその他の関数をもっとシンプルに書けば容量500バイト程度には減るだろう。
0018ではコンパイル時ログに一瞬白文字で[AppData][Local][Temp][buildXXXX]へ書き込んでいる様子が出ているので、同様に1.0.5-r2でもどこかにHEXファイルを吐き出していそう。
直接HEXファイルを書き込めればBASCOM-AVRやAVR Studio+WinAVRで作成したHEXならもっと容量が減る。コマンドラインでのツールavrdudeがあるので、ArduinoISPライタとなったJapaninoで書き込めるはず。

あとは1センサ1LEDでもつないで応用しだいかな。

注:スケッチArduinoISPは、arduinoを専用ではなく、汎用のAVRライタにするらしい。
こちらのサイト様に詳しい。
またこちらのサイト様では、avrdude-GUIというコマンドラインツールavrdudeをGUIを被せて使う事もできるらしい。

容量削減:
Arduinoで、小っちゃいIC(ATTiny)を使う方法 - Qiita
こちらのサイト様のを参考にしたソースが以下の通り。

//const int ledPin = 3; // the number of the LED pin
extern volatile unsigned long timer0_millis;
void setup()
{
DDRB |= _BV(3); // pinMode(ledPin, OUTPUT);
}
void deelay(unsigned long ms)
{
unsigned long exptim = timer0_millis + ms;
while( timer0_millis < exptim ) ;
}
void loop()
{
PORTB |= _BV(3); // digitalWrite(ledPin, 1);
deelay(100); // delay(100);
PORTB &= ~_BV(3); // digitalWrite(ledPin, 0);
deelay(100); // delay(100);
}
394バイトに大減量。しかし、pinMode関数は定義しなかった未接続ピンを、出力モードに定義し、ノイズが入らないようにしてくれ、かつ消費電力も抑えられるので200バイト弱多いが製品化時にはおススメ。ピン数分だけ自分でOUTPUTにすれば容量削減になる。
[PR]
by k1segawa | 2016-08-18 06:51 | arduino, AVR | Comments(0)
<< Japanino Arduin... Windows10 日本語入力... >>