使用 Attiny84 的 ADC 的值错误

问题描述 投票:0回答:1

我正在使用 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

c embedded microcontroller avr attiny
1个回答
1
投票

这些没有UARTS的芯片很难一次性全部调试。他们确实有一个用于调试的“DebugWire”端口;如果您可以访问它和调试器,您可以通过设置断点并直接读取

lecturaSensor
的值来极大地简化调试。

如果没有,我将通过隔离每个部分来执行以下一些步骤来调试系统:

  • 对于温度传感器,您可以编写一个程序将 PORTB0 永远设置为高电平,然后用万用表测量从 LM335z 到 ATtiny 的模拟输入。这可以帮助验证传感器是否输出预期电压。
  • 看起来ADMUX配置为使用PA0作为模拟参考电压;该引脚连接了什么?
  • 看起来 ADC 时钟预分频器设置为将 CPU 时钟除以 1/128;数据表建议“输入时钟频率在 50 kHz 和 200 kHz”。考虑到您的 CPU 频率,该值有意义吗?
  • 尝试对 ADC 进行一次采样,然后直接从此函数返回
    lecturaSensor
    值。平均功能可能存在错误。
  • “我的意思是,并非所有 LED 都会按其应有的方式亮起。” - 由此,我想知道 7 段显示器是否按您的预期工作。您可以编写一个程序,将已知值写入显示器,以确保它和您的驱动程序正常工作。

这些就是我的全部想法,祝调试好运!

© www.soinside.com 2019 - 2024. All rights reserved.