最終更新日
記事公開日

はじめてのATTINY!PICマイコンから乗り換えに挑戦

ATTINY402

今回は、以前から気になっていた「ATTINY」を使ってみることにしました。

AVRマイコン ATTINY402-SSNR - 秋月電子

ATTINYは、Arduinoボードに載っているIC(マイコンチップ)部分だけを取り出したような存在。

USB端子やピンヘッダーが付いていない分、より小さなサイズで回路を構成できます。

これまで、回路をコンパクトにしたいときには、ATTINYのライバル的存在でもある古参のPICマイコンを使ってきました。

しかしPICは、初期設定などをビット指定で書く必要があり、Arduino系に比べると少し取っつきにくい。

しかも、書き込みの際には専用ライター「PICkit」が必要です。

そこで、安価な書き込み装置が使えて、コードの記述もArduino寄りで扱いやすいATTINYへ、PICからの乗り換えにチェレンジしてみました。

書き込みに必要なもの

ATTINY IC書き込み回路

※追記※

写真では、抵抗や積セラを配置していますが、これは書き込みエラー対策として一時的に設置していたものです。

実際には、パソコンを再起動したり、USBケーブルを抜き差しすると必ず書き込みエラーが発生してしまい、根本的な解決には至りませんでした。

最終的に、書き込みエラーが起きた際は、UPDIライターのPWRピンを一度抜き差しすることで確実に解消できることが分かったため、これらの部品は結果的に不要でした。

ATTINYを使用するために必要なものは以下の通りです。

  • ATTINY IC
  • 書き込み装置
  • 抵抗(4.7kΩ)
  • 積層セラミックコンデンサ (0.1μF)
  • 変換基板 or ソケット

ATTINY IC

ATTINYにもいくつか種類がありますが、今回は以前よく使っていた「PIC12F683」と同じ8ピン構成の「ATTINY402」を選びました。

秋月電子で購入する場合、ATTINY402は1個70円。

一方、PIC12F683は1個250円ほどするので、かなりリーズナブルです。

ATTINY402とPIC12F683のスペック比較

ATTINY402PIC12F683
コアAVRPIC
ROM4KB3.5KB
RAM256B128B
EEPROM128B256B
動作電圧1.8V~5.5V2.0V~5.5V
クロック20MHz20MHz
値段70円250円

書き込み装置

ATTINY402にプログラムを書き込むためのUPDI通信ライターです。

UPDI用ライター - AliExpress

※配線の取り違えに注意!

このUPDIライターは、購入時の状態では、GNDが「赤」、PWRが「黒」の配線になっています。

一般的な配線色とは逆になっているため、そのまま接続すると誤配線の危険があります。

安全のため、コネクタを一度引き抜き、ケーブルを逆向きに差し替えておくことをおすすめします。

コネクタの端子ロックを解除

画像の部分で端子がロックされていますので、この部分にピンセットなど先の細い工具を差し込んで持ち上げながらケーブルを引っ張ると、端子を傷めずに抜くことができます。

抵抗(4.7kΩ)

UPDIラインを安定化させるために、VDD - PA0間に4.7kΩのプルアップ抵抗を接続しておきます。

この抵抗が入っていないと、スケッチ書き込み時に、UPDI初期化エラーが発生する場合があります。

カーボン抵抗(炭素皮膜抵抗) 1/4W4.7kΩ - 秋月電子

積層セラミックコンデンサ (0.1μF)

電源ラインの電圧を安定化させるために、VDD -GND間に0.1μFの積層セラミックコンデンサを接続しておきます。

このコンデンサが入っていないと、スケッチ書き込み時に、UPDI初期化エラーが発生する場合があります。

積層セラミックコンデンサー 1μF50V X7R 5mm - 秋月電子

変換基板 or ソケット

変換基板とソケット

1.27mmピッチのICのため、ブレッドボードで実験する際は2.54mmピッチの変換基板に実装しておくと便利です。

SOP8(1.27mm)DIP変換基板 金フラッシュ - 秋月電子

プリント基板などに実装する場合は、ソケットを使って、プログラムを書き込みます。

SOP8変換ソケット - AliExpress

スケッチを書き込むための配線

ATTINY402のピン配

UPDIライターをATTINY402に接続します。

UPDIライターとATTINY402の配線図
  • UPDI - PA0(6Pin)
  • VCC - PWR
  • GND - GND

配線が完了したら、UPDIライターをUSB Type-Cケーブルでパソコンと繋ぎます。

パソコンのデバイスマネージャー(Windowsアイコンを右クリック)を開き、ポート(COMとLPT)のところに「USB-SERIAL CH340(COM●)」と表示されていれば、正常に認識されています。

※COM●の番号は、環境によって異なります。

デバイスマネージャーに「USB-SERIAL CH340」が認識された様子

もし、USBが認識されない場合は、主な原因として以下の2つが考えられます。

① CH340ドライバーが未インストール

パソコンが、シリアル通信を行うための変換チップ「CH340」を正しく認識するには、専用ドライバーが必要です。

下記リンクから CH340ドライバーをダウンロードしてインストールし、パソコンを再起動してください↓

https://www.wch.cn/downloads/CH341SER_EXE.html

②USB変換ケーブルを使用している場合

私の環境では、USB Type-CをType-Aに変換するケーブルを使用すると、正常に認識されませんでした。

もしかすると、この変換ケーブルが充電専用のものだった可能性もあります。

データ通信に対応した変換ケーブルであれば認識されるかもしれませんが、未確認です。

プログラム(Lチカ)

LEDを点灯するだけのテストプログラムです。

void setup() {
  pinMode(PIN_PA3, OUTPUT);
}

void loop() {
  digitalWrite(PIN_PA3, HIGH);
  delay(500);
  digitalWrite(PIN_PA3, LOW);
  delay(500);
}

Arduino IDEの設定

Arduino IDEを開き、上部メニューの[ファイル]-[基本設定]を開きます。

「追加のボードマネージャ―のURL」に下記のURLを入力し、「OK」をクリックします。

https://descartes.net/package_drazzy.com_index.json
追加のボードマネージャ―のURL

上部メニューの[ツール]内を以下のように設定します。

  • ボード:ATtiny412/402/212/202
  • ポート:COM●(※環境によって異なります)
  • 書き込み装置:SerialUPDI – 230400 baud
Arduino IDEのツール設定

あとは書き込みボタンをクリックして、下記のようなログが表示されれば、データの書き込みは正常に完了しています。

Action took 0.01s
Writing from hex file...
Writing flash...
[                                                  ]
[=======                                           ] 1/7
[==============                                    ] 2/7
[=====================                             ] 3/7
[============================                      ] 4/7
[===================================               ] 5/7
[==========================================        ] 6/7
[==================================================] 7/7
Action took 0.09s
Verifying...
Verify successful. Data in flash matches data in specified hex-file
Action took 0.03s

Lチカ確認

ATTINY402でLチカ

無事にLチカまでたどり着きました。

やはりPICに比べて断然扱いやすいです。

OLEDディスプレイ表示

ATtiny402でOLEDディスプレイ表示
ATtiny402とOLEDディスプレイの配線接続図
#include <Wire.h>
#include <SSD1306Ascii.h>
#include <SSD1306AsciiWire.h>

#define OLED_ADDR 0x3C
SSD1306AsciiWire oled;

void setup() {
  Wire.begin();
  Wire.setClock(100000L);
  oled.begin(&Adafruit128x32, OLED_ADDR);
  oled.setFont(System5x7);
  oled.clear();
  oled.println("Hello OLED!");
}

void loop() {}

I2C通信でOLEDディスプレイに文字を表示します。

  • SCK(SCL) → PA2(5ピン)
  • SDA → PA1(4ピン)

使用したディスプレイは、以下になります↓

LEDディスプレイモジュール(0.91inch/白文字) - AliExpress

書き込みエラーの対処法

もし書き込みの際に、下記のようなエラーが発生した場合。

pymcuprog.pymcuprog_errors.PymcuprogError: UPDI initialisation failed
Failed programming: uploading error: exit status 1

UPDIライターのPWRピンを一度抜き差ししてみてください。

もっと根本的な対策法が分かれば良いのですが、今のところ抜き差し以外の対処法は見つかっていません。

私の環境では、パソコンの電源を落としてしまうと、次の起動時には必ず書き込みエラーが発生し、ブレッドボードに差してるPWRピンを抜き差ししないと、正常に書き込むことができません。

この記事のURLをコピー

メールアドレスは公開されませんのでご安心ください。また、* が付いている欄は必須項目となります。

内容に問題なければ、下記の「コメントを送信する」ボタンを押してください。

関連情報

  • 【2025年度版】マイコンおすすめランキングBEST5
運営者プロフィール
コダマ

職業はIT系フリーランス。過去、電子配線業務の経験が10年ある為、はんだづけも得意です。宮崎県在住、30代・2児の父親。

プロが教える!イチからわかるハンダ付けのコツ(工学社)の著者です。

カテゴリー