秋月パーツ、PIC32MXの28ピンDIP
<<
作成日時 : 2012/07/19 20:36
>>
ブログ気持玉 1 /
トラックバック 0 /
コメント 0
PICには、8ビット、16ビットとある中、32ビットのRISCを使用したものがあります。従来はピン数が多いので表面実装パッケージのものしかなかったのですが、秋月のサイトを見ると、28ピンDIPのPIC32MXが在りました。PIC32MX110F016B、PIC32MX120F032B、PIC32MX210F016B、PIC32MX220F032Bの4種類がありました。これらはメモリサイズの違いやUSBホストが使えるなどの違いがありますが、いずれも28ピンDIPです。早速LED点滅プログラムを入れてみました。
PIC32MXでは、クロックとして外部発振子をPLLによって逓倍することにより80MHzのクロックで動作させることが出来ます。電源や必要とする外付け部品などはPIC24FJ64GA002などと変わりはありません。従来のマイコンと同じような扱いでPIC32MXが使えることになります。プログラムは以下のように非常に簡単ですが、CONFIGの設定が重要です。一部コメントアウトしてあるのは、USBに対応したPIC32MX210F016Bなどで設定が必要になるところです。
通常では、forループにより50000回空ループを実行すると1秒ぐらいの間隔でLEDが点滅するのですが、PIC32MXでは、実行速度が速いためか、最適化の効率がよいのか目にも留まらぬ速さで点滅します。そのため、もう1レベルforループをおいています。
28ピンのパッケージが用意されたのは、入出力ピンなどはそれほど必要なく、速度だけが必要になるアプリケーションがあったためと思いますが、自作派にとっては扱いの容易なDIPパッケージが用意されたのは歓迎されることです。動作させることに夢中になり、まだあまりプログラムを作っていないのですが、速度が必要な応用での利用が期待できます。また、まだ使っていないのですが、PIC32MX210F016BなどのようにUSBホストに対応したものがあります。これは、PIC24FJ64GB002などと同じように、USBの機能が付き、HOST OTGにも対応するのでUSBでの応用が期待できます。
サンプルプログラム:Blink110.c
#include <p32xxxx.h>
// OSC=8MHz , Fcy=80MHz
// #pragma config UPLLEN = ON // USB PLL Enabled
#pragma config FPLLMUL = MUL_20 //15 // PLL Multiplier
// #pragma config UPLLIDIV = DIV_2 // USB PLL Input Divider
#pragma config FPLLIDIV = DIV_2 // PLL Input Divider
#pragma config FPLLODIV = DIV_1 // PLL Output Divider
#pragma config FPBDIV = DIV_1 // Peripheral Clock divisor
#pragma config FWDTEN = OFF // Watchdog Timer
#pragma config WDTPS = PS1 // Watchdog Timer Postscale
//#pragma config FCKSM = CSDCMD // Clock Switching & Fail Safe Clock Monitor
#pragma config OSCIOFNC = OFF // CLKO Enable
#pragma config POSCMOD = HS // Primary Oscillator
#pragma config IESO = OFF // Internal/External Switch-over
#pragma config FSOSCEN = OFF // Secondary Oscillator Enable (KLO was off)
#pragma config FNOSC = PRIPLL // Oscillator Selection
#pragma config CP = OFF // Code Protect
#pragma config BWP = OFF // Boot Flash Write Protect
#pragma config PWP = OFF // Program Flash Write Protect
#pragma config ICESEL = ICS_PGx2 // ICE/ICD Comm Channel Select
int main(void)
{
unsigned int i,j;
ANSELA=0;
ANSELB=0;
TRISAbits.TRISA4=0;
while(1)
{
LATAbits.LATA4^=1;
for(i=0;i<50000;i++)
for(j=0;j<100;j++) ;
}
}
|
');
function google_ad_request_done(google_ads) {
var i;
if( google_ads[0] ){
document.write("
");
document.write("
");
document.write("
");
document.write("
");
}
}
// -->