JH7UBCブログ

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

PIC16F18326 MCC ADCテスト

2024-01-21 15:20:18 | MPLAB X MCC
 PIC16F18326のADCのテストをします。
 環境は、MPLAB X(v6.15) XC8(v2.45) MCC(v5.3.7)です。 

 PIC16F18326は、ADCを11ch使えます。各チャンネルと対応ポートの関係は次のようになっています。
 チャンネル番号  アナログポート I/Oポート
    0       ANA0     RA0
    1       ANA1     RA1
    2       ANA2     RA2
    3       -
    4       ANA4     RA4
    5       ANA5     RA5
   6~15      -
   16       ANC0     RC0
   17       ANC1     RC1
   18       ANC2     RC2
   19       ANC3     RC3
   20       ANC4     RC4
   21       ANC5     RC5

 ch1(RC1)を使って、入力電圧をボリュームで変化させ、ADCの値をシリアル通信で出力し、Tera Termで表示します。
 回路図です。ICSPでPICKit3で書き込みます。


 MPLAB Xでprojectを作成し、MCCを立ち上げ、各種設定をします。
 まず、systemモジュールでクロックを設定します。下のように4MHzとしました。


 ADCモジュールを導入し、Result Alignmentをrifhtに設定します。他はデフォルトのままです。



 EUSARTモジュールを導入します。設定は特にせず、デフォルトのままです。Baud Rateは9600bpsです。

 pinモジュールです。ADCの入力はANC1(RC1)で、EUSARTのTXがRC4、RXがRC5です。

 1secごとにADCの値を送信するプログラムです。
--------------------------------------------------------------------------
/*
 * PIC16F18326 MCC ADC test
 * 2024.01.20
 * JH7UBC Keiji Hata
*/

#include "mcc_generated_files/mcc.h"
#include <stdio.h>

void putch(uint8_t ch)
{
      EUSART_Write(ch);
}

void main(void)
{
     // initialize the device
     SYSTEM_Initialize();

     int data = 0;
     uint8_t channel = 17;//ANC1 RC1
     while (1)
    {
         data = ADC_GetConversion(channel);
         printf("channel %2d = ",channel);
         printf("%4d\r\n",data);
         __delay_ms(1000);
    }
}
--------------------------------------------------------------------------
 purch()関数を定義して、printf()関数を使って送信します。
 Project PropatiesでC StandardをC90にします。

 ブレッドボードです。


 VRを回して、電圧を変えて、ADCの値を表示させました。


 10bitのADCですので、値は0~1023の間で変化します。

最新の画像もっと見る

コメントを投稿