標準TTLだけ(!)でCPUをつくろう!(組立てキットです!)
(ホントは74HC、CMOSなんだけど…)
[第284回]

●RS232C受信プログラムの説明です(7)

前回の説明で、RS232C受信プログラムr232.cppの説明は一応は終わったのですが、1つだけ、受信バッファのサイズについては、「あとで説明します」と書きました。

r232.cppの中では、ReadFile()のパラメータとして、読み取ったデータを格納する場所として、inbfという4096バイトの文字変数エリアを確保し、かつ読み取りデータの最大値としても4096バイトを指定しています。


char inbf[4096]="\0";

// rs232c read
if(!ReadFile(hcom,&inbf,4096,&rdbytes,NULL))printf("%s READ ERROR\n",comname);

しかし、そもそもは、どこかに本当の「RS232C受信バッファ」があるはずです。
そのバッファサイズは指定しなくてもよいのでしょうか?
これもまた気になるところです。

そこで、受信バッファについても調べてみました。

●COMMPROP構造体とGetCommProperties()

RS232Cの受信バッファサイズ(および送信バッファサイズ)は、COMMPROP構造体にあることがわかりました。
そしてCOMMPROP構造体にアクセスして、その情報を読み出すのに使うのが、やはりWindowsAPIのGetCommProperties()です。
もう、構造体だらけです。ホント、いいかげんうんざりしてしまいます。
でも、これしか方法がありませんから仕方がありません。

r232.cppを少し変形して、受信バッファサイズ(ついでに送信バッファサイズ)も求めてみました。
r232ck.cppのプログラムリストです。


/// r232ck.cpp
// 09/6/4
// buffer size check
#include <windows.h>
#include <stdio.h>
//
        char comname[5]="\0";
        int tsize;
        int rsize;
        HANDLE hcom;
///
void main()
{
// com open
        sprintf(comname,"COM3");
        hcom=CreateFile(comname,GENERIC_READ|GENERIC_WRITE,0,NULL,
        OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
        if(hcom==INVALID_HANDLE_VALUE)printf("can't open %s\n",comname);// pass to end
else
        {
        COMMPROP commprop;
        if(!GetCommProperties(hcom,&commprop))printf("getcommerr");
        else
        {
        tsize=commprop.dwMaxTxQueue;
        rsize=commprop.dwMaxRxQueue;
        printf("tx=%d,rx=%d",tsize,rsize);
        printf("\n");
        }
// com close    
        CloseHandle(hcom);
}
}

r232ck.cppをコンパイルして、できたr232ck.exeを実行してみました。
.cppというのはC++のソースプログラムファイルにつける拡張子です。
.cppファイルをC++コンパイラにかけると、実行形式のファイル .exeができます。

r232ck.exeを実行してみた結果、送信バッファも受信バッファもデフォルトでは4096バイトであるらしいことがわかりました。
今回の使用目的である、「つくるCPU(MYCPU80)」との間でのデータの送受信のため、という用途に限定するならば、送信バッファも受信バッファも、4096バイト(4Kバイト)もあれば十分ですから、既定値のまま使うことにしました。

以上で、長々と続いた、RS232C受信プログラムの説明も、やっと終了いたしました。

●USBインターフェース基板ができてきました

[第270回]で説明しました、「つくるCPU(MYCPU80)」本体基板から分離させてしまった、「USBインターフェース基板」が本体基板よりも一足先にできてきました。
さっそくICやそのほかのパーツを組みつけて、動作テストをしました。
USBケーブルで、Windowsパソコンに接続したところ、無事「USB<->Serial」デバイスとして認識されました。

こちらが部品面です。


こちらがハンダ面です。


この基板は10pinの基板接続用コネクタで「つくるCPU(MYCPU80)」本体基板に接続します。
電源は10pinコネクタを介して「つくるCPU(MYCPU80)」本体基板から供給しますから、USBコネクタの+5Vは配線してありませんが、今回はWindowsパソコンへの接続テストですから、USBコネクタから+5Vをもらうため、写真の赤ケーブルのように追加配線をしています。

USB<>232C変換ICのFT232RLは28pinのフラットパッケージICなので、写真のように面実装しなければなりません。
ハンダ付けに余り慣れていない方にはちょいと難しい作業ですから、この基板は完成品動作テスト済みとして供給することにしました。
ですから、シルク印刷もグリーンレジストもありません。
なるべく原価を安くしたい、という理由からです。

それでも本当のことをいいますと、当初の案のように、「秋月」の「USB232C変換ケーブル」をそのまま使った方が安くあがります。
苦労して作って、原価も高くなってしまうなんて馬鹿みたいな話です。
もともと別基板にしないで、「つくるCPU」本体の基板上にのせてしまうならば、こちらの方がすこしは安くあがる計算だったのですけれど、別基板の、プリント基板の分だけ原価アップしてしまいました。

いささか愚かかも知れませんが、前にも書きましたように、USB→RS232C変換(TTL)→RS232Cレベルにと変換したものをまたRS232Cレベル→TTLレベルへ変換するというのは、いかにも冗長なので、その回路上のムダを省くためにこうしたのです。

それと、もうひとつ、USB・RS232C変換ケーブルという製品になってしまうと、中がどうなっているのか見えません。ブラックボックスです(すこしは透けてみえるようですけれど)。
それをこういう基板で見ると、本当にIC1個だけで、そういうこと(USB・232C変換)ができてしまう、ということを目で見て実感することができる、というメリットもあると思います。
2009.7.20upload

前へ
次へ
ホームページトップへ戻る