我不想从按钮获取我的 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 和 AVCC 之间的差异不得超过 0.3 V
请阅读 datasheet 第 5 页的引脚说明
关于c++ - ATMEGA16L 上拉未激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60726024/