Author: komatsubara


もくじ

PCとの遭遇

マイコンでセンサの値を取得し、PCへ転送したり、逆にPCからマイコンの挙動を操れると楽しそうです。また、デバックの際に変数の中の値をPCに送信するとデバッグか簡単になるかもしれません。
PSoCなどのマイコンとPCをつなぐ、一番お手軽な方法は、調歩同期式(非同期式)シリアル通信と呼ばれるものです。PCに詳しい人であれば、「シリアルポート」という名前の方がなじみがあるかもしれません。

#region(詳しい説明)
PCのシリアルポートは、RS232という規格にそっていて、0と1を、それぞれ+7V以上、ー7V以下、という電圧で表すことになっています。
ところが、マイコンをここにつなごうとすると、この+7V以上やー7V以下という電圧が必要になりますが、ふつうのマイコンは、こんな変な電圧は扱えません。

最近のPCは、シリアルポート(COMポート)がないものが増えてきて、USB-シリアル(COMポート)変換器、というのを使えば、シリアルポートの代わりに使えるのですが、先ほどの電圧レベルの関係で、マイコンには直接つなげません。この電圧レベルの変換をしているIC(MAX232というやつが有名)も市販されているのですが、PCとつなぐマイコン機器をつくるたびに、このICを使うのは、ちょっと面倒です。

そこで、USBから、マイコンのI/Oポートと同じ電圧レベル(いわゆるTTLレベル:1=+5V程度、0=0V)の調歩同期式シリアルに変換するICが市販されています。それをつかって、

#endregion

USBからマイコンの調歩同期式シリアルポートにつなぐアダプタをMeRLで準備しています↓。

USB-UART.JPG

SiLab版
FTDI版

黒い4ピンのコネクタをマイコン側に、USBコネクタ(miniB)をPCのUSBポートへつなぎます。PC側では↓このドライバを使うと、COMポートとして扱えます。(割り当てられるCOMポートの番号は、接続後にデバイスマネージャのポート、の中に現れるCP210x...についている番号で確認する)
×http://www.silabs.com/tgwWebApp/public/web_content/products/Microcontrollers/USB/en/mcu_vcp.htm
http://www.silabs.com/products/mcu/pages/usbtouartbridgevcpdrivers.aspx
→VCP Driver Kit をDLし、あらかじめインストールしておく。その後、↑をつなぐと、ドライバを自動的にインストールできます。

なおマイコンと調歩同期式シリアル通信を行うときには、1バイト単位でデータを送受信できると便利なことが多いので、↓このアプリを入れておくとよいでしょう。
http://www.vector.co.jp/soft/win95/prog/se089304.html
または、VC#などを使って自作しても面白いかも
http://merl.ec.t.kanazawa-u.ac.jp/merlsoft/index.php?%C6%FE%CC%E7%CA%D4%2FVisual_C_Sharp

マイコン側の基板(小基板をつなぐ基板など)には、4本の一列のピンヘッダを立て、順番に次のように接続します。(受信ピン、送信ピン、は、あとでPSoCで割り当てるので、後ほど・・・)
ピン配置は以下のようになっています。Gと言う印字がある方がGNDです。
送信/受信は、どっち目線(変換基板目線か、マイコン基板目線か)がごっちゃにならないように注意!

  1. GND
  2. VDD   この基板からは給電されません。変換基板上のICへの給電用(詳しくは後述)
  3. 送信ピン 変換基板の送信ピン。マイコンの受信ピンに接続する
  4. 受信ピン 変換基板の受信ピン。マイコンの送信ピンに接続する

マイコンの中で調歩同期式シリアル通信を行うモジュールを、UART (Universal Asynchronous Receiver & Transmitter)と呼びます。PSoCも、Digital Communicationカテゴリの中にUARTというモジュールがあるので、これをつかえばPCと調歩同期式シリアル通信をすることができます。
(マイコンが送信するだけなら、TX8というモジュール受信だけならRX8というモジュールでも可です。)

  • このモジュールを配置後、自分で決めた2本のピンのうち、RX inと受信ピンに使うピン、TX outと送信ピンに使うピンを配線する。
  • このモジュールのClockは、行いたい通信速度の8倍を与える。例えば9600bps(1秒間に9600ビット)で通信する、という取り決め(プロトコル)にするのであれば、Clockには9600Hz×8を、VC3などで適当に分周して与える。(数%の誤差はOK)
  • main()関数内で、UART_1_Start(UART_PARITY_NONE)でスタートする。ちなみにPARITY_NONEは、パリティビットをつけない、という指定で、一般的にはこれを使う。
    なおPC側のAcknowrichも、通信速度(COMポートを開くと、画面の下の方に表示されている)を、マイコン側とそろえておく必要があります。またデータ長を8bit、ストップビットを1bit、パリティ:NONE、としておきます。(データ長とストップビット、はPSoCでは、それぞれ8bit, 1bitから変更できない)※用語が気になる人はGoogle先生に聞いてみましょう
  • PSoCからの1バイトの送信は、UART_1_PutChar(d);
  • PSoCからの1バイトの受信は、d=UART_1_cGetChar();

PCから送ったデータに基づいて、LEDの明るさを変えられるようにすると、PSoCを征服した感があって、楽しいかもしれません。

この基板の詳しい構成

使い方

4本すべてをつなぐと、送受信を行う事ができます。

受信ピンとGNDピンの2本だけでも、変換ICが受信を行う事ができます。(送信はできない)

送信したい場合は、送信ピンとGNDだけではなく、VDDもつなげる必要があります。(VDDの理由は後述)

もし、マイコンが乗っている基板のGNDがコンセントにつながっていて、PCもコンセントにつながっている場合は、
コンセントを通してGNDがつながってるので、変換基板〜マイコンが乗っている基板の間はGNDをつなぐ必要はありません。
(受信だけ行うなら、受信ピンだけでおkということ)

内部回路

USBの5Vは、USB-UART変換ICの電源として使っています
マイコン基板側のVDDは、送信ピンの出力バッファの電源として使っている。
USB-UART変換ICの送信ピンをなぜ直接出力しないか、は以下の理由。マイコン基板側に安定化電源/ACアダプターで電源供給してる時を考える。
UARTの出力は、何も無い時はハイ出力。つまり常に5Vが出続けている。
ここでもし、マイコン基板側の電源を切ると、マイコンのVDDが不定なのに、マイコンの受信ピンにはハイ電圧がかかっている事になる。
これがESD保護回路を通って、VDDに現れてしまう(ハイ電圧-Vf)。したがってマイコンがONになってしまうかもしれないし、ONにならないかもしれない。つまり挙動が怪しくなる。
そこで送信ピンの間に送信バッファを入れる。送信バッファの電源を、マイコン基板から取る。もしマイコン基板の電源がOFFになると、送信バッファもOFFになって出力されない。
送信バッファの電源がOFFなのに、送信バッファに入力があると壊れるんじゃないか?と思うけど、そこは大丈夫なICを用意してある。(74VHCシリーズ)
上記の理由に加えて、ハイの時の電圧を、VDDと同じ電圧に会わせる事ができる(3V系/5V系でも使える)

入力ピンは、5Vトレラントなので3Vでも5Vでも大丈夫

circuit.png

PSoC上のプログラム

PSoCからの1バイトの送信は、UART_1_PutChar(d);
でも行けるが、これだと数字を1文字しか送れない。
itoa関数を使うと便利かもしれない
http://merl.ec.t.kanazawa-u.ac.jp/micon-bu/index.php?komatsubara#h5642dff


添付ファイル: fileUSB-UART.JPG 1055件 [詳細] filecircuit.png 1004件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2022-10-02 (日) 11:12:58