24FJ64GA002覚書

〔PICの動かせ方入門に戻る〕


忘れないうちにメモします。
ここでの記載はMPLAB X V5.15
MPLAB(R) XC16 C Compiler Version 1.30を使用しての内容です。

こちらがPIC24FJ64GA002のサイトです、 データシート等の資料はここからダウンロードしましょう。
又、PIC24Fファミリー・日本語リファレンスマニュアルのサイトはこちらを参照下さい。

主な特徴:
・ 16ビットCPU,最大16 MIPSのパフォーマンスで動作します。
・ I2C/SPI/UARTは各2モジュールづつ有ります。(UARTはLINとIrDAをサポート)
・ ハードウェアRTCC、アラーム付きリアルタイムクロックカレンダー
・ 最大5つの入力キャプチャと5つの出力コンペア/PWM、すべて専用タイマー付き
・ プログラマブル巡回冗長検査(CRC)機能は、ソフトウェアによる構成が可能なCRCチェックサム
  ジェネレータです。
・ パラレルデバイス(EEPROM/LCD等)と通信する様に設計された、パラレルの8ビットI/Oモジュール

電源電圧
電源電圧(VDD)は2.0V-3.6Vです。
電源回りの配線図 左図が電源回りの基本配線図です。
(PIC24F64GB002だが24F64GA002も同じです)

CORE自体の電圧は2.0V-2.75Vとなっています、
なのでVDDに3.3Vを使用する場合は内蔵レギュレータを
使用
しないとダメで、VCAP(20番)端子に、
10uF/16V low-ESR capacitor を取付けVSSに落とします
DISVREG(19番)端子は、内蔵レギュレータ有効/無効の選択ピンで、
GNDで有効/VDDで無効です。

VDD(13番端子)/VSS(8番端子)が電源ピンで、
AVDD(28番端子)/AVSS(27番端子)はアナログ専用電圧入力ピン


1番(リセット)ピンの使い方
MCLR
 外部リセット信号を入力する場合のピンとして使用。
 リセット信号はLOW(0V:GND接続)でリセットが掛かります、だから
 外部リセットを使わない時は1K〜10KΩ抵抗を介してVddに接続しなければならない。
 又、MCLRピンにコンデンサーが接続されている場合に、PICKit3を接続するならコンデンサーを
 一旦取り外す(ジャンパーピン等で)方が良い様です。

発振回路(システムクロック)
PICの内部に付いているクロック周波数回路は1/2/4/8MHz、16/32MHzを利用できる。
また、内部クロックで16(32)MHZにする場合は、4(8)MHzにして内蔵4xPLL回路を通す必要がある。
外部クロックは32MHz(EC=48MHz)までOKの様です。
詳しくはこちらの日本語"PIC24Fファミリ オシレータリファレンスマニュアル"を参照下さい。

内部クロックを利用する場合
先ず、コンフィギュレーションの "POSCMOD = NONE"で外部オシレータは使わないとして
コンフィギュレーションの "FNOSC" を FRC/FRCPLL/FRCDIV の何れかに設定し、
FRCDIV なら下記一覧の如く"_RCDIV"ビットで発生させる周波数をセットします。
FRC はポストスケーラ(RCDIV)は通さずに内蔵クロック8MHzをそのまま使用します。
4xPLLを通す場合は、FRCPLLにしてCLKDIV.RCDIVを4/8MHzに設定します。

CLKDIV.RCDIV
000 8MHz
001 4MHz
010 2MHz
011 1MHz
その他 500KHz/250KHz/125KHz/31KHz

外部クロック(プライマリ外部オシレータ)を利用する場合
先ずは、コンフィギュレーションの "POSCMOD" を XT/HS/EC の何れかに設定し、
XTは3.5MHz-10MHzの水晶振動子、HSは10MHz-32MHzの水晶振動子、
ECは4MHz-32MHzの外部クロック入力が可能です。
次に、コンフィギュレーションを "FNOSC = PRI"とするが、PLLを通すなら"PRIPLL"と設定。

また、プライマリとは別にセカンダリ外部オシレータとして、
外付けの32.768 kHz 水晶振動子を駆動出来ます、って事はRTC(リアルタイムクロック)が実現出来そう。

DOZE(ダズ)モード
周辺モジュールの動作に影響を与えずにCPUの消費電力を低減する事が出来るモードで、
周辺モジュールのクロックとシステムクロックの比を変える事が可能です。

コンフィギュレーション
#pragma config キーワード1 = 設定値 , キーワード2 = 設定値   の様に記述する。
#pragma config BOREN = NOSLP , BORV = 30 , PWRTEN = ON  // 記述の例

CONFIG2
 POSCMOD :外部オシレータの動作モードの選択
        NONE = 外部オシレータは使わない
            外部オシレータ使う場合は、HS/XT/ECのモードに設定
 I2C1SEL :I2C1で使用するピンの選択を行う
        SEC = ASDA1(RB5)/ASCL1(RB6)を使用
        PRI = SDA1(RB9)/SCL1(RB8)を使用
 IOL1WAY :IOLOCKビット単方向セット イネーブルビット
       ON = IOLOCK ビットは、ロック解除シーケンスを実行後に一度のみセット出来る
          一度IOLOCK がセットされると、その後PPS は変更出来ない
       OFF= ロック解除シーケンスを実行すれば何度でもIOLOCKをセット/クリア出来る
 OSCIOFNC:OSCOピン機能の選択
       ON = OSCOピンはデジタルI/O(RA3)とする
       OFF = クロック(CLKO)を出力(FOSC/2)する
 FCKSM  :クロック切替えを行うか選択
       CSDCMD = クロックの監視やクロック切替え操作はしない。
       CSECMD = クロックの監視はしないが、クロック切替えは行う。
       CSECME = クロックの監視とクロック切替えの両方行う。
 FNOSC  :オシレータの動作モード選択ビット
       FRC  = 内蔵オシレータ(8MHz)を選択する
       FRCPLL = 内蔵オシレータをPLLで動作させる
       PRI  = 外部オシレータを選択する(XT/HS/EC)
       PRIPLL = 外部オシレータをPLLで動作させる
       SOSC = セカンダリオシレータを選択する
       LPRC  = 低消費電力の内蔵RCオシレータ(31KHz)を選択する
       FRCDIV= ポストスケーラ付き内蔵オシレータを選択する
 SOSCSEL:セカンダリオシレータのモードを選択
       LPSOSC= 低電力(Low-Power)発振器モード
       SOSC = デフォルト電力(High-Power)発振器モード
 WUTSEL :電圧レギュレータのウェイクアップに必要な時間を設定
       FST = 高速レギュレータ起動時間(10us)を使用
       LEG = デフォルトのレギュレータ起動時間(190us)を使用
 IESO   :内部オシレータで起動しその後外部オシレータで起動する2段階起動モードの使用許可
       ON = 有効にする
       OFF = 無効にする

CONFIG1
 WDTPS  :ウォッチドッグタイマ有効時のポストスケーラを設定する
       PS1   = 1:1
       PS2   = 1:2
         :
       PS256  = 1:256
         :
       PS32768 = 1:32768
 FWPSA  :ウォッチドッグタイマ有効時のプリスケーラを設定する
       PR32 = 1:32
       PR128 = 1:128
 WINDIS :ウオッチドッグにウインドウ式を利用するのかを選択する
       ON = ウィンドウ付きウォッチドッグタイマーが有効(FWDTEN=1)
       OFF = 標準ウォッチドッグタイマーが有効
 FWDTEN:ウォッチドッグタイマの有効無効を選択する
       ON = ウォッチドッグタイマーは有効
       OFF = ウォッチドッグタイマーは無効("RCON.SWDTEN"ビットで行う)
 ICS    :In-Circuit Debuggers(PICKit3等)の通信チャネル
       PGx1=PGEC1とPGED1を使う PGx2=PGEC2とPGED2 PGx3=PGEC3とPGED3
 GWRP  :プログラムメモリ空間の書き込み禁止ビット
       ON = 書き込み禁止
       OFF = 書き込み許可
 GCP   :プログラムメモリ空間のコード・プロテクトビット
       ON = プロテクト有効
       OFF = プロテクト無効
 JTAGEN :JTAGを利用するのかを設定
       ON = 利用する  OFF = 利用しない

その他の詳しい内容は
[C:\Program Files\Microchip\xc16\v1.30\docs\config_docs\24FJ64GA002.html] の
ファイルを参照。

delay
__delay_us/__delay_ms関数を使用する場合は、
#define FCY 16000000UL // Fosc(32MHz)/2(16MIPS)
#include <libpic30.h>
を追記します。

※ ”#define FCY”の行は、#include行の上に記述します。
※ __delay_ms(xxx)の"xxx"の部分は、XC8では固定値でしたがXC16は変数が使えます。\(^-^)/

I/Oポート
オープンドレイン制御
 通常ポート出力ピンは電流のソースとシンクが可能な標準のプッシュプルドライバですが、
 ODCA/Bレジスタの各ピンに該当するビットをONにすると、その対応するポート出力は電流のシンク
 のみ可能なオープンドレインドライバとなります。(トレラントピンのみ対象)

その他

PPS機能(PERIPHERAL PIN SELECT MODULE)

※ I2C1の通信用ピンは5.5Vトレラント入力になっています。
※ 5.5Vトレラント端子でPPSピンは、14番(RB5)/15番(RB6)/16番(RB7)/17番(RB8)/18番(RB9)/
  21番(RB10)/22番(RB11)です

周辺モジュールの入出力を好きなピン(RP0〜RP15)に割り当てる事が出来る機能です、
割り当てを変更できるのはデジタル信号のみで、アナログ入出力の割り当ては変更できません。
また、不用意に割り当てが変更出来ない様にロックする事が可能な様だが....試していません。
尚、このPICは電源が3.3Vですが、5Vトレラント端子に割当てれば5Vデバイスとの通信が可能です。

24FJ64GA002ピン概要(PPS)

周辺モジュールの入力
INT1/2 IC1/2/3/4/5 OCFA/B SCK1(2)/SDI1(2) SS1(2) T2CK/3/4/5 U1CTS(2)/U1RX(2)
の周辺機器を使う場合は、RPINRxレジスタにRP0〜RP15ピン
どれかを割り振らないとダメです。

周辺モジュールの出力
C1OUT(2) U1TX(2)/U1RTS(2) SDO1(2)/SCK1(2) SS1(2) OC1/2/3/4/5
の周辺機器を使う場合は、RPORxレジスタに周辺機器番号を設定します。

例えば、UART1の U1RX=RB8 / U1TX=RB9 に割付ける場合は、
#include <xc.h>
#include <PPS.h>                  // Pin Re-Mapping peripheral library

#pragma config IOL1WAY = OFF      // 周辺機器のピン割り付けは何度でも変更出来る様に許可

     PPSUnLock ;
     iPPSInput(IN_FN_PPS_U1RX,IN_PIN_PPS_RP8) ;    // RB8(RX1)
     iPPSOutput(OUT_PIN_PPS_RP9,OUT_FN_PPS_U1TX) ; // RB9(TX1)
     PPSLock ;
となります、<PPS.h>のライブラリを使った方が便利でしょう。

詳しくはデータシートを参照して下さい。

上記の周辺モジュールを使用する場合は必ず割り付けないと動作しません

PPSのライブラリインストール操作

MPLAB(R) XC16 C Compiler Version 1.24のコンパイラでは”PPSのライブラリ”が
付属していましたが、V 1.25 以降は別途でダウンロードとインストールを行わないとダメな様です。

ダウンロード先は、マイクロチップのこちらのHPから、[Compiler Downloads]タブを開き、
下の方に有る"PIC24/dsPIC Peripheral Libraries v2.00 - Windows"をクリックします。
(マイクロチップに登録してサインインしないとダウンロードできないかもしれません)

ダウンロードしたファイルをクリックすればインストールが始まりますが、
インストール時の注意は、インストール先を指定する事です。
PPSライブラリのインストール画面

XC16の"v1.30"でPPSライブラリを動作させたいので、図の様に順にクリックします。


割り込み
割り込み処理の記述方法は、こちらのサイト(picfun)を参照しましょう。
"MPLAB C30"での記述ですが、XC16でも動作します。

A/D
24FJ64GA002は、10ビットでAN0-AN5/AN9-AN12チャンネルのアナログコンバータを持っています。
16個の変換用バッファが有り、全チャンネル自動スキャンモードや1チャンネルを16個のバッファに
逐次変換するモード等のバッファ格納機能を持っています。
又、自動サンプルモードと自動変換トリガーを一緒に動作させると、ソフトの介入なしにエンドレスで
自動変換が可能らしぃ。 尚、差動入力も出来、スリープ中でも動作させる事が可能です。

・単CH(AN0)入力、手動サンプリング開始、サンプリング時間は指定したTADによる、
 TAD時間終了後に自動変換開始のサンプルプログラムはこちらからダウンロードして下さい。

・単CH(AN0)入力、手動サンプリング開始、サンプリング時間は指定したTADによる、
 TAD時間終了後に自動変換開始で16バッファ分サンプリングと変換を行います。
 なので、平均値で読み込みます、このサンプルプログラムはこちらからダウンロードして下さい。

TIMER1
タイプAと呼ばれる16ビットタイマーモジュールです。
セカンダリクロック端子に外部オシレータ32KHzを取り付けて動作させる事も可能ですので、
リアルタイムクロック (RTC) アプリケーション向けに使えます。
外部クロックはプリスケラーで分周後に、内部デバイスクロックに同期/非同期が選択できます。

Timer1〜Timer5共に操作方法は同じで、"PRx"のタイマ周期レジスタに設定した値までカウントしたら
割り込み発生です。

タイマーの記事は、24EP256MC202の記事ですが"タイマー割込みを使ってLEDを点滅させます"を
参照下さい。
詳しくはこちらの日本語"PIC24Fファミリ タイマリファレンスマニュアル"を参照下さい。

TIMER1のサンプルプログラムはこちらからダウンロードして下さい。

TIMER2/4
タイプBと呼ばれる16ビットタイマーモジュールです。
Timer2とTimer3Timer4とTimer5、を組み合わせれば32ビットタイマーとして動作します。
"TxCK"端子から外部クロックを入力出来、プリスケラーで分周後、内部デバイスクロックに同期します。

TIMER2のサンプルプログラムはこちらからダウンロードして下さい。
TIMER2とTIMER3を使った32ビットタイマーのサンプルプログラムはこちらからダウンロードして下さい

TIMER3/5
タイプCと呼ばれる16ビットタイマーモジュールです。
アナログ(A/D)モジュールの変換タイミングをトリガー出来ます。
"TxCK"端子から外部クロックを入力出来ますが、タイプBと異なり、内部デバイスクロックに同期後の
クロックをプリスケーラで分周します。

SPI/I2C/UART
I2C/SPI/USARTは各2回路づつ有ります。

24FJ64GB002での内容ですが詳しい記事は"PIC24Fシリアル通信(I2C/SPI/UART)について"を参照下さい。

PWM
PWMを生成させるには出力コンペア(OC)モジュールの、
"エッジ整列PWMモード"と"センター整列PWMモード"を利用する事になります。
出力コンペアモジュールは5個(OC1/2/3/4/5)有るので5個のPWM出力が出来ます。
出力コンペアモジュール出力端子の"OC1/2/3/4/5"は、PPS機能でピンを割り付けないと使えません。

24FJ64GB002での内容ですが詳しい記事は"PIC24FのPWM生成方法"を参照下さい。

その他
全ての割り込みには、IPR1-IPR3レジスターにて高低レベルの割り込み順位優先度が付けられます。
初期デフォルトでは全ての割り込みが「高」に設定されています。




【きむ茶工房ガレージハウス】
Copyright (C) 2006-2020 Shigehiro Kimura All Rights Reserved.