【问题标题】:Built-in led glowing on code of led on arduino megaarduino mega上的led代码内置led发光
【发布时间】:2019-10-06 10:52:38
【问题描述】:

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

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

【问题讨论】:

  • 这个神秘的代码中没有任何东西会褪色。提示:使用为您的部件定义的宏和名称。二进制常量很难阅读和调试。

标签: arduino atmega atmelstudio


【解决方案1】:

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

请参考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 被写入逻辑 1,则 Pxn 被配置为输出引脚。如果 DDxn 写入逻辑零,Pxn 配置为输入引脚。

如果您不知道寄存器的作用,那么使用寄存器是没有意义的。

DDRB=0b00000000;     

只给你输入。

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 您能否举个例子,如何通过设置 I/O 寄存器来破坏 Arduino 或“烧毁其他东西”?你不应该劝阻那些试图在 Adruino 的裙子下看看的人。而是鼓励他们参考手册。
    • 首先,我不是在劝阻,而是让他们知道事情的真相。其次,您可以将端口和引脚短路,然后销毁它们,等等。 Arduino 不应该以这种方式使用。因此,对 500 页长的 Atmel 数据表一无所知的人将花费数月时间试图让代码闪烁,我认为这不会有成效!你做?除此之外,我没有将 OP 参考手册而不是 Arduino IDE,并给了他建议,这将使他的 LED 呼吸等。我看到你不理解我的帖子的洞视角,而你的帖子在这里毫无意义。
    • 呃,谁说 Arduino 不适合那样使用?最好在 30 美元的 Arduino 板上炸掉一些别针,而不是在你的职业生涯中更进一步地在价值百万美元的客户设备上犯同样的基本错误!每个人都必须学习。如果他想学习使用 Atmel studio 和手头的 PDF,为什么不呢?仅将其他人的代码块粘合在一起,他可能会比其他人学到更多。
    【解决方案3】:

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

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

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

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

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

    但是!如果PORTx 中的位设置为 1,则内部 MOSFET 通过电阻器(约 35 kOhm)将引脚连接到 VCC 线。这使得引脚提供少量电流,将其逻辑电平设置为高电平。因此,如果一个按钮被连接,当它被释放时,引脚将定义为高电平。这称为“上拉电阻”。按键按下时不会短路损坏单片机,因为流过按键的电流受电阻限制,但逻辑电平会被定义为低电平。

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

    datasheet 中了解更多信息(第 13 章。I/O 端口

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-22
      • 1970-01-01
      相关资源
      最近更新 更多