PIC18F2550とGT-720FのRS-232C通信の時の回路とdsPICのRS-232C通信回路が微妙に違うので、dsPICオシロのADM3202AN周辺回路のチェックのために以下のようなものを作ってみた。
dsPIC30F4012モジュール
dsPIC30F4012の各ピンを7×2のピンソケット2つにつないでジャンプワイヤーでアクセスできるようにしたモジュールです。
ICSP端子とリセット回路、10MHzのセラロックが付いています。
ADM3202AN+D-sub9モジュール
ADM3202ANの各ピンとD-sub9ピンコネクタの2, 3, 5, 7, 8ピンを7×2のピンソケットにつないでジャンプワイヤーでアクセスできるようにしたモジュールです。
ADM3202ANに必要なコンデンサーが付けてあります。
モジュールを使っての検証
2つのモジュールとブレッドボードを使ってPIC18F2550+GT-720Fの時の回路と同等の以下の回路を組んで検証する。
検証に使ったプログラムは以下のようなもので、プログラムを書き込んでTeraTermで接続後、’0’を入力すると’1’が表示され、’1’を入力すると’0’が表示されるというチェックをした。
#include "p30f4012.h" #include "uart.h" //// コンフィギュレーションの設定 _FOSC(CSW_FSCM_OFF & XT_PLL8); // 10MHzx8=80MHz _FWDT(WDT_OFF); _FBORPOR(PBOR_ON & BORV_20 & PWRT_64 & MCLR_EN); _FGS(CODE_PROT_OFF); /// ハードウェアポート設定 #define Green1 LATEbits.LATE0 #define Green2 LATEbits.LATE1 #define Yellow1 LATEbits.LATE2 #define Yellow2 LATEbits.LATE3 /// UART用設定パラメータ #define UART_ALTRX_ALTTX 0xFFE7 /*Communication through ALT pins*/ unsigned int UMODEValue = UART_EN & UART_IDLE_CON & UART_ALTRX_ALTTX & UART_DIS_WAKE & UART_DIS_LOOPBACK & UART_DIS_ABAUD & UART_NO_PAR_8BIT & UART_1STOPBIT; unsigned int USTAValue = UART_INT_TX_BUF_EMPTY & UART_TX_PIN_NORMAL & UART_TX_ENABLE & UART_INT_RX_CHAR & UART_ADR_DETECT_DIS & UART_RX_OVERRUN_CLEAR; // グローバル変数 unsigned char Threshold; // スレッショルド値 unsigned int State, Channel; // 同期チャネル unsigned int Index, cmnd; // 送受信用インデックス unsigned int Sample; // サンプリング周期 int main(void) { long wait; LATE = 0xFF; TRISE = 0; //// UART初期設定 OpenUART1(UMODEValue, USTAValue, 21); //57.6kbps@80MHz while (1) { Green1 = !Green1; // 目印LED while(!DataRdyUART1()); // 受信レディか? cmnd = ReadUART1(); // 1文字受信取得 switch(cmnd) { case '0': // 接続確認コマンド while(BusyUART1()); WriteUART1('1'); // OK出力 while(BusyUART1()); // 送信完了待ち Green2 = 0; // LED On Yellow2 = 1; // LED Off break; case '1': // 接続確認コマンド while(BusyUART1()); WriteUART1('0'); // OK出力 while(BusyUART1()); // 送信完了待ち Green2 = 1; // LED Off Yellow2 = 0; // LED On break; default : break; } } return 0; }
結果は無事に通信できた。
少なくともこの回路なら通信できるはず。