この前、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の便利さがすごい分かる。
コンフィグとか設定しないでもやりたいことできるもの。
以上、便利だったので記録しました。