2019年7月20日土曜日

ATTINY85(Digispark)との格闘Ⅰ(生チップへBootloader書込)

CO2レーザーのZ軸可動化のステッピングモーター制御回路を
作っていたらDigisparkに振り回されることに。
振り回された日誌は、Ⅰ、Ⅱ、Ⅲの三部作になったのであります(-_-;)

Digisparkに乗っているチップATTINY85の単体チップを持ってます。
US$ 1.15(15% OFF)
秋月電子で130円なので、安くはないですね~

で、このDIPソケット付きのDigisparkボード(US$ 0.49)で
スケッチを書き込もうとしたら

書き込めません(T_T)
あっ!生チップなのでブートローダーが入ってないようですね~(T_T)
この時にArduino UNOで書込機を作って
このTQFPシールドを積んで生のATmega328P-AUに書き込んだのを
思い出しました。
上のTQFPアダプタは、作るのにとても苦労しましたが、
TQFPシールドを外せば、そのまま使って簡単にいけそうなので、
ここを参考にm(_ _)m やってみることにします。

上のArduino UNOには、Arduino IDE 1.8.3で
[ファイル]-[スケッチの例]-[11.ArduinoISP]を書き込んで
書込機にしていたものです。
念の為、スケッチの中のピンアサインを確認しておきます。
*****
#define RESET     10 // Use pin 10 to reset the target rather than SS
#define LED_HB    9
#define LED_ERR   8
#define LED_PMODE 7

// Uncomment following line to use the old Uno style wiring
// (using pin 11, 12 and 13 instead of the SPI header) on Leonardo, Due...

// #define USE_OLD_STYLE_WIRING

#ifdef USE_OLD_STYLE_WIRING

#define PIN_MOSI 11
#define PIN_MISO 12
#define PIN_SCK 13
*****

まずは、自分で実体配線図を描きます。
Fuse領域を書き換えて、RESETをPB5にすると
外部RESETをかけられなくなるので、二度とSPIで書込ができなくなります。
見え難いですが、1pinは、チップ左下です。
UNOのRESET~GND間に10μFを忘れないように!
結線は、
 UNO  ---  ATTINY85
 13pin --- 7pin(SCK)
 12pin --- 6pin(MISO)
 11pin --- 5pin(MOSI)
 10pin --- 1pin(RESET)
 5V     --- 8pin
 GND  --- 4pin
更にArduino UNO:RESET~GND間に10μF

Arduino IDE v.1.8.3を起動します。
「Digisparkの製作元Digistump LLC(合同会社)のパッケージ」は、
この時インストールしているので、
[ツール]-[ボード]-[Digispark(Default - 16.5mhz)]を選択します。
[ツール]-[書込装置]-[Arduino as ISP]を選択します。
配線したArduino UNO書込機をUSBで接続して
[ブートローダー書き込む]をすると、
 ありゃ~っ!失敗です(T_T)
「bootloader.tool」がないと怒られました。
ブートローダの書き込み中にエラーが発生ました:
 設定パラメータの「bootloader.tool」がありません。」とのこと。
ならば、そのまま、この書込機で「Lチカ」を書き込んでみようと
[ファイル]-[スケッチ例]-[Digispark_Example]-[Start]を選択して
(「Start」ってのが「Lチカ」スケッチなのです)
[書込装置を使って書き込む]します。
一応、成功したようです。
Digisparkボード内のPB1のLEDが、Lチカするはずですが
点灯したままで、点滅しません(T_T)
最初のFuseビット書く儀式をやらないと内部CLOCKが発振しないのかな?

ん~ん、ちょっとGoogle先生に聞いてみる...

どうやらここのやり方でコマンドラインでやらないといけないようです
Attiny167 (Digispark Pro)用だが、コマンドを変えればいけるかな~

あるいは、こっちかな?
なんだかArduino IDEが古そうだな~

おっ!日本語のサイトがあるぞ!
マーティーのと同じDIPソケットのDigisparkの写真が載ってます。
スケッチ書き込み時のログを利用して、コマンドラインで
Arduino as ISPからブートローダー書込に成功されてます。

早速、先のArduino as ISPでの「Lチカ」書き込み時のログを見ます。
どうやら赤文字の所が、そのコマンド部分のようです。

***Lチカのスケッチ「Start.ino」書込時***
C:\Program Files (x86)\Arduino1.8.3\arduino-builder -dump-prefs -
~~~省略~~~
スケッチをコンパイルしています...
~~~省略~~~
"C:\Users\marty\AppData\Local\Temp\arduino_build_407226/Start.ino.elf" "C:\Users\marty\AppData\Local\Temp\arduino_build_407226/Start.ino.hex"
最大6012バイトのフラッシュメモリのうち、スケッチが718バイト(11%)を使っています。
グローバル変数は9バイトのRAMを使用しています。
C:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr/etc/avrdude.conf -v -pattiny85 -cstk500v1 -PCOM4 -b19200 -Uflash:w:C:\Users\marty\AppData\Local\Temp\arduino_build_407226/Start.ino.hex:i 

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2014 Joerg Wunsch

         System wide configuration file is "C:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr/etc/avrdude.conf"

         Using Port                    : COM4
         Using Programmer              : stk500v1
         Overriding Baud Rate          : 19200
         AVR Part                      : ATtiny85
~~~省略~~~
avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

~~~省略~~~
avrdude: writing flash (718 bytes):

Writing | ################################################## | 100% 1.08s

~~~省略~~~
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 0.52s

avrdude: verifying ...
avrdude: 718 bytes of flash verified

avrdude done.  Thank you.
***

Arduino IDEの設定は、
[ファイル]-[環境設定]の赤枠部に
チェックが入っていれば、いいとのこと。
たぶん、この行だ!
これは、「Lチカ」スケッチの「Start.ino」が指定されているので
赤文字部分をブートローダーのhexファイルに変えて、
DOS窓からコマンドラインでやればいいハズなのです。
*****
C:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr/etc/avrdude.conf -v -pattiny85 -cstk500v1 -PCOM4 -b19200 -Uflash:w:C:\Users\marty\AppData\Local\Temp\arduino_build_407226/Start.ino.hex:i 
*****

ATTINY85のブートローダーは、
ここからから一式「micronucleus-master.zip」をダウン ロード、展開して
\micronucleus-master.zip\micronucleus-master\firmware\releases
の「t85_default.hex」です。
分かり易い所に置くということなので、
Dドライブのルートがいいかな!
で、さっきのコマンドの赤文字部
*****
C:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr/etc/avrdude.conf -v -pattiny85 -cstk500v1 -PCOM4 -b19200 -Uflash:w:C:\Users\marty\AppData\Local\Temp\arduino_build_407226/Start.ino.hex:i 
*****

を、Dドライブルートに置いた「D:\t85_default.hex」にして
後ろのオマジナイ、青文字を追加すればいいハズです。
*****
C:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr/bin/avrdude -CC:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr/etc/avrdude.conf -v -pattiny85 -cstk500v1 -PCOM4 -b19200 -Uflash:w:D:\t85_default.hex:i -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m
*****

が、
avrdude、avrdude.confのPATHが通らなく実行できません(T_T)
ログをコピペしたのに「\」と「/」が混ざってるのも妙ですが、
全部「\」でもNG(T_T)

どうやらフルパスじゃダメなようで
もう何十年も使ってないDOSコマンドを思い出しながら、色々やったあげく

コマンドプロンプトで
cd C:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr
でディレクトリを移動してから
*****
bin\avrdude -CC:..\etc\avrdude.conf -v -pattiny85 -cstk500v1 -PCOM4 -b19200 -Uflash:w:D:\t85_default.hex:i -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m
*****
⇒ avrdudeは、OK、avdude.confgが見つからないと怒られる。

「avrdude.conf」のあるディレクトリからじゃないとダメなようで、
cd C:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr\etc
でディレクトリを移動して
*****
..\bin\avrdude -CC:avrdude.conf -v -pattiny85 -cstk500v1 -PCOM4 -b19200 -Uflash:w:D:\t85_default.hex:i -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m
*****
⇒ やっとできました!!!

で、次にLチカを書き込んで見る
UNOの書込機経由でArduino as ISPで
(LEDやら外付けパーツを外しとかないとエラーがでます)
無事、書き込み完了!
USBをつなぎ直して再起動すると、Lチカしました。

もう一個の生チップで、DOS窓のログ取りたいので。
> D:\ATTINY85_LOG.txt」を追加
cd C:\Program Files (x86)\Arduino1.8.3\hardware\tools\avr\etc
してから
*****
..\bin\avrdude -CC:avrdude.conf -v -pattiny85 -cstk500v1 -PCOM4 -b19200 -Uflash:w:D:\t85_default.hex:i -U lfuse:w:0xe1:m -U hfuse:w:0xdd:m -U efuse:w:0xfe:m > D:\ATTINY85_LOG.txt
*****
ATTINY85_LOG.txtは、できてるけど、中身は空っぽ???
どうもWin10のDOSコマンドは、昔の常識が通用しないようですね~
仕方ないので、スクリーンショットのログを記録しておきます。
生チップ、3つにブートローダーを書き込んだので
では、DIPソケット付きのボードにブートローダー書き込んだチップを装着!

Arduino IDEで書込装置を[Micronucleus]にして
このメッセージがでたら、DigisparkをUSBに差し込みます。
無事、書込完了
少ししてLEDがチカチカし始めました!
で、やっと本命のスケッチを
DIPソケットがついたDigisparkボードで書き込もうとすると
「Device search timed out」エラーになります。
1回しか書けないのか???
2回目以降は、Arduino UNO書込機からでないと書込できません(T_T)
このタイプは、USB Bootloaderで書込できているので
BootloaderかV-USBの中身が異なるのかなあ?
或いは、このPCが異常なのか?
ATTINY85...小さくて便利そうなので使い始めたのですが
なかなかの曲者のようです。
この後、格闘Ⅲまで続きます(-_-;)

0 件のコメント: