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の間で変化します。