我不会从按钮将输入输入到我的Atmega16L。理想情况下,我可以使用内部上拉电阻,因此无需在外部连接它们。

我将代码精简到最小:

void main(void) {

// SFIOR &= ~(1<<PUD);  // Turn off Pull-up disable
DDRD = 0xFF;    // Output PORT D
DDRA = 0x00;    // Input PORT A
PORTA = 0xFF;   // Pull-up on PORT A
_delay_ms(100);
while (1)
{
    if (PINA & (1<<PA1))    // Check if PA0 is High
        PORTD |= (1<<PD5);  // Set PD5 to High
    else
        PORTD &= ~(1<<PD5); // Set PD5 to Low
}

return;}

我希望PD5引脚应为高电平,因为PA1由内部上拉(设置在第6行)上拉。
但是不,当我运行代码时,PD5引脚为低电平,我必须将PA1引脚连接至5V,以便在PD5上获得高电平信号。

简短的内容简短的,看来上拉没有激活...

据我所知,如果尝试使用SFIOR,但默认情况下PUD是默认禁用的。

亲切的问候,
费利克斯

编辑:所需的图像:

c&#43;&#43; - ATMEGA16L上拉无效-LMLPHP

最佳答案

在照片上,您未连接AVCC电源(插针30,与板上的11号相对)。 AVCC为ADC和端口A供电。应始终将其直接连接到VCC或通过噪声滤波器连接到VCC,但永远不要使其悬空。

VCC和AVCC之间的差异不得超过0.3 V

请阅读datasheet第5页上的引脚描述

10-08 07:05