ATMega128启动时输出闪烁

时间:2017-01-09 22:15:11

标签: c embedded avr

我正在使用ATMega128 micro并将我的所有引脚设置为输出并在我的主要代码部分设置为低:

PORTB=0x00;
DDRB=0xFF;

然而,在启动时,与PORTB.0相关联的输出瞬间轻弹一下(我已经在示波器上捕获了它),而其他输出似乎也是这样做的。好像它是低 - 高 - 低。我已经完成了一些阅读,它可能是由启动期间三态输出开关引起的,所以我在引脚输入之前将PUD寄存器设置为1然后再返回0并且仍然没有运气。有没有人有任何其他想法在启动期间保持输出关闭?它并不总是发生,这也是我难倒的。

1 个答案:

答案 0 :(得分:4)

基本问题是硬件问题 - GPIO上没有下拉电阻,因此在处于复位默认高阻输入状态时它会浮动。

您可以在软件中做的最好的事情是在重置后立即初始化GPIO。要在CodeVisionAVR中执行此操作,您需要在项目中使用自定义的startup.asm,如CoadeVisionAVR编译器手册的第4.18节所述:

enter image description here ...

我建议您按如下方式初始化PORTB和DDRB:

             LDI    R16,  0x00       
             OUT    PORTB, R16 
             LDI    R16,  0xFF       
             OUT    DDRB, R16
紧接在步骤2之前的

,即前四个指令。 GPIO悬空的时间可能太小,以至于如果是机械继电器,继电器会做出反应。您可能仍然遇到固态继电器问题。任何脉冲的长度可能取决于电源上升时间;如果它很慢,你可能会得到更长的脉冲。