PIC16f690とMAX232でシリアル通信
2009年9月27日
PCとPICとの間で通信ができれば、マイクロコントローラを用いた回路の可能性が広がる。今時のコンピューターでは外部回路との通信にはUSBがメインだが、PIC18f14k50などを用いれば、これができるらしい。他には、FT232Rなどを用いた方法があるようだ。これらの方法は、USB用のドライバを用意する必要があるという点で、少し敷居が高い。少し勉強して、後ほどトライすることにしたい。
今やろうとしているのは、MAX232を用いてRS232Cで通信する方法。今使っているノートパソコンにはRS232Cの端子は無いのだが、USB→RS232C変換機を用いてRS232Cのシリアル通信を行うことができる。
MAX232を久しぶりに使うので、上記の回路図で試す前に色々とテストを行った。
通信には、PuTTYを使用。左の回路図は、単に入力をそのままコールバックするもの。これが正常に働くことを確認して、右の回路を組んだ。これも、正常に動作。
つづけて、PIC16f690をつなげてみた(記事の始めの回路図)。MicrochipのAN774を参考に組んだプログラムが、次のとおり。とりあえず、クロック4Mhzでボーレートを9600に指定して実行している。
ちゃんとPICを介してコールバックしているかどうかの確認として、アルファベット大文字のA-YはB-Zに変換して(一文字ずつ、ずらして)返すようにしてある。この変換もちゃんと動いた。意外とすんなり動いたので、ちょっとびっくり。マイクロコントローラが安くて便利なのにも、驚きだ。
AN774のサンプルコードでは、入出力用のバッファの使い方なども記述されている。スピードの速いデータのやり取りの場合は、そういったコードを参考にしてすこし書き換えすることが必要のようだ。
さあ、これでオシロスコープができるかな。
今やろうとしているのは、MAX232を用いてRS232Cで通信する方法。今使っているノートパソコンにはRS232Cの端子は無いのだが、USB→RS232C変換機を用いてRS232Cのシリアル通信を行うことができる。
MAX232を久しぶりに使うので、上記の回路図で試す前に色々とテストを行った。
通信には、PuTTYを使用。左の回路図は、単に入力をそのままコールバックするもの。これが正常に働くことを確認して、右の回路を組んだ。これも、正常に動作。
つづけて、PIC16f690をつなげてみた(記事の始めの回路図)。MicrochipのAN774を参考に組んだプログラムが、次のとおり。とりあえず、クロック4Mhzでボーレートを9600に指定して実行している。
#include <pic.h> __CONFIG(INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & BORDIS & IESODIS & FCMDIS); unsigned char changeChar(unsigned char org){ if (0x41<=org && org<=0x59) return org+1; return org; } void interrupt int_function (void) { static unsigned char data; static unsigned char data_received=0; static unsigned char write_ok=0; if (RCIF && RCIE) { if (OERR) { // test overrun error flag CREN=0; // reset the receiver logic CREN=1; // enable reception again return; } if (FERR) { // test framing error flag data=RCREG; //discard received data that has error data_received=0; return; } if (write_ok) { TXREG=changeChar(RCREG); write_ok=0; data_received=0; } else { data=changeChar(RCREG); data_received=1; } } else if (TXIF && TXIE) { if (data_received) { TXREG=data; data_received=0; write_ok=0; } else write_ok=1; } } void main(){ // Disable all interrupt events INTCON=0; // all output except for RA4 and RB5 TRISA=0x10; TRISB=0x20; TRISC=0; // Non-analog mode ANSEL=0x00; ANSELH=0x00; // Serial settins follow OSCCON=0x60;// CLK=4 MHz SPBRG=25; // 4000000/(16x9600)-1=25.04 TXSTA=0x24; // enable transmission and high baud rate RCSTA=0x90; // enable serial port and reception // Intterupt settings follow INTCON=0xc0; //enable global and peripheral ints PIE1=0x30; //enable TX and RX interrupts }
ちゃんとPICを介してコールバックしているかどうかの確認として、アルファベット大文字のA-YはB-Zに変換して(一文字ずつ、ずらして)返すようにしてある。この変換もちゃんと動いた。意外とすんなり動いたので、ちょっとびっくり。マイクロコントローラが安くて便利なのにも、驚きだ。
AN774のサンプルコードでは、入出力用のバッファの使い方なども記述されている。スピードの速いデータのやり取りの場合は、そういったコードを参考にしてすこし書き換えすることが必要のようだ。
さあ、これでオシロスコープができるかな。