我不会从按钮将输入输入到我的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是默认禁用的。
亲切的问候,
费利克斯
编辑:所需的图像:
最佳答案
在照片上,您未连接AVCC电源(插针30,与板上的11号相对)。 AVCC为ADC和端口A供电。应始终将其直接连接到VCC或通过噪声滤波器连接到VCC,但永远不要使其悬空。
VCC和AVCC之间的差异不得超过0.3 V
请阅读datasheet第5页上的引脚描述