記事内に広告が含まれています

【ワレコの電子工作】AVR HV Rescue Shield 2 完成しマイコンリセット成功【JLCPCB基板六日で到着】

この記事は約31分で読めます。
スポンサーリンク

ワレコ

未だ寒いけれど晴れの日は春の兆しを感じる。

四季がある日本の気候がワテは好きだ。

さて昨年末から本格的に勉強中のArduino UNOやAVRマイコンのプログラミングであるが、今までに以下の実験に成功した。

その実験の過程でプログラミングに失敗して、使えなくなったATmega328Pマイコンが三個あるのだ(下写真)。

写真 FUSEビット設定をミスって使えなくなったATmega328Pが三個

使えなくなっているATmega328Pは実売価格で一個300円くらい。これら三個の328Pをこのまま放置していても何の役に立たない。

AVRマイコンはMicrochip StudioなどでFUSEビットの設定を変更すると設定内容によっては簡単には元に戻せない場合もあるのだ(詳しくは知らない)。

つまりFUSEビットの仕組みを十分に理解しないままAVRマイコンを弄っているとワテみたいな状況に陥るのだ。あかんがな。

AVRマイコンは通常は1.8~5.5Vdc辺りの低電圧で使うが、もしFUSE設定を初期化したい場合には12Vdcの高電圧を与えて書き込む必要がある。

それを可能にするのがAVRリセッターと呼ばれる装置で、今回作成する「AVR HV Rescue Shield 2」もその一つなのだ。HVの文字通り、高電圧パラレルモードヒューズリセッターとして動作して、Arduino UNO用シールドとして使う。

当記事ではAVRマイコンのFUSEビット設定を自由に変更出来る「AVR HV Rescue Shield 2」の作成過程と、それを実際に使ってFUSEリセットに成功したので、その作業過程も紹介する。

「AVR HV Rescue Shield 2」の製作にはJLCPCBさんに発注したプリント基板を使った。

先日JLCPCBさんに発注して僅か六日で自宅に届いたのだ。速いぞ!

その発注記事はこちら↴

【ワレコの電子工作】AVR HV Rescue Shield 2用のプリント基板をJLCPCBさんに発注する
ワレコプリント基板製造業者JLCPCBさんに基板を発注してみた。JLCPCBさんの名前は前から知っていたので、いつか発注してみたいと思っていたのだ。最近のワテはArduinoやそれに搭載されているAVRマイコンのプログラミングを勉強している...

では、本題に入ろう。

スポンサーリンク
スポンサーリンク
  1. JLCPCBさんから届いたAVR HV Rescue Shield 2用基板の紹介
    1. 両面スルーホール基板
  2. AVR HV Rescue Shield 2 に部品を半田付け
    1. AVR HV Rescue Shield 2 に使う部品一覧
    2. 温調式半田ごては使い易い
    3. 実体顕微鏡を使って半田付けする
    4. ワテ自作のお助け孫の手ツールが活躍
    5. チップ部品の手半田のコツ(ワレコ流)
    6. 半田ごてのチップを大型に交換する
    7. リード抵抗を半田付けして完成
  3. AVR HV Rescue Shield 2 を使ってATmega328Pのヒューズをリセットする
    1. AVR HV Rescue Shield 2用のArduinoスケッチをダウンロードして書き込む
    2. AVR HV Rescue Shield 2 用スケッチをArduino UNOに書き込む
    3. AVR HV Rescue Shield 2 スケッチが起動
      1. 三種類のAVRマイコンの種類を選択する
      2. リセッターシールドと328Pを挿す
      3. リセッターシールドの「GO!」スイッチ押すと赤LED光る
      4. LFUSE/HFUSEヒューズ設定値を入力するとリセット出来る
    4. HFUSE/LFUSEの詳しい意味を調べた(追記)
    5. 外部クリスタルで作ったクロックを使うLFUSE設定
    6. debugWIREとISPの違い(2025/6/8追記)
      1. debugWIREとISPの違い(ChatGPTの回答)
    7. 残り二個のATmega328Pもリセットする
  4. リセットしたATmega328PにArduino UNO用ブートローダーを書き込んでみる
    1. Arduino ISPスケッチを書き込む
    2. ブートローダー書き込みシールドを挿す
    3. ブートローダーを書き込む
    4. 328Pの2号機、3号機はなぜかブートローダー書き込み失敗
  5. まとめ

JLCPCBさんから届いたAVR HV Rescue Shield 2用基板の紹介

今回は発送業者さんにはDHLを選択した。

写真 DHLで届いたJLCPCB製のプリント基板の小包

海外基板製造メーカーさんに基板を発注すると、DHL、Fedex、ChinaPostその他、幾つかの配送業者さんから好きな会社を選べる。

今回のDHL送料は$14.8だったので日本円なら二千円弱と言う計算になる。

写真 JLCPCBさんの水色小箱

早速この水色小箱を開封してみた(下写真)。

写真 JLCPCBさんの基板5枚

今回製作した基板サイズは53.34 x 44.7 mm なので、小さめの基板だ。

両面スルーホール基板

以下ではJLCPCBさんの両面スルーホール基板の出来具合を紹介しよう。

写真 紫(Purple)レジストで製作した両面スルーホール基板(1.6mm厚)5枚

上写真のように紫レジストに白色シルク文字で発注した。

基板の製作費用は10x10cm2以内のサイズなら格安で、5枚同じ物を発注しても5ドル程度だ。

今回はSpecial Offerと言う割引があり、2ドルだった。

下写真のように小さなシルク文字もかすれたりする事無く綺麗に印字されている。

写真 JLCPCB製のプリント基板5枚(左:部品面、右:半田面)

上写真のようにJLCPCBさんの紫レジストは明るい紫では無くて落ち着いた感じのワインレッドと言う感じだ。

今回製作した基板は両面スルーホール基板で、かつ、表面実装部品とリード型部品の両方を半田付けする。

下写真で示す部品面拡大写真の左下の辺りに表面実装部品の領域がある。

写真 JLCPCB製「AVR HV Rescue Shield 2」用基板の部品面拡大

上写真では、使っているデジカメが十年以上前に買ったやつなので少しピンボケ気味だが、表面実装部品取り付け部分の細かい半田パッドも綺麗に形成されているのが分かる。

この基板にはDIP28、DIP20、DIP8の三つのICソケットも半田付けする。

下写真に示すようにそれらの半田付けパッドも綺麗なスルーホールが形成されている。

写真 JLCPCB製「AVR HV Rescue Shield 2」用基板の半田面拡大

下写真では、表面実装部品の取り付け部分を拡大してみた。

写真 JLCPCB製「AVR HV Rescue Shield 2」用基板の部品面拡大

上写真の中央に8pinのIC取り付け場所があるのが分かるだろう。

ここにはアナログデバイセズ(リニアテクノロジー)のLT3464-TSOTと言う DC/DC CONV BOOST MICROPWR IC(マイクロパワー昇圧DC/DCコンバータIC)を取り付ける。

下図にパッケージ寸法を引用するがTSOT23-8と言うサイズなので超小型のICだ。

図 LT3464-TSOT DC/DC CONV BOOST MICROPWR IC(マイクロパワー昇圧DC/DCコンバータ)

引用元 https://www.analog.com/media/jp/technical-documentation/data-sheets/j3464i.pdf

下写真にはその拡大を示す。

写真 JLCPCB製「AVR HV Rescue Shield 2」用基板の部品面(SMD部品取り付け部拡大)

なお、ワテの場合、最近では表面実装部品を良く使っている。

その場合には表面実装抵抗やチップコンデンサには、3216M(1206)サイズを良く使う。

つまり3.2mm x 1.6mm と言う大きさだ。

今回作成する「AVR HV Rescue Shield 2」では、抵抗やコンデンサは2012M(0805)サイズが使われている。例えば上写真のC1のコンデンサなど。

2.0mm x 1.2mm と言うサイズなのでかなり小さい。

でもまあワテの場合は実体顕微鏡を使っているので半田付け作業はたぶん問題無く出来るだろう。

逆に言うと、実体顕微鏡が無ければ半田付け出来ないだろう。

上写真のようなカメラ付きの実体顕微鏡なら基板表面の撮影に便利なのだが、ワテが使っているやつはその機能が無い。

なので、基板撮影には普通のデジカメで接写しているのだが、レンズもカメラも十年以上前に買った古いやつなので正確なピントが合わないのだ。

キヤノンに修理点検に出すか新品を買うか迷っている。

AVR HV Rescue Shield 2 に部品を半田付け

AVR HV Rescue Shield 2 に使う部品一覧

さて、JLCPCBさんの基板は非常にいい感じに出来上がっている。

あとは下表で示すパーツを半田付けすれば完成だ。

Item Qty Refdes Value Description
1 1 PCB1 NA 2L FR4 1.8×2.1”
2 1 IC3 LT3464-TSOT IC CONV BOOST MICROPWR TSOT23-8
3 1 U1 MUN5311DW1T1G Complementary 50V NPN & PNP
4 1 LED1 RED LED SS 3MM 625NM RED DIFF
5 1 LED2 GREEN LED 3MM SHORT LENS GREEN TRANSP
6 1 R23 100 RES 100 OHM 1/6W 5% CARBON FILM
7 2 R19,R20 330 RES 330 OHM 1/6W 5% CARBON FILM
8 1 R20 1K RES 1.0K OHM 1/6W 5% CARBON FILM
9 1 R24 1K RES 1.00K OHM 1/8W 1% 0805 SMD
10 1 R21 137K RES 137K OHM 1/8W 1% 0805 SMD
11 1 R22 1.21M RES 1.21M OHM 1/8W 1% 0805 SMD
12 1 C2 0.22uF CAP CER .22UF 50V X7R 0805
13 1 C3 0.47uF CAP CER .47UF 25V X5R 0805
14 1 C1 1uF CAP CER 1.0UF 10V X7R 0805
15 1 L1 22uH INDUCTOR 22UH 100MA 10% SMD
16 1 IC1 N/A SOCKET IC OPEN FRAME 28POS .3″
17 1 IC2 N/A SOCKET IC OPEN FRAME 20POS .3″
18 1 IC4 N/A SOCKET IC OPEN FRAME 8POS .3″
19 1 J1, J3, J2 NA SINGLE ROW HEADER, 1 X 40
20 1 S1 GO SWITCH TACT 6MM SPST H=5MM
21 1 C4 DNP not installed
22 1 C5 DNP not installed
23 1 TP1 12V_SW test point

表 AVR HV Rescue Shield 2 の部品表(HVRescue_Shield_r21_BOM.xlsx)

引用元 https://mightyohm.com/blog/products/hv-rescue-shield-2-x/

有難いことに「AVR HV Rescue Shield 2」を作るのに必要な全情報が作者のMightyOhmさんによって公開されている。

下写真に今回使う電子部品を示す。

写真 「AVR HV Rescue Shield 2」に使う部品(主にマルツで購入)

下写真に大小二種類の表面実装抵抗があるが、

上: 2012M(0805)サイズ (今回使うサイズ)
下: 3216M(1206)サイズ (ワテが良く使っているサイズ)
だ。

写真 上の2012M(0805)サイズのSMD抵抗を使う。下は比較用3216M(1206)サイズ

しかしまあ上写真にあるようにマルツさんで部品を少量買うと、手書きで型番が書かれているのだ。

物凄いローテクな作業だぞ。

プリンタで印字などすれば真っ先に電子化&効率化出来る作業だと思うんだが…

どないなってんねんマルツさん?

温調式半田ごては使い易い

ワテの場合、長年に渡り温調機能が付いていないごく普通の半田ごてを使っていた。

18Wと25Wを二刀流で主に25Wを使っていたのだが、25Wコテのヒーターが壊れたのを機会に、HAKKOの三本タイプの温調半田ごてステーションを購入した。

白光FM-206は定価は高いが実売価格は半額くらいなので臨時特別給付金(10万円)を使って思い切って買ってしまった。ワテ自身、いつどうなるか分からないしw。

まあ釣り好きな人が高い釣り竿買うとか、ゴルフ好きな人がハイテク高級クラブを買うみたいなもんだ。

このFM-206はワテにとってはかなり高額な買い物であったが、使い勝手は物凄く良い。半田付け作業が格段にやり易くなったのだ。今後も趣味の電子工作を続けたいので、長い目で見て自分に対する投資と考えれば良い買い物だったと思う。

実体顕微鏡を使って半田付けする

さて、いよいよ半田付けだ。

下写真のように半田付けパッドの半田メッキは表面光沢があり、半田の乗りが良さそうだ。

写真 表面実装部品から半田付け開始(LT3464 DC/DC CONV BOOST MICROPWR)TSOT23-8

上写真のLT3464DC/DCコンバーター用ICは長さ3mmほどしかないのだ。米粒くらいの大きさだ。

まずは基板にフラックスを塗布する。

このフラックスはアマゾンで一個300円くらいなのに、二個セットだと1000円になる。アマゾン七不思議の一つだ。

さて、フラックスを塗布した場所にICを載せて、端っこのピンを一つだけ軽く半田付けする。

必要なら予めその端っこのパッドに軽く半田を盛っておくと良い(予備半田)。予備半田を大盛りにするとICが傾斜するので、薄く盛るのがコツだ。

写真 TSOT23-8サイズのDCDCコンバーターICを手半田した(横から撮影)

その後で、残りの全部のピンを半田付けした(上写真)。

下写真は6pinのMUN5311DW1T1G(NPN+PNP Dualトランジスタ)SOT-363 (SC-88)を半田付けした。

写真 MUN5311DW1T1G NPN+PNP DualトランジスタSOT-363 (SC-88) 6pinを手半田した

これらのICの半田付けには下写真の極細の半田ごてを使った。

ワテ自作のお助け孫の手ツールが活躍

さて、こんな米粒みたいな表面実装部品(SMD)を手半田する時のテクニックと便利ツールを紹介したい。

下写真がワテ自作の「半田付けお助け孫の手」だ。

写真 ダイソーバーベキュー串を使ったワテ自作の「半田付け作業お助け孫の手」

「半田付け作業お助け孫の手」の作り方は下の記事で作り方を紹介している。

【ワレコのDIY】マグネット式半田付け固定台を自作した【100均電子工作ステーション】
写真 よーし、半田付けするぞ!と張り切っている電子工作カウガール自称DIYの達人のワテが電子工作の作業環境の作業性を向上させるべく、独自設計の各種便利ツールをDIYで作ったので紹介したい。具体的には、以下の三つの作品を作成した。 超強力照明...

下写真は「半田付け作業お助け孫の手」でチップ抵抗 2012M(0805)サイズを押さえている様子を示す。

写真 「半田付け作業お助け孫の手」でチップコンデンサを押さえている様子(写真が暗いが)

ダイソー100円のバーベキュー串とマグネットフックを組み合わせているのだ。

チップ部品の手半田のコツ(ワレコ流)

ワレコ流のチップ抵抗の半田付けの手順としては、以下の通り。

  1. フラックスを塗布する
  2. 一方の半田パッドに薄く半田を盛る(予備半田)
  3. チップ抵抗 2012M(0805)サイズを載せる
  4. 「半田付け作業お助け孫の手」でチップ抵抗を押さえる
  5. 先ほど半田を盛ったパッドをコテで熱して半田を溶かす(これでチップ抵抗は動かない)
  6. チップ抵抗は「半田付け作業お助け孫の手」で押さえたままもう一方の半田パッドも半田付け
  7. 最初に半田付けしたパッドに半田を追加する
  8. 「半田付け作業お助け孫の手」を外して完了

こんな感じでやればうまく行った。

注意事項としては、左手で持ったピンセットでチップ部品を挟んでおいて、右手で半田付けするなどの方法はチップ部品が動いて斜めに付いてしまうので必ず失敗する(ワテの場合)。

極小のチップ部品を目的の場所に短時間に手半田する秘訣は、「半田付け作業お助け孫の手」などのツールを使ってチップ部品をしっかり固定した状態で半田付けする事。

下写真のような製品を買っても良いだろう。あるいは接着剤で貼り付ける方式もある。

ちょっと高いけれど、このSMDクランプが有れば恐らくSMD部品の半田付け作業が捗ると思う。

でも、ワテ自作の「半田付け作業お助け孫の手」なら200円で自作出来るのだ。

 

と言う訳で、下写真のようにJLCPCB基板に表面実装部品(IC、Dual TR、2012Mサイズの抵抗とチップコンデンサ)の半田付けが無事に完了した。

写真 JLCPCB基板に表面実装部品(IC、Dual TR、2012M抵抗とコンデンサ)の半田付け完了

当初は2012Mサイズのチップ抵抗やチップコンデンサの半田付けには手こずるかなと心配していたのだが、非常にスムーズに作業を終える事が出来た。

JLCPCBさんの基板の半田パッドは半田の乗りも良かった。

半田ごてのチップを大型に交換する

残りはリード部品の半田付けなので、自称半田付けの達人(あくまで自称)のワテには簡単だ。

写真 DIP28、20、8ピンのICソケットを半田付けする

でも、油断は禁物だ。簡単な作業ほど注意深くやる必要がある。

まず、下写真のように半田ごてのコテ先を大型のタイプに交換した。

写真 白光(HAKKO) コテ先 T12BCF2を取り付ける(写真は交換前の0.8C型 T12-C08 コテ先)

下写真のように無事に三つのICソケットの半田付けが完了した。

DIP28、20、8ピンのICソケットを半田付け完了

次は、基板の左右にピンヘッダー(オス)を半田付けする。このピンヘッダーは下写真のように青いArduino UNO基板のピンソケットに差し込んで使うので、半田付け作業時にもその状態にしておくと良い。

写真 Arduino UNOの上に「AVR HV Rescue Shield 2」を載せて、両者をピンヘッダで接続(半田付け前)

上写真のようにセットした後は、ピンヘッダの約ニ十カ所の半田パッドを一気に半田付けした。

次は下写真のように赤、緑の二個のLEDと、白色のプッシュボタンスイッチ(モーメンタリ型)を半田付けした。

写真 赤、緑の二個のLEDと白色のプッシュボタンスイッチ(モーメンタリ型)を半田付けした

ちなみにこの白色プッシュボタンを押す事でヒューズビットの書き換えを行うのだ。

リード抵抗を半田付けして完成

残る作業は小型のリード線タイプの抵抗を三か所に半田付けする。

三つの抵抗のうち、二個はLED(緑、赤)の電流制限抵抗だ。オリジナル回路では300Ωが指定されていたのだが、手持ちには300Ωが無かったので少し大き目の360Ωで代用した。

写真 手持ちのリード線型 金属皮膜抵抗 大小三種類(大型:1/2W、中型:1/4W、小型:1/8W)の小型を使う

下写真のようにサンハヤトのリードベンダーを使ってリード線を直角に折り曲げる。

写真 サンハヤトのリードベンダーは電子工作に必須のツールだ

ちなみに下写真が今回の作業で使った工具類一式だ。

写真 今回の作業で使った工具類一式

この溝なしラジオペンチはお勧めだ。

下写真がワテの作業机。

写真 ワテの電子工作作業机

で、下写真のように全ての部品の半田付けが完了した。

写真 全ての部品の半田付けが完了した(部品面)

写真 全ての部品の半田付けが完了した(半田面)

上写真のように半田付けの表面は光沢があり、ワテとしては中々いい感じに半田付けが出来たと思っている。

今回使ったのはΦ0.3mm、Φ0.6mmの鉛入りハンダだ。

ワテの場合、鉛フリー半田は使わない。その理由は、以前試しに鉛フリー半田を使ってみたのだが、半田付けした後の表面光沢が出なかったので。

一方、昔から使っている鉛入りハンダ(有鉛ハンダ)なら、テカテカの表面光沢が出るので好きなのだ。

AVR HV Rescue Shield 2 を使ってATmega328Pのヒューズをリセットする

さて、半田付けはスムーズに終わったので「AVR HV Rescue Shield 2」は恐らく正常動作すると期待している。

早速使ってみる。

写真 左:ブートローダー書き込みシールド(赤)、中央:Arduino UNO、右上:書き込み出来ない328P(ブレッドボード上のパーツは当実験とは無関係)

上写真の赤色基板はこれだ↴

この赤基板は、書込み出来ない三個のATmega328Pを今回作成したリセッターで無事にリセット出来たら、その後でこの赤基板とArduino UNOを使ってブートローダーを書き込んでArduino UNOとして使えるか動作確認する為に使う。

ワテはArduino UNOは二台持っている。一つは上写真の純正品。約三千円くらい。

もう一つはArduino UNO互換品だ。本体だけでなく実験用の多数のモジュール(温度センサー、モーター、LCD表示その他)がセットになって三千円程度で売られているのでお勧めだ。

AVR HV Rescue Shield 2用のArduinoスケッチをダウンロードして書き込む

Arduino UNOとパソコンをUSBケーブルで接続しておく。

まずはMightyOhmさんのサイトからAVR HV Rescue Shield 2用のArduinoスケッチをダウンロードする。

この

HVRescue_Shield212.pde

と言うファイルをArduino IDEで開くと下図が出る。

図 HVRescue_Shield212.pdeをArduino IDEで開いた

この時点では先ほど完成した「AVR HV Rescue Shield 2」はArduino UNOには挿さない。

下図のように、

ボード:Arduino UNO

にセットしておく。

図 ボードはArduino UNOを選ぶ

この辺りの作業は、普通にLEDチカチカなどのArduinoスケッチを書き込む操作と同じだ。

AVR HV Rescue Shield 2 用スケッチをArduino UNOに書き込む

下図のようにスケッチ書き込みアイコンをクリックしてHVRescue_Shield212.pdeをArduino UNOに書き込む。

その結果、下図のように無事に書き込み成功。

図 HVRescue_Shield212.pde をArduino UNOに書き込み完了した

まあここまでの作業は、LEDチカチカなどのスケッチ書き込みと全く同じ手順だ。

AVR HV Rescue Shield 2 スケッチが起動

さて、HVRescue_Shield212.pde をArduino UNOに書き込み成功すると、シリアルモニタ画面を開くと下図のように四行のメッセージが出ていれば成功だ。

図 シリアルモニタ画面が正常に出ない場合(文字化けなど)にはボーレートを合わせると良い

上図では正常にCOM4シリアルモニタ画面にメッセージが表示されているが、ワテも最初は文字化けしていた。

その時には、スケッチ中に指定されているボーレート 9600とシリアルモニタ画面のボーレートが異なる値だったので、それを同じ9600にして再度スケッチ書き込み作業からやり直したら無事に上図のように文字化けせずにメッセージが表示された。

三種類のAVRマイコンの種類を選択する

この時点でもリセッターシールドはまだ装着しては行けない。

図 三種類のAVRマイコンの種類を選択する

今回は28ピンの328Pをリセットしたいので、上図のように「1」とENTERキーを押す。

そうすると、下図のように

Selected mode: ATMEGA

Insert target AVR and press button.

と表示される。

写真 リセット対象のAVRマイコン種類の選択完了

リセッターシールドと328Pを挿す

ここでようやく自作リセッターシールドをArduino UNOに挿した(下写真)。

写真 まずリセッターシールドをArduino UNOに挿す

ここで念のためにリセッター基板上にあるTP1(12V出力テストポイント)とGND間の電圧をテスターで計測したら11.8Vが出ていたので昇圧DC/DCコンバーター回路は正常動作しているようだ。

そして328Pも挿す(下図)。

写真 328Pも挿す(三つのうちの1号機を挿した)

リセッターシールドの「GO!」スイッチ押すと赤LED光る

これで準備完了なので、下写真の白色ボタン(GO!)を押して離すと赤色LEDが点灯する(下写真)。

写真 GO!ボタン押下で赤色LEDが光る

LFUSE/HFUSEヒューズ設定値を入力するとリセット出来る

そうすると下図のようにシリアルモニタ画面には現在のLFUSE/HFUSEの値が表示されて、新規LFUSE値の入力状態になる。

図 Enter desired LFUSE hex value (ie. 0x62): のメッセージが表示された

ここで上図のようにLFUSEに 0x62 を入力してENTERすると、次は下図のようにHFUSE値の入力待ちになる。

そこで上図のようにHFUSEに 0xDF と入れてENTERを押すと下図が出る。

図 指定したLFUSE/HFUSE値が無事に書き込まれた

これで上図のように指定したLFUSE/HFUSE値が無事に書き込まれた。

AVRマイコンのリセット成功だ。

なお、ここで指定した以下の値がATmega328Pのヒューズビットの初期値かと思ったのだが、

LFUSE:62
HFUSE:DF

新品のATmega328Pで調べてみたら、初期値は以下の値だった。

LFUSE:62
HFUSE:D9

と言う事で、兎に角、今回作成したリセッターを使うとLFUSE/HFUSEに任意の二桁の16進数を設定出来ることが分った。

HFUSE/LFUSEの詳しい意味を調べた(追記)

その後、HFUSE/LFUSEの詳しい意味を調べた。

megaAVR® データシート(https://avr.jp/user/DS/PDF/megaXX8PA.pdf)の185, 186ページから以下に引用する。

下図に示すようにHFUSE/LFUSEの既定値は D9/62 となっている。

HFUSE:1101 = 0xD9
LFUSE:1001 = 0x62

図 ヒューズ上位と下位の意味

ここでCKSEL1のみ1ビットが立っている状態は以下に引用するように「校正付き内蔵RC発振器」を使う設定を意味する。

図 校正付内蔵RC発振器でAVRマイコンを動作させる設定(既定値)

つまりATmega328Pは初期状態では内蔵8MHzクロックを使う設定になっていて8分周はしない(HFUSE/LFUSE=D9/62)。

外部クリスタルで作ったクロックを使うLFUSE設定

では外部クリスタルを使ってクロックを作る場合のヒューズ設定は以下の通り。

図 クリスタル用低電力発振器を使う場合のCLSEL, SUTヒューズ設定

引用元(megaAVR® データシート https://avr.jp/user/DS/PDF/megaXX8PA.pdf)の21ページ)

従って CKSEL3~0=1111(0xF)に設定すれば8.0~16.MHzの外部クリスタル発振子を使う事が出来る。

その設定をMicrochip Studioを使って実際にやってみた(下図)。

LOW Fuse設定で内蔵RC8MHzクロックを選択 LOW Fuse設定で外部クリスタルクロックを選択

という事でAVRマイコンのFUSE設定の意味ややり方がかなり分かって来たぞ。

debugWIREとISPの違い(2025/6/8追記)

MicrochipStudioやMPLABX IDEなどの開発環境を使ってATmega328Pをプログラミングしていると、以下のような英語メッセージが表示される事が時々ある。Google翻訳で訳してみた。

Failed to launch debug session using debugWIRE.
It could be that the debugWIRE interface on the device is disabled or caused by the reset line circuitry. Make sure that the reset line is free before continuing.

Do you want to use ISP to enable debugWIRE?

 [YES/NO]が表示されるのでYESをクリック

Failed to connect to device using ISP.

The device might be in debugWIRE mode. To enable ISP, make sure that ISP is connected according to the tool user guide.

debugWIREを使用したデバッグセッションの起動に失敗しました。
デバイスのdebugWIREインターフェースが無効になっているか、リセットライン回路に問題がある可能性があります。続行する前に、リセットラインが空いていることを確認してください。

ISPを使用してdebugWIREを有効にしますか?

 [YES/NO]が表示されるのでYESをクリック

ISPを使用したデバイスへの接続に失敗しました。

デバイスがdebugWIREモードになっている可能性があります。ISPを有効にするには、ツールのユーザーガイドに従ってISPが接続されていることを確認してください。

表 AVRプログラミングで時々表示されるメッセージ

従来のワテはこのメッセージの意味を理解出来ていなかった。

debugWIREと言うのは下写真で示す接続ケーブルの事だと思っていたのだ。

写真 ATMEL-ICE-CABLE

上写真のケーブルは2×3=6ピン側はAVRマイコンボードに挿す。一方2×5=10ピン側はATMEL-ICEライターに挿す。

同様にPICKIT5ライターの場合も類似のケーブルがあり、AVRマイコンボード側は2×3=6ピンコネクタになっている。

この6ピンコネクタはICSP6コネクタと呼ばれている。

さて、debugWIREとISPの違いをChatGPTさんに質問したところ、以下のように教えてもらった。

debugWIREとISPの違い(ChatGPTの回答)

debugWIRE(dW)と ISP(In-System Programming) は、どちらも AVR マイコンを「外部から操作・制御するための通信手段」ですが、目的や使い方、動作モードがまったく異なります。

🧠 基本的な違い:目的と機能  

項目 ISP(In-System Programming) debugWIRE
🔧 主な用途 プログラム書き込み(HEX, FUSE) 実行中のプログラムのデバッグ
🔁使用頻度 通常の開発・量産時など毎回使う 必要なときだけ一時的に使う
🔌 通信方式 SPI(SCK/MOSI/MISO/RESET) シリアル(RESETラインのみ)
🧲 制御線 最低4本(VCC, GND, RESET, MOSI/MISO) たった1本(RESETラインだけ)
🎯 書き込み可  ✅ プログラム、FUSE 書き込み可 ❌ 書き込み不可(ROM変更できない)
🐞デバッグ可 ❌ 不可(書き込み専用) ✅ ブレーク、ステップ、ウォッチ可能
🔒 同時利用  できない(debugWIRE中はISP無効) ISPとは排他使用(DWENフューズ制御)

🏁 それぞれの特徴を詳しく

✅ ISP(In-System Programming)

  • AVRマイコンにプログラムを書き込むための一般的な方法。

  • 工場出荷時、ほぼすべてのAVRチップは ISP有効・debugWIRE無効(DWEN = 1)

  • 書き込みには SPI信号(SCK, MOSI, MISO)+ RESET が必要。

  • avrdude や MPLAB X の Production → Program などが ISP を利用。

✅ debugWIRE

  • リソースの少ない8bit AVR向けのワイヤ単独デバッグプロトコル

  • 使用には、High FUSE の DWEN ビットを 0(=有効)にする必要がある。

  • 有効化すると、RESETピンがデバッグ専用となり、ISPが使えなくなる!

  • デバッグ終了後には必ず「debugWIREを無効化」して RESET ピンを元に戻す必要がある。

ChatGPTさんの回答ここまで。

 

さて、debugWIREやISPは物理的な接続ケーブルなどを指すのではなく、ライター(ATMEL-ICE、PICKIT5など)とAVRマイコンとの通信方式を表しているのだ。

接続ケーブルはあくまでICSP6の6ピンコネクタだ。

debugWIREモードの場合には、RESETラインを一本だけ使ってシリアル通信方式でやっているとの事。その目的はデバッガーを使いながらAVRマイコンのプログラムを開発する時に使う通信方式だ。

一方、ISP接続の場合には、VCC, GND, RESET, MOSI, MISO, SCKの6本の線を使って通信する。このモードはデバッグ用ではなく、AVRマイコンにプログラムを書き込んで実行させる本番用の用途に使うのだ。

なるほど、そう言う事だったのか。

そしてdebugWIREモードかISPモードか、どちらを使うかはFUSEビットの設定で行うので、必要に応じてFUSEビットを設定してこれらのモードを切り替えるのだ。

例えばATmega328Pマイコンの初期状態では、HFUSE = D9となっている。

ChatGPTさんによるとその意味は以下の通り。

HFUSE = D9 の構成は:

  • DWEN(debugWIRE enable)=1(無効状態

  • SPIEN(ISP enable)=0(有効

  • RESETDIS=1(RESETピン有効

✅ つまり:

  • debugWIREは無効

  • ISPは有効

  • RESETピンも動作する

と言う事で、ワテが混乱していたdebugWIREとISPの違いやFUSEビットに関する理解をかなり深めることが出来たのだ。ChatGPTさんは何でも知っているなあ。

ちなみに以前に執筆した以下の記事はワテがdebugWIREとISPの違いやFUSEビットをよく理解せずに執筆したので誤解している記述が多かったが、今回修正しておいた。

【ワレコの電子工作】ATmega328P用の汎用I/OボードをKiCadで設計しPCBWayに発注【AVRマイコン】
ワレコArduino UNOやAVRマイコンを使った各種の実験をこの一ケ月くらいやっている。LEDチカチカから始めて、LCD文字表示、赤外線リモコンでステッピングモーターやサーボモーターを制御するところまでは出来た。当面の目標はオーディオア...
【ワレコの電子工作】Microchip StudioとATMEL-ICEでATmega328PをLEDチカチカしてDebugする【成功】
ワレコ実は最近、AVRプログラミングに挑戦中だ。取り敢えずLEDチカチカに成功した。AVRマイコンはArduinoに搭載されているマイコンチップだ。Arduino UNOを使ったLEDチカチカの実験は一年ほど前にやってみた。最初はVisua...

(追記終わり)

では、本題に戻ろう。

残り二個のATmega328Pもリセットする

残り二つのATmega328Pも下写真のように差し替えて、同様にヒューズビットを初期化した。

写真 ATmega328Pを差し替えてヒューズビットをリセットした

これで無事に三個のATmega328Pマイコンのヒューズ設定を初期化出来た。

リセットしたATmega328PにArduino UNO用ブートローダーを書き込んでみる

では最後の作業だ。

リセットしたATmega328PにArduino UNO用ブートローダーを書き込んでみる。これで正常にブートローダーを書き込む事が出来ればこれらの328PはArduino UNOに載せて使う事が出来るよになる(はずだ)。

Arduino ISPスケッチを書き込む

まずは下写真のArduino UNOをUSBでパソコンに接続する。

そしてArduino ISPスケッチを書き込むのだ。

写真 赤色(ブートローダー書き込みシールド)とヒューズリセットした3個の328P

具体的には下図のように

ファイル -> スケッチ例 -> 11. ArduinoISP -> Arduino ISP

を選択してファイルを開く。

図 Arduino ISPスケッチをArduino IDEに読み込む

そして下図のようにArduino ISPスケッチをマイコンボードに書き込めば成功だ。

図 Arduino ISPスケッチをマイコンボードに書き込む

下図のように「ボードへの書き込みが完了しました」メッセージが出れば成功だ。

図 Arduino ISPスケッチを書き込み成功

ブートローダー書き込みシールドを挿す

そして下写真のようにブートローダー書き込みシールドを挿して、その上に328P(1号機)を挿す。

写真 ブートローダー書き込みシールドを挿して、その上に328Pを挿す

下写真のように

ツール -> 書込み装置:”Arduino as ISP”

を選択する。

図 書込み装置:”Arduino as ISP”を選択

ブートローダーを書き込む

最後に

ツール -> ブートローダーを書き込む

を実行する(下図)。

図 ツール -> ブートローダーを書き込むを実行する

その結果、上図のメッセージのように無事にブートローダー書き込みに成功した。

この328P(1号機)はその後Arduino UNOに挿して無事にArduino UNOとして動いたのだ。

エエ感じや!

328Pの2号機、3号機はなぜかブートローダー書き込み失敗

ところが残り二個の328P(2号機、3号機)も同様にやったのだが、なぜかブートローダー書き込みエラー(下図)。

図 328Pの二号機、三号機はブートローダー書き込みエラー

あかんw

まとめ

ワレコ

う~ん、AVRマイコンは難しいわ。

当記事ではATmega328PなどのAVRマイコンのヒューズビットを任意に設定出来る「AVR HV Rescue Shield 2」の製作過程とそれを使ったリセット作業の過程を紹介した。

AVR HV Rescue Shield 2の公式サイトには製作に必要な全てのデータが公開されている。そのデータの中にはEAGLEで出力したプリント基板の設計データ(Gerberデータ)もあるので、今回はそのデータを拝借してJLCPCBさんに基板を発注した。

JLCPCBさんのサイトにガーバーデータをアップロードして、僅か六日で基板が自宅に届いた。

その基板を使って、無事にAVR HV Rescue Shield 2を完成させる事が出来た。これは所謂AVR用ヒューズリセッターシールドと言う事になる。

そのリセッターシールドを使って328PマイコンのLFUSEとHFUSEの値を任意の二桁の16進数に書き換える事に成功した(328Pチップを三個)。

ヒューズビットを初期化した三個の328Pチップにブートローダー書き込みシールドを使ってブートローダーを書き込む実験をした結果、一個の328Pは無事にブートローダー書き込み成功。

でも残り二個の328Pはブートローダー書き込みエラー。

原因は不明だ。

と言う訳で、AVRマイコンは難しい。

引き続き調査だ。

(続く)

スポンサーリンク
コメント募集

この記事に関して何か質問とか補足など有りましたら、このページ下部にあるコメント欄からお知らせ下さい。

ArduinoAVRDIY&電子工作半田付け
スポンサーリンク
シェアする
warekoをフォローする
スポンサーリンク

コメント