PIC18芯片的控制继电器

时间:2016-09-04 15:01:47

标签: microchip mplab pic18

我有PIC18F24K20微芯片,想要控制继电器。它可以通过我的RasPI而不是GPIO工作得很好 - 但是我无法通过我的微芯片工作。

我的测试程序是:

#include <xc.h>

#define R1          LATBbits.LATB0
#define R1_TRIS     TRISBbits.RB0

#define R2          LATBbits.LATB1
#define R2_TRIS     TRISBbits.RB1

void main(void) {

    R1_TRIS = 0;
    R2_TRIS = 0;

    R1 = 1;
    R2 = 0;

    return;
}

我做错了什么?

3 个答案:

答案 0 :(得分:0)

主要功能永远不会在嵌入式PIC处理器中返回。在某些实现中,它会导致软件复位,从而导致引脚返回高阻抗模式。尝试添加while(1);在你的主要结束。

答案 1 :(得分:0)

检查使用的引脚是否具有其他功能。典型的问题是引脚加倍作为模拟引脚并默认启用。

通过查找数据表中对应的AN引脚来禁用它们,并使用

之类的代码禁用它们
  ANSEL.ANS0 = 0;  
  ANSEL.ANS1 = 0;

如果启用了看门狗功能,您可能还想添加

  ClrWdt(); 

到主WHILE循环(这是Mathieu的一个很好的建议)

答案 2 :(得分:0)

  1. 替换return;
  2. with:

    while(1)
    {
       ClrWdt();
    }
    
    1. 根据数据表,RB0和RB1有几个模块连接到这些引脚,因此您应该验证它们是否已关闭: 模拟, ECCP, 比较。 BTW为什么要使用两个引脚来控制一个继电器?
    2. 3.您可能需要添加驱动程序才能操作继电器。

      根据数据表,添加以下初始化代码:

      CCP1CON=0;
      CCP2CON=0;
      ADCON0=0;
      CM1CON0=0;
      CM2CON0=0;
      

      配置位的PBADEN位也应为零。