Edited at

秋月電子100円20ピンAVRマイコンAT90S2313をArduinoIDEでLチカしてみた。

More than 1 year has passed since last update.


20ピンAVRマイコンが100円…だと…!?

2018年4月現在、秋月電子で100円で売ってる、10年くらい前に廃版になったAVRマイコンAT90S2313が気になります。たぶん在庫は推定1000個程度かと。それがなくなれば、もう二度と入手できないでしょう。

こいつにArduinoIDEでスケッチをコンパイルして、Arduino(互換機)を使ってLチカ プログラムを書き込みできないかやってみたところ、できました。

これで、100円AVRマイコンが作れます!(けどクロック発振子20円が必要ですが。)

しかし、2~3倍の値段でFLASHメモリ16倍の32KBあるATMEGA328Pが買えるんで、100円でコスパがいいのかは疑問なんですが、ちょっとしたことに使いたいマイコンでATMEGA328Pのピン余らせて使うより、100円でできるよ!となると、かなり気になってしまいます。

同じように気になっている貴殿の参考になればと記事にしてみました。

(まともな人は後継機種ATTINY2313-20PU を使ってください。)


方法

(実は、私は最初に間違った方法で書き込んでしまい、以下の方法で書き込みできなくなりました。後述するように、何とかリカバリーして、以下の方法で書き込めるようになりました。そのため買ったばかりのAT90S2313で以下の方法は検証していないのです…。また買えばいいだけの話ですが、秋月は送料かかるので何かほかのもの買うときにとおもっていますが、2018年5月時点ではほかに買うものがない状態なので。。)


  1. Arduino Uno(互換機)を用意して、ArduinoIDEを開き、ファイル→スケッチの例→ArduinoISPメニューを選び、ArduinoISPのファームウェアのスケッチをArduino(互換機)に書き込みます。Arduino(互換機)がIPSライターのArduinoAsISPになります。

  2. Uno (互換機)にArduinoAsISPを入れると 10ピンがRESET、 11ピンがMOSI、12ピンがMISO、13ピンがSCKとなります。そのほかのArduinoはArduino as ISP and Arduino Bootloadersに解説があります。

  3. 上記ピンを下図を参考にAT90S2313に配線します。図はAtiny2313ですがAT90S2313と同じです。



  1. ただし、AT90S2313は必ずクロック発振子が必要ですので、ピン4,5番のXTAL1,2にクロック発振子をつけます。私はクロックセラミック発振子 コンデンサー内蔵タイプ 12MHzをオーバークロックで付けました。(発振子3本の真ん中はGNDに)

  2. ArduinoIDE のボードマネージャにATTinyCoreを追加します。(ATTinyCoreの追加方法)

  3. ArduinoIDEのツールボードから"ATTiny2313/4313"を選んでChip の "ATTiny2313" を選びます。


  4. Clockはつけたクロック周波数に合わせてください。合わせないとディレイなどのタイミングがずれます。

  5. その他は何でもいいです。

  6. AT90S2313はISPシリアルライターではヒューズの書き込みできないのでヒューズは関係ないです。(ヒューズの書き込みは12Vとパラレル書き込みが必要のようです。 )クロックは外付け専用なので、そもそもヒューズがありません。詳しくは AT90S2313日本語データシートを参照してみてください。

  7. サンプルのBlinkを開きます。LEDをつないだピン番号に書き換えてください。

  8. 書き込み装置を下図のようにArduinoAsISP(ATTinnyCore)にしてください。ここで(ATTinnyCore)がつかないArduinoAsISPで書き込みするとその後、書き込みできなくなるようです。(私の最初にした失敗)


ArduinoIDEのスケッチから書き込み装置を使って書き込むを実行

最大2048バイトのフラッシュメモリのうち、スケッチが834バイト(40%)を使っています。

最大128バイトのRAMのうち、グローバル変数が9バイト(7%)を使っていて、ローカル変数で119バイト使うことができます。
D:\Users\kobayashi\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino9/bin/avrdude -CD:\Users\kobayashi\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.1.5/avrdude.conf -v -pattiny2313 -carduino -PCOM3 -b19200 -Uflash:w:D:\TEMP\arduino_build_746431/Blink.ino.hex:i

avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch

System wide configuration file is "D:\Users\kobayashi\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.1.5/avrdude.conf"

中略

avrdude: AVR device initialized and ready to accept instructions

スケッチの書き込み中にエラーが発生しました
Reading | ################################################## | 100% 0.01s

avrdude: Device Device signature= 0x1e9101 (probably 2313)
avrdude: Expected signature for ATtiny2313 is 1E 91 0A
Double check chip, or use -F to override this check.

avrdude done. Thank you.

書き込みソフトのAVRDUDEIDに指定したチップ(ATtiny2313)と、チップから読み込んだDevice signature が違うといわれて失敗します。

また、以下のようにDevice signature = 0x000000とチップからうまく読み取れない場合もあります。

念のため配線を見直してください。配線が間違ってなくても2~3度失敗するときもあります。

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.00s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0xffffff (retrying)

スケッチの書き込み中にエラーが発生しました
Reading | ################################################## | 100% 0.01s

avrdude: Device signature = 0x000000
avrdude: Yikes! Invalid device signature.
Double check connections and try again, or use -F to override
this check.
avrdude done. Thank you.

一度でもDevice signature = 0x000000でなく、チップから読み込めたなら配線はあっています。

さて、このようにArduinoIDEからはAVRDUDEのパラメーターは変更できず、これ以上書き込みできませんので、ArduinoIDEのAVRDUDEの書き込みコマンド文をコピーして、コマンドプロンプトから -F を追加して書き込みを行います。

D:\Users\kobayashi>D:\Users\kobayashi\AppData\Local\Arduino15\packages\arduino\tools\avrdude\6.3.0-arduino9/bin/avrdude -CD:\Users\kobayashi\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.1.5/avrdude.conf -v -pattiny2313 -carduino -PCOM3 -b19200 -Uflash:w:D:\TEMP\arduino_build_746431/Blink.ino.hex:i -F


avrdude: Version 6.3, compiled on Jan 17 2017 at 12:00:53
Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
Copyright (c) 2007-2014 Joerg Wunsch

System wide configuration file is "D:\Users\kobayashi\AppData\Local\Arduino15\packages\ATTinyCore\hardware\avr\1.1.5/avrdude.conf"

Using Port : COM3
Using Programmer : arduino
Overriding Baud Rate : 19200
Setting bit clk period : 5.0
AVR Part : ATtiny2313
Chip Erase delay : 15000 us
PAGEL : PD4
BS2 : PD6
RESET disposition : possible i/o
RETRY pulse : SCK
serial program mode : yes
parallel program mode : yes
Timeout : 200
StabDelay : 100
CmdexeDelay : 25
SyncLoops : 32
ByteDelay : 0
PollIndex : 3
PollValue : 0x53
Memory Detail :

Block Poll Page Polled
Memory Type Mode Delay Size Indx Paged Size Size #Pages MinW MaxW ReadBack
----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
eeprom 65 6 4 0 no 256 4 0 4000 4500 0xff 0xff
flash 65 6 64 0 yes 2048 32 64 4500 4500 0xff 0xff
signature 0 0 0 0 no 3 0 0 0 0 0x00 0x00
lock 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
lfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
hfuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
efuse 0 0 0 0 no 1 0 0 9000 9000 0x00 0x00
calibration 0 0 0 0 no 2 0 0 0 0 0x00 0x00

Programmer Type : Arduino
Description : Arduino
Hardware Version: 2
Firmware Version: 1.18
Topcard : Unknown
Vtarget : 0.0 V
Varef : 0.0 V
Oscillator : Off
SCK period : 0.1 us

avrdude: AVR device initialized and ready to accept instructions

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0x000000 (retrying)

Reading | ################################################## | 100% 0.02s

avrdude: Device signature = 0xff3f00
avrdude: Expected signature for ATtiny2313 is 1E 91 0A
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: NOTE: "flash" memory has been specified, an erase cycle will be performed
To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "D:\TEMP\arduino_build_746431/Blink.ino.hex"
avrdude: writing flash (834 bytes):

Writing | ################################################## | 100% 1.98s

avrdude: 834 bytes of flash written
avrdude: verifying flash memory against D:\TEMP\arduino_build_746431/Blink.ino.hex:
avrdude: load data flash data from input file D:\TEMP\arduino_build_746431/Blink.ino.hex:
avrdude: input file D:\TEMP\arduino_build_746431/Blink.ino.hex contains 834 bytes
avrdude: reading on-chip flash data:

Reading | ################################################## | 100% 1.11s

avrdude: verifying ...
avrdude: verification error, first mismatch at byte 0x0000
0x00 != 0x37
avrdude: verification error; content mismatch

avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: safemode: Fuses OK (E:00, H:00, L:00)

avrdude done. Thank you.

D:\Users\kobayashi>

やっとこさ書き込めました。

(verifying でエラー出てるけど、動いてるのでOK..(たぶんヒューズが書き込めずにエラー出てる))


書き込みできなくなってしまい、リカバリーする。

私のした失敗ですが、書き込み装置をArduinoAsISP(ATTinnyCore)でなく、(ATTinnyCore)がつかないArduinoAsISPで-F で強制書き込みすると、その後、avrdude: Device signature = 0x000000しかでなくなってしまいました。

どうやら一度ATtinyのino(Arduinoスケッチ)で書き込みすると、こうなると思います。

この状態で数日途方に暮れてしまいましたが、USBtinyISPを書き込み装置にして、Atmel Studio4を使ってAT90S2313でコンパイルしたHEXファイルをAVRDUDEのAT90S2313指定で書き込みするとリカバリーできて、その後は、ArduinoAsISPのATtiny2313のスケッチで書き込めました。

理由は不明ですが、ATtiny2313の場合RESETピンをI/Oに使えるので、その関係かとおもいます。

それまで、AVRパラレルライターないと書き込みはダメかと思って、いろいろ調べてしまいました。

結果、いろいろな知識が身についたのでOKということで。


その他

まぁ、AT90S2313を何かにして見たいと思います。

IgorUSB http://einstlab.web.fc2.com/USB/IgorUSB.html

というUSBにつなげる方法もあるし。

けど、10年前の情報でサイトがなくなっているのが多いのが…

(現在は V-USBですね。https://www.obdev.at/products/vusb/index.html) 

USBキーボードを実装してキーボードとPCの間で通信を行う(Windows編)

https://qiita.com/binzume/items/980a4d21987a7b1831e9

[失敗]V-USBでADB USB変換

https://qiita.com/yamori813/items/64e92e78d89398d517eb

AVRマイコンとV-USBで作るUSBデバイス

https://sites.google.com/site/vusbprojects/


資料

AVRマイコンで始めるC言語の使い方 LEDを点滅させる

http://elec-studio.eco.coocan.jp/AVR_C-Program04.html

ATMEL AVRで遊ぶ - PICを捨ててAVRを使おう

http://www.mtl.t.u-tokyo.ac.jp/~iizuka/avr/

AVR日本語情報サイト

https://avr.jp/

http://www.pwv.co.jp/~take/TakeWiki/index.php?avr%2FUSB%E6%8E%A5%E7%B6%9A