「PIC18F2550とGT-720F(GPS)を接続する(ソフト編)」でConfig Bitsを変更して20MHzで動作させるのが、どうしても納得いかなかったので、USBの本も調べたら同じPIC18FシリーズでもUSB内蔵のものはクロック回路部分がちょっと違うことが書いてあった。
この図はPIC18F2550のデータシートにあったクロック回路の図です。
以下がいつも指定しているConfig Bitsの中の関連するConfig Bitsです。
#pragma config FOSC = HSPLL_HS #pragma config PLLDIV = 5 #pragma config CPUDIV = OSC1_PLL2 #pragma config USBDIV = 2
20MHzのセラロックで FOSC = HSPLL_HS
を指定すると PLLDIV = 5
で指定している5で割られて 20MHz / 5 = 4MHz が96MHz PLLに入る。
で、96MHz PLLから出たラインの下に分岐するラインが入るPLLで CPUDIV = OSC1_PLL2
が÷2を指定していて CPU は96MHz / 2 = 48MHzのクロックで動作するようになる。
だから表にある数字じゃだめで、40MHzの2割り増しの値を指定すればOKなはず。
でも、9600bpsを指定するには 255×1.2 = 306 となって1バイトに収まらない。
こうなると「GPSの設定を変更して19200bpsで通信できるようにするしかない」と、GT-720Fの設定変更の方法を調べて19200bpsに変更した。
(ググると出てくる地球の絵があるアプリへのリンクが無くなっているけど、ファイルは残っているので、 http://canmore.com.tw/file/webdata/d/D00000052_00.rar からダウンロードしました。)
で、計算すると129×1.2 = 154.8≒155 となって、 USART_BRGH_HIGH, 155
を指定したらうまく動きました。
これで納得。