Quantcast
Channel: JH7UBCブログ
Viewing all articles
Browse latest Browse all 440

PIC12F1822 Lチカ

$
0
0
 MPLABX XC8環境で、最近のPICのプログラミングを勉強していきます。(MPLAB Xはv5.05をXC8はv1.45を使っています。)

 まず、8ピンPICのPIC12F1822を使ってみます。同じファミリーにPIC12F1840がありますが、プログラムメモリーとデータメモリの容量の違いだけです。(プログラムメモリは、1822が2kワード、1840が4kワード、データメモリは、1822が128バイト、1840が256バイトです)

 PIC16F675など旧タイプの8ピンPICとピン配列は同じですが、中身はかなり機能が強化されています。

 まずは、恒例のLチカ(LEDの点滅)をやってみましょう。

 回路図です。入出力ピンの名称は、GPIOではなく、RA0~RA5になり、容量性負荷の影響を受けないように、IO回路にラッチが導入されています。今回は、RA0のLEDを点滅させます。

イメージ 1

ブレッドボードです。電源(5V)は、USBシリアル変換モジュールFT234Xからとっています。

イメージ 2

 プログラムです。

  PIC12F1822のクロックは、DC~32MHzで動作します。内部クロックでもPLLを使えば32MHzクロックで動かせます。
 今回は、内臓クロック16MHzで動作させてみました。

 CONFIG1で
 FOSC = INTOSC
 CONFIG2で
 PLLEN = OFFとし
 OSCCON =0b01111010;に設定します。bit6~bit3でクロック周波数を設定します。
1111  16MHz
1110   8MHz
1101   4MHz
1100   2MHz
1011   1MHz
以下省略
です。


-----------------------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
// CONFIG1
#pragma config FOSC     = INTOSC   // 内部クロックを使う(INTOSC)
#pragma config WDTE     = OFF       // ウオッチドッグタイマーを使わない(OFF)
#pragma config PWRTE    = ON       // パワーアップタオイマーを有効にする(ON)
#pragma config MCLRE    = OFF      // 外部リセット信号は使用せずにデジタル入力(RA3)ピンとする(OFF)
#pragma config CP       = OFF      // プログラムメモリーを保護しない(OFF)
#pragma config CPD      = OFF      // データメモリーを保護しない(OFF)
#pragma config BOREN    = ON       // 電源電圧降下常時監視機能ON(ON)
#pragma config CLKOUTEN = OFF      // CLKOUTピンをRA4ピンで使用する(OFF)
#pragma config IESO     = OFF      // 外部・内部クロックの切替えでの起動はなし(OFF)
#pragma config FCMEN    = OFF      // 外部クロック監視しない(OFF)
// CONFIG2
#pragma config WRT    = OFF        // Flashメモリーを保護しない(OFF)
#pragma config PLLEN  = OFF        // 動作クロックを32MHzで動作させない(OFF)
#pragma config STVREN = ON         // スタックがオーバフローやアンダーフローしたらリセットをする(ON)
#pragma config BORV   = HI         // 電源電圧降下常時監視電圧(2.5V)設定(HI)
#pragma config LVP    = OFF        // 低電圧プログラミング機能使用しない(OFF)
#define _XTAL_FREQ 16000000

void main() {
    OSCCON = 0b01111010 ;     // 内部クロック16MHz
    ANSELA = 0b00000000 ;     // アナログは使用しない
    TRISA  = 0b00001000 ;     // ピンは全て出力(RA3は入力のみ)
    PORTA  = 0b00000000 ;     // 出力ピンの初期化
    while(1){
        RA0 = 1;
        __delay_ms(500);
        RA0 = 0;
        __delay_ms(500);
    }
}
-----------------------------------------------

 PICkit3で問題なく書き込みが出来、0.5秒ごとにLEDが点滅しました。

それではと32MHzで動作させてみました。
PLLEN = ON
#define _XTAL_FREQ 32000000
OSCCON = 0b01110000;
としてコンパイル・書き込みをしました。

問題なくLチカが動作しました。

Viewing all articles
Browse latest Browse all 440

Trending Articles