📄 adc.c
字号:
/****************************************************************
*
* Microchip 16-bit Embedded Control Design Contest
*
* Entry # MT2268
*
* Spa Pump Controller
*
*****************************************************************
*
* ADC Control Routines
*
*****************************************************************/
#include "PumpCtl.h"
#include "ADC.h"
#include "PWM.h"
// Initialize the ADC
void ADC_init (void)
{
// The ADC is limited to 1.5MSPS => 18 MHz max clock freq (per Rev A1 Errata #9)
#ifdef HIGH_SPEED
_ADCS = 5; // Select Fadc/14 for 16.6 MHz clock
#else
_ADCS = 3; // Select Fadc/10 for 15.5 MHz clock
#endif
_SEQSAMP = 1; // Use sequential sampling (per Rev A1 Errata #6)
_FORM = 1; // Select fractional format
// Select PFC PWM trigger for AN0-3, enable AN2-3 IRQ
ADCPC0 = 0x8303 + PWM_CH_pfc + (PWM_CH_pfc << 8);
/*
TRGSRC0 = 3 + PWM_CH_pfc;
SWTRG0 = 0;
PEND0 = 0;
IRQEN0 = 0;
TRGSRC1 = 3 + PWM_CH_pfc;
SWTRG1 = 0;
PEND1 = 0;
IRQEN1 = 1;
*/
// Select AUX PWM trigger for AN4-5, RUN PWM trigger for AN6-7
ADCPC1 = 0x0303 + PWM_CH_aux + (PWM_CH_run << 8);
/*
TRGSRC2 = 3 + PWM_CH_aux;
SWTRG2 = 0;
PEND2 = 0;
IRQEN2 = 0;
TRGSRC3 = 3 + PWM_CH_run;
SWTRG3 = 0;
PEND3 = 0;
IRQEN3 = 0;
*/
ADSTAT = 0; // Clear all ADC interrupt flags
_ADON = 1; // Start the ADC
// Init offset values based on hardware resistor values
offset.isns_pfc = 65536UL * 115 / (115 + 2550); // = 64K * R62 / (R62 + R61)
offset.isns_aux = 65536UL * 162 / (162 + 162); // = 64K * R46 / (R46 + R45)
offset.isns_run = 65536UL * 162 / (162 + 162); // = 64K * R46 / (R46 + R45)
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -