我必须使用ATmega 328p用C语言编写一个程序,它将温度转换为电压。
到目前为止,我已经做到了:
#include <avr/io.h>
unsigned int Ctemp;
unsigned int Ftemp;
int main(void)
{
ADMUX = (1<<REFS1) | (1<<REFS0) | (0<<ADLAR) | (1<<MUX3) | (0<<MUX2) | (0<<MUX1) | (0<<MUX0);
ADCSRA = (1<<ADPS2) | (1<<ADPS1) | (1<<ADEN);
ADCSRA |= (1<<ADSC);
while ((ADCSRA & (1<<ADSC)) != 0);
while(1)
{
ADCSRA |= (1<<ADSC);
while ((ADCSRA & (1<<ADSC)) != 0);
Ctemp = (ADC - 247)/1.22;
Ftemp = (Ctemp * 1.8) + 32;
}
return 1;
}
您能帮我完成转换部分吗?
最佳答案
冒着夸大其词的风险,在我看来这里有两个基本操作:
1)获取温度
2)产生输出电压
看起来OP并没有像实际产生模拟电压那样挂在数字上,模拟电压是在步骤1中获得的温度的函数。这并不奇怪,因为大多数微控制器(包括328P)并不具有模拟输出。但是328P上提供了PWM输出,因此很简单地集成PWM输出以便在步骤2中获得理想的结果是很普遍的。