sanguisorba が 2025年03月22日00時52分42秒 に編集
自動リセットを有効にする回路図を追加
本文の変更
運よく手に入れてしまった人のために情報を残しておきます。 ## 検証環境 * Arduino Serial v 2.0a * Arduino Leonard + AVR ISP Shield https://www.aitendo.com/product/17633 * 秋月電子通商 M-02746 USBシリアル変換ケーブル (Windows 10対応前) https://akizukidenshi.com/catalog/g/gM-02746/ ## 販売形態 Arduino Serial v 2.0は完成品ではなく、基板単体のみの販売でした。そのため自分でパーツを購入し、組み立てる必要があります。 パーツリスト・回路図はここにあります。 https://www.arduino.cc/en/Main/ArduinoBoardSerial このパーツリストには作成当時秋葉原で手軽に手入らなかったものがあり、私のノートにはいくつか代用品候補のメモが書いてありますが、現在では簡単に手に入るようです。 手に入らなかったものはトランジスタで、当時の私はBC327とBC337を選んだようです。現在はBC547/BC557が手に入るのでわざわざ代用品を用いる必要はありません。  Arduino Serial v2.0 PCBは何回か重版されているようで、古いモデルだとCPUの下に書いてあるサイトのリンクが違います。ただ、**v2.0とv2.0aとで回路上の変更はありません。** **ちなみに、RS232Cのパスパワーは無いので別途9Vまたは12Vのセンター+のACアダプタが必要です。**(15V以上だとレギュレータの発熱がひどくなるのでおすすめしません。) (私の扱いがひどいせいか過去に何度かR3とR4の1kΩ抵抗が飛んでオープンになった事があります。スケッチがアップロードできない場合や、ICSPからLチカを書き込んで13ピンにLEDを差しても光らない場合はまず1kΩ抵抗が壊れていないか確認すると良いです) ## ATmega 8をArduino IDEで使えるようにする 現在のArduino UnoではArduino 328を使用する事を想定しており、Uno以前の機種でも328か168の2択です。 一方で、Arduino Serial v2.0はATmega 8 という系列が異なる石を使用するため、Unoのブートローダは使用できません。 また、当時のIDEと現在のIDEではボードリストや書き込み方法が異なるため、2021年4月現在の書き込み方法について解説します。 ### Bootloaderを書き込む 当時のIDEと比べて利便性が格段に上がっています。 ボード: Arduino NG or order プロセッサ: ATmega 8 を指定してブートローダを書き込みます。 以下の環境で書き込める事を確認しました。 ライター: Arduno Leonard + AVR ISP Shield + ArduinoISP 書き込み装置の設定: Arduino as ISP (ATmega32u4) 現在ではArduino互換機やAVRライター、ISPシールドが非常に安価なのでそれを用いてブートローダを書き込むと便利です。 ### Arduino Serialへスケッチを書き込む まずはこちらをご覧ください。 https://content.arduino.cc/assets/arduino_rs232_v2.png  注目してほしいのはRS232Cのコネクタ接続の部分。 このボード、RS232CからはTXとRXの2本しか接続されていません。 Arduinoではスケッチを書き込む際にリセットを行う必要が有ります。Arduino UNOやNanoではDTR, Arduino DuemilanoveではRTSとDTR両方を使用しますが、Arduino Serialにはどちらもありません。4ピンがDTR、7ピンがRTSなのですが、どうみてもオープンです。そのため、シリアル通信するようなプログラムをICSP経由で書き込んでシリアルモニタから通信する場合や、スケッチをブートローダ経由で書き込むには手動でリセットスイッチを押す必要があります。 Arduinoの自動リセットはTX/RXの信号線を用いたソフト上ではなくDTR信号をATmegaのRESETピンへ電気的に送信するため、Arduino UNOボード上にATmega 8を載せた場合は自動で書きこみを開始します。これはArduino Serial特有の問題・仕様であり、Arduino SerialにATmega 328Pを載せた場合も同様に手動でリセットを行う必要があります。 手動でリセットを行うタイミングを知るためにはまず、Arduino IDE の設定が必要です。 ファイル > 環境設定を開いて、「より詳細な情報を表示する」のコンパイラと書き込みを両方有効にします。  そしたら、アップロードしたいスケッチを開いてアップロードボタンを押します。 下の欄にオレンジ色で次のようなメッセ―ジが出現します avrdude: Version 6.3-20190619 Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/ Copyright (c) 2007-2014 Joerg Wunsch System wide configuration file is "C:\Arduino\hardware\tools\avr/etc/avrdude.conf" Using Port : COM4 Using Programmer : arduino Overriding Baud Rate : 19200 Overriding Baud Rate まで表示されたらログが止まるので、**リセットボタンを素早く押します**。 リセットスイッチを押した直後にログが流れだしたら成功です。 avrdude: verifying ... avrdude: 724 bytes of flash verified avrdude done. Thank you. 最後にThank you.の文字が出たら、スケッチのアップロードは完了です。 Arduino Serial + ATmega 8には以下のような仕様があります。 * スケッチを書き込んだ後、プログラムが自動で始まらない事があります。その場合、リセットスイッチを押す事で解決します。 * 電源を入れてからプログラムが動作するまで**5~10秒**の長い遅延があります。 * 13ピンには1kΩの抵抗がついているため、LEDの直差しが可能です。 ※13ピンはArduino UNOと同様にLED専用と思ったほうがいいです。リセットの際に13ピンから信号が出て(13ピンにLEDを差している場合は)LEDが光るので信号線などは接続できません。 
## 自動リセット機能を追加する(非推奨) リファレンスのままでも別に良いですが、やはり自動リセット機能がほしいところです。なので、ここでは自動リセット機能の追加方法について解説します。ただし、シリアル変換ICやPCの相性を選びます。
## 自動リセット機能を追加する リファレンスのままでも別に良いですが、やはり自動リセット機能がほしいところです。なので、ここでは自動リセット機能の追加方法について解説します。
### 回路図
### ダメな例
Arduino Severino と呼ばれる、Arduino Serial v2.0の後継機が存在します。名称通り、片面基板で作成可能なArduinoです。 https://www.arduino.cc/en/Main/ArduinoBoardSerialSingleSided3 
回路図を見てみるとTX/RXのほかに4ピンのDTRも接続されており、リセット機能が追加されている事がわかります。これと同等の回路をSerial v2.0の基板上につなげます。
画像では非常に危ない繋げ方をしています。みなさんは絶縁をしっかり行ってください。
この回路図には致命的な誤りがあります。

回路図を見てみるとTX/RXのほかに4ピンのDTRも接続されており、リセット機能が追加されている事がわかりますが、このAC結合によるリセット回路は**TTLレベル**によるシリアル信号が前提となっています。一方、通常のUSBシリアル変換器は**RS232レベル**による入出力を行っています。
抵抗裏を通る謎のダイオードの役割についてはこちらをご覧ください。
RS232レベルでは1が -5V ~ -15V、0が5V ~ 15Vで規定されている一方、TTLレベルでは1が+5V、0が0Vです。ポイントは、RS232レベルが負論理であるという点です。 2ピン、3ピンのTX,RXにあるバイポーラトランジスタ付の回路でRS232-TTLレベル変換を行っているので従来のArduino Serial v2.0を含めてこの部分は問題ありません。一方、4ピンのリセット信号はTTLレベルから見ると論理的に反転しているため、本来なら書き込みの開始と同時にリセットをしたいのに書き込みの終了と同時にリセットがかかるという逆の事がおきます。 また、AC結合によるレベルシフトを行う際は電源電圧を超える電圧がかかる恐れがあるため、プルアップ抵抗にダイオードを抱かせる必要があります。(これにより回路にかかる最大の電圧は5V+ダイオードの順方向電圧までとなります)
https://forum.arduino.cc/index.php?topic=347683.0
これで自動的にリセットすれば成功ですが、私の使っている変換ケーブルでは50%の確率で自動リセットが機能しません。RS232Cポートを備えた古いPCではちゃんと動作するので、機種依存の問題と思われます。Arduino Serialで自動リセット回路を使用するのは非推奨です。
### 自動リセット機能を追加する回路図
 以上よりリセット信号に対応するには、上図のようなそれなりに規模の大きい回路が必要になります。 ATmegaの仕様としてリセットがポジティブエッジなのでAC結合回路は必須です。 ※4ピンのDTRはReady信号なので何もしていない時は1(-5V)、書き込み時に0(+5V)になります。 上図のシミュレーションのリンクを添付しておくので是非お試しください。プルアップ抵抗のダイオードを外してみると電源電圧を超えるリップルが生成される事がわかると思います。 https://www.falstad.com/circuit/circuitjs.html?ctz=CQAgjCAMB0l3BWcMBMcUHYMGZIA4UA2ATmIxAUgpABZsKBTAWjDACgAXcDQkFFGnwFDBVCFTFwQAEwYAzAIYBXADYc207r0wotIvuAByNMDTxsA7voFV+gnVEvWMusDz4vHAc2e67IXFFHKzdtYVC9SCd-NDx9CKirGPwPPxSogCdUvhTsbG105Dg2LP8IsrBdSXgSvQj6yqgi4oAleMb-QiCqGiokCShoBDY2ht1iXlYqgzApfqaYbEp4FdXIbDYAYwD8nLi6NP3wZjiYOHFYSHFag73abFdG6tb7x91broXaPq+YYatbrFaBM7lFNDQQUCIZMOjJ5Mo1E5oeBGrcpsFgQU4ggaPZ0mwAPbgXSfHqQUjIQbnBCEFDzVy6DZEsCTXhkimzKlwbDESC0pAQVy8DZAA
## 付録: ATmega 328を載せる場合 BootloaderはArduino UNOとArduino Diecimilaの328で動作する事を確認済。 Arduino Serialからスケッチを書き込む の手動リセットのくだりは同じ。 ## 付録: PL2303の変換ケーブルをWindows 10で使う * 秋月電子通商 M-02746 USBシリアル変換ケーブル (Windows 10対応前) https://akizukidenshi.com/catalog/g/gM-02746/ 現在はチップが変わっていてWindows 10に対応しているようですが、私が持っているものは約10年前に購入したものなので当然非対応です。 デバイスマネージャから何等かのエラーが出て使用できない場合は次のドライバアプリを用いることで解決します。(非公式なので自己責任で!) * http://www.ifamilysoftware.com/news37.html