c++ - ATMEGA16L 上拉未激活

标签 c++ microcontroller atmega atmel atmega16

我不想从按钮获取我的 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 默认情况下处于禁用状态。

亲切的问候, 菲利克斯

编辑:请求的图像:

The wiring (it's a mess)

最佳答案

在照片上,您未连接 AVCC 电源(针脚 30,与电路板上的编号 11 对应)。 AVCC 为 ADC 和端口 A 供电。它应始终直接或通过噪声滤波器连接到 VCC,但绝不应悬空。

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

请阅读 datasheet 第 5 页的引脚说明

关于c++ - ATMEGA16L 上拉未激活,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60726024/

相关文章:

c - 8位单片机生成伪随机数最快的方法是什么?

c - 从微 Controller 的内部闪存读取

c - 数据未存储在 EEPROM 中

c - 如何使用 SPI 正确发送多个字符串

c++ - 如何使用 vscode 增加 C++ 中的最大堆栈大小

c++ - 如何从我的程序运行 .exe 并获取句柄

C++ 运算符重载,operator bool() 和 operator !()

c++ - 为什么迭代 `std::vector` 比迭代 `std::array` 更快?

python - 微 Controller 和pyserial之间的双向通信

c - 在 Atmega 的 I2C 接口(interface)中没有得到正确的值