2016年7月30日土曜日

PICの落とし穴

PICを使用するときにはまってしまいがちなトラップを、自分の備忘録としてまとめてみました。


◎PIC16F1823/PIC12F1822

・RA3(MCLR)を入力ピンとして使用するためには、Configuration wordの設定でMCLRをOFF、LVPをOFFにする必要があります。

xc8のプログラム例
#pragma config MCLRE = OFF
#pragma config LVP = OFF

◎PIC12F629/675/683, PIC16F630/627A/628Aなど

・コンパレーターの入力と共有しているピンをデジタルI/Oとして使用する場合、コンパレーターの設定を変更する必要があります。CMCONレジスタのbit0-2を111にします。デフォルトでは000になっているため、コンパレーターの入力に接続されています。


xc8のプログラム例
CMCON = 0b00000111;


◎PIC10F200/220など

・GP2を入出力ピンとして使用するためには、OSCCALレジスタのbit0(FOSC4)を0にする必要があります。デフォルトは0なので、基本的には気にしなくても大丈夫なはずですが。

データシートより
bit 0 FOSC4: INTOSC/4 Output Enable bit(1)
1 = INTOSC/4 output onto GP2
0 = GP2/T0CKI applied to GP2

xc8のプログラム例
OSCCALbits.FOSC4 = 0;


◎PIC24F04KA200/201など

・クロック設定:内蔵オシレータ+PLLx4の場合、デフォルトでは16MHz。CLKDIVレジスタのRCDIVのデフォルト値が001のため。32MHzにするためにはRCDIV=000にする。

データシートより
bit 10-8 RCDIV<2:0>: FRC Postscaler Select bits
001 = 4 MHz (divide by 2) (default)
000 = 8 MHz (divide by 1)

XC16のプログラム例
#pragma config FNOSC = FRCPLL
・・・
CLKDIVbits.RCDIV = 0b000;


・XC16で遅延命令__delay_ms()を使うためには、libpic30.hをインクルードする前にFCYを定義する。FCYは命令サイクル(=クロック÷2)

#define FCY 16000000
#include <libpic30.h>



0 件のコメント:

コメントを投稿