この前、PICの工作キットでRS-232CでPCとシリアル通信するの上手く動かなかったしどうしよう。
っていうときに、Arduino使うと驚くほど簡単にシリアルをPCで確認できたのでメモ。
あぁ、Arduino持ってて良かった。
PIC16F88のコード
#include <xc.h> #include <stdio.h> #define _XTAL_FREQ 8000000 // 8MHz //#include "uart.h" // 16F88 // CONFIG1 #pragma config FOSC = INTOSCIO // 内部発振使用 #pragma config WDTE = OFF // ウォッチドッグタイマ #pragma config PWRTE = ON // パワーアップタイマー #pragma config MCLRE = OFF // マスタークリアー機能 #pragma config BOREN = OFF // ブラウンアウトリセット #pragma config LVP = OFF // 低電圧プログラム書き込み #pragma config CPD = OFF // データーコードプロテクション #pragma config WRT = OFF // フラッシュ書き込み #pragma config CCPMX = RB3 // CCPのパルス出力ピン #pragma config CP = OFF // プログラムコードプロテクションOFF // CONFIG2 #pragma config FCMEN = OFF // Fail-Safe Clock Monitor #pragma config IESO = OFF // Two-Speed Start-up // uart #define BAUDRATE 9600 // 9.6kbps #define TX9_RX9_BIT 0 // 0: 8bit, 1: 9bit #define BRGH_BIT 1 // 0: 低速サンプル指定, 1: 高速サンプル指定 void init_pic(void); void init_uart(void); void strOutUSART(char *); void main(void) { init_pic(); init_uart(); char *cmd = "$WP http://request-watcher.herokuapp.com/ testbody=hello\n"; while(1){ __delay_ms(5000); strOutUSART(cmd); } } void init_pic(){ OSCCON = 0x72; // INTOSC 8MHz ANSEL = 0x00; // AN未使用 PORTA = 0x0; PORTB = 0x0; TRISA = 0x0; // RA0-7:out // SPIシリアル通信する // RC2/RX をinput // RC5/TX をoutput TRISB = 0b00000100; return; } void init_uart(){ SPBRG = 51; // 8MHzの時の9600Hz RCSTA = 0b10010000; // UART送受信を有効 TXSTA = 0b00100100; // 8Bit非同期送受信 RCIF = 0; // reset USART interruption flag RCIE = 1; // enable USART interruption PEIE = 1; // enable peripheral interruntion } void strOutUSART(char *str){ while(*str){ //文字列の終わり(00)まで継続 while (!TXIF); //送信終了待ち TXREG = *str++; //文字出力しポインタ+1 } }
Arduinoのコード
const unsigned long baudrate = 9600; void setup() { Serial.begin(baudrate); Serial.println("Ready."); } void loop() { if (Serial.available() > 0) { char c = Serial.read(); Serial.print(c); // Echo back } }
なんとこれだけ!
実行
ちゃちゃっとつなげればOK。今回のPICは11番がシリアル送信になる。
そして、Arduinoの0番はそのままシリアル受信できる!
DCジャックついてるけど使ってません。プラスとマイナスはそれぞれ繋いであります。
コード。
シリアルモニタ。
シリアル送信できてる!
PICやったあとだとArduinoの便利さがすごい分かる。
コンフィグとか設定しないでもやりたいことできるもの。
以上、便利だったので記録しました。