PICマイコンの使い方

PICマイコンの8bitマイコンから32bitマイコンまで使いこなすぞ! 周辺機能やアセンブラ、C言語を使いこなすぞ。ARMには負けないぞ! 頼みの綱はPIC32MZだ!たのしみだなー

PIC32MX370F512H

【PIC32MX370F512H】秋月電子通商からPIC32MXF512Hが販売されている。

◆秋月電子通商でPIC32MX370F512Hを取扱始めたようです。
これでPIC32MXの開発ハードルが下がりますね。
PICマイコン PIC32MX370F512HT-I/PT
0.5mmピッチQFP(64ピン)変換基板に実装した
PIC32MXマイコン実装基板です。
【PIC32MX370F512H】96MHzでつかってみる。①コンフィグレーションの設定を参照ください。




【PIC32MX370F512H】PMP接続のDMA転送でaitendoの1.44インチ液晶TFT(ZY-FGD)を使ってみる。その4

◆PIC32MX370F512HのPMP接続のDMA転送を使って
aitendoの1.44インチ液晶TFTに高速表示します!
SDcardに書き込まれた画像ファイルBMPを読み込んでます。
1)動画

動画はこちらから


速度はだいたい30fpsといったところです。



【PIC32MX370F512H】タイマーを使ってみる。


◆今回はPIC32MX370F512Hのタイマーを使ってみます!
2種類のタイマーがあり、
・タイマーAは16bitタイマー。
・タイマーBは16/32bitいずれかを選択できるタイマー。T32bitで選択
今回はタイマーAの16bitタイマーを使ってみます。


1)参照
リファレンスマニュアルDS61105F_JPを参照しました。
設定は16bitPICとほとんど変わりありません。
以前作成した記事

【dsPIC33FJ128MC802】タイマー機能を使ってみる。
をそのまま流用しました。

2)クロックについて
・クロックのソースはシステムクロックではなくペリフェラルクロックなので注意が必要です。
今回はコンフィグレーションで「システムクロックの1/2設定」としました。
 FPBDIV = DIV_2


3)T1CONレジスタ

ほとんどのbitは「0」でOKです。

①TimerONbitの設定:タイマ有効

「T1CONbits.ON = 1」

1でタイマが有効となります。

②TCKPSbitの設定:タイマ入力クロックのプリスケール

「 T1CONbits.TCKPS = 0b00;」

00は「1:1」となります。





4)プログラム

10msec毎にポートDのbit9をパタパタさせます。

システムクロックは、外付けセラロック10MHzを1/2で5MHzを入力し

PLLで24倍して100MHzにしてます。

2014/9/21:訂正)

システムクロックは内部発振8MHzを1/2で4MHz入力して

PLLで24倍だから96MHz。

タイマークロックソースはペリフェラルクロックを用います。

ペリフェラルクロックはシステムクロックを1/2しましたので48MHzとなります。

#include <stdio.h>
#include <plib.h>
#include <p32xxxx.h>
#include <stdlib.h>
#include "my_header.h"
//== configuration
//== OSC:8MHz SYSCLK:80MHz= OSC_8/PLLI_2=4MHz*MUL_20 ====================
#pragma config FNOSC=FRCPLL //Oscillator_selection_bits(FNOSC)
#pragma config POSCMOD=OFF //secondary_Oscillator_Enable(FSOSCEN)
//#pragma config FNOSC=PRIPLL //Oscillator_selection_bits(FNOSC)
//#pragma config POSCMOD=XT //secondary_Oscillator_Enable(FSOSCEN)
#pragma config FPLLMUL=MUL_24 //PLL_Multiplier(FPLLMUL)
#pragma config FPLLIDIV=DIV_2 //PLL_input_driver(FPLLIDIV)
#pragma config FPLLODIV=DIV_1 //PLL_output_clock_divider(FPLLODIV)
#pragma config FPBDIV=DIV_2 //Peripheral_clock_divisor(FPBDIV)
#pragma config FSRSSEL = PRIORITY_7 //shadow_register_set_priority_select(FSRSSEL)
#pragma config PMDL1WAY = OFF //peripheral_module_disable_configuration(PMDL1WAY)
#pragma config IOL1WAY = OFF //peripheral_pin_select_configuration(IOL1WAY)
#pragma config FSOSCEN = OFF //secondary_oscillator_enable(FSOCEN)
#pragma config IESO = OFF //internal_external_switch_over(IESO)
#pragma config OSCIOFNC = OFF //CLKO_output_signal_active_on_the_OSCO_pin(OSCIOFNC)
#pragma config FCKSM = CSDCMD //clock_switching_and_monitor_selection(FCKSM)
#pragma config WINDIS = OFF //watchdog_timer_is_in_non-window_mode(WINDIS)
#pragma config FWDTEN=OFF //watchdog_timer_window_enable(FWDTEN)
#pragma config DEBUG = OFF //debugger_is_disable(DEBUG)
#pragma config JTAGEN = OFF //JTAG_disable
#pragma config ICESEL=ICS_PGx3 //ICE_ICD_Comm_channel_select(ICESEL)
#pragma config PWP = OFF //program_flash_write_protect(PWP)
#pragma config BWP = OFF //boot_flash_write_protect_bit(BMP)
#pragma config CP = OFF //code_protect(CP)
//== function_prototype ====================================================

//== array_initialize ==================================================
unsigned char string_box1[15] = "abcdefg¥r¥n" ;
unsigned char rev_data[] = "----¥r¥n"; //UART_receive_string
unsigned char tes_d[49000];
//== main_function ====================================================
int main(void) {
//== OSC =================================================
SYSTEMConfigPerformance(96000000); //system_clock_96MHz
//== JTAG ================================================
//DEVCFG0bits.JTAGEN = 0; //JtagDisable
CFGCONbits.JTAGEN = 0; //JtagPortDisable
//== PORT ================================================
TRISB = 0x00000000;
TRISC = 0x00000000;
TRISD = 0x00000000;
TRISE = 0x00000000;
TRISF = 0x00000000;
TRISG = 0x00000000;
ANSELB = 0x00000000;
ANSELC = 0x00000000;
ANSELD = 0x00000000;
ANSELE = 0x00000000;
ANSELF = 0x00000000;
ANSELG = 0x00000000;
//== T1CON ===============================================
T1CON = 0x00000000; //Clear
T1CONbits.TON = 0; //<15>Timer1_OFF
T1CONbits.TSIDL = 1; //<13>Idelmode:SleepStop
T1CONbits.TGATE = 0; //<7>Gatetime:OFF
T1CONbits.TCKPS = 0B00; //PS1:1
T1CONbits.TCS = 0; //ClockSource:INT
IEC0bits.T1IE = 0; //Interrupt:disable
IPC1bits.T1IP = 0; //InterruptLevel:0
//== Interrupt ENABLE ===========================================
//INTCONbits.MVEC = 1; //Multi_Vector
//asm volatile("ei"); //Enable_Interrup
//== preprocessing ==============================================
//== while ======================================================
while(1)
{
LATDbits.LATD9 = !LATDbits.LATD9;
delay_ms(10);
}//while(1)
}//int main(void)

//== delay_us ==============================================================
void delay_us(unsigned int usec)
{
TMR1 = 0; //TMR1=0
T1CONbits.TON = 1; //Timer1_start
PR1 = 47; //
unsigned int i;
for(i=0; i<usec; i++)
{
while(!IFS0bits.T1IF); //Timer1Interrupt(IFS0bits.T1IF==0)
IFS0bits.T1IF = 0; //InterruptFlagDown
}//for(i=0; i<usec; i++)
}//void delay_us(unsigned int usec)
//== delay_ms ==============================================================
void delay_ms(unsigned int msec)
{
unsigned int i;
for(i=0; i<msec; i++)
{
delay_us(1000); //call:1000usec
}//for
}//void delay_ms(unsigned int msec)

//== end ==============================================================







5)出力波形の確認

PIC32MX370F512Hでタイマ


ピンク色の波形が出力波形です。

ちゃんと10msec毎に出力が切り替わってます。

一応成功みたい。








【PIC32MX370F512H】96MHzでつかってみる。①コンフィグレーションの設定


◆最大100MHzで動作可能なPIC32MX370F512Hを96MHzで使ってみます!
今回はコンフィグレーションの設定です。


1)パーツ
・PIC32MX370F512Hのパッケージは2種類あり
実装の容易なPIC32MX370F512H-I/PTをチップワンで購入しました。
このままでは実験が難しいく変換基板に実装する必要があります。
秋月電子の0.5mmピッチQFP(64ピン)変換基板を購入します。

1)コンフィグレーションを参照
"C:¥Program Files (x86)¥Microchip¥xc32¥v1.32¥docs¥config_docs"に各デバイス名でhtmlがありますので
クリックして開きます。お好みに合わせてコンフィグレーションビットを設定します。

2)96MHzの設定
内部高速発振を利用して96MHzにしたいと思います。
①FNOSCオシレータモード設定
「#pragma config FNOSC=FRCPLL」
「#pragma config POSCMOD=OFF」
内部高速発振とPLL併用を選択します。
②内部高速発振分周の設定
「#pragma config FPLLIDIV=DIV_2」
内部高速発振:8MHzでPLLの入力周波数FINは4~5MHzの範囲なので2分周します。
しかしながらDS61112HのP16の6.3.1.3.2に記載の通り
PLL併用FRCオシレータモードの場合は
デフォルトで「FPLLIDIV=DIV_2」固定となりFINは4MHzとなります。
③PLLの設定
「#pragma config FPLLMUL=MUL_24」
FIN:4MHzを24逓倍し96MHzとします。
④PLL出力分周の設定
「#pragma config FPLLODIV=DIV_1」
1分周にします。

続きはタイマーを使って動作確認をします!
ギャラリー
  • 【PIC24F08KL200】PIC24F08KL200でsprintfを使う
  • 【PIC24F08KL200】PIC24F08KL200でsprintfを使う
  • 【PIC24F08KL200】PIC24F08KL200でsprintfを使う
  • 【PIC24F08KL200】PIC24F08KL200でsprintfを使う
  • 【PIC24F08KL200】PIC24F08KL200でsprintfを使う
  • 【PIC24F04KA200】PIC24F04KA200ではsprintfが使えない件
  • 【PIC24F04KA200】PIC24F04KA200ではsprintfが使えない件
  • 【PIC24F04KA200】PIC24F04KA200ではsprintfが使えない件
  • 【PIC24F04KA200】PIC24F04KA200ではsprintfが使えない件
メッセージはこちちらからお願いします。

名前
メール
本文
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

ブログパーツ
  • SEOブログパーツ
にほんブログ村 その他趣味ブログ 電子工作へ
にほんブログ村
アクセスカウンタ
アクセスランキング