<PIC16F688各種発振>
PIC16F688発振回路は、ここでも紹介していますが、内部発振を使ってます(設定してます)。
このページでは、内部発振以外に、外付けのセラミック発振子(セラロック)と水晶発振子を使った発振回路と
インバータICを使った外付け発振器、および発振周波数の設定方法(プログラム)を紹介します。
製作した回路基板(内部発振、セラミック発振子、水晶発振子の3種類動作出来るようにつくりました)
外付けのセラミック発振子(左)と水晶発振子(中央)とコンデンサ 2個(右)の画像
<内部発振回路> ON(0.5S)/OFF(0.5S)でLEDが点滅 パルス幅0.5S 確認 (0.2s/div)
回路図
<プログラム ポイント>
1.内部発振回路を使うか、外付け部品で作る発振回路かを決める
2.プログラムの中で発振関連の設定をする。
2-1コンフィグレーションの設定
__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);
------
この設定
内部発振回路を使う場合は、INTIOにする、外付けの場合はHS以外にXT,LP,ECなどがある。
2-2 #define _XTAL_FREQ 4000000で発振周波数を設定 この場合4Mhz
2-3 #define JIKAN 500 でON/OFFのパルス幅を設定 この場合500
2-4 __delay_ms(JIKAN)は上の500がJIKANなので500ms、(μsにしたい場合は、__delay_ns(JIKAN)にする)
プログラム
-----------------------------------------------------------------------------------------
#include <htc.h>
//発振回路設定 内部発振:INTIO 外付発振:HS,XT,LP 外部発振器:EC
__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);
__IDLOC(0001);
//発振周波数設定 31K:31000 4M:4000000 20M:20000000 など
#define _XTAL_FREQ 4000000 /* 4MHz */
//待ち時間設定 __delay_ms(JIKAN):ms __delay_us(JIKAN):μs
#define JIKAN 500 /* 500ミリ秒 */
main()
{
//内臓発振のときはOSCCONを記述、外付発振・外部発振器のときは、この記述いらない
//例 31k:OSCCON=0x00; 4M:OSCCON=0x60; 8M:OSCCON=0x70;
OSCCON=0x60; /* 内臓発振の4M */
TRISC=0x00; /* PORTCピンを出力にする */
PORTC=0x00; /* PORTCを初期化する */
while(1){
RC2=1; /* RC2ポートをH にする */
__delay_ms(JIKAN); /* JIKANミリ秒待つ */
RC2=0; /* RC2ポートをL にする */
__delay_ms(JIKAN); /* JIKANミリ秒待つ */
}
}
-----------------------------------------------------------------------------------------
<セラミック発振子回路> ON(0.5S)/OFF(0.5S)でLEDが点滅 パルス幅0.5S 確認 (0.2s/div)
回路図
プログラムは、内部発振回路の@INTIOをHSにして、下の記述部分Aをコメントアウト
@
__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);
↓
__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & HS);
A
OSCCON=0x60; /* 内臓発振の4M */
↓
// OSCCON=0x60; /* 内臓発振の4M */
<水晶発振子回路> ON(0.5S)/OFF(0.5S)でLEDが点滅 パルス幅0.5S 確認 (0.2s/div)
回路図
プログラムは、セラミック発振子回路と同じ
<外付け発振器> ON(0.5S)/OFF(0.5S)でLEDが点滅 パルス幅0.5S 確認 (0.2s/div)
回路図
プログラムは、内部発振回路の@INTIOをECにして、下の記述部分Aをコメントアウト
@
__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & INTIO);
↓
__CONFIG(FCMDIS & IESODIS & BOREN & UNPROTECT & MCLREN & PWRTEN & WDTDIS & EC);
A
OSCCON=0x60; /* 内臓発振の4M */
↓
// OSCCON=0x60; /* 内臓発振の4M */
外付け発振器は、ここで紹介しています。
<番外編>
1.セラミック発振子回路で、セラミック発振子4Mタイプを20MタイプにするとON(0.5S)/OFF(0.5S)がON(0.1S)/OFF(0.1S)で動作した。
2.水晶発振子回路で、コンデンサ(22PF)を外してもON(0.5S)/OFF(0.5S)で動作した。
※プログラムは上記と同じ