feat: Hello ATtiny10!

超小型ワンチップマイコンを使おう!
以前、といっても 2022年4月末ですから結構な昔、書いたんですよ、こんなマイコンの紹介記事を。米粒AVR なんて愛称が付いた AVR ATtiny10 についての Hello ATtiny10! って言う記事を。

下段中央が ATtiny10
なかなか試す機会が来ず、秋月電子で取り扱われるようになってから 10年以上を経てやっとこ使ってみたら思いのほかエキサイティングで、その衝動にまかせて紹介記事を書いたのでした。
実際その体験のいくつかはシリーズ記事にしたのですが、紹介記事 Hello ATtiny10! の方は環境構築方法の一つも具体的に扱わず、記事を読んでもタイトルとは裏腹に Hello にはたどり着けないおそまつなものでした。反省してます。
そこで今回は、実際にこの超小型ワンチップマイコンを試すために必要なものを紹介していきます。私の他の記事では回路図や HEXファイルを公開しているので、それを焼ける程度の準備はしようと、そういうわけです。記事のタイトルの feat: には、実質的に実装されていなかった Hello ATtiny10! をここで実装するぞという意味を込めています。
ひとまず焼き直し
いったん紹介済みの概要を焼き直します。新しい情報は無いので、必要であれば以下詳細を開いてご確認ください。
スペック
電源電圧は 1.8V からなので、乾電池 2本で動かせます。
パワーダウン時の消費電力も極小なので、これも電池向きです。パワーダウンからはウォッチドッグタイマーやピン割込みで覚ますことができます。
- コア: tinyAVR(8bit)
- 電源電圧: 1.8 ~ 5.5V
- クロック: 12MHz(8MHz@2.7V、8MHz オシレータ内蔵)
- プログラムメモリ(NVM): 1024 bytes(512 words)
- SRAM: 32 bytes
- 汎用レジスタ: 16個
- GPIO: 4pin
- ADC: 8bit 4ch
- タイマ: 1ch
- WDT: 16ms ~ 8s 周期
- 動作電流: 200μA(活動時 1MHz, 1.8V)、0.1μA以下(パワーダウン時 1.8V)
💡 詳しい情報はこちらから。
- ATtiny4/5/9/10 – Complete Datasheet – 英語、ハードウェア仕様と命令セットまで載ってる
- AVR.jp – 有志による各種日本語訳の資料がある(リンクに制限があるので検索で)
- ↑データシート: tiny10.pdf – ハードウェア仕様と命令セットまで載ってて、これで一通り使える
- ↑データシート: AVRinst.pdf – AVR命令セット、ATtiny10 はこの中の AVRrc の分類
- ↑AVR/Atmel Studio: AVR_Assembler.pdf – AVRアセンブラの仕様
- ↑AVR/Atmel Studio: AVR_Simulator.pdf – AVRシミュレータの使い方
入手方法
秋葉原にある秋月電子で売ってます。通販もあります。

秋月電子 通販
現在お値段 60円です。最初は 80円くらいだったと思いますが 45円まで下がり、50円を経て 60円です。今となってはもっと高性能なマイコンも安く売ってますから、安いとは言えないのが寂しいです。
ATtiny10 とプログラマの接続
書き込み時のプログラマの 6pin コネクタと ATtiny10 のピンアサインはこんな感じです。

ISP時ピンアサイン
ATtiny10 とプログラマは以下の接続で書き込むことができます。
| ATtiny10 | USBASP | AVRISP mkII |
|---|---|---|
| 1 TPIDATA | 4 MOSI | 1 MISO |
| 2 GND | 6 GND | 6 GND |
| 3 TPICLK | 3 SCK | 3 SCK |
| 5 VCC | 2 VCC | 2 VCC |
| 6 RESET | 5 RST | 5 RST |
プログラマによって TPIDATA に接続する信号線が違うのがハマりポイントだと思います。ここでは入手性の良さから USBASP を前提として取り扱います。
これを買おう!
ハードウェアが相手なので、いくらか道具を揃えないと手も足も出せません。Amazon とかヨドバシ通販を覗いてみると実物もすぐ見つかると思います。
プログラマー(ライター)
必須度: ⭐⭐⭐⭐⭐
AVRマイコンにプログラムを書き込むための機械です。書き込めなかったらただの食べられない米粒ですので、Amazon とか Aliexpress とかで USBASP を探して買ってください。
こういうやつです。

USBASP と付属品
この写真には、
- USBコネクタが付いた USBASP 本体
- ターゲットとの接続用 フラットケーブル
- そのケーブルの先に付ける 6P 変換基板
が写っていて、この全部が必要です。通販で購入の際は写真をよーく見てください。こっちのが安いじゃん!とか慌てると、変換基板が付いていなかったりしますよ。
この変換基板は、USBASP本体の 10P のコネクタを 6P のコネクタに変換するものです。
💡 Atmel社から純正のプログラマーとして AVRISP mkII というのが出ていましたが、今これをわざわざ入手する必要は無いです。ここでは紹介も省略します。
⚠ 注意
なお USBISP という商品もあるようですが、これについてはよく分かりません。ここでは USBASP を紹介します。
ブレッドボードとワイヤーと電源
必須度: ⭐⭐⭐⭐🔹
既にお持ちの方も多いと思いますが、電子工作の仮組みや実験にとっても役に立つまな板です。電子部品を挿してワイヤーで回路を引けば、はんだ付け不要でいろいろ試せます。通販でも買えますから、ぜひ持っていた方が良いと思います。ボードだけじゃなく、ワイヤーも忘れずに。

ブレッドボード
生基板とエッチング液と穴あけ道具などなど
必須度: ⭐⭐🔹🔹🔹
何も描いていない生基板とエッチング液、プリント基板を自作するには欠かせません。
今時は設計した基板を注文すれば作って送ってくれるサービスもあるので、無くてもいいっちゃいいのですが、この米粒AVR を使うにはいくらかジグを自作した方が良いので、手元にこういうのがあると気軽に作れます。これを機にいかがでしょう?

エッチング液
エッチング液は身近なクエン酸なんかを使うレシピもあるようですが、やはり電子工作用としてサンハヤトのものを選ぶと、処理剤まで付いてきて廃液処理もやりやすいと思います。ヨドバシでも買えますよ。
基板の切り出しにのこぎりやPカッター、穴開けにドリルかピンバイス、パターン描きに青マッキーなんかも欲しいですね。
この記事では片面、両面の生基板を使ったジグ作成も行います。
ジグを作ろう!
ジグとは治具なんて当て字で呼ばれたりもしますが、安定して作業をするための補助工具、自分の作業をやりやすくするためのマイ道具です。ただの丁度良い厚紙だったり、なんか曲がった棒だったり、質素なものも多いですが、繰り返し作業には欠かせません。職人さんは作業内容に合わせて、よく自作したりもします。
さて今回は米粒を扱うので、そのままじゃブレッドボードにも乗りませんしプログラマーとの接続もままなりません。ですのでまずはこれを作ります。

開発ボードと ISPアダプタ
ブレッドボードに挿すための DIPアダプタに 6P ISPコネクタを備えた開発ボードと、ATtiny10 単体にプログラミングするための ISPアダプタ です。
💡 手書きで基板を描くなら、この方眼紙はいかがでしょうか。穴開けの印にも便利です。3種類あるのでお好みで。
(1) 開発ボード
サクッとプログラムを書き込み、ザクっとブレッドボードに挿して動かす、ISPコネクタと DIP変換を備えた基板です。

開発ボード 回路図

開発ボード プリント基板
CAD のデータなどは御座いません。両面基板を丁度良い大きさに切って、マジックでパターンを描いてエッチングして作ります。回路図とパターンに片側ショート済みのショートパッドを設けてありますが、USBASP用はこのままで。
プログラミング時はこんな風に接続します。左上が1番ピンです。

開発ボード - プログラマー接続
💡 両面基板が無かったら
薄い片面基板を2枚張り合わせても多分大丈夫です。スルーホールも作りませんし。
(2) ISPアダプタ
単体の ATtiny10 にプログラミングするためのアダプターです。

ISPアダプタ プリント基板
こちらは片面基板で製作します。開発ボードと同様に片側ショート済みのショートパッドが設けてありますが、USBASP用はこのままで。
プログラミング時は ATtiny10 を乗せてクリップで押さえてこんな風に接続します。これも左上が1番ピンです。

ISPアダプタ - プログラマー接続
制作風景
ちょっとしたノウハウ的なものがあるので、組み立ての参考になるように制作風景を紹介します。要点以外は詳細内に縮めていますので、展開してご覧ください。
基板準備
基板を作るものの大きさに切り出して磨きます。
切り出し

プリント基板厳選
👆プリント基板のストックからちょうどいいのを選び、ターゲットの大きさに切り出します。今回の基板は小さいので、端材から適当なものを選ぶと無駄がありません。

切り出したプリント基板
👆切り出した基板です。直角が出てないとか寸法が雑とかいう指摘は受け付けません。
穴開け

穴開け位置貼り付け
👆紙に穴開け位置を写して、それを基板に貼り付けると穴開けが簡単です。方眼紙を使うと楽ちんです。

穴開け位置貼り付け
👆印に合わせて穴を開けていきます。基板は小さいので、適当な台に貼り付けると取り回しも楽です。
磨き

磨き工程
👆プリント基板の表面をきれいに磨きます。酸化した表面や指の脂はエッチングの邪魔になるので取り除かなければなりません。ここではクリームクレンザーとスポンジの裏(というか表らしいですが)の硬いやつを使います。この硬いやつは、硬いやつだけでダイソーとかで売ってます。
ちなみに写真の 2枚の基板のうちの 1枚は、茶色くまるで銅箔面ではないように見えますが、銅箔面です。10円玉と同じように酸化しています。こういうのを磨いて取り除くのです。

ゴシゴシ磨く
👆無心で磨きます。

完成
👆こんな感じに全体が銅の色にピカピカになれば完了です。
エッチング
切り出した基板にパターンを描いてエッチングします。
パターン描き

青マッキーとニードル
👆パターンは青マッキーで書きます。青マッキーには極細のものもありますが、長時間作業しているとペン先が乾いて描きづらくなるので、私はレギュラーサイズを選んでます。このサイズで細かいパターンを描くのは難しいのですが、いいんです、このニードルがあれば。先の尖った金属の棒でインクを削ります。
💡 青マッキー
赤でも黒でもなく何故青が人気なのか、性質をメーカーに問い合わせても「そのような用途での知見はありません」とのことでしたが、Gemini によれば青色のフタロシアニン系の色素が酸に対して安定とか言ってました。ただレジスト膜は色素よりバインダーが主体のようですから、よく分かりません。青マッキーで失敗しないので、比較実験をする元気もありません。

つぶれたパターン
👆つぶれてますね。マジックで描くと、まあこんなもんです。でもこのままじゃお話になりませんのでニードルを取り出し、

パターンを削って切り離す
👆余計なインクを削ってパターンを切り離していきます。なので、ニードルは単純に尖っているより、少し扁平にヤスリで整えておくと使いやすいと思います。

部品と合わせて確認
👆こんな風に実際の部品を置いて、パターンの位置を確認したりして削り進めます。
👇こんな感じに描けたらとりあえずパターン描きは完了です。

開発ボード TOP、ATtiny10 を乗せて確認

開発ボード BOTTOM

ISPアダプタ TOP
💡 基板の余った部分は塗りつぶしておくと、溶かす銅の量を減らせてエッチング液を延命できます。
エッチング

エッチング液
👆パターンを描いた基板を容器に入れてエッチング液を注ぎます。なおこの液は使いまわしているので、容器もこんな汚い有様です。

温め
👆エッチング液は温めると溶けるのが速くなります。うちは電子レンジで温めてしまいます。このくらいの量だと 10~20秒くらいです。容器越しではっきり温かいです。

取り出し
👆つまようじなどでエッチング液中の基板を動かしながら様子を見て、銅が全部溶けたら取り出します。液はほぼ真っ黒で沈んだ基板は見えませんから、手探りで探します。
⚠取り出したら濡らしたティッシュでエッチング液をふき取ります。ふき取らずに流しで水洗いとかすると、廃液の流出やら金属のシンクが痛むやらしますので注意してください。ふき取ってから水洗いして、クリームクレンザーで磨いたりアルコールで洗ったりでインクを除去します。
👇エッチングを終え、インクを除去したらこんな感じになります。

エッチング完了
👇テスターで導通や短絡の確認をします。短絡箇所はニードルやカッターで削って修正しましょう。導通不良の箇所ははんだ付けの時になんとかしましょう。

導通・短絡チェック
はんだ付け
はんだ付けにあたっては、両面基板でもスルーホールが無いことやピンヘッダをパターン面にはんだ付けするため、ちょっと強引な手法が必要です。

基板とピンヘッダ
👆基板とピンヘッダを用意します。ISPコネクタは 2x3P ですが、1列のピンヘッダがあれば問題ありません。1列のものはいっぱい手元に置いておきましょう。

ピンヘッダの長い方を突き立てる
👆このピンヘッダはパターン面に取り付ける必要がありますが、ここではとりあえず長い方を突き立ててます。基板の裏には出っ張らないように。これではんだごてを差し込める隙間を確保できます。
⚠ このやり方はちょっと良くなかったかもです。ピンヘッダの台座には裏表があるので、この方法では裏表が逆になってしまってカッコ悪いです。事前に台座を上端にずらしておくのがおすすめです。

はんだ付けをする
👆狭いですががんばってはんだ付けをして…

台座を押し下げる!
👆台座を上から下へ押し下げます!マイナスドライバーでも定規でも使って、台座をグイっと押し下げてください。
開発ボードの方も似たアプローチです。
開発ボード組み立て

背の低い部品のはんだ付け
👆とりあえず背の低い部品 = ATtiny10をはんだ付けしておきます。
👇ピンヘッダを突き立て、両面にはんだ付けを終えたら…
💡 ここでは少し手順を改良し、最初に台座を上端まで寄せてみました

DIP変換コネクタ部分をはんだ付け
👇グイ!

押し下げる
👇ピンヘッダを突き立て、両面にはんだ付けを終えたら

ISPコネクタ部分をはんだ付け
👇グイ!

押し下げる
💡 外側のピンヘッダから付ける手順でしたが、多分内側のピンヘッダから付けた方がはんだごての取り回しがしやすかったかもです
仕上げ
仕上げに端子面を整えたり、絶縁やガイドを付けます。
端子の仕上げ

盛ったはんだがでこぼこ
👆ISPアダプタに ATtiny10 を乗せる端子部分にははんだメッキを施しますが、微妙にでこぼこしちゃいます。すると接触に問題が出るので、整えます。とりあえず、メッキというよりは少し盛る感じではんだを付けておきます。

厚み揃えるためのテープ
👆端子部分の上下にテープを貼ります。やすりではんだを削って高さを揃えますが、このテープの厚みがその高さになります。これは養生テープですが、厚すぎる気がするのでセロテープの方がいいかも。

やすりで削る
👆盛ったはんだをやすりで削ります。テープのおかげで端子のはんだの高さが揃います。

完成
👆端子面の高さが揃ったのがお判りでしょうか。これで完成です。
絶縁

ISPアダプタ絶縁
👆ISPアダプタの裏側はピンヘッダの電極が顔を出していますので、セロテープでも貼って絶縁しましょう。
ガイド設置

プラ板採取
👆ISPアダプタには ATtiny10 にぴったりはまるガイドがほしいので、まずはプラ板を採取します。これはお寿司の蓋です。なんか自慢するみたいですみません。しかしお寿司とか、私ちょっと浮世離れしたところがあるのかもしれませんね(笑)ほんと自慢じゃないんですって(笑)

穴あけ
👆ATtiny10 と合わせたりしながら、ぴったりはまる穴を開けます。カッターとかでがんばります。

位置合わせと固定
👆ISPアダプタのデバイス接続部分にプラ板の穴を合わせてテープなどで固定します。結構繊細です。

開発ボードとISPアダプタ完成
👆以上、仕上がりました。
書き込んでみよう!
開発ボードが用意できたら、テストがてらにこんなのを書き込んでみるってのはいかがでしょうか。
これはそのうち記事にしようと思って長らく放置している Tiny Music のデモですが、とりあえず「デモ1」ないし「デモ2」のボタンを押してみてください。テキスト欄に HEX が貼りつき、音楽が流れると思います。お好きな方の HEX をコピペして、demo.hex といったファイルにしてください。
開発ボードにその HEX を書き込み、こんな回路で動かしてみます。スピーカーが無かったら有線イヤホンにワニ口でつないでも良いと思います。

TinyMusic 回路図
💡 このデモは ATtiny10 で矩形波 2音と三角波 1音で曲を鳴らすものです。ブラウザ上のデモは AVR CPU と PWM の簡易エミュレータで、Tiny Music のコードを実際に走らせて音声生成動作をを確認するものです。割り込みルーチンから実行をはじめ
retiに出会うまでの間に出力された PWM の値(OCR0ALの値)を 1音声サンプルとして、これを連続的に行い音声出力する感じです。ブラウザで合成音声を出すことについては次で記事にしています。
🔊 音が聞こえる – Web Audio API 任意波形出力手法
AVRエミュレータ部分については HTML を開けば全部見られるので、お好きに読んでいただけます。スタンドアロンで動きます。
書き込み環境セットアップ
プログラマーとしては USBASP、書き込みソフトウェアとしては avrdude を使います。Windows向けしか分からないので、申し訳ありませんが他の PC をお使いの方は検索で頑張ってください。無料で入手できます。
USBASPドライバーインストール
USBASP を始めてお使いなら、まずは USBASP のドライバー のセットアップのため PC に挿す前にドライバーをダウンロードしておきます。もう挿しちゃいました?知ってます。
USBASP 公式サイト
ここでも説明(Please use this driver installation tool for Windows)されている通り、Windows へのドライバインストールには driver installation tool を使えとあり、そのリンクが示されています。
driver installation tool
USB driver installation made easy - Zadig 外部
Download から
Zadig 2.9といった、新しいやつをダウンロードします。
ダウンロードしてみると .exe だったりしてちょっと気持ち悪いのですが、Defender やらでスキャンして気持ちを整えておきましょう。
そして USBASP を PC に挿してデバイスマネージャを確認すると、USBASP が ⚠ になっているでしょうか。

⚠ USBASP - デバイスマネージャー
ここでダウンロードした zadig.exe を起動し、

zadig.exe
USBasp を選択し、ドライバーとして libusbK を選択して、Install Driver を実行します。1~2分くらいで完了して、無事 USBASP が認識されます。

USBASP - デバイスマネージャー
avrdude ダウンロード
avrdude は Arduino IDE にも入っているようなので、既に使用中の方はそのインストールディレクトリ(C:\Program Files (x86)\Arduino\hardware\tools\avr\bin あたり)のを使えると思います。
まだお持ちではないなら、GitHub からダウンロードします。
avrdude ダウンロード
latestのAssetsからavrdude-v8.1-windows-x64.zipのような Windows版 ZIP をダウンロードしてください。
ZIP を展開してお好みのディレクトリに置けばそれで完了です。ここでは例えば D:\bin\avrdude に置いたとして話を進めます。
セットアップ
書き込みのためのバッチファイルを作ります。テキストエディタを使って WriteTiny10.cmd を作ってください。
@ECHO OFF
ECHO ATtiny10 に %1 を書き込みます
PAUSE
"D:\bin\avrdude\avrdude.exe" -p t10 -v -v -c usbasp -P usb -U flash:w:"%1":i
PAUSE
これで WriteTiny10.cmd demo.hex とかやれば、書き込めます。さらにこの .cmd へのショートカットを右クリックメニューの「送る」に入れておけば、HEXファイルを右クリックして書き込みができるようになります。

右クリック 送るメニューに仕込む
💡 Explorer でパスに
shell:sendtoを指定して開くと、そこが「送る」です。
接続テスト
作った開発ボードや ISPアダプタできちんと接続できるかテストします。USBASP の ISPコネクタに開発ボードあるいは ATtiny10 を乗せた ISPアダプタを接続してください。

開発ボード - プログラマー接続

ISPアダプタ - プログラマー接続
あと、USBASP に電源供給ジャンパーがあるなら、5V を供給するようにしてください。

USBASP 電源供給ジャンパー

5V側へ
💡 このジャンパーはずっとこのままでよいと思います
そして USBASP を PCに接続して、こんなコマンドを叩きます。
avrdude.exe -p t10 -v -v -c usbasp -P usb
その結果
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.10s
avrdude.exe: Device signature = 0x1e9003 (probably t10)
avrdude.exe done. Thank you.
👆こんな感じの応答が返ったら成功です。
avrdude.exe: error: program enable: target doesn't answer.
avrdude.exe: initialization failed, rc=-1
Double check connections and try again, or use -F to override
this check.
avrdude.exe done. Thank you.
👆接続がうまくいっていないとこんなエラーが出ますので、開発ボードや ISPアダプタの出来栄えを確認してください。
書き込み
お手元に先ほどの demo.hex は用意できてるでしょうか。そしたら USBASP の ISPコネクタに開発ボードを接続してください。
そして USBASP を PC本体に接続したら、WriteTiny10.cmd demo.hex を実行します(パスは適宜調整してください)。または demo.hex を右クリックして WriteTiny10 に「送り」ます。

右クリックメニューから demo.hex を送る
ATtiny10 に D:\AVR\demo.hex を書き込みます
続行するには何かキーを押してください . . .
avrdude.exe: Version 7.0-20220508
Copyright (c) Brian Dean, http://www.bdmicro.com/
Copyright (c) Joerg Wunsch
System wide configuration file is "D:/bin/avrdude/avrdude.conf"
Using Port : usb
Using Programmer : usbasp
avrdude.exe: seen device from vendor ->www.fischl.de<-
avrdude.exe: seen product ->USBasp<-
AVR Part : ATtiny10
RESET disposition : dedicated
RETRY pulse : SCK
Serial program mode : yes
Parallel program mode : yes
Memory Detail :
Block Poll Page Polled
Memory Type Alias Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- -------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
signature 0 0 0 0 no 3 16 0 0 0 0x00 0x00
fuse 0 0 4 0 no 1 16 0 0 0 0x00 0x00
calibration 0 0 0 0 no 1 16 0 0 0 0x00 0x00
lockbits 0 0 0 0 no 1 16 0 0 0 0x00 0x00
flash 0 0 128 0 no 1024 16 0 0 0 0x00 0x00
Programmer Type : usbasp
Description : USBasp, http://www.fischl.de/usbasp/
avrdude.exe: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.05s
avrdude.exe: Device signature = 0x1e9003 (probably t10)
avrdude.exe: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude.exe: erasing chip
avrdude.exe: reading input file "D:\AVR\demo.hex"
avrdude.exe: writing flash (712 bytes):
Writing | ################################################## | 100% 4.52s
avrdude.exe: 712 bytes of flash written
avrdude.exe: verifying flash memory against D:\AVR\demo.hex:
avrdude.exe: load data flash data from input file D:\AVR\demo.hex:
avrdude.exe: input file D:\AVR\demo.hex contains 712 bytes
avrdude.exe: reading on-chip flash data:
Reading | ################################################## | 100% 1.25s
avrdude.exe: verifying ...
avrdude.exe: 712 bytes of flash verified
avrdude.exe done. Thank you.
続行するには何かキーを押してください . . .
こんな感じでエラー無く終わったら書き込み完了です。
ブレッドボードに書き込み済みの開発ボードを乗せ、回路を組んで通電した様子がこちら。
TinyMusic 実機デモ
⚠ 音量注意!
アセンブルしよう!
ATtiny10 のプログラムを作るための開発環境は無料で提供されていて、C言語やアセンブラを使うことができます。以前は Atmel Studio という名前でしたが、今は Microchip Studio for AVR という名前でリリースされています。
ダウンロード
Microchip Studio for AVR® and SAM Devices 外部
「Download Microchip Studio」ボタンを押すと画面下部のダウンロードリストにジャンプするので、「Microchip Studio for AVR and SAM Devices- Offline Installer」をダウンロードします。
リンク切れの際は Microchip Studio for AVR を検索してください。
インストーラをダウンロードしたらインストール、そして Lチカ 3種盛りまで一気に行きましょう。
Microchip Studio for AVR インストール
インストーラを起動してどんどん進めます。途中で別のパッケージをインストールしたりと、いくらか操作が必要です。

同意する

AVR を選ぶ。あとはお好みで

いらないと思うけどお好みで

選択内容の確認

Install 開始

インストール中

途中でコンパイラのインストールが始まる

Free版で

インストール先を確認して Next

「Add xc8 to the PATH...」を追加選択しました

Next で

インストール中

なんか Host ID とかがもらえるみたいです

完了

さらにドライバを何個かインストール

完了。なんか Warning 出てますが。
日本語化はあきらめる
結論から言うと、日本語化はあきらめましょう。英語でもきっとなんとかなります。たぶん。まあ失敗の過程でも。

とりあえず起動

[Tools] > [Options] > Environment > International Settings
👆日本語化のため、Get additional language をクリック

Japanese を選択、ダウンロード

この仕打ち
👆ダウンロードした vs_langpack.exe を実行してもこうなっちゃいます。Microchip Studio は中で Visual Studio を使っているようですが、Visual Studio としてインストールされてはいないので日本語化できないと。しょうがないので日本語化は諦めます。なんでも Visual Studio 2015 単体を別途インストールすると日本語化できるって話もあるようです。
USBASP で書き込む設定(強くお勧め)
開発環境のメニューに USBASP で書き込むコマンドを登録します。

とりあえず起動
👆スタートアップページが邪魔なら左下の Show page on startup のチェックを外しましょう

[Tools] > [External Tools]
👆External Tools に USBasp の書き込みコマンドラインを書いて登録します。
| 項目名 | 設定値 |
|---|---|
| Title | USBasp ATtiny10 |
| Command | D:\bin\avrdude\avrdude.exe 💡実際のパスに合わせて |
| Argument | -p t10 -v -v -c usbasp -P usb -U flash:w:"$(ProjectDir)Debug\$(TargetName).hex":i |
| Initial directory | 空欄で OK |
| Use Output window | チェック |

書き込みメニュー
👆[Tools] メニューに USBasp ATtiny10 が追加されます。これを選ぶと書き込みが実行できます。
プロジェクト新規作成
[File] メニューから新しいプロジェクトを作ります。

[File] > [New] > [Project]
👆New Project ウィンドウの左側ではもちろん Assembler を選択して、あとはプロジェクトの名前やパスを入力します。
⚠ パスなどの名前に日本語が入っていると具合いが悪いので、注意

デバイス選択
👆ATtiny10 を選択します。右上の検索窓で tiny10 とか入れると選択しやすいです。

作成完了
👆ひな形の main.asm が出来上がります。
サンプルプロジェクト Lチカ 3種盛り
新規プロジェクトを作ったら、こんなデモはいかがですか。ソースコードを貼り付けて、アセンブル([Build] > [Build Solution])して、USBASP で開発ボードを PC に接続して、書き込み([Tools] > [USBasp ATtiny10]) して、PB0、PB1、PB2 に数十Ω程度の抵抗を介して LED を繋げばこんな感じにチカチカします。
| ピン | 1秒生成源 | 精度 |
|---|---|---|
| PB0(赤) | クロック数ぴったりのビジーウェイト | 単体ではクロック数ぴったりだが、ウェイト中に他の Lチカの処理が割り込まれる分遅れていく |
| PB1(黄) | タイマー | ハードウェアでクロックを過不足無くカウント、一番正確なはず |
| PB2(緑) | ウォッチドッグタイマー | スペック上の源クロック 128kHz というのがあくまで目安というレベルで精度が悪い(遅い) |
👇こちらを main.asm にコピペしてアセンブル。
; Lチカ 3種盛り
#define LED_LOOP PB0 ; 15625クロック(0.5秒)ビジーループ Lチカ
#define LED_TIMER PB1 ; 15625クロック(0.5秒)周期タイマー Lチカ
#define LED_WDT PB2 ; 0.5秒周期 WDT Lチカ
.DEF CONST_CCPID = R16
.DEF WAITL = R17
.DEF WAITH = R18
.DEF TMP = R19
.ORG 0
rjmp RESET ; 1 RESET
reti ; 2 INT0
reti ; 3 PCINT0
reti ; 4 TIM0_CAPT
reti ; 5 TIM0_OVF
rjmp INT_TIMER ; 6 TIM0_COMPA
reti ; 7 TIM0_COMPB
reti ; 8 ANA_COMP
rjmp INT_WDT ; 9 WDT
reti ; 10 LVM
reti ; 11 ADC
RESET:
; SP設定
ldi TMP, LOW(RAMEND)
out SPL, TMP
; 定数初期化
ldi CONST_CCPID, 0xd8
; システムクロック 31.25kHz
ldi TMP, 0x08 ; 256分周
out CCP, CONST_CCPID
out CLKPSR, TMP
; PB0, PB1, PB2 を L に
ldi TMP, 0x00
out PORTB, TMP
; PB0, PB1, PB2 を出力ピンに
ldi TMP, (1 << PB0) | (1 << PB1) | (1 << PB2)
out DDRB, TMP
; 電源管理
; ADC OFF
; TIMER0 ON
ldi TMP, (1 << PRADC) | (0 << PRTIM0)
out PRR, TMP
; タイマー設定 0.5秒周期
; WGMx 0100 比較一致タイマー
; CS0x 000 停止
ldi TMP, (0 << WGM01) | (0 << WGM00)
out TCCR0A, TMP
ldi TMP, (0 << WGM03) | (1 << WGM02) | (0 << CS02) | (0 << CS01) | (0 << CS00)
out TCCR0B, TMP
; 0.5秒周期
ldi TMP, HIGH(31250 / 2 - 1)
out OCR0AH, TMP
ldi TMP, LOW(31250 / 2 - 1)
out OCR0AL, TMP
; カウンタリセット
ldi TMP, 0
out TCNT0H, TMP
out TCNT0L, TMP
; タイマー割り込みフラグリセット、割り込み許可
ldi TMP, 1 << OCF0A
out TIFR0, TMP
out TIMSK0, TMP
; WDT 設定
; WDPx 0101 0.5秒周期
; WDT割り込みフラグリセット、割り込み許可
ldi TMP, (1 << WDIF) | (1 << WDIE) | (0 << WDE) | (0 << WDP3) | (1 << WDP2) | (0 << WDP1) | (1 << WDP0)
out WDTCSR, TMP
; タイマー開始
; CS0x 001 1分周
ldi TMP, (0 << WGM03) | (1 << WGM02) | (0 << CS02) | (0 << CS01) | (1 << CS00)
out TCCR0B, TMP
; 割り込み開始
wdr
sei
MAIN:
; 15625クロック = 0.5秒 BUSY LOOP
; 15625 = ループ前(2) + ループ(3904 * 4 + 3) + ループ後(4)
ldi WAITL, LOW(3904)
ldi WAITH, HIGH(3904)
WAIT_LP:
; WAIT * 4 + 3 clock
subi WAITL, 1
sbci WAITH, 0
brcc WAIT_LP
nop
sbi PINB, LED_LOOP
rjmp MAIN
INT_TIMER:
sbi PINB, LED_TIMER
reti
INT_WDT:
sbi PINB, LED_WDT
reti
👇HEX はこんな感じ。これをファイル化して書き込んでも動かせます。
:020000020000FC
:100000000AC018951895189518952DC0189518952B
:100010002CC0189518953FE53DBF08ED38E00CBFA2
:1000200036BF30E032B937E031B932E035BF30E0C9
:100030003EBD38E03DBD3DE337BD38E036BD30E084
:1000400039BD38BD32E03ABD3BBD35EC31BF39E09A
:100050003DBDA895789410E42FE011502040E8F7BA
:0E0060000000009AF8CF019A1895029A1895A0
:00000001FF
使ってみて!
いかがですか、ATtiny10。
米粒であることに価値があるのに、それ故にブレッドボードでちょっと試すハードルが高い孤高の存在。
目を見張る性能がありながら ROM も RAM もあまりにタイニーで、アセンブラでのコーディングを強いる冷徹な存在。
それでいて手書きプリント基板や手はんだで扱える側にいてくれ、決して突き放してはいない慈愛に満ちた存在。
それがこの記事で、ぐぐっと身近になったでしょうか。いろんなものの隙間に忍ばせることができる小ささ、外付け部品も無く電源に繋ぐだけで最大 8MHz で動き出す手軽さ、今どきアセンブラを持ち出す意義がある、そして書ききれる規模。これを極めようと対峙すること自体に喜びを見出せる最高の相棒、それが ATtiny10 です。
買うもの買って、作るもの作って、あとはあなたがこの米粒に命を吹き込む番です。売り切れて伝説のマイコンになってしまう前に、さあ早く!
関連記事
🧩 【AVR ATtiny10】Tinyバトルサウンド / 全4回
🧩 【AVR ATtiny10】赤外線リモコンを作ろう / 全4回
Discussion