Potewoのブログ

電子工作が好きな学生の書く技術系のブログです。

PIC16F18877でMCCを使ってシリアル通信をする

タイトル通りのことをやろうとしたのですが、何回かうまくいかなかったので、その報告とシリアル通信のやり方です。 基本的にやり方を紹介して最後に失敗したところを紹介します。

環境

  • PIC16F18877
  • MCC v3
  • XC8 v2.1.0
  • macOS 10.15.3

目的

  • PIC16F18877とパソコンでシリアル通信をさせる
    • (ただし、今のところパソコン側から操作するのではなくPICでのセンサーの値をパソコンでチェックするのに使う予定しかないのでPIC→パソコンの送信のみ。PICでの受信はしない)
  • MCCを使ってプログラムを作る
    • MCCを使ってみたい
    • 楽そう

使ったもの

配線

シリアル変換の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で設定します。

ハマったところ

  1. Data PolarityをInvertedにしてしまった
    Non-Invertedにしないとうまくいきませんでした。
  2. 配線を間違えてしまった
    これは単純なミスです。データシートを読み間違えてシリアル通信用のピンに5VとGNDを繋いでました。恐ろしいです。今のところ壊れていないようなので多分大丈夫です。

最後に

今回使ったUSB-UARTの変換は初めて使ったので壊れていないか不安でしたが、無事使えて安心しました。配線ミスは怖いですね。