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

2020-01-23 14:35发布

本帖最后由 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
看了网上的一些例程,但是都是一样的问题。请各位朋友给看看问题出在哪里。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
wadz365
1楼-- · 2020-01-23 19:03
检查PGA是否设定太大,满幅了,
关闭缓冲,校准,只留最基本的转换设定,
我做的差分的正常,
dhw5qq
2楼-- · 2020-01-23 23:21
看来这个片子引起不小的凡响啊,我大概是去年也调试了下,发现这个片子只能做成4位半的电压表!

一周热门 更多>