来自 PIC18 微芯片的控制继电器

Control relay from PIC18 microchip

我有一个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;
}

我做错了什么?

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

检查使用的管脚是否有其他功能。典型的问题是这些引脚兼作模拟引脚并且默认启用。

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

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

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

  ClrWdt(); 

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

  1. 替换return;

与:

while(1)
{
   ClrWdt();
}
  1. 根据数据表,RB0 和 RB1 有几个模块连接到这些引脚,因此您应该验证它们是否已关闭: 模拟, ECCP, 比较器。 顺便说一句,为什么要使用两个引脚来控制一个继电器?

3.you可能需要添加驱动程序才能操作继电器。

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

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

配置位的 PBADEN 位也应为零。