如何在Arduino(Atmega1284p)上禁用输入上拉。常规方法似乎不起作用

时间:2016-11-17 18:11:41

标签: arduino avr atmega

使用" Mighty Mini"使用Atmega1284p处理器的板,在Raspbian上使用Arduino IDE 2:1.0.5,使用Mighty Mini" board"已安装文件。

我在输入上有一些不稳定的行为,所以我用一个'范围来检查它,似乎虽然我没有启用内部上拉,但我在输入引脚上出现+ 3.3v。我需要引脚浮动。

我进行了一项简单的测试,以确保它不是编码问题:

void setup() {
    pinMode(8, INPUT);
}

void loop() {
}

根据文档,这应该将引脚置于高阻态。但即使我将1K电阻连接到地,示波器也会在引脚上显示~3.2伏。所以引脚肯定是被驱动的。

我决定尝试直接访问寄存器,例如:

void setup() {
    DDRA = 0;
    DDRB = 0;
    DDRC = 0;
    DDRD = 0;

    PORTA = 0;
    PORTB = 0;
    PORTC = 0;
    PORTD = 0;
}

void loop() {
}

这还没有工作......引脚上仍然是+ 3.3v。 我也试过不同的针脚。

我认为可能Mighty Mini的电路板定义可能会使寄存器定义错误..但它在其他任何方面都能完美运行..我的实际应用程序使用SPI,I2C,Serial,Tone ..很多硬件I / O ..除了这个问题它完美地工作..所以当其他一切似乎正确运行时,我犹豫责备库。

谢谢!

2 个答案:

答案 0 :(得分:1)

看来你的某处有布线问题,或者你的测量结果错了。 ATmega的内部上拉电阻为10k,因此如果通过1k电阻将引脚连接到GND,则会得到一个分压器,输出电压为0.3V。

我的建议:仔细检查所有连接。使用blinky示例代码测试引脚作为输出。

答案 1 :(得分:0)

将引脚配置为输入时,可以通过向引脚写入HIGH(启用)或LOW(禁用)来启用或禁用内部上拉:

pinMode(8, INPUT);
digitalWrite(8, LOW); // disable internal pullup

Arduino文档https://www.arduino.cc/en/Reference/DigitalWrite声明:

  

如果引脚配置为INPUT,则digitalWrite()将启用   (HIGH)或禁用(LOW)输入引脚上的内部上拉。它是   建议将pinMode()设置为INPUT_PULLUP以启用   内部上拉电阻。有关更多信息,请参阅数字引脚教程   信息。