PIC18F14K50 (9)

PIC18F14K50 の内蔵モジュールを利用した VCO で、リセット・パルス幅を決める時定数回路を、のこぎり波発生回路とは別に持つ形式の構成の VCO を試してみました。
内部モジュールの構成および外部回路の図を下に示します。

7 番ピン (C12IN3-) につながっている 2.2 kΩ と 470 pF で時定数約 1 μs の RC 回路を構成しており、この回路で約 1 μs 幅の一定値のリセット・パルスを作り出しています。
SR ラッチ・モジュールでは、セット側、リセット側、それぞれ複数の入力を持つことができ、しかもリセット優先の構成になっているので、これを利用して、「ハード・シンク」の機能を付けました。
15 番ピン (RC1/AN5/C12IN1-/VREF-/INT1) はシュミット・トリガ特性のディジタル入力で、「H」レベルの入力で「ハード・シンク」、つまり、強制リセットによる同期がかかります。
信号の極性の反転は、内部ではできません。 「負極性」のハードシンク・パルスの場合には外部回路で反転する必要があります。 
回路図には、実際のアナログ波形から「微分」などの波形整形をしてディジタル・パルスを得る部分は書いてありません。 ハードシンク・パルスは、すでにディジタル信号となっていることを仮定しています。
jalv2 言語で書いた、Vref 部/コンパレータ部/SR ラッチ部の設定プログラムを下に示します。

procedure vref_init() is
  REFCON0_FVR1EN = 1   -- enable Fixed Voltage Reference 1
  REFCON0_FVR1S1 = 0   -- 1 x 1.024 V
  REFCON0_FVR1S0 = 1   -- 1 x 1.024 V
  REFCON1_D1EN   = 1   -- DAC1 enable
  REFCON1_DAC1OE = 0   -- DAC1 Output disable
  REFCON1_D1PSS  = 0   -- DAC1 Positive Source Select = Vdd
  REFCON1_D1NSS0 = 0   -- DAC1 Negative Source Select = Vss
  REFCON2        = 11  -- DAC1 out = Vdd * (11/31) = (1/3) Vdd
end procedure

procedure comparator_init() is
  CM1CON0_C1ON   = 1 -- C1 ON
  CM1CON0_C1OE   = 0 -- C1 internal only
  CM1CON0_C1POL  = 0 -- C1 not inverted
  CM1CON0_C1SP   = 1 -- C1 high speed
  CM1CON0_C1R    = 1 -- C1 C1VIN+ = C1Vref
  CM1CON0_C1CH   = 3 -- C1 C1VIN- = C12IN3- (pin 7)

  CM2CON0_C2ON   = 1 -- C2 ON
  CM2CON0_C2OE   = 0 -- C2 internal only
  CM2CON0_C2POL  = 0 -- C2 not inverted
  CM2CON0_C2SP   = 1 -- C1 high speed
  CM2CON0_C2R    = 1 -- C2 C2VIN+ = C2Vref
  CM2CON0_C2CH   = 2 -- C2 C2VIN- = C12IN2- (pin 14)
  
  CM2CON1_C1RSEL = 0 -- C1 C1Vref = CVref
  CM2CON1_C1HYS  = 0 -- C1 hysteresis disabled
  CM2CON1_C1SYNC = 0 -- C1 output asynchronous
  
  CM2CON1_C2RSEL = 1 -- C2 C2Vref = FVR
  CM2CON1_C2HYS  = 0 -- C2 hysteresis disabled
  CM2CON1_C2SYNC = 0 -- C2 output asynchronous
  
-- set tri-state mode for comparator/vref input pins
  TRISC_TRISC1   = 1 -- RC1/AN5/C12IN1-/VREF- (pin 15)
  TRISC_TRISC2   = 1 -- RC2/AN6/C12IN2-/CVREF (pin 14)
  TRISC_TRISC3   = 1 -- RC3/AN7/C12IN3-/PGM   (pin 7)

-- enable analog input for comparator/vref
  JANSEL_ANS6    = 1 -- RC2/AN6/C12IN2-/CVREF (pin 14)
  JANSEL_ANS7    = 1 -- RC3/AN7/C12IN3-/PGM   (pin 7)
  
-- disable analog input for digital I/O use
  JANSEL_ANS5    = 0 -- RC1/AN5/C12IN1-/INT1/VREF- (pin 15)
end procedure

procedure SR_Latch_init() is
  SRCON0_SRLEN  = 1 -- SR Latch enabled
  SRCON0_SRQEN  = 1 -- SR Latch Q  out  enabled
  SRCON0_SRNQEN = 0 -- SR Latch Q* out disabled on RC4/SRQ pin
  
  TRISC_TRISC4  = 0 -- set RC4/SRQ pin to output
  
  SRCON1        = 0x00 -- at first, disable all S/R inputs
  SRCON1_SRSC1E = 1 -- SR Latch C1   set enabled
  SRCON1_SRRC2E = 1 -- SR Latch C2 reset enabled
  SRCON1_SRRPE  = 1 -- SR Latch INT1 reset enabled
end procedure

波形写真や、周波数リニアリティの測定などは次回以降に回します。