255 个字符。而不是 1023,无法设置参考电压
255 char. instead of 1023, Unable to set reference voltage
我在我的项目中使用 ATmega16。我想在输入 5V 时得到值=1023,在输入 = 0 时得到 0。readADC 函数读取微控制器 ADC 的特定通道。我的时钟频率是 4MHz。但是在读取输入时,我 得到 255 作为最大值而不是 1023。
了解avr编程的人可以帮忙!!!
我的代码:
#include <avr/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char ReadADC(unsigned char ch)
{
ch = ch&0b00000111;
ADMUX&=0xF8;
ADMUX |= ch;
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC); //wait for conversion to complete
return(ADC);
}
int main(void)
{
SegDataDDR = 0xFF;
SegCntrlDDR = 0xF3;
SegCntrlPort = 0xF3;
SegDataPort = 0x00;
ADMUX = (1<<REFS0) | (0<<REFS1);
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); // ADEN set to turn ADC on
// clock frequency divided by 32 for operable 125KHz frequency
while(1)
{
ADCSRA |= (1<<ADSC); // start conversion
unsigned char value = ReadADC(0); // Reads the value of the ADC
}
在您的代码中,行
unsigned char value = ReadADC(0);
限制您只能使用 8 位。您需要将 value
的类型更改为更大的类型,例如 unsigned short
,它可以容纳 16 位的数据。如果进行此更改,还必须将 ReadADC
的定义更改为
unsigned short ReadADC(unsigned char ch)
将无符号字符替换为unit16_t
我在我的项目中使用 ATmega16。我想在输入 5V 时得到值=1023,在输入 = 0 时得到 0。readADC 函数读取微控制器 ADC 的特定通道。我的时钟频率是 4MHz。但是在读取输入时,我 得到 255 作为最大值而不是 1023。 了解avr编程的人可以帮忙!!!
我的代码:
#include <avr/delay.h>
#include <avr/io.h>
#include <avr/interrupt.h>
unsigned char ReadADC(unsigned char ch)
{
ch = ch&0b00000111;
ADMUX&=0xF8;
ADMUX |= ch;
ADCSRA |= (1<<ADSC);
while(ADCSRA & (1<<ADSC); //wait for conversion to complete
return(ADC);
}
int main(void)
{
SegDataDDR = 0xFF;
SegCntrlDDR = 0xF3;
SegCntrlPort = 0xF3;
SegDataPort = 0x00;
ADMUX = (1<<REFS0) | (0<<REFS1);
ADCSRA = (1<<ADEN) | (1<<ADPS2) | (1<<ADPS0); // ADEN set to turn ADC on
// clock frequency divided by 32 for operable 125KHz frequency
while(1)
{
ADCSRA |= (1<<ADSC); // start conversion
unsigned char value = ReadADC(0); // Reads the value of the ADC
}
在您的代码中,行
unsigned char value = ReadADC(0);
限制您只能使用 8 位。您需要将 value
的类型更改为更大的类型,例如 unsigned short
,它可以容纳 16 位的数据。如果进行此更改,还必须将 ReadADC
的定义更改为
unsigned short ReadADC(unsigned char ch)
将无符号字符替换为unit16_t