• 締切済み

PIC16FF886のクロックについて

PIC16FF886に外部発振器をもうけてクロックを入れたいと思っているのですが、 CONFIGで_EC_OSCを選び、osccon = 01101000b;と設定しています。  しかし、外部クロックを加えなくても内部発振しているようです。  理由がわかりません。どなた御教授ねがえないでしょうか?  16F648などでは、外部発振でクロックをくわえないと動作しないのですが。  16F886では何かほかに設定しないといけないのでしょうか?

みんなの回答

  • bug_bug
  • ベストアンサー率78% (36/46)
回答No.1

CONFIG1レジスタのFCMENビット(bit11)が立っていませんか? (Fail-safe Clock Monitor ENable) その名が示す通り, 外部からのクロック入力に異常があった場合にフェイルセーフ動作として内蔵クロックに切り替わる設定となってしまいます. 詳細はデータシートのP.71をご確認下さい.

参考URL:
http://ww1.microchip.com/downloads/jp/DeviceDoc/jp027084.pdf
全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PIC 外部クロックの使用について

    PIC18F24K20というPICを使用しています。 外部からクロックを供給してPICを動作させようとしているのですが、13.56MHzのクロックを入力して動作するにはコンフィギュレーションビットをどのように設定すればいいでしょうか?

  • PIC12F1822で内部クロックが使えない

    表題のとおりPIC1F1822+CCS-Cで開発していますが、内部クロックの32MHzが使えません。 setup_oscillator(OSC_32MHZ);と記載した行でエラーが出て16MHzだと動きます。 C:\Program Files\PICC\Devicesにある12f1822.hを見てみるとOSC_32MHZが存在しないことに気がつきました。このコンパイラでは32MHzに対応していないんでしょうか?どなたかご教授願います。

  • PIC初心者です。 16F84Aから16F88への移行について

    PIC初心者です。 PIC16F84A使って、液晶(SC1602)に文字を表示させる実験をしていました。それがうまくいったので、今度は16F88を使って同様に表示させてみようと思いました(回路の変更なしです)。というのも、将来的にAD変換を使ってみたかったのです。ここでのプログラムの変更点は、コンフィグレーションビットとインクルード文を16F84A用→16F88用に変更しました。これで、16F84Aで液晶に表示していたものと同じように表示されるハズだと思ったのですが、なにも映りません。 自分の考えでは、クロックの設定がまずかったのではないかと思っております。内部クロックを使うのか、外部なのか。OSCCONで設定するのでしょうか?ただ、ネット上で公開されているプログラムを見ると、OSCCONの設定はないものばかりでしたので、それが理由とも考えられません。 どのような点がまずかったのか、いくら考えてもわかりません。経験ある方、どうぞご教授ください。よろしくおねがいいたします。

  • PIC12F629の発振

    PIC12F629を外部に某社のセラロックを使って XTモードで4MHzで発振しています。 (今回は内部発振は精度上使えません。) しかしCLKOUTの出力スィングは01.7V しかありません。 ただしプログラムは正常に動作しています。 同様のことをPIC16F84Aでやると CLKOUTの出力スィングは04Vあります。 CLKOUTの出力スィングが小さいことは 問題ないのでしょうか。 ただPIC12F629をHSモードにするとスィングは 05VありますがCLKOUTの波形の 歪は大きくなります。 プログラムは正常に動作しているといっても試作の 3セットだけなので量産したときのことを かんがえるとやや不安です。 どう考えたらよいかアドバイスください。

  • PICマイコン、水晶発振子の異常

    カテ違いかも知れませんがマイコンおよび電子回路についての質問です。 水晶発振子が異常発信しMCLRによるリセット後、正常に発振します。 マイコン:PIC16F887 水晶発振子:VT-200-F コンフィグは以下のように設定 __CONFIG _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_ON & _PWRTE_ON & _WDT_OFF & _LP_OSC __CONFIG _CONFIG2, _WRT_OFF & _BOR21V OPTION_REGは以下のように設定 movlw B'01011000' ; 7.ポートBのプルアップ:無効 ; 6.ポートBの割り込みエッジ ; 5.TMR0のクロック源:内部命令サイクル ; 4.TMR0のカウントするクロックエッジ ; 3.プリスケーラ:WDTに割り当て ; 2.1.0.プリスケーラ初期値(未使用) movwf OPTION_REG 13ピン(CLKIN)と14ピン(CLKOUT)に水晶発振子を接続。 それぞれに15pFのコンデンサを接続。 40ピン(RB7)にLEDを接続(TMR0で割込みが発生したタイミングで点灯消灯を繰り返します。) 1ピンはMCLRとして利用 で、計算上の割込みタイミング(プリスケーラなし) (1/(32.768/4))*256=31.25ms なのですが40ピンのHI、LOWタイミングをオシロで観測したところ 実測値は以下のとおりでした。 電源接続直後:256.7us 1ピンでのリセット後:31.37ms(ほぼ計算通り) 電源接続直後は必ず上記のようになり1ピンでリセットすると正常に発振し始めます。 コンデンサの容量が合っていないのかと思いいくつか試してみました結果は同じでした。 水晶発振子も変えてみましたがやはり結果は同じでした。 コンデンサの足も切って短くしてみましたがこれも結果は変わりませんでした。(この程度の距離は関係ない?) 回路はブレットボード上です。 マイコンが壊れているのでしょうか? 今までもっぱらセラロックや水晶発振器を使っていて今回初めて水晶発振子を使ってみてこのような事象に遭遇しました。 どのようにしたら正常発振するか詳しい方、ご教示いただけたら幸いです。

  • PICを3.3Vで動作させるには?

    PIC初心者です。PIC16F873AというPICを3.3Vで動作させたいのですがうまくいきません。同じ回路で電源電圧を5Vにし、動作することを確認しているので回路やプログラムには問題ないと思われます。 データシートでは2.0V~で動作するようになっていると思うのですが、電源電圧5Vで動作させるときとどこか変更しなければならない個所があるのでしょうか?それとも3.3Vでは動作しないのでしょうか? ちなみにクロックは外部クロック10MHzを使用しています。 PICに詳しい方、よろしくお願いいたします。

  • MPLABでPIC16F887のCONFIGについて

    助けてください!! MPLAB IDE V8.00でデバイスをPIC16F887に設定し、アセンブルすると 毎回「CONFIG」でエラーが出て先に進みません。 メッセージは⇒Error[126] E:\PIC\PROGRAME\***********\***********.ASM 3 : Argument out of range (not a valid config register address) っと出ます。 実際の「CONFIG」の設定は⇒__CONFIG _HS_OSC & _PWRTE_OFF & _MCLRE_OFF っとしております。 CONFIGを外すと問題なく成功します。 何故なのか教えて下さい。 ちなみに、MPLABの設定等は特にいじっておりません。 宜しくお願い致します。

  • PICのクロック周波数の決定は?

    手元に、PIC18F2550を使って周波数をカウントする装置があります。 これの基準クロックに16MHzのクリスタルオシレータが使われているのですが、これの安定性や精度を上げるのはどうすればよいでしょうか。 今使っているのは、16.000と書いてありますが、これを16.000000などというように、精度を上げることは意味がありますでしょうか。 また、そもそもの周波数がPICは48MHzまで対応しているので、水晶の発振周波数を40MHzなどにすることも意味がありますでしょうか? 設計の考え方について、教えていただけませんでしょうか。

  • PIC タイマー0の使い方

    PIC16F886を触り始めたのですが、タイマー割り込みで苦戦しています。 タイマー割り込みを使ったLEDの点滅の間隔が、自分の思った時間にならないのです。 下に今のプログラムを載せておきます。 私の今の考え方はこうです。 ・内部クロックは4MHzに設定してある ・TMR0のカウントはクロックの1/4らしい→1MHzなので周期は1μsec ・プリスケーラは1:128に設定→128μsecでTMR0がカウントアップ ・TMR0の初期値を61に設定→195回のカウントアップでT0IF=1 ・128μsec*195μsec=2496μsec≒0.025msec←タイマー割り込み ・40回カウントすると1秒 と、1秒ごとにLEDのON,OFFが切り替わるはずだと考えているのですが、書き込んで計測したところ、約0.8秒でon,offを繰り返しています。 私の考え方やプログラムに間違いがあるのでしょうか? もしくはPICがハード的に壊れているのでしょうか?(picに5Vをかけても動かず、mainが実行中に点灯するLED(この時点では点いていない)の端子の両端を指で触ると何故か動き出します。) 以下プログラムです。(注釈などは省いたので見難いかもしれません) #include <stdio.h> #include <stdlib.h> #include <xc.h> #include <pic.h> #pragma config FOSC = INTRC_NOCLKOUT #pragma config WDTE = OFF #pragma config PWRTE = OFF #pragma config MCLRE = OFF #pragma config CP = OFF #pragma config CPD = OFF #pragma config BOREN = ON #pragma config IESO = OFF #pragma config FCMEN = OFF #pragma config LVP = ON void interrupt tc_int(void); volatile unsigned int cnt = 0; volatile unsigned int cnt1 = 0; #define sw RB0 #define led RA0 #define led2 RA1 #define led3 RA2 #define _XTAL_FREQ 4000000 void init(void) //初期設定 { OSCCON=0b01101000; // 内部クロック設定 4MHz TRISA=0b00000000; TRISB=0b00000000; TRISC=0b00000000; ANSEL=0x00; /* 割り込み初期設定 */ GIE = 1; // すべての割り込みを許可 T0IE = 0; // タイマー割り込みを禁止 T0CS = 0; // TIMAR0モジュールをタイマーとして使用 PSA = 0; // プリスケーラをTIMER0モジュール用にセット OPTION_REG |= 0x06; // CPUクロックを128分周 TMR0 = 61; // カウンタ値をリセット T0IE = 1; // タイマー割り込みを許可 T0IF = 0; // 割り込みフラグをクリア } int main(void) { init(); sw=1; led=1; led3=0; cnt1=0; LEDflg=0; while(1) { if(cnt1>=10){ led3=~led3; cnt1=0; } } } void interrupt tc_int(void){ // 割り込みハンドラ if(T0IF == 1){ cnt++; TMR0=61; T0IF = 0; // 割り込みフラグをクリア if(cnt>=40){ cnt=0; cnt1++; led2= ~led2; } } }

  • PIC16F84内部動作スピードについて

    マイコンを始めて触る 超超初心者 です。 PIC16F84を使用してHS Modeで10MHzで動作をさせています。 内部での動作する周期は10MHzで動作するものでしょうか? whileループでソフトカウンタを作成し8bitカウンタのLSBをオシロスコープでみ たところ1カウントアップするのに500KHzでした。 何かレジスタで設定すると10MHz外部オシレータと同スピードで動作するのでしょ うか? 下が今回使用したソースです。 どうぞ宜しくお願いします。 #include <pic.h> __CONFIG(0x3FFE); unsigned char count; void ioport(void); main() { ioport(); } void ioport(void) { TRISA=0b11111; TRISB=0b00000000; count=0b0; while(1){ PORTB=count; count++; } }