Arduino
AVR
ArduinoIDE
秋月電子
AT90S2313

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

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

2018年4月現在、秋月電子で100円で売ってる、10年くらい前に廃版になったAVRマイコンAT90S2313が気になります。たぶん在庫は推定1000個程度かと。それがなくなれば、もう二度と入手できないでしょう。
こいつにArduinoIDEでスケッチをコンパイルして、Arduino(互換機)を使ってLチカ プログラムを書き込みできないかやってみたところ、できました。
これで、100円AVRマイコンが作れます!(けどクロック発振子20円が必要ですが。)

AT90S2313

しかし、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と同じです。 ATtiny 2313/4313

IMG_20180502_103637.jpg

  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で書き込みするとその後、書き込みできなくなるようです。(私の最初にした失敗) arduino-IDE-Write-ch.jpg

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