復旦微国産化開発板FM 33 G 0シリーズのADC採集


四、ADC採集復旦マイクロFMG 033シリーズのADCは11位である.私は直接最も主要なADCコードを採集しましょう.
//ADC 
uint32 Test_ADC_ExVolt(uint8_t Ch_selec)
{
	uint16 ADCData[16];
	uint08 i;
	volatile uint32 fVlotage = 0;
	uint32 fTempADC = 0;

	ADC_IO_Init();							            //IO ADC 		
	ADC_Init_TsetExVolt(Ch_selec);					// ADC
	
	for(i=0; i<16; i++)
	{
		ADCData[i] = 0;
	}
	ADC_Struct.Bufu16 = ADCData;// 
	ADC_Struct.SampleNeed = 15;	// , 8 , 
	ADC_Struct.SampleCount = 0;	// 
	
	ANAC_ADCCON_ADC_EN_Setable(ENABLE);		//ADC 
	while(ADC_Struct.SampleCount != ADC_Struct.SampleNeed);// 
		
	// 8 
	fTempADC = 0;
	for(i=3; i<15; i++)	
	{
		fTempADC += ADCData[i];
	}
	
	fTempADC = fTempADC/12.0;
	
	fVlotage = ANAC_ADC_VoltageCalc(fTempADC,12);//AD , 5V      
	return fVlotage;
	
}

uint32_t ANAC_ADC_VoltageCalc(uint 32_t fADCData,uint 8_t Vdd)関数はインスタンス内の関数であり、変更されていない.
int main(void)
{
   uint32 value_adc=0;
   float adc_v;
   value_adc = Test_ADC_ExVolt(CH_IN1);
   adc_v;=value_adc  /1000 ;       
}

得られたadc_vは、ADC符号値に対応する電圧値というセグメント関数を用いて算出されるピン値である.ピンの電圧であり、単位はボルトvである.セグメント関数はこの関数です:uint 32_t ANAC_ADC_VoltageCalc(uint 32_t fADCData,uint 8_t Vdd)で計算した電圧単位はmvです.
もちろん、分岐関数を用いずにピン電圧値を得ることもできる.直接関数uint 32 Test_ADC_ExVolt(uint 8_t Ch_selec)では、fTempADCという値が返されます.その主関数は次のようになります.
int main(void)
{
   uint32 value_adc=0;
   float adc_v;
   value_adc = Test_ADC_ExVolt(CH_IN1);
   adc_v =value_adc * (ADC_VOLTAGE_REF / 2047)   

}

adc_vは参照電圧とadcで採取した電圧を用いて算出したピン電圧値、ADC_VOLTAGE_REFは基準電圧、2047はADC解像度が11 bitなので、基準電圧に対応できる最大の数は、2の11乗-1です.
ここに数字の回転文字の関数を添付します.表示に使うかもしれません.
/*
	@  
	@ value: 
	@ str: 
	@return: 
	@ by fll
*/
uint8_t Int2String(uint32_t value,uint8_t *str)
{
	uint32_t i=0;
	uint32_t j=0;
	uint32_t temp=0;
	
	if(value==0)
	{
		str[i]=0+'0';
	}
	else
	{
		while(value)
		{
			str[i++]=value%10+'0';
			value/=10;
		}
	
		for( ;j