体重と今日食べたもの

k1segawa.exblog.jp

ダイエット

ブログトップ

Japanino ArduinoISPで ATtiny13 の 内部クロックを書き換える方法 - 工場出荷時に戻す (27) (11/6)

AVR の勉強について、別プロジェクト(ESP-WROOM-02)を立ち上げていたが、再び戻ってやり残した事を進めていこう。

懸案だったATtiny13の工場出荷時のFuseビットの書き戻しがわかった。

自分の環境ではBASCOM-AVRのために、C:\avrdudeに有名な書込みツールavrdudeを格納してあり、それを使ってFuseビットも書き換えよう。

(2016/8/19の記事、Japanino ArduinoISP で BASCOM-AVR ATtiny13 (8/19)内の上記のパスが誤ってarduinoとなっており、BASCOM-AVRで書き込みが出来ない不具合が発生していました。現在は修正されています)

準備:
BASCOM-AVRの環境作成時の手順で、Japanino(arduino)をISPライタにしてある事を確認する。
(ライタにするにはJapanioの場合学研のarduino-018で、Arduino ISPスケッチをJapanioに書込む)
クロックが戻ったかの確認のため、ATtiny13へarduino 1.0.5-r2でBlinkスケッチを書込む。
(ATtiny13に例の書込み用の6本の配線を行っておく)
Blinkスケッチのled=13はATtiny13のPB0にLEDを繋いだならled=0に修正しておく。

LEDが1秒おきに点滅するのを確認する。

読み出し:
コマンドラインツールなのでコマンドプロンプトを特に管理者権限でなくて起動する。
cd c:\avrdude で移動し、
avrdude.exeとavrdude.confがある事を確認する。

以下の手順はこちらのサイト様が詳しい。
ArduinoISPを汎用AVRライタとして使う(2) - しなぷすのハード製作記

まず現在のFuseビットの値を読み出す。
上位バイトは、
avrdude -C c:\avrdude\avrdude.conf -p t13 -P COM3 -c avrisp -b 19200 -U hfuse:r:con:h

COMポート番号はそれぞれの環境に合わせて。

すると0xffと表示される。
同様に下位バイトは、
avrdude -C c:\avrdude\avrdude.conf -p t13 -P COM3 -c avrisp -b 19200 -U lfuse:r:con:h

私の環境は9.6MHzなので、
0x7aと表示される。

ついでに拡張Fuseビット読み出しだと、上下バイトがそれぞれ読み出せる。
avrdude -C c:\avrdude\avrdude.conf -p t13 -P COM3 -c avrisp -b 19200 -U efuse:r:con:h

ATtiny13には拡張Fuseビットは無いようで特に読み出せないようだ。
この様子を次の画像で示す。
a0034780_15153469.jpg
conは標準出力、hはHEX表示だ。通常ボーレートは19200bpsで、arduino ISPなのでarvispを指定。

解説:
さてこのビットの意味だが、参考としたサイト様は次の通り。
ヒューズ設定 | 始めるAVR
tiny13データシート - AVR日本語情報サイト
こちらの17章がFuseビットの詳細だ。
a0034780_15225380.jpg
そして上記を簡単に、始めるAVRのサイト様のフォーマットを継承しつつ、ATtiny2313→ATtiny13にデータを書き換えたものがこれ。
a0034780_20165555.png
赤が注意点で、だいぶビット位置が移動している事がわかる。

上位バイトは規定値0xFFで変わっていないが、下位ビット0x7Aは規定値だと0x6Aになっている(0110 1010=0x6A)。0x6Aと0x7AではCKDIV8ビットのみが0→1に変わっており、規定値では0は分周比1/8、自分の9.6MHzのATtiny13では1で分周比1だ。そうか~、クロック数が上がったのではなく、分周比が変わって速くなっていたのか~。
まあベースのクロックがそうなっているわけで、BASCOM-AVRで指定するprescale(分周比)はさらに分周するのだが。ここは複雑なので触れない。
で、結局下位ビットを0x6Aに書き戻せば9.6/1→9.6/8で動作がゆっくりになるはずだ。

念のため、しなぷすのハード製作記様の手順通り、lockビットの読み出しも行なってみた。
avrdude -C c:\avrdude\avrdude.conf -p t13 -P COM3 -c avrisp -b 19200 -U lock:r:con:h

書き込み:
いよいよ書き込み(結局これだけやればOK)。
avrdude -C c:\avrdude\avrdude.conf -p t13 -P COM3 -c avrisp -b 19200 -U lfuse:w:0x6a:m

mは即書き換える指定。HEXで指定できる。
書き込んだ値が読み出せるかも再度実行して0x6aが返ってきている事を確認した。
その画像がこれ。
a0034780_15434633.jpg
その直後、繋いでいたLEDが非常にゆっくりと点滅を繰り返すのが確認できた。

これでクロック数を書き換えるのにわざわざブートローダーを書き込む事をしなくて済む。
[PR]
by k1segawa | 2016-11-06 15:15 | arduino, AVR | Comments(0)