我正在使用 Attiny84 和 LM335z 温度传感器来创建温度传感器。使用 ADC,我获取电压值并执行必要的转换以获得温度值。然后,我将这个温度显示在 7 段显示屏上。 这是一个代码片段,我在其中配置 ADC 和用于读取温度的函数。
void iniPuertos(void) {
DDRB = 0b00000011;
PORTB = 0b00000100;
DDRA = 0b11111110;
/
ADMUX |= (1 << REFS0);
ADMUX |= (1 << MUX2) | (1 << MUX0);
ADCSRA |= (1 << ADPS0) | (1 << ADPS1) | (1 << ADPS2);
ADCSRA |= (1 << ADEN);
GIMSK |= (1 << INT0);
MCUCR |= (1 << 2);
sei();
}
int leerTemperatura(void) {
uint16_t lecturaSensor;
float voltageSensor = 0.0;
float temperatura = 0.0;
int temperaturaSuavizada = 0;
PORTB |= (1 << 0); //Sensor
_delay_ms(250);
for (int i = 0; i < 50; i++) {
ADCSRA |= (1 << ADSC);
while (ADCSRA & (1 << ADSC));
lecturaSensor = ADC;
voltageSensor = lecturaSensor * (5.0 / 1023.0);
temperatura = ( voltageSensor / 0.01) - 273.15;
temperaturaSuavizada += temperatura;
}
temperaturaSuavizada = round(temperaturaSuavizada / 50);
PORTB &= ~(1 << 0);
return temperaturaSuavizada;
}
问题在于变量“lecturaSensor”,它负责获取 ADC 读数。该变量似乎错误地获取了读数,因为在显示屏上显示该值时,显示的数字不正确并且与温度不对应。但是,如果我指定像 lecturaSensor = 565 这样的值,则温度值将正确显示。我所说的“显示不正确”是指并非所有 LED 都按其应有的方式亮起。值得一提的是,我使用的是 BCD 解码器。 我尝试对配置进行多次更改和修改,但没有成功,并且无法识别错误。另外,由于 Attiny 没有 UART,我无法查看变量的值。如果出现我忽略的问题,我正在寻求帮助。
我正在添加一些图像:https://imgur.com/a/kzu5jr2
这些没有UARTS的芯片很难一次性全部调试。他们确实有一个用于调试的“DebugWire”端口;如果您可以访问它和调试器,您可以通过设置断点并直接读取
lecturaSensor
的值来极大地简化调试。
如果没有,我将通过隔离每个部分来执行以下一些步骤来调试系统:
lecturaSensor
值。平均功能可能存在错误。这些就是我的全部想法,祝调试好运!