PIC18F2550とGT-720F(GPS)を接続する(ソフト編)

組み立てまでは問題無かったけど、これから動くプログラムを書くのに苦労した。
PIC18F2550なので、C18を使うとUSARTのライブラリ関数があり、そんなに問題なさげだった。

// メイン関数
void main(void)
{
    char res;
    unsigned char c = 0, y = 1;
    TRISB = 0;        // PORTB全部出力
    lcd_init();
    lcd_clear();
    lcd_goto(0,0);
    lcd_str(STARTMSG);
    Delay10KTCYx(200);
    OpenUSART(USART_TX_INT_OFF & USART_RX_INT_OFF &
              USART_ASYNCH_MODE & USART_EIGHT_BIT &
              USART_CONT_RX & USART_BRGH_HIGH, 129);
    lcd_goto(0,0);
    lcd_str(WAITMSG);
    lcd_goto(y,0);
    while (!DataRdyUSART());
    while (1) {
        while (DataRdyUSART()) {
            res = ReadUSART();
            if (c < 16) {
                c++;
                lcd_data(res);
            } else {
                c = 0;
                if (y == 0) {
                    y = 1;
                } else {
                    y = 0;
                }
                lcd_goto(y,0);
            }
        }
    }
}

メインループは結果からすると、基本的にこれでOKだったけど、OpenUSARTの引数の最後のUSART_BRGH_HIGH, 129部分が問題だった。
サンプルとかはこの組み合わせが多くて、解説本でもこの組み合わせだったので、何の疑問もいだかなかった。
この部分は通信のボーレートを指定する部分で、PICの動作クロックを元に計算して求める。
ただ、一般的なクロック(40MHz, 20MHz, 10MHzの3つ)はすでに計算された表があって、表から目的のボーレートで引けばOK。
でも、PIC18Fは外部クロックの4倍のクロックで動かすとかの機能があって、自分のPIC18F2550には20MHzのセラロックをつけているけど、実際に何MHzで動いているのかよくわかってなかった。
とはいえ、そのままで動くと思っていたので変な文字(以下、文字化けと記します)が出てきた時はパニクった。
文字化けになるのはボーレートが違っているのが原因というのは、RS-232Cの通信とか調べている時に読んだのでボーレートが違うんだろうと思った。

表を見て、40MHz, 20MHzといろいろ数値を試してみたし、さらにUSART_BRGH_LOWにしてみたりしたけど、文字化けは直らない。
「これは、クロックをちゃんと調べないとダメだな」と思い、Config Bitsのところを調べた。

#pragma config FOSC = HSPLL_HS
#pragma config WDT = OFF
#pragma config PLLDIV = 5
#pragma config CPUDIV = OSC1_PLL2
#pragma config USBDIV = 2
#pragma config PWRT = ON
#pragma config BOR = ON
#pragma config BORV = 3
#pragma config LVP = OFF
#pragma config VREGEN = ON
#pragma config MCLRE = ON
#pragma config PBADEN = OFF

PIC18F2550+20MHzセラロックの組み合わせで、今までこの設定で動いていた。
でも、いろいろ調べてみるとPLLで×4で動かす場合、最大で10MHzまでだそうで、20MHzをつないで FOSC = HSPLL_HS を指定した場合はいくつで動くのかわからない。
なのでとりあえず FOSC = HS にして20MHzで動くように設定して、20MHz用設定値 USART_BRGH_HIGH, 129 に設定してみたら動いた。

Config Bitsの設定はあまりよくわかってないので、一度ちゃんと見直す必要がある。

カテゴリー: PIC, ソフトウェア タグ: , , , , パーマリンク

PIC18F2550とGT-720F(GPS)を接続する(ソフト編) への1件のコメント

  1. ピンバック: PIC18F2550のクロック « Physical Computingに挑戦!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA