蓝冠招商《Q374919》 数字补偿岗位涵盖了建立开关模式电源的所有控制方面,但不包括外部通信和控制。这篇文章将演示如何编写dsPIC I2C代码,蓝冠官网 以及如何用c#与dsPIC对话。
假设
我假设:
你知道如何写dsPIC的C代码
你知道如何写c#
您对I2C协议有一定的了解
您愿意钻研一些工作代码,而不需要手动操作和过于详细的解释
因此,这里有足够的信息让您理解每段代码的意图,您可以使用一些灰色信息来实现您自己的代码。但是如果你完全不知道什么,蓝冠注册 请不要犹豫,尽管问。我的假设并不总是准确的。
你应该带什么回家
如果您遵循这些示例,您应该能够使一个I2C在一个下午以最小的努力工作,而且它应该是可靠的。
dsPIC状态机
在你布局你的板之前,有几件事你需要知道。dsPIC可以从两套不同的引脚编程:
PGEC1 / PGED1或PGEC2 / PGED2
I2C使用引脚SDA和SCL,它们与PGEC1/PGED2共享。
如果你用PGEC1/PGED2来编写dsPIC,蓝冠招商 当你编写dsPIC时,你将不得不删除你的I2C加密狗或驱动电路。当程序员连接上时,I2C可以说话,但反过来就不行。
设置I2C
I2C必须启用在您的C代码:
(代码lang =“c”)
空白InitI2C(空白)
{
PMD1bits。I2C1MD = 0;//启用I2C模块
//设置为从属
I2C1CONbits。I2CEN = 1;/ /启用I2C
I2C1CONbits。DISSLW = 0;//启用了转换速率控制
I2C1CONbits。SMEN = 0;//没有SMB级别
I2C1CONbits。GCEN = 0;//允许一般调用中断
I2C1CONbits。ACKDT = 0;/ / ACK /
I2C1CONbits。ACKEN = 1;/ /使消
I2C1CONbits。斯特恩= 1;/ /拉伸启用
I2C1ADD = 0 (;//设置从地址
I2C1STAT = 0 x0000;//清除stat寄存器
//设置波特率
I2C1BRG = 0 x18b;// 100Khz波特率
//设置中断
IPC4bits。SI2C1IP = 5;/ /中断优先级
_SI2C1IF = 0;// I2C中断标志状态位被清除
_SI2C1IE = 1;I2C中断启用
}
(/代码)
需要注意的关键是,您需要设置从地址、启用中断和设置中断优先级。优先级必须低于控制环路中断,以便不中断PWM。我最初将控制循环设置为最高优先级(1),其次是定时器/斜坡中断(3),并将I2C(5)设置为最低优先级。然而,这导致I2C随机锁定。解决方法是将定时器/斜坡中断优先级设置为5。这意味着I2C可以破坏一个斜坡。
你必须注意的第二个关键问题是dsPIC有多少时间可以处理I2C呼叫。控制回路通常使用至少50%的处理器。因为I2C的优先级更高,所以它只把剩菜剩饭当晚餐吃。如果I2C活动过多或处理器时间不足,则会出现超时。