PIC16F1829

PIC16F1823では、I/Oが数本足りないとか、TIMER/CCPが足りないという場合、ピン数が20pinと少し大きくなりますが、価格も手軽で重宝するMCUです。

●PIC16F1829

機能的には、16F1823にTIMER/CCPなどを増やして、メモリ容量も増やしたようなものです。それ以外は、DSM(Data signal modulator)なども内蔵されていて、同じように使えます。

旧タイプは、そういうことなかったですが、新しいタイプのPICはピン配列に互換性があまりなくなっています。なので、プログラムを移植する際は、ピン配置やオルタネート・ピンの配置や切り替えをPICに合わせて修正する必要があります。これは使用する際は面倒ですが、その分、PICの機能がダイナミックに設計できるということですね。

おもな注目ポイント

  • 秋月で@150
  • CCP x2、ECCP x2
  • 8ビットタイマ TIMER2/4/6の3つあり。CCP-PWMで使用する場合、3つのCCPで別々のTIMERを使用できる。つまり、3つの別々の周期のPWM出力が得られる。16ビットタイマはTIMER1の1つのみ
  • DSM内蔵
  • MSSP(I2C/SPI) 2チャンネルあり
  • プログラムメモリ 8KW、SRAM 1024B、EEPROM 256B
  • ADC 12ch、コンパレータ 2ch、静電センサ 12ch
  • FVRあり
  • 内蔵クロック 16MHz(HF)。PLL4X使用時 最大32MHz

●コンフィギュレーションビット 設定例

#pragma config BOREN=OFF, FOSC=INTOSC, WDTE=OFF, LVP=OFF, MCLRE=ON, PLLEN=OFF //, CLKOUTEN=ON

内蔵オシレータをPLLなしで使う設定です。PLLはここでOFFにしてあっても、プログラム内でONにできます。BORENはブラウンアウトリセットですので、通常はONにしておいてもかまいません。

●CCP4(PWM)+TIMER6でBEEP用の4kHz矩形波発生の例

CCP4 + TIMER6使用の矩形波発生プログラムです。RC6ピンに1KΩ程度の抵抗を通して圧電ブザー(他励式の安価なもの)をつなぐと4KHzの音が出ます。

    // ******** ビープ用(CCP4 PWM) RC6 ********
    // CCP4 PWM 4kHz
    C4TSEL1 = 1;            // CCP4 Timer6 CCPTMRS
    C4TSEL0 = 0;            // (10)
    //
    CCP4M3 = 1;             // 11xx PWM
    CCP4M2 = 1;             //
    CCP4M1 = 1;             //
    CCP4M0 = 1;             //
//  PR6bits.PR6 = 248;      // T6周期    1KHz
//  CCPR4L = 124;           // パルス幅
    PR6bits.PR6 = 62;       // T6周期    4KHz
    CCPR4L = 31;            // パルス幅

    TMR6IF = 0;
    T6CKPS1 = 1;            // 1:16
    T6CKPS0 = 0;            //

    TMR6ON = 0;             // TIMER6 OFF
    TRISC6 = 0;             // CCP1 RC6 output ビープ音用出力

3、4行目はCCP4のPWMモードでTIMER6を使うための設定です。6行目からは、CCP4をPWMモードに設定しています。

PR6は直接、ビット名でアクセスできないため、10、12行目のように、ビットフィールドでアクセスしています。PR6はTIMER6の周期です。また、CCPR4LはPR6との比率でデューティ値を指定します。具体的には、PR6の半分の値をCCPR4Lに設定すると、デューティは50%になります。

16、17行目はTIMER6のプリスケーラを設定しています。システムクロックが16MHzの場合、TIMER2の入力周波数はFosc/4 * 1/16 = 16MHz/4 * 1/16 = 250KHzとなります。

19行目のTMR6ONを1にすれば、タイマが作動して矩形波が出力されます。矩形波生成にプログラムを使わないため、他の処理に無関係にビープ音を鳴らせます。ON,OFFの切り替えは、TMR6ONビットで行います。

一定時間、BEEPを鳴らすときは、TRM6ON=1に設定したあと、何等かのタイマを作動させ、そのタイマがタイムアップした時点でTMR6ON= 0にします。このへんの使い方は、自励式のブザーを使うのと同じです。

コメントは受け付けていません。