PIC16F84A → PIC16F819 の場合 1) PIC16F84Aとほぼ同じコードで作成したプログラムがPIC16F819で動作しない。 2) コンフィギュレーションビットの設定について 3) SRC上で設定する場合どのように記述すれば良いのでしょうか? 4) setup_adc_ports(RA0_RA1_RA4_ANALOG_RA3_REF);をコンパイル出来なくて困っています。 5) RA5をデジタルで使うには @ PIC16F84Aとほぼ同じコードで作成したプログラムがPIC16F819で動作しない。 -------------------------------------------------------------------------- 答え:#fuses HS,NOWDT,NOPROTECT,PUT コンフィグレーションヒューズがこれしか設定してありませんが、16F819には 下記のようなオプションがありますので、必ず適切に設定してください LP,XT,HS,EC_IO,INTRC_IO,INTRC,RC_IO,RC,WDT,NOWDT,PUT,NOPUT MCLR,NOMCLR,BROWNOUT,NOBROWNOUT,LVP,NOLVP,CPD,NOCPD,WRT NOWRT,DEBUG,NODEBUG,CCPB2,CCPB3,PROTECT,NOPROTECT 特に、LVPピンがRB3に割当てられているので、NOLVPを追加する必要があります A コンフィギュレーションビットの設定について: --------------------------------------------- 答え: ご使用になるデバイスのヘッダファイル(16F819.h)に、設定可能な コンフィグレーションビットの設定オプションが定義されています 16F819ですと、以下のようになります //////// Fuses: LP,XT,HS,EC_IO,INTRC_IO,INTRC,RC_IO,RC,WDT,NOWDT,PUT,NOPUT //////// Fuses: MCLR,NOMCLR,BROWNOUT,NOBROWNOUT,LVP,NOLVP,CPD,NOCPD,WRT //////// Fuses: NOWRT,DEBUG,NODEBUG,CCPB2,CCPB3,PROTECT,NOPROTECT 上記設定ですと #fuses NOPROTECT // _CP_OFF #fuses CCPB2 // _CCP1_RB2 #fuses DEBUG // _DEBUG_ON #fuses NOWRT // _WRT_ENABLE_OFF #fuses NOCPD // _CPD_OFF #fuses NOLVP // _LVP_OFF #fuses MCLR // _MCLR_ON #fuses WRT // _PWRTE_ON #fuses NOWDT // WDT_OFF #fuses INTRC // _INTRC_CLKOUT となります。クロックの設定が抜けている等に注意して下さい。 上記のように1行に1オプションとする他、 #fuses NOPROTECT,CCPB2,(以下省略) のように、','区切りで複数のオプションを設定してもかまいません B 上記の設定をCCSコンパイラを使用してSRC上で設定する場合、どのように記述すれば 良いのでしょうか?そのまま設定するとコンパイルエラーになりました。 ------------------------------------------------------------------ 上記のように、コンフィグレーションビットは ソースファイル中(通常、デバイスファイル 16F819.h をインクルードした直後)に #fusesコマンドを用いて設定します C:\Program Files\PICC\Examples フォルダにサンプルプログラムが 多数用意されていますので、参考にしてください。 C PCMを購入後、新規に作ったプログラムでPIC16F819を動かそうとして、コンパイルが出来ない なくて困っています。対策を教えてください。 コンパイルできないプログラムは setup_adc_ports(RA0_RA1_RA4_ANALOG_RA3_REF); です。説明書を読む限りこれで良 いと思われるのですが、コンパイルできないで困っています。 ----------------------------------------------------------------------- 各PICデバイスで設定可能な、setup_adc_port()のオプションは C:\Program Files\PICC\Devicesフォルダにある、各デバイスのヘッダファイルにあります 16F819ですと、16F819.hより、利用可能なオプションは #define AN0_AN1_AN2_AN4_VSS_VREF 3 // A0 A1 A2 A4 VRefh=A3 #define AN0_AN1_AN3 4 // A0 A1 A3 #define AN0_AN1_VSS_VREF 5 // A0 A1 VRefh=A3 #define AN0_AN1_AN4_VREF_VREF 0x08 // A0 A1 A5 VRefh=A3 VRefl=A2 #define AN0_AN1_VREF_VREF 0x0D // A0 A1 VRefh=A3 VRefl=A2 #define AN0 0x0E // A0 #define AN0_VREF_VREF 0x0F // A0 VRefh=A3 VRefl=A2 となります。 D RA0,RA1だけならOKですが、RA4を追加するとコンパイルできません。 ハードは作ってしまっているので、ポートの設定は変えたくありません。 どうしてもRA0,1,4をアナログ入力、RA3,5をデジタル入力で使いたいのです。 ----------------------------------------------------------------------- 答え:RA5はVPP/MLCRピンとの兼用ですので、RA5をデジタルで使うには #fusesオプションにMCLRがあればNOMCLRに修正してください 16F819のデータシートを見ますと、 RA0,RA1,RA4 を入力、RA3をデジタル入力とするような設定は16F819デバイス にはありません。 詳しくは18F819のデータシートをご参照下さい E #include <16f819.h> #fuses HS, NOWDT, PUT, NOPROTECT, MCLR, BROWNOUT, NOLVP, CCPB3, NODEBUG, NOCPD, NOWRT #use delay(clock = 10000000) に設定し、入出力ポートを set_tris_a(0x82); set_tris_b(0x40);に設定したのですが、機械に実装してパルスが出ているか確認した 所、外部入力クロックのポート(RA7)が動いていなく、CPUが動作しません。 外部入力に設定する時になにか特別な設定などありますか。 ----------------------------------------------------- まず、PORTAの 0-4bitはリセット直後にはAnalog入力になりますので、 デジタルI/Oで使用する場合は、AnalogをOFFにしてください #fuse HSなので PORTA6-7に発振子となります #fuse MCLR なので PORT5 はMCLR端子となります つぎに、set_tris_a(0x82)ですと、TRISA レジスタの設定は bit7 TRISA7 1 bit6 TRISA6 0 bit5 TRISA5 0 bit4-0 0x2=0010 なのでbit1のみ入力(他は出力) となります。 bit7-5はI/Oポートとして利用しないのであれば 1 にしてください よって、set_tris_a(0xF2)です また、RA7は #fuse HSでは発振子水晶、セラミック等)接続することになります PICマイコンはデバイス毎に独特な設定がありますので、ご使用前には データシート等で仕様をご確認ください