来自 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 的一个好建议)
- 替换
return;
与:
while(1)
{
ClrWdt();
}
- 根据数据表,RB0 和 RB1 有几个模块连接到这些引脚,因此您应该验证它们是否已关闭:
模拟,
ECCP,
比较器。
顺便说一句,为什么要使用两个引脚来控制一个继电器?
3.you可能需要添加驱动程序才能操作继电器。
根据数据表,添加以下初始化代码:
CCP1CON=0;
CCP2CON=0;
ADCON0=0;
CM1CON0=0;
CM2CON0=0;
配置位的 PBADEN 位也应为零。
我有一个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 的一个好建议)
- 替换
return;
与:
while(1)
{
ClrWdt();
}
- 根据数据表,RB0 和 RB1 有几个模块连接到这些引脚,因此您应该验证它们是否已关闭: 模拟, ECCP, 比较器。 顺便说一句,为什么要使用两个引脚来控制一个继电器?
3.you可能需要添加驱动程序才能操作继电器。
根据数据表,添加以下初始化代码:
CCP1CON=0;
CCP2CON=0;
ADCON0=0;
CM1CON0=0;
CM2CON0=0;
配置位的 PBADEN 位也应为零。