内置 LED 在 arduino mega 上的 LED 代码上发光



我在 atmel studio 上写了一个代码,用于闪烁引脚 13 上的 LED 指示灯。上传带有 xloader mega 内置 LED 的代码后,指示灯闪烁。 我在我的兆上上传了淡入淡出代码,内置 LED 闪烁而不是 led。我该怎么办? 我正在使用 arduino mega 2560。

int main(void)
{
DDRB=0b00000000;  
while (1)   
{
PORTB=0b10000000;
_delay_ms(1000);
PORTB=0b00000000;
}
}

你应该怎么做?阅读手册。

请参考 https://ww1.microchip.com/downloads/en/devicedoc/atmel-2549-8-bit-avr-microcontroller-atmega640-1280-1281-2560-2561_datasheet.pdf

第 13.2 章.

DDRx 寄存器中的 DDxn 位选择此引脚的方向。 如果 DDxn 是写入逻辑一,则 Pxn 配置为输出引脚。如果 DDxn为写入逻辑零,Pxn配置为输入引脚。

如果您不知道寄存器的作用,则使用寄存器就没有意义。

DDRB=0b00000000;     

仅提供输入。

为什么要使用Arduino并尝试在没有传统宏和函数的情况下对其进行编程?

如果您尝试闪烁 LED 或让它呼吸,请使用 Arduino IDE 及其内置函数 analogWrite(( 为您的 LED 或支持 analogwrite(( 的合适引脚上的任何 LED 生成 pwm 脉冲。如果您没有合适的知识,则不应尝试对寄存器进行任何直接修改,因为您可能会破坏您的开发工具包,并可能烧毁其他一些东西。请使用套件的原理图找出支持 analogwrite(( 的引脚,然后在示例中使用代码。

这样,您将更快地实现目标,没有任何问题。

TL/DR:您必须将第 7 位设置为DDRB为 1。

在AVR中,端口由两个寄存器中的位配置:DDRxPORTx

DDRx寄存器中的相应位设置为 1 时,端口配置为输出。PORTx寄存器中的相应位选择引脚上输出的电电平。如果为 0,则内部 MOSFET 将引脚短路至"接地"通道,并吸收来自外部电源的电流。当PORTx位为1时,引脚连接到"VCC",提供足以点亮LED的大电流。

但是,如果引脚连接到消耗过多电流的某物,或者引脚短路到GND或VCC(假设您连接并按下了一个按钮(,则输出MOSFET可能会过载并损坏。

如果DDRx中的位设置为零,则引脚配置为输入。如果PORTx中的相应位为零,则引脚没有与电源线的内部连接,称为"高阻抗"状态或三态。它不会供应或吸收任何电流。因此,如果没有连接外部电流源,则引脚电平是浮动的,受电气干扰的影响。逻辑级别不可检测,偶尔会更改。例如,如果要连接按钮(在引脚和GND之间(,则只有在按下按钮时才会定义逻辑电平。发布时,逻辑级别将未定义。

但!如果PORTx中的位设置为 1,则内部 MOSFET 通过电阻(约 35 kOhm(将引脚连接到 VCC 线路。这使得引脚源出少量电流,将其逻辑电平设置为高电平。因此,如果连接了一个按钮,当它被释放时,那么引脚将具有定义的高电平。这称为"上拉电阻"。按下按钮时,它不会短路并损坏MCU,因为流过按钮的电流受到电阻的限制,但逻辑电平将被定义为低电平。

如果不是按钮,而是将 LED 连接到引脚怎么办?非常少量的电流会流过 LED,使其几乎不发光。

在数据表中阅读更多内容(第13.I/O 端口(

最新更新