JH7UBCブログ

アマチュア無線 電子工作 家庭菜園など趣味のブログです

PIC12F1822 MCC DAC テスト

2021-06-01 07:42:36 | MPLAB X MCC
 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);
}
}
------------------------------------------------------------------------
RA0の出力をPico Scopeで見てみました。
1msごとに電圧が上昇し、鋸歯状波になっています。


 良く分からないところもあるのですが、とりあえずDACの設定が簡単にできました。