PIC12F1822を使ってMCCで設定して、DAC(デジタル アナログ コンバータ)のテストをします。
DACのしくみは私のホームページ(JH7UBC Home Page)のここで説明しています。
DACモジュールの正電源としては、FVR(Fixed Voltage Reference 固定参照電圧)とVDDとVREF+(外部からの参照電圧)が選べますが、今回は、VDDを選びます。乾電池を電源に使いましたので、VDD=3Vです。
DACの出力は、DACCON1レジスタのbit0:bit4(DACR)に0~31(0x00~0x1F)をセットすれば、DACOUT = VDD*(DACR/32)に対応した電圧が、RA0に出力されます。回路図です。
まず、プロジェクト作成して、MCCを開きます。
最初にSystem Moduleの設定です。
INTOSC,FOSC,16MHz,Low-Voltage Programingなしとしました。
次に、DACモジュールを組み込み、設定します。
Positive Referenceは、VDD,Low-Power Voltage Stateはデフォルトのままneg_refとし、Enable OUTPUT on DACOUTにチェックを入れます。
更に、上記のPin ManagerのDACOUTのPortA0をクリックします。
ここで、気になったことがあります。DACOUTのDirection(方向)がinputになっています。これって変ですよね。outputじゃないのかな?
他のPICでの例を見るとoutputになっています。うーん分からない。
とりあえず、このままにしておきます。
Pin Moduleを見てみます。
RA0 DACだけです。GPIOの設定はしなくとも良いようです。
これだけの設定で、Generateして、MCCを閉じ、設定どおりにcodeが生成されているか確認してみました。
pin_manager.cを見ると
TRISA = 0x3E; //0b001111110 RA0は出力、他は入力でOKです。
dac.cを見ると
DACCON0 = 0xA0; //0b10100000 DAC enable,DACOE enableになっています。OKです。
大丈夫のようです。
main.cに時間とともに電圧を上げていくプログラムを書いて、テストしました。
プログラムです。
-----------------------------------------------------------------------
#include "mcc_generated_files/mcc.h"
void main(void)
{
SYSTEM_Initialize();// initialize the device
uint8_t count=0;
for(count=0; count<=30; count++)
{
DAC_SetOutput(count);
__delay_ms(1);
}
}
------------------------------------------------------------------------
{
SYSTEM_Initialize();// initialize the device
uint8_t count=0;
for(count=0; count<=30; count++)
{
DAC_SetOutput(count);
__delay_ms(1);
}
}
------------------------------------------------------------------------
RA0の出力をPico Scopeで見てみました。
1msごとに電圧が上昇し、鋸歯状波になっています。
良く分からないところもあるのですが、とりあえずDACの設定が簡単にできました。