タイトル通りのことをやろうとしたのですが、何回かうまくいかなかったので、その報告とシリアル通信のやり方です。 基本的にやり方を紹介して最後に失敗したところを紹介します。
環境
- PIC16F18877
- MCC v3
- XC8 v2.1.0
- macOS 10.15.3
目的
- PIC16F18877とパソコンでシリアル通信をさせる
- (ただし、今のところパソコン側から操作するのではなくPICでのセンサーの値をパソコンでチェックするのに使う予定しかないのでPIC→パソコンの送信のみ。PICでの受信はしない)
- MCCを使ってプログラムを作る
- MCCを使ってみたい
- 楽そう
使ったもの
- PIC KIT4
- aitendoの★2102★USB-UART変換モジュール
- USB延長ケーブルがあるといいと思います。
- PIC16F18877
- ブレッドボードにさせるタイプ
配線
シリアル変換のTXDとPICのRXDを繋げて、シリアル変換のRXDとPICのTXDを繋げて変換のGNDとPICのGNDを繋ぎます。 PIC KITはいつも通りに繋ぎます。
シリアル通信のやり方
MCCを起動してDevice ResourcesのEUSARTのプラスボタンを押すと設定画面が開くのでそれを以下のように設定しました。
Redirect STDIO to USARTにチェックを入れることでprinf
でデータをシリアル通信で送ることができます。
終わったら左上のGenerateを押してコードを生成します。
あとは好きなところでprintf
をするだけです。文字列の最後に\n\r
をつける例をよく見るのでそれをつけたほうがいいと思います。
僕の場合はLチカも同時にするように書いたので以下のようになりました。
void main(void) { // initialize the device SYSTEM_Initialize(); // When using interrupts, you need to set the Global and Peripheral Interrupt Enable bits // Use the following macros to: // Enable the Global Interrupts // INTERRUPT_GlobalInterruptEnable(); // Enable the Peripheral Interrupts // INTERRUPT_PeripheralInterruptEnable(); // Disable the Global Interrupts //INTERRUPT_GlobalInterruptDisable(); // Disable the Peripheral Interrupts //INTERRUPT_PeripheralInterruptDisable(); while (1) { // Add your application code printf("Hello World\n\r"); LED_Toggle(); __delay_ms(1000); } }
LEDは自分で名前をつけました。 Lチカもやる場合はそれもMCCで設定します。
ハマったところ
- Data PolarityをInvertedにしてしまった
Non-Invertedにしないとうまくいきませんでした。 - 配線を間違えてしまった
これは単純なミスです。データシートを読み間違えてシリアル通信用のピンに5VとGNDを繋いでました。恐ろしいです。今のところ壊れていないようなので多分大丈夫です。
最後に
今回使ったUSB-UARTの変換は初めて使ったので壊れていないか不安でしたが、無事使えて安心しました。配線ミスは怖いですね。