2015/02/28

16F84A XC8開発例 - 低消費電力水晶発振子を使用する(LP Mode)

概要

PIC16F84AとMPLAB XC8 C Compilerを使用した開発例として,32.768kHzの水晶発振子を使用する際のプログラム例を紹介します. 開発環境は下記のとおりです.

PIC PIC16F84A
MPLAB X IDE MPLAB X IDE v2.26
MPLAB XC8 MPLAB XC8 C Compiler v1.32
PICkit 2 Application Version 2.61.00 / Device File Version 1.61.00
回路
回路図

電源はPICkit 2から5.0Vを供給し,32.768kHzの水晶発振子でPIC16F84Aを動作させています. 7セグメントLEDの電流制限抵抗には200Ωを使用していますが,330~1kΩ程度の方が良いかもしれません.


回路図
回路部品

下表は使用部品表です. 参考単価をクリックすると,秋月電子通商のページに飛びます. 「互換品」と記載されているリンクについては,互換性があると考えられる部品のページに飛びます. ただし,私が互換性および動作を確認したわけではありませんので,ご注意ください.

番号 部品名 型番 数量 参考単価
U1 PICマイコン Microchip PIC16F84A 1
X1 水晶発振子 32.768kHz 1
C1, C2 セラミック
コンデンサ
22pF 2
LED1 7セグメントLED PARA LIGHT C-421E
(カソードコモン)
1
R1 炭素皮膜抵抗 各社 1/4W 10kΩ 1 1円
(互換品)
R2 - R8 炭素皮膜抵抗 各社 1/4W 200Ω 7 1円
(互換品)
その他 リード線など 適量
プログラム
main.c

下記はソースファイル「main.c」です.参考になれば幸いです.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <xc.h>
 
// 16F84A
// CONFIG
#pragma config FOSC = LP    // Oscillator Selection bits (LP oscillator)
#pragma config WDTE = OFF   // Watchdog Timer (WDT disabled)
#pragma config PWRTE = ON   // Power-up Timer Enable bit (Power-up Timer is enabled)
#pragma config CP = OFF     // Code Protection bit (Code protection disabled)
 
// プロトタイプ宣言
void display7seg(unsigned char font_id);
 
void main(void)
{
    unsigned char count = 0;
 
    PORTA = 0x00;           // PORTAを初期化
    PORTB = 0x00;           // PORTBを初期化
    TRISA = 0x00;           // PORTAの入出力設定
    TRISB = 0x00;           // PORTBの入出力設定
 
    while(1){               // 無限ループ
        display7seg(count);
        _delay(8192);       // 1秒の待ち時間: Fosc / 4
        count++;
        if(count > 9){
            count = 0;
        }
    }
}
 
/*
 * 7セグメントLED表示関数
 *
 * 引数:
 * unsigned char    font_id 表示するフォントのID
 *
 * 復帰値:
 * なし
 */
void display7seg(unsigned char font_id)
{
    const unsigned char font[11] = {
        // gfedcba  7セグメントLED 点灯パターン
        0b00111111, // 0
        0b00000110, // 1
        0b01011011, // 2
        0b01001111, // 3
        0b01100110, // 4
        0b01101101, // 5
        0b01111101, // 6
        0b00100111, // 7
        0b01111111, // 8
        0b01101111, // 9
        0b00000000  // 表示なし
    };
 
    PORTB = font[font_id];
}

7 件のコメント:

  1. おはようございます。dihard_neverです。
    PIC16F84Aの15(CLKPUT)・16番端子(CLKIN)を水晶発振子をつけて、その後にセラミックコンデンサを直列につないでGNDに落としてますが、この意味がわからないのです。教えていただけないでしょうか。水晶発振子の前にセラミックコンデンサをつけるのなら、水晶発振子を保護してるとか僕はかんがえるのですが・・・。まだ初心者ですみません。

    返信削除
    返信
    1. dihard_neverさん,コメントありがとうございます.
      > この意味がわからないのです。教えていただけないでしょうか。
      基本知識は,コメントのやりとりで学ぶよりも,ご自身で検索したり本を読んだりして学ぶことをおすすめします.「水晶発振子 コンデンサ」などでの検索を試されましたか?コメントのような文字情報だけでなく,図やグラフを見て理解できると思います.頑張ってください.

      基本知識を学ぶ前に,とりあえず動くものを作ってみるというのも重要です.この際は,最低限,使用した電子部品のデータシートを「読む」まではせずとも「目を通す」ところまではやってみましょう.後々,問題の自己解決や学んだ基礎知識との紐付けに役立ちます.
      PIC16F88のデータシートには目を通しましたか?質問に対する答えのヒントは,「4.0 OSCILLATOR CONFIGURATIONS」(35ページ)付近に載っています.
      http://ww1.microchip.com/downloads/jp/DeviceDoc/30487c.pdf

      削除
    2. ありがとうございます。
      部品が届きましたので、早速動かしてみます。
      また、検索してみます。
      PIC16F88についてもよく調べます。
      追ってご報告いたしますので、宜しくお願いいたします。

      削除
    3. ごめんなさい.お気づきかもしれませんが,データシートのリンクがPIC16F88になっていました.
      PIC16F84Aのデータシートは下記リンクです.22ページ付近をご覧ください.
      私の場合,コンデンサは手元にあったもので組んでいます.静電容量は,データシートを基に選定することをおすすめします.
      http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf

      頑張ってください.

      削除
  2. dihard_neverです。
    渓鉄さん、わざわざ有難うございます。
    PIC16F84Aと7セグメント(カソードコモン)を使った回路で7セグメントの表示出来ました!
    とりあえず、ご報告まで。
    今後もよろしくお願い致します!!

    返信削除
  3. dihard_neverです。
    PICで7セグメント制御する回路出来ました。
    資料をまとめましたので、下のリンクからダウンロードできるようにしました。
    https://drive.google.com/file/d/0B4non1CGxx5dOEJTV3V3Uk84S2c/view?usp=sharing
    ぜひ、ご閲覧下さい!
    この度は有難うございました。

    返信削除
    返信
    1. dihard_neverさん,コメントありがとうございます.
      回路の完成,おめでとうございます!
      本記事が参考になったようで幸いです.

      今後ともよろしくお願いいたします.

      削除