注目デバイスの活用で組み込み開発の幅を広げることが狙いの本連載。今回は、USBシリアル変換モジュールの代わりに、Arduinoに搭載されているシリアル変換チップを単独で使う方法を紹介する。
読者の皆さんはUSBシリアル変換モジュールをお使いでしょうか。筆者は専ら、USBポートを持たないマイコンボードにプログラムを書き込む用途で使うのですが、Raspberry PiのコンソールとしてPCを使いたい時などでも、この手のモジュールが一家に一台あればとても重宝します。
そこで、Arduinoの回路図を見たときにこんなことを考えたりしないでしょうか。Arduinoにはシリアル変換チップが載っている。これをシリアル変換モジュールとして使えればとても便利だしお金の節約にもなるのではないか――。
そんなわけで、Arduinoに搭載されているシリアル変換チップを単独で使う方法を紹介します。今回対象とするのは、Arduino Nanoの互換機です。
図1はCH340系のUSBシリアル変換チップが搭載されているArduino Nanoの回路図です。
Arduino Nanoの互換機はUSBシリアル変換チップにCH340系がよく使われています。一方、純正品ではFTDIのチップが使われています。筆者の使用感では、互換機のCH340系であっても現在までそれが原因のトラブルに見舞われた経験はありません。
さて回路図を見ていきましょう。
まず図1内の中央にあるCH340Gの回路図を見てください。TXD、RXD、DATA+、DATA-、DTRが他のチップやコネクターなどとつながっています。
CH340Gから延びているTXDとRXDはシリアル側の送信と受信信号で、1kΩの抵抗を介してCPUのATMEGA328P-PUのRXDとTXDにつながっています。ただし、CH340Gを出るところでTXDとRXDのラベルが入れ替わっているところに注意してください。
DATA+とDATA-は、USBコネクターであるUSB MINI-Bの回路図内の2番にDATA-、3番にDATA+がつながります。
DTRはコンデンサーを介してATMEGA328P-PUのリセットピンにつながります。
今回は、CH340GのTXDとRXDをATMEGA328P-PUから横取りして他のUARTデバイスにつないで使おうという魂胆です。
ここからは、PC側のArduino IDEからの書き込み時にどのようにすればマイコンにリセットがかけられるのかについて説明します。本題とは直接関係はありませんので、興味のない方は次のページに進んでいただいて構いません。
図1のCH340Gにおいて、DTRの先はCPUのATMEGA328P-PUのリセットピンに100nF(0.1μF)のコンデンサーを介してつながっています。CH340GがDTRをLOWに落とすとコンデンサーの電荷がなくなるまで(一瞬ですが)リセット信号はLOWに落ちます。その結果CPUはリセット状態となります。
現代において、DTRの最も重要かつ頻繁に使用される役割となっているのがマイコンのリセット制御です。
USBシリアル変換ケーブルや仮想COMポートでは、DTRは規格上の互換性を保つために存在しますが、フロー制御よりも上記の自動リセットのために利用されることが多くなっています。
DTR信号は、その基本的な「準備完了」の通知機能だけでなく、組み込み開発の効率化という新たな役割を担っていると言えます。
読者の皆さんも、PCのArduino IDEを使ってArduinoにプログラムを書き込む際、Arduinoにリセットがかかるのはなぜだろうと感じていませんか。その疑問に深く関わっているのがDTRなのです。
なお、DTRをLOWに下げることでArduinoにリセットをかけているのはArduino IDEですが、実際にこの作業をしているのはWindowsやLinuxなどOSの機能で行われています。
Copyright © ITmedia, Inc. All Rights Reserved.
組み込み開発の記事ランキング
コーナーリンク