cuLo MOD Studio!

ギター、エフェクター、電子回路をつらつらと。

素人がATmega328PにMPLAB X IDEとSNAPを使ってC言語でプログラミングする物語 /*コンパイルからVerifyまでの壁*/

 明けまして御目出度うございます。昨年はなんだかんだ忙しく更新は滞りまくり、PCオーディオコンプレッサもなかなか手が付けられず仕舞でした。現在は「2.54mmピッチをやめる」という選択をしたことによって回路図はほぼ出来上がりになりました。あとはPCBと部品の発注という段階です。cuLoの統合開発環境は何だかんだいって常時ビジー状態です。今年は心機一転改めてブログ、製作を進めたいですね!。出来る気しないけど・・・。

 PCオーディオコンプレッサで2.54mmピッチを辞めるという決意をした結果、より回路が複雑になりました。というか欲が出てしまった感じ。その結果、回路上にマイコンを搭載、C言語で直接書いてオーディオレベルメータを高速に動かそうみたいな気持ちがグングン湧き上がってきて溢れかえってこの記事を書きます。

 

 ちなみにこの記事は自分の為の忘備録兼同じ轍を踏む仲間達への人柱として書き残しますが、この記事を参考にもしお手元のSNAPとかATmega328Pが破損しても私のせいではありませんのでその辺よろしくお願いしますよ。

 

・PCのスペックと用意したモノ。

使用パソコンスペック概要

 ・メーカー/型名:Acer/Aspire E5

 ・OS:Windows 10 Home 64bit

 ・CPU:i3-6006U@2GHz

 ・RAM:DDR3 16GB (8GB x2)

 ・SSD:Crucial 1TB SSD

 随分前に買ったノートパソコンで元々HDDだったものをSSDに換装、メモリはデュアル8GB x2に変更しています。メモリ増設以前は立ち上げるだけで数分~10分くらい激遅PCでしたが、メモリ増設でだいぶマシに。先日SSD換装した事によって普通に使えるレベルまで復活しました。CPUがそもそもローコスト向けの様でちょっと検索すると「ゴミ」扱い・・・。いやまぁハイスペックだ!とは言わないけど高度な処理しない限り大丈夫ですね。このPCでDesignSparkPCBも動かしてます。ここで言いたい事はこの位のCPUでも大丈夫ですって事です。

 

USBハブ

 エレコム製U3H-A408SBK USB3.0 x3 別電源供給可能品。もちろん使わないほうがいいんですが、使えたんで記載。別電源も必要なかった。USB端子のうち1つが故障中、一つはマウスで使用。で残り一つでATmega328P用電源とSNAPの接続をする必要があったため使用。この手の組み込みマイコン用プログラムはハブが入ったりすると書き込みや接続に失敗することがあるので基本的には使わないのがデフォルトな印象があります。もしハブを使って書き込めないならとりあえず外してみるのが定石ですね。

 

MPLAB X IDE (Ver:6.0.5)

 Microchip製の統合開発環境。とりあえずAVR系マイコンの開発環境AVR Studioと迷ったんですが、Microchipが2016年にATmelを買収したとの事で今後はMPLAB X IDEへ統合が進められると思われます(勝手な妄想なので注意)のでX IDEをインストールしました。注意点としてコンパイラ(ここではXC8)も別途ダウンロードする必要がありますね。

 

MPLAB SNAP

 SNAPというローコストインサーキットデバッガです。Pickit4と比べてなんか制限があるようですが大丈夫でしょう。余裕のある人はPickit4とかを買ったほうが良いです。秋月でPickit4は12,800円(’23年1月現在)SNAPは秋月在庫切れでMouserで購入5042円でした(22年12月購入)。ところでSNAPで検索すると過去SNAPを使って書き込みを行った先人たちのブログが出てくるんですが、当時SNAP1000円台とか2000円台で買えたようです。インフレです。

 

ATmega328P(Arduinoではない!)とその他小物。

 今回のターゲットデバイスはATmega328Pを使います。アルディーノによく載っているデバイスですが、アルディーノ用ブートローダーが書いてない素ATmega328Pです。このシリーズではこの「ATmega328P」をターゲットデバイスとか、単にデバイスとか表現したりしなかったりします。他に下記の小物を用意しました。

 ・ATmega328P(非アルディーノ)※ターゲットデバイスと表記したりする。

 ・MPLAB SNAP※デバッガ、ライターと表記したりする。

 ・ブレッドボード

 ・ジャンパー線

 ・抵抗&LED(プログラミングチェック用)

 ・USB-Bコネクタ変換(ターゲットデバイス電源用)

 ・Micro USB-B2.0(PC-SNAP接続用)

 

 

・書き込みの接続端子どう繋げばいいの壁。

 これが最初の壁でした。書き込み端子どのように接続する?。そもそもどのような通信方式でSNAPとターゲットデバイスはやり取りするのだろう。SNAPの説明書はweb上にあるので読み込んでみると。

え?。詳細はPickit4を見ろて雑だなぁ(しかし業界よくあるイメージ?)。X IDEのヘルプから飛べるのでそこから見ろとな…結果ヘルプに有るweb版pickit4説明書にゃ載ってない!。HTML版の説明書をほぼ一通りチェックしましたが見つからず、ダメ元でPDF版をみるとありました。

この情報から配線をすると下の図になります。

最終的にこの配線でプログラムが書けることが判明しています。注意点はSNAPのVDDはターゲットを起動するほどの電流を流せないので別電源を用意する必要がある点。ネットの海にはSNAPからVDDを出力する改造を施す方法もあるようです。もう一つの壁、書き込み方式はISPを使うようです。別途SNAPを正しく認識させたら「Project Properties」→「snap」→「option categories」で「communication」を選択→「Interface」で「ISP」を選択。

SNAPが認識されている(S/Nが見えている状態で)あれば上記設定可能だとおもいます。

 

・SNAP認識されない壁。

 とりあえずデバッガがあったらPCに接続して繋がるかを確認するのは人類のサガだと思います(?)。もれなくcuLoもその辺にあったマイクロUSBで接続したところSNAPの上に配置してある緑色LEDが点灯、接続チェックが確認できました。さっそくX IDEで簡単なプログラムを組んで書き込みしてみたところが、全然書き込めない…!。「BUILD SUCCESSFUL」とOutput ウィンドウには出ているのでコンパイルまではPC内で出来ているがターゲットデバイスには書き込めていないという状態。

ウインドウに表示されているエラー文。

「Data transmission failed. Error code -10121 returned while trying to receive USB data」

いろいろ試してもBUILDまでしか成功しないので、何となく怪しいと思っていたSNAPがちゃんとIDEに認識されているかを確認するためにデバイスマネージャーを開きました。バイスマネージャーって見にくいですよね。まずユニバーサルシリアルバスコントローラの項目をとりあえずチェック。どれかわからんぜ…のでとりあえずSNAPを抜き差ししてみる。デバイスマネージャーが更新…されない!。原因はマイクロUSBケーブルがどうも充電専用?だったようです。新しく買ってきたマイクロUSB2.0ケーブルを挿して再度チャレンジ。認識できたようです。どうもX-IDEでちゃんと認識しているかはデバッガのシリアルナンバーが表示されることでわかるようです。

 

・SNAP認識されてるけどターゲットデバイスに書き込めないという壁。

 SNAPの接続まではクリアできた。接続はクリアできたはずなのにエラーが出ます。

 

ウインドウに表示されているエラー文。

Data transmission failed. Error code -10121 returned while trying to receive USB data

 

変わらずエラー文は同じです。

気が付くとSNAPの緑色LEDが点灯していない!。調べていくとHardware Tool Emergency Boot Firmware Recoveryというのをする必要があるとの事。

とりあえず実行するとSNAPのJ3端子を1秒ショートさせろとありますので、ピンセットでつまんでショートさせます。その後画面に従って進めていくとSNAPのファームウェアがリセットされる書き込みが始まり最終的に成功したと表示されればOK。再度USBをつなぎなおして無事緑LED点灯しましたのでファームウェアのファクトリーセットが完了したと思われます。

 

・書き込み成功!からの言語の壁。

 でmain.cに次のプログラムを書き込み。 

 内容はポートCの5,6を出力設定。その後whileで無限ループ、6をHIGH、5をLOW。1秒待機、6をLOW、5をHIGH。1秒待機。ループへ戻る。programming&Verifyが通った!

撮影した写真は別の両方同時点灯のプログラムだったのですが、無事書き込みできました。さてここで最後の壁。cuLoはC言語が書けないのである…。

 

ではまた。

 

このエントリーをはてなブックマークに追加