Microchip
直播中

李椰潭

7年用户 194经验值
私信 关注
[问答]

如何让I2C在深度睡眠模式下工作?

你好,我用PIC24F16KA102微控制器读取I2C传感器的数据。我每1分钟读一次数据。当设备运行在电池中时,我想把微控制器置于深度休眠模式。因此,微控制器必须每隔1分钟唤醒一次,从I2C中提取数据,将该数据传送到UART,然后返回深睡眠。我的问题是,当我把微控制器置于深度睡眠模式时,微控制器在第一分钟内从I2C中抽取数据,并将数据传送到UART,之后既不进入睡眠状态,也不从I2C中抽取数据。我正在使用内部RTCC(在LPRC中运行)从深度睡眠中醒来。----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------OSCIOFNC_ON&POSCFREQ_8MHZ&POSCMOD_HS)_FWDT(WDTPS_PS4096 & FWPSA_PR128 & WINDIS_OFF & FWDTEN_OFF)_FPOR(BOREN_BOR0 & PWRTEN_OFF & BORV_ZERO_POWER & MCLRE_ON)_FICD(BKBUG_OFF & COE_OFF & ICS_PGx2)_FDS( DSWDTPS_DSWDTPS_F & DSBOR_OFF & DSWDTEN_OFF & RTCCREF_OFF & DSWDTOSC_LPRC & DSWDTPS_DSWDTPS_8)int main(void){fn_Delay_Sec(1);.RTCC_timeSet_and_AlARMSet();.[fn_Init_I2C();[fn_Read_I2C()]//I2C初始化fn_Read_I2C();[fn_UART_Send_Packet()]//从I2C传感器读取值;RCON=0x0000;重置控制寄存器=0 DSWSRC=0x0000;深睡眠唤醒上位寄存器=0 DSCON=0 x0000;深睡眠控制寄存器=0 DSCON=0 DSCON=0 DSCONbits.DSEN=1;睡眠Nop();Nop();Nop();Sleep();Sleep();睡眠返回0;}------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------n通过UART发送一些示例文本,如“Hello”,控制器从深度睡眠中醒来,将数据传送到UART,然后返回深度睡眠。但是如果我添加I2C函数,控制器只发送一次数据。有人能帮我解决这个问题吗?

回帖(2)

杨晓健

2019-10-28 09:53:08
当我使用PIC24F16KA102时,如果SENDSEMCUM进入睡眠后,如果存在NOP()指令,则没有深度休眠模式。请检查它。艾伯特
举报

李昕萌

2019-10-28 10:05:22
你好,艾尔宾,谢谢你的回复,我检查了数据表(第102页)。他们在这里提到过这样的事情--------------------------------- 5。通过设置DSEN位(DSCON & lt;15和gt)来启用深度休眠模式。6。通过发出3个NOP命令,然后再输入一个pWRSAV 0指令,进入深度睡眠模式。只要设置了DSEN位,DSWAKE寄存器中的所有位都将自动清除。----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------当前睡眠消耗为0.2mA&深度睡眠为0.06mA。所以我认为控制器正在进入深度睡眠状态。然而,我解决了深度睡眠模式下的I2C问题。再次感谢您的回复。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分