2018-10-29に更新

PIC18F14K50とFT232RLでシリアル通信

PIC18F14K50とFT232RLでシリアル通信を試した。
元々やろうと思っていて全然手を出していなかった。

というのも、arduinoの簡単さに感心してしまい、
PICはなぜすぐに色々な機能が実現できるライブラリさえ
提供していてくれないのだろう、という思いがあり、
やるなら使いまわせるライブラリを作りたい、と考えていた。

そんなおり、色々ネットを見ていて、
気が付くとよくきむ茶さんのサイトに辿り着いたりするのだが、
よくよく見るときむ茶さんがダウンロードできるようにしてくれているソースには、
UARTやSPIなど、面倒なところをライブラリにまとめてくれていて、
それを使えばわざわざ自分で書かなくても簡単に色々出来てしまう。
まさに欲しいなと思っていたものだった。もっと早く気付けばよかった。

ということで、きむ茶さんのサイトにある通りに試しただけ。
http://www.geocities.jp/zattouka/GarageHouse/micon/linkPC/FT232R.htm
今後も色々使い倒していきたいと思う。

18F14K50用のソースは下記。

|c|

include <xc.h>

include "skUARTlib.h"

// PIC18F14K50

pragma config FCMEN = OFF

pragma config IESO = OFF, USBDIV = OFF, CPUDIV = NOCLKDIV

pragma config WDTEN = OFF

pragma config BOREN=NOSLP,BORV=30,PWRTEN=ON

pragma config HFOFST = OFF, MCLRE = OFF

pragma config STVREN = ON, BBSIZ = OFF, LVP = OFF

pragma config XINST = OFF

pragma config CP0 = OFF, CP1 = OFF, CPB = OFF

pragma config WRT0 = OFF, WRT1 = OFF, WRTB = OFF, WRTC = OFF

pragma config EBTR0 = OFF, EBTR1 = OFF, EBTRB = OFF

//内部クロック

pragma config FOSC = IRC, PLLEN = OFF

define _XTAL_FREQ 8000000

void interrupt inter(void) {
InterUART();
}

void init(void)
{
OSCCON = 0b01100010;
ANSEL = 0;
ANSELH = 0;
TRISA = 0;
TRISB = 0b00100000; //RX in
TRISC = 0;
USBEN = 0;
IOCA0 = 1;
IOCA1 = 1;
PORTA = 0;
PORTB = 0;
PORTC = 0;
}

void main(void)
{
char data[3];

init();
InitUART(12, 10, 51);
data[1] = 0x0d;
data[2] = 0x0a;

while(1) {
    if (UART_Available() != 0) {
        data[0] = UART_Read();
        data[0] += 2;
        UART_Send(data, 3);
    }
}

return;

}
||

InitUARTの中身を見てみるとわかるが、ICによって処理が分けられている。
18F14K50にはRX, TXは1個ずつしか無いので特に設定はいらないため
そのまま使える。最初の2つの引数は使ってないので適当な値でもいい。
他のICを使う場合はそこに分岐処理を追加していけばいい。
githubに上がってみんなで更新していけるとよさげなライブラリ…。

ハマったところとしては、
どうしても割り込み関数が呼ばれず、全然動作しなかった。
なんか設定やコンフィグがおかしいのかな〜と思い時間かけて調べたが分からず。
よくよく調べるとFT232とPICのRX同士、TX同士をつないでいたという
初心者にありがちそうなミス…。

ツイッターでシェア
みんなに共有、忘れないようにメモ

だら@Crieit開発者

Crieitの開発者です。 Webエンジニアです(在宅)。大体10年ちょい。 記事でわかりにくいところがあればDMで質問していただくか、案件発注してください。 業務依頼、同業種の方からのコンタクトなどお気軽にご連絡ください。 業務経験有:PHP, MySQL, Laravel, React, Flutter, Vue.js, Node, RoR 趣味:Elixir, Phoenix, Nuxt, Express, GCP, AWS等色々 PHPフレームワークちいたんの作者

Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。

また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!

有料記事を販売できるようになりました!

こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?

コメント