PIC18F245x/255x/445x/455x等でCPUDIVxを持っているデバイスで正しくオシレータ・コンフィギュレーションを設定するには?
#use delay()でcrystal, oscillator又は、internalのキーワードを使う時、
コンパイラーはオシレータに関連した、コンフィギュレーション・ヒューズとレジスターを設定します。
#use delay()でこれらのキーワードの内の1つを使用することをお薦めします。
そうしますとオシレータ・コンフィギュレーション・ヒューズが正しく設定されます。
例えば、PIC18F8722の場合は#use delay(clock=20000000)で外部XTALは20MHzの設定となります。
この違いはデバイスがCPUDIVxを持っていないでHSヒューズだけで正しい速度を設定出来るか、CPUDIVxを持っているデバイスかの違いにより起こります。
但し、注意すべき事は、例えば、PIC18F455xではコンフィギュレーション・ヒューズにCPUDIV1,
CPUDIV2, CPUDIV3 とCPUDIV4を持っており、さらに通常のクロック・ヒューズを持っていてクロックの最終速度を制御します。
例えば、#use delay(clock=20000000)とした場合で、#fusesの行でCPUDIVxヒューズの1つを指定していない場合は、デフォルト値になります。
例えば、PIC18F4553ではCPUDIV4になります。これは実際の外部に取り付けるXTALのクロックは 5MHzが必要となります。
#use delay(crystal=20000000) とした場合には、コンパイラーは正しい最終速度を与えるHSとCPUDIV1 の両方をセットします。
データシートを確認ください。
PIC18F2550での設定例:
#include <18F2550.h>
#device ADC=10
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)