概要
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]; } |
おはようございます。dihard_neverです。
返信削除PIC16F84Aの15(CLKPUT)・16番端子(CLKIN)を水晶発振子をつけて、その後にセラミックコンデンサを直列につないでGNDに落としてますが、この意味がわからないのです。教えていただけないでしょうか。水晶発振子の前にセラミックコンデンサをつけるのなら、水晶発振子を保護してるとか僕はかんがえるのですが・・・。まだ初心者ですみません。
dihard_neverさん,コメントありがとうございます.
削除> この意味がわからないのです。教えていただけないでしょうか。
基本知識は,コメントのやりとりで学ぶよりも,ご自身で検索したり本を読んだりして学ぶことをおすすめします.「水晶発振子 コンデンサ」などでの検索を試されましたか?コメントのような文字情報だけでなく,図やグラフを見て理解できると思います.頑張ってください.
基本知識を学ぶ前に,とりあえず動くものを作ってみるというのも重要です.この際は,最低限,使用した電子部品のデータシートを「読む」まではせずとも「目を通す」ところまではやってみましょう.後々,問題の自己解決や学んだ基礎知識との紐付けに役立ちます.
PIC16F88のデータシートには目を通しましたか?質問に対する答えのヒントは,「4.0 OSCILLATOR CONFIGURATIONS」(35ページ)付近に載っています.
http://ww1.microchip.com/downloads/jp/DeviceDoc/30487c.pdf
ありがとうございます。
削除部品が届きましたので、早速動かしてみます。
また、検索してみます。
PIC16F88についてもよく調べます。
追ってご報告いたしますので、宜しくお願いいたします。
ごめんなさい.お気づきかもしれませんが,データシートのリンクがPIC16F88になっていました.
削除PIC16F84Aのデータシートは下記リンクです.22ページ付近をご覧ください.
私の場合,コンデンサは手元にあったもので組んでいます.静電容量は,データシートを基に選定することをおすすめします.
http://ww1.microchip.com/downloads/en/DeviceDoc/35007b.pdf
頑張ってください.
dihard_neverです。
返信削除渓鉄さん、わざわざ有難うございます。
PIC16F84Aと7セグメント(カソードコモン)を使った回路で7セグメントの表示出来ました!
とりあえず、ご報告まで。
今後もよろしくお願い致します!!
dihard_neverです。
返信削除PICで7セグメント制御する回路出来ました。
資料をまとめましたので、下のリンクからダウンロードできるようにしました。
https://drive.google.com/file/d/0B4non1CGxx5dOEJTV3V3Uk84S2c/view?usp=sharing
ぜひ、ご閲覧下さい!
この度は有難うございました。
dihard_neverさん,コメントありがとうございます.
削除回路の完成,おめでとうございます!
本記事が参考になったようで幸いです.
今後ともよろしくお願いいたします.