|
本帖最后由 424778940 于 2013-7-19 17:42 编辑
如题,目前使用芯片是mega128a
adc部分第一次用,很多不了解,于是来请教
板子原理图见附件
不清楚的地方有一下几点
adc使用时候ddr和port要怎么配置?? ddr设为输入,port呢?
内部参考电压是否准确,受什么影响?
单通道和差分输入都要怎么接线??? 手册上有些部分说的太绕了,初次接触实在是看不明白
单片机工作在5v电压,万用表实测在4.9x,vref也是这个值,代码如下,使用为porta,单通道,adc0输入
串口hex输出三个char,格式为第一位0c是用来确定开头的,第二位是ADCL,第三位是ADCH
现在问题在于无论我怎么调试得到的都是 0C,00,00或者0C,01,00第二位有时候会小幅变化,无论我接gnd还是接3.3都是基本没变化
不提换算后的值,3.3v的电压差竟然没变化这肯定是不正确的,求解我到底哪里有问题?
- volatile unsigned char adc_cache_h = 0x00,adc_cache_l = 0x00;
- volatile unsigned int adc_vin = 0x0000;
- ISR(ADC_vect,ISR_BLOCK)
- {
- adc_cache_l = ADCL;
- adc_cache_h = ADCH;
- adc_vin |= ( (adc_cache_l<<2) | (adc_cache_h<<0) );
- usart_0_send_char(0x0c);//固定字节,用于确定开头位置
- usart_0_send_char(adc_cache_l);
- usart_0_send_char(adc_cache_h);
- }
- int main(void)
- {
- usart_0_init();
-
- usart_0_send_char(0x0c);//清屏
-
- sei();//使能全局中断
-
- //adc port init
- DDRA = 0x00;
- PORTA = 0x00;
-
- //adc reg init
- ADMUX |= (1<<REFS0);//avcc,aref电源,其余默认
- ADCSRA |= ( (1<<ADIE) | (1<<ADFR)) ;//adc中断使能,自动转换模式
- ADCSRA |= ( (1<<ADPS0) | (1<<ADPS1) | (1<<ADPS2) );//128分频
- ADCSRA |= ( (1<<ADEN) | (1<<ADSC) );//adc使能且开始转换
- while(1);
- }
复制代码 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
阿莫论坛20周年了!感谢大家的支持与爱护!!
知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)
|