パソコン(PC)と接続するパート1
(FT232RL/234X使用によりUSBをシリアル変換してマイコンと繋ぎます)

〔FlashAir〕 〔ESP-WROOM-02〕 〔マイコンのトップに戻る〕


パソコン(PC)とマイコン(PIC)を接続するには、
 1.シリアル通信で接続する。
 2.USB(Universal Serial Bus)規格にて接続する。
 3.Ethernet(ネット)にて接続する。
 3.無線LAN・Bluetooth等にて接続する。
などが有ると思いますが、今回のパート1では”1のシリアル通信にて接続する”を取り上げます。
尚、”2.USB(Universal Serial Bus)規格にて接続する”の記事はこちらを参照下さい。
又、"ESP-WROOM-02(ESP8266EX)でWiFi通信"の記事はこちらで、
"FlashAirを買って見た"の記事はこちらです。

マイコンがパソコンとシリアル通信を行うにはマイコンのUSART機能を利用します。
尚、USART機能の基本概要はこちらを参照下さい。

パソコンとシリアル通信を行うには以下の2パターンが有ります。

MAX232接続
USART通信の電圧レベルは 0〜3.3V/5V ですが、パソコンが利用するRS232Cの電圧レベルは
±12V/±15V です、なので何らかの方法で電圧を変換しないとだめです。
上の図ではその変換をMAX232NADM3202AN等のRS232CインターフェースICを
利用した場合の図です。 *5)
但し、この方法はパソコン側にRS232Cを利用する為のCOMポート端子が付いていないとだめです、
最近ではレガシーインターフェイスとなりUSBに取って代わり付いていなかったりします。


FT232R接続
そこでこの上図の方法、USART通信信号をUSB通信信号に変換してくれるIC(FT232RL)を
利用する方法です。
但し、この方法はパソコン側に”USB信号をRS232C信号に変換”するドライバソフトをインストール
する必要が有ります、これによりパソコン側のターミナルソフト等のアプリソフトからは仮想COMポート
とし利用可能になります。
秋月電子からFT232RLを使った”USBシリアル変換モジュール”が販売されています、今回の記事は
このモジュールとPIC12F1822を接続してパソコンと繋ぐ方法です。
(こちらの変換モジュールはキットでピンを半田付けしないとダメですが少し安いです)
尚、FT232RLのデータシートはこちらです。

こちらの「FT234X使用の超小型USBシリアル変換モジュール」は必要な機能だけに限定して有り
簡単に取り扱えるのでお勧めかもね。(下に記事を追記して置きます)  *2)

《パソコンにソフトを準備する》

FT232RL/FT234Xのドライバインストール
FT232RLのHP
FTDI社HPのここからダウンロードします。

 左図の赤マーク場所をクリックします。
 但し、Windowsの場合です、
 またバージョンは変わるでしょう。

 ダウンロードしたら解凍します。
 次にここを参考にインストールします。
 但し、"Arduinoボード"での方法となって
 います、"USBシリアル変換モジュール"
 と読み替えて下さい。

又、フォルダー参照時のファイル場所も上記解凍した場所を指定します。
(ArduinoIDEをインストールしている人はダウンロードしなくてもOKです)

※ Windows 7 の人はこちらのやり方が簡単でぇ手っ取り早いかもね。

接続しているCOMポート番号を調べる

USBシリアル変換モジュールとパソコンをUSBケーブルで接続したらこちらの頁を参照してポート番号
を調べて置きます。

ターミナルソフトのインストール

Windows XPにはハイパーターミナルが有ったのですが、Windows 7には見当たりません、
Tera Term をインストールしましょう、Tera Term はこちらのHPからダウンロード出来ます。
ArduinoIDE をインストールしている人はIDEのシリアルモニター画面でも良いです。

Tera Termの操作

TeraTermの画面1
 @Tera Termを起動させると左画面が
   表示されます。

 A"Serial"の○をマウスでクリックする

 B"Port:"の右横▼をクリックし、上で
   調べたCOMポート番号を選択します。

 C[OK}ボタンをクリックします。
   準備完了です。



ArduinoIDEシリアルモニター画面での操作

 @ArduinoIDEを起動させ、[ツール]→[シリアルポート]を選択します、
  上で調べたCOMポート番号を選択する、Arduinoボードを接続した時のCOMポート番号と異なります

 Aシリアルモニターボタンをクリックして画面を表示させます、準備完了です。

Arduinoモニターの画面1


《配線図》

PICピン構成  PICの今回使用するピン番号は1番(VDD:5V)
 と8番(VSS:GND)を電源に配線します。
 USART関連ピンは6番(RX)と7番(TX)です。
 RX=受信 TX=送信

モジュールピン構成  モジュールで今回使用するピンは赤色文字部分です、
 回路電源はUSBの電源を使用します。
 外部電源を使用する場合は緑色文字部分を使います(下記図)

 CB0
  パソコン側からデータが送られて来た場合に出力されます。
  今回はLED2が点灯します。
 CB1
  PIC側からデータが送られて来た場合に出力されます。
  今回はLED1が点灯します。

USB
 USBの5V電源が出力されます。90mA位までは接続できるでしょう。
3V3
 3.3Vの電源が出力されています。
TXD
 パソコン側からデータが送られて来ますPICの6番(RX)に配線しましょう。
RXD
 パソコン側にデータを送りますPICの7番(TX)に配線しましょう。
VIO
 I/O用の電源が出力されています今回はLED1/LED2の足が長い方に配線しましょう。
 (CB0〜CB4端子を利用する場合の電源となります)

その他のピンは秋月電子のマニュアルを見て下さい。


配線図1  左図がUSB電源を利用する場合の
 配線図です。
 モジュールは右上が1番ピンです。

 下図が外部電源を利用する場合の
 配線図で、USBの電源でFT232RLに
 リセットを掛ける回路です。
 この時J2ジャンパーピンは外します。

  配線図2

ジャンパーピンJ2について

ショート(ピン有)するとUSBからの電源が使用されVCC(15/21番端子)からも5Vが出力されます。
オープン(ピン無)した場合は、外部電源(3.3〜5V)をVCC(15/21番端子)から入力して下さい。
VCCの15番と21番端子はモジュール内部で接続されています。
(今回はUSB電源を利用するのでショートしています。)

ジャンパーピンJ1について

1-2間をショートした場合、VIO(4番端子)からは3.3Vが出力されます。(LEDには3.3Vが掛かります)
2-3間をショートした場合、VIO(4番)からはVCCの電源が出力されます。(LEDには3.3-5Vが掛かります)
(今回は2-3間をショートして、USBからの電源なので5V出力です)
なので、LEDに使う電流制限抵抗には注意が必要かな、電流制限抵抗の話はこちらを参考にして下さい。
また、注意として今回の回路は12F1822も含め5V電源です、
3.3Vにする人は"1-2間をショート"で利用しましょう、USART信号ラインが3.3Vになります。

《ダウンロードプログラムについて》

↓ここからサンプルプログラムソースファイルをダウンロードして下さい。
FT232R.lzh(Ver1.10)
FT232R.lzh(skUARTlibを更新しました) *3)
FT232R.lzh(MPLAB X用に変更) *4)
>FT232R.zip(skUARTlibにパリティ有りの処理と低速通信速度設定を追加) *6) *7)
FT232R.zip(高速で16ビットのBaudRateの設定とCalcBaudRate()関数を追加) *8)

プログラムソースをダウンロードしたら、MPLAB X(v2.15)にてプロジェクトを作成します。
以下のファイルをプロジェクトディレクトリにコピーしてプロジェクトに取込んで下さい。
次にコンパイルPIC書き込みを実行して下さい。 *4)
MPLAB(R) XC8 C Compiler Version 1.32コンパイラを使用しています。

ダウンロードファイルを解凍すると下記の様なファイル構成です。
FT232R1.c・・・・・・・・・・・ 本体のサンプルプログラムソースファイル(受信と送信) *4)
skUARTlib.c・・・・・・・・・・ USART通信を行う関数ソースファイル *3) *6) *7) *8)
skUARTlib.h・・・・・・・・・・ USART通信を行う関数のヘッダーファイル *3) *6) *7) *8)

FT232R2.c・・・・・・・・・・・ 本体のサンプルプログラムファイル(パソコンをデバックモニタにする) *4)
skMonitorUART.c・・・・・ USARTモニターライブラリ関数ソースファイル
skMonitorUART.h・・・・・ USARTモニターライブラリ用ヘッダーファイル

FT232R1.c

結果画面1
 このプログラムには、"skUARTlib.c"、"skUARTlib.h"が必要です。

 パソコンからデータを受信したらそのままデータを返します。
 1バイト受信したら1バイト単位に改行コードを付けて返します。

 "Tera Term"を起動してキーボードのキーを押して見て下さい、
 押した文字がそのまま返され左図の様に表示されると思います。

連続した文字列を送る場合は、送りたい文字列をコピー&ペーストすればOKです、
但し、ペースト時はマウスの右ボタンクリックか[ALT]+[V]キーを押します。

skUARTlib.h

USART機能にアクセスする為のライブラリ用のヘッダファイルです。
"skUARTlib.c"を利用する場合に
#include "skUARTlib.h" をメインプログラムの先頭で記述して下さい。

受信バッファのサイズを変更する場合は下の行を変更して下さい。
(但し、UART_BUFFER_SIZE - 1 の個数だけ受信可能です、それ以上は読み捨てられます。)

#define UART_BUFFER_SIZE 32 // USARTの受信バッファサイズ

18F25K22/18F26K22等の様にUSARTモジュールが2個有るPICが有ります、通常はUSART1が
デフォルトです、USART2側のモジュールを使いたい場合は、"#define UART2_USE"を記述します。
"skUARTlib.h"にてコメントになっているので外せば良いでしょう。 *3)

パリティビットについて *6)

通常の通信パラメータは"Data=8bit Parity=none Stop=1bit Flow=none"となります。
この設定は、"skUARTlib.h"の"#define UART_8N1"を生かします。
でぇ、パリティ(奇数)有りは"Data=8bit Parity=0dd Stop=1bit Flow=none"となります。
この設定は、"skUARTlib.h"の"#define UART_8O1"を生かします。
(現状では奇数パリティのみ対応です)

パリティビット等のシリアル通信書式についてはこちらを参照下さい。

高速で16ビットのBaudRateの設定 *8)

この機能はUART設定でBRGH=1/BRG16=1に設定を行う事が出来ます、この機能を使うと
ボーレート誤差を抑える事が出来る様です、ボーレート誤差の要求が厳しいデバイスに使って見ましょう。
使用する場合は"skUARTlib.h"の下記記述を生かします、コメントを外す。
#define UART_BRGH16_USE

(SYNC=0 BRGH=1 BRG16=0) OR (SYNC=0 BRGH=0 BRG16=1)時のボーレート計算
通常はこちらです、brg = ((Fosc/通信速度)/16)-1
例えば、Fosc=32MHz 9600bps なら ((32000000/9600)/16)-1 = 207.33 で brg=207とする。

(SYNC=0 BRGH=1 BRG16=1)時のボーレート計算
brg = ((Fosc/通信速度)/4)-1
例えば、Fosc=32MHz 9600bps なら ((32000000/9600)/4)-1 = 832.3 で brg=832とする。

今回のCalcBaudRate()関数の追加により"#define _XTAL_FREQ 32000000"が追加になりましたので
システムクロックの変更時は必ず設定を行いましょう。

skUARTlib.c

このライブラリはUSART通信を行う為の関数集です。
この関数集自体は現在 12F1822 16F1823/1826/1827 16F1938/19xx に対応しています。
その他に、16F1705 16F1825/1829 18F2xK22(USART1/2) 1814K50 18F8722でも動作するでしょう。*3)
送受信相手がUSARTに対応していればこの関数集は利用可能です。

USARTにアクセスを行う関数の使い方を説明します。

 ans = CalcBaudRate(speed ,AdjustedValue) *8)
  通信速度からボーレートジェネレータの値を計算する処理
   speed     : 使用する通信速度を指定します
   AdjustedValue : ボーレートジェネレータ値の補正用 (0or1)
   ans       : ボーレートジェネレータの値を返します

  AdjustedValueが有るのは、
  例えば、Fosc=32MHz 9600bpsなら ((32000000/9600)/16)-1 = 207.33 でbrg=207で良いが
  ((64000000/9600)/16)-1 = 415.66 だから切り上げたい場合に+1を行いbrg=416とする
  "415"より"416"の方がボーレート誤差が良い様に思えるのでぇ....
  メモリ容量が少ないPICは小数点の計算が出来ない為の処置です。

  例)InitUART(0,0,CalcBaudRate(9600,0));

 InitUART(rx, tx, brg)
  USART通信の初期化を行う処理
  送受信を行うで初期化され、非同期モード 8ビット・ノンパリティでの設定です。
  (パリティ有り時は、9ビット・パリティビット:9XDを使用するで初期化します) *6)
   rx :受信(RX)するピンの番号を指定します(このピンはTRISレジスターで入力にして下さい)
   tx :送信(TX)するピンの番号を指定します
   brg :ボーレートジェネレータの設定値を指定します(通信速度になります)
      設定値とボーレートの関係は各PICのデータシートを参照して下さい。
      例えば、
      PIC12F1822のデータシートはこちらの299-300ページを見て下さい。
      (上の様に計算しても良いでしょう又は、CalcBaudRate関数を使う) *8)
      SYNC=0、BRGH=1、BRG16=0で8MHzのクロック周波数で速度が9600ボーレートなら
      SPBRG=51だから設定値は51を指定します。

           (SYNC=0 BRGH=1 BRG16=0)で設定時の、ボーレート設定値一覧表 *3)*7)
bps 4MHz 8MHZ 16MHz 32MHz 40MHz 48MHz 64MHz
4800 51 103 207 416 520 624 832
9600 25 51 103 207 259 311 416
19200 12 25 51 103 129 155 207

 ※ ボーレート設定値が"207"を超えたら(桃色数値)設定を”SYNC=0 BRGH=0 BRG16=1”で行います。
   又、"#define UART_BRGH16_USE"を生かした場合は、”SYNC=0 BRGH=1 BRG16=1”で
   行いますが"brg"値は異なります注意。(上の様に計算しましょう) *8)
 ※ ピン番号の指定は、12F1822,16F1823〜1829以外は指定しなくても良いです。
   例) InitUART(0,0,51)

 UART_Send(dt,num)
  相手に指定した個数のデータを送信する処理
   dt  :送信するデータを格納した配列を指定します
   num:送信するデータの個数を指定します。

 UART_Write(dt) *3)
  相手に1バイトのデータを送信する処理
   dt  :送信するデータを指定します

 ans = UART_Available( )
  受信したデータの個数を返す処理
   ans:受信したデータの個数を返します

 ans = UART_Read( )
  受信したデータを1バイト読み込む処理
   ans:受信したデータを返します、0xffffを返したら受信データは空です
  例)
     char dt ;

     if (UART_Available() != 0) {
          dt = UART_Read() ;    // 1バイトデータを受信する
          UART_Write(dt) ;      // 1バイトデータを送信する
     }
 UART_Flush( )  *1)
  受信バッファをクリアする処理
  受信バッファにデータを受信していてもこの関数を実行させればデータはなくなります。

 InterUART( )
  USART関連の割り込み処理です。
  受信を行う場合は、メインプログラム(例"FT232R1.c")の割込み処理で必ず呼びます。
  例)
     void interrupt InterFunction( void )
     {
          // USART関連の割り込み処理
          InterUART() ;
     }

skUART2lib.h *9)
skUART2lib.c

"skUARTlib"はUART1/UART2の何れかを利用する用に出来ていましたが、 "skUART2lib"は"skUARTlib"をUART2専用にした物ですので使い方は同じです。
ですので、"skUARTlib"でUART1にして"skUART2lib"でUART2を使用する事が出来ます。

skUARTlib2.zip において置きます。

以下はおまけです。

FT232R2.c

このプログラムは、パソコンのターミナルソフト等でデバッグモニターを行う場合のサンプルです。
又、プログラムには、"skUARTlib.c"、"skUARTlib.h"、"skMonitorUART.c"、"skMonitorUART.h"
が必要です。

結果画面2
 こちらはArduinoIDEのシリアルモニター画面にて表示をさせて見ました。
 ってことはぁ、"FT232R1.c" でもArduinoIDEのシリアルモニター画面は
 使えるって事ですよ。
 もちろん、"Tear Term"でも同じ様に表示されます。
 表示内容は5秒毎に同じ内容が繰り返されるだけです。


skMonitorUART.c

USART機能を利用してモニター出力を行う為の関数集です。
このソースプログラム(skMonitorUART.c)は他のPICでも使用できます。

skMonitorUART.c 関数の使い方を説明します。

 MonitorPuts(const char * s)
  デバッグモニターに文字列を送信する処理
   s:表示する文字列を指定します(NULL'0x00'まで出力)
  例1)MonitorPuts("START")
  例2)MonitorPuts("START\r\n")  // 改行を行う場合 "\"は"\(半角)"とMPLABは表示される

 MonitorPuth(unsigned char c)
  デバッグモニターに16進数で送信する処理
  1バイトの数値から16進数の文字に変換してモニターへ送信します。
   c:表示する1バイトの数値(0-255)を指定します
  例)MonitorPuth(123) ; とすると"7B"が表示されます

 MonitorPutb(unsigned char c)
  デバッグモニターに2進数で送信する処理
  1バイトの数値から2進数の文字に変換してモニターへ送信します。
   c:表示する1バイトの数値(0-255)を指定します
  例)MonitorPutb(123) ; とすると"01111011"が表示されます

 整数や負数を10進数の文字列で表示させたい時は
  itoa( )関数を利用する(332byteメモリを消費)
     #include <stdlib.h>

     char dt[8] ;
     itoa(dt,1234,10) ;
     MonitorPuts(dt) ;        // 1234と表示される

  sprintf( )関数を利用する(412byteメモリを消費)
     #include <stdio.h>

     char dt[8] ;
     sprintf(dt,"%d",1234) ;
     MonitorPuts(dt) ;        // 1234と表示される

skMonitorUART.h

USART機能でモニターを行う為のライブラリ用のインクルードファイルです。
"skMonitorUART.c"を利用する場合に
#include "skMonitorUART.h" をメインプログラムの先頭で記述して下さい。

《FT234X使用の超小型USBシリアル変換モジュール》 *2)

FT234X実験回路写真  上記FT232R使用モジュールは、ちょっとぉ大きい、ピンがいっぱい有り
 どれに挿すかちょっとぉ迷う、ジャンパーピンも確認しないとぉ、ってな感じが
 有りました。
 でもこのモジュールは必要なピンのみで有り小型です、お手軽です。
 入出力端子電圧は3.3Vですが、5Vトレラントなので5V信号を接続出来ます。
 電源はUSBバスからの供給なのでこれを利用するなら90mA位までは
 繋げそうです、尚、USB端子はマイクロBコネクタで繋ぎます。
 左は実験時の回路写真で、変換モジュールと12F1822です。
 電源はUSBからの5Vで、モジュールのピン名は図左側から[5V][GND][TXD]
 [RXD]の順です。

詳しくは付属する説明書を読みましょう。実験プログラムは、"FT232R1.c"で動作確認を行っています。

変換モジュールの裏には"CB0端子"がパッドとして引き出して有るので、下記のツール(FT_Prog)で設定可能です。

《その他》

実験風景 USBシリアル変換モジュールは、
FT232RL内蔵EEPROMを書き換えると
CB0,CB1,CB2,CB3の端子をデジタルI/O (ビットバングモード)にする事が出来ます。

パソコンでこのI/Oをアクセスするアプリを作成すれば利用可能です。
アプリを作成する人はこちらのマニュアルが参考になります。
後は『昼夜逆転』工作室さんのこのHPと、
    Y.Senta's さんのこのHPが
参考になるでしょう。 *5)

でもこれを利用するならこちらの方がI/Oは8本有るので良いかもね。

FT232RL内蔵EEPROMの書き換えについて

秋月電子のマニュアルは古そうなのでこの頁で記載しておきます。

@ここからEEPROMの書き換えツール(FT_Prog)をダウンロードします。
 [FT_PROG 2.6.8 - EEPROM Programming Utility]の項目に有る
 [FT_PROG is available for download as a .zip file by clicking here.]をクリックします。
 ※たぶん 2.6.8 はバージョンと思えるので数値は変わるでしょう。
 ※このソフトの実行には"Microsoft .NET Framework 4.0"が必要らしい、
  インストールしていない人はインストール先が書いて有るのでそこからインストールしましょう。

 尚、[The full FT_PROG User Guide can be downloaded here.]をクリックすると説明書が開きます。

Aダウンロードしたファイルを解凍します。

BモジュールとパソコンをUSBケーブルで繋ぎます。

C解凍したディレクトリに"FT_Prog.EXE"が有るので起動させます。

FT_Prog(DevicesScan)
 D[Devices]→[Scan and Parse]を選択
  モジュールが検索されFT232RLの情報が表示されます。
  [Program]は設定内容がEEPROMに書込まれます。
  (設定変更した場合は必ず書き込みましょう)


USB最大電流の変更

デフォルトでUSBのバスから利用できる電流は90mAまでです、これをMAX500mAまでに変更する事が
出来ます。

FT_Prog(MaxBusPower)


[USB Config Descripter]をクリックします、右側に表示される[Max Bus Power]の項目を変更します。

I/Oの変更

CB0,CB1,CB2,CB3,CB4の端子から出力される信号の種類を変更できます。

FT_Prog(IO_Controls)

[Hardware specific]→[IO Controls]をクリックします。右に表示される項目を変更します。
(FT234Xの場合は、[Hardware specific]→[CBUS Signals]となります)

例えば、C0(CB0)は現在TXLED#(データ送信時にLED出力)に割付けられています、
これを TX&RXLED# にするとデータの送信受信両方でLED出力となります。

PWRON#   : 電源投入されれば信号出力です。
SLEEP#   : USBがサスペンドモードに移行したら信号出力です。
CLK6-48   : クロック信号が出力されます。(CLK12なら12MHzです)
I/O MODE  : I/Oモードで信号のデジタル入出力が可能になります。
          (C4はこのモード不可です、なので利用可能I/Oは4本となります)



"skUART2lib"を追加(*9) 2020/05/13
skUARTlibに高速で16ビットのBaudRateの設定とCalcBaudRate()関数を追加(*8) 2019/04/14
skUARTlibに低速通信速度設定を追加(*7) 2017/02/07
skUARTlibの更新(*6) 2017/02/03
リンク切れ見直し(*5) 2017/01/12
MPLAB X用に記事変更(*4) 2015/10/26
skUARTlibの更新(*3) 2015/05/25
FT234Xの記事追記(*2) 2014/12/21
追記(*1) 2013/05/19


【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.