sunnyjaky1 发表于 2012-9-3 14:42:16

c8051f350 ADC转换数据不正确。大家看看是哪里不对

本帖最后由 sunnyjaky1 于 2012-9-3 14:49 编辑

void ADC_Init(void)
{
unsigned long int i;
//set adc idle mode
ADC0MD = 0x80;
//unipolar mode & pga = 1
ADC0CN = 0x00;
//internal vref+
ADC0CF = 0x00;
// CLK pre-devided
ADC0CLK = ((unsigned long int)C8051_SYSCLK / 2457600) & 0xff - 1;
ADC0DECL =((unsigned long int)C8051_SYSCLK / (ADC0CLK+1)/100/128) & 0xff - 1;
ADC0DECH = 0;
//dac offset
ADC0DAC = 0x00;
//in buffer control
ADC0BUF = 0x00;
//adc offset
ADC0COL = 0;
ADC0COH = 0;
ADC0COM = 0;
//adc gain
ADC0CGH = 0x80;
ADC0CGM = 0;
ADC0CGL = 0;
i = 2000;
while(i--);
ADC0STA = 0;
//adc multiplexer
//+:adcin1 -:agnd
ADC0MUX = 0x18;
ADC0MD |= 0x81;                        // 完全内部校准
while (!ADC0STA_bit.AD0CALC);                      // 等待转换完成
ADC0MD = 0x80;
}
其中C8051_SYSCLK :12MHZ
运行到最后一句的时候从仿真器看
ADC0CGH 0XFF ADC0CGM 0XFF ADC0CGL 0XFF
ADC0COL 0X50 ADC0COL 0XCD ADC0C0L 0X76
其中ADC0CO每次也不一样。
ADC0STA : 0X3A
所有通道转换后也全为FF FF FF
如果校正前adc0cg改为00 00 00,
所有通道转换后不论实际情况也全为00 00 00
看了网上的一些例程,但是都是一样的问题。请各位朋友给看看问题出在哪里。

wadz365 发表于 2012-9-4 15:24:12

检查PGA是否设定太大,满幅了,
关闭缓冲,校准,只留最基本的转换设定,
我做的差分的正常,

dhw5qq 发表于 2014-6-24 20:34:22

看来这个片子引起不小的凡响啊,我大概是去年也调试了下,发现这个片子只能做成4位半的电压表!
页: [1]
查看完整版本: c8051f350 ADC转换数据不正确。大家看看是哪里不对