完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛|
大家好,我最近正在使用PIC18F46K22,但是我不能从从属设备(VEML6040)接收任何数据,当我调试时,它总是停在(PiL1BITS.SSP1IF=0);在我设置SEN到1之后。我真的不知道问题是什么。请你帮帮我好吗?谢谢。这是我的密码。(VEML6040设备地址:10H,配置寄存器地址:100H,所有寄存器为16位)空写2{(){SSP1CON1BIT。SSPV=0;//启动条件,无溢出SSP1CON2BIT。SEN=1;//START条件,(SEN将被HW清除),同时(PIR1BIT.SSP1IF=0);/ /等待传输完成。Ir1位。SSP1IF=0;SSP1BUF=0x20;//TX设备地址10H+写入位'0';Pr1位.SSP1IF=0;SSP1IF=0;SSP1BUF=0x00;/ /配置寄存器地址(PiR1位.SSP1IF=0);Pr1位. SSP1IF=0;SSP1BUF=0x00;/ /高8位数据,320毫秒积分时间(PiR1位. SSP1IF=0);PIR1SP1BUF=0x30;/ /低8位数据(Pr1位.SSP1IF=0);SSP1IF=0;SSP1CON2BIT。笔=1;而(PrI1位。SSP1IF=0);/等待SSP1IF=0;} Unt1616T ReADI2c(Uti8NT通道){UTIN 16T T光;UIT88T LSB=0;UIT88T MSB=0;SSP1CON2BIT。SEN=1;//s。SSP1IF=0;Sp1IF=0);SIP1BIF=0;SSP1BUF=0x20;//写地址(Pr1位.SSP1IF=0);PSP1IF=0;SSP1BUF=信道;//红色寄存器地址(/Pr1位.SSP1IF=0);Pr1位。SSP1IF=0;SSP1CON2BIT。RSEN=1;而(PrI1位。SSP1IF=0);Pr1位。SSP1IF=0;SSP1BUF=0x21;TART条件(Pr1位)=(0);SIP1IF=0;SSP1CON2BIT。RCEN=1;而(pRI1比特。SSP1IF=0);LSB=SSP1BUF;光=(MSB & lt;和8;)8 LSB;而(pRI1比特。SSP1IF=0);Pr1比特。SSP1IF=0;SSP1CON2BIT。AcKEN=1;而(PiR1位。SSP1IF=0);Pr1位。SSP1IF=0;SSP1C;//TX的设备地址+读取位,同时(Pl1位)SSP1IFON 2BIT。PEN=1;而(PrI1BITS.SSP1IF=0);PrI1SITS.SSP1IF=0;返回光;}(1){ReIeI2Co();RyLoad=Redi2C(0x08);GyLoad=Redi2C(0x09);ByLoe= Redi2C(0xA0);WyLoe= Redi2C(0xB0);γ-DelaysMs(1000);}非常感谢!!!!
以上来自于百度翻译 以下为原文 Hi everyone, I'm working with pic18f46k22 recently, but I cannot receive any data from the slave device(veml6040) and when I debug, it always stop at while(PIR1bits.SSP1IF==0); after I set SEN to 1. I really do not know what the problem is. Would you please help me? Thanks in advance. here's my code. (veml6040 device address:10h, configure register address: 00h, all registers are 16bits) void writeI2C() { SSP1CON1bits.SSPOV=0; // Start condition, NO overflow SSP1CON2bits.SEN=1; // start condition, (SEN will be cleared by Hw) while(PIR1bits.SSP1IF==0); //waiting for the completion of transmission PIR1bits.SSP1IF=0; SSP1BUF=0x20; //tx device address 10h + write bit'0' while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1BUF=0x00; //configure register address while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1BUF=0x00; //high 8 bits of data, 320 ms integration time while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1BUF=0x30; //low 8 bits of data while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1CON2bits.PEN=1; while(PIR1bits.SSP1IF==0); //wait for the stop interrupt PIR1bits.SSP1IF=0; } uint16_t readI2C(uint8_t channel) { uint16_t light; uint8_t l*** = 0; uint8_t m*** = 0 ; SSP1CON2bits.SEN=1; // Start condition while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1BUF=0x20; //write address while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1BUF=channel; //red register address while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1CON2bits.RSEN=1; while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1BUF=0x21; //tx of device address + read bit while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1CON2bits.RCEN=1; while(PIR1bits.SSP1IF==0); l***=SSP1BUF; m***=SSP1BUF; light=(m***<<8)|l***; while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1CON2bits.ACKEN=1; while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; SSP1CON2bits.PEN=1; while(PIR1bits.SSP1IF==0); PIR1bits.SSP1IF=0; return light; } while (1) { writeI2C(); r_light=readI2C(0x08); g_light=readI2C(0x09); b_light=readI2C(0xA0); w_light=readI2C(0xB0); __delay_ms(1000); } Thank you very much!!! |
|
相关推荐
3个回答
|
|
|
您没有显示您的启动代码。您是否已经将SDA和SCL设置为数字模式(使用ANSELC)?在SCL和SDA上有上拉电阻吗?
以上来自于百度翻译 以下为原文 You did not show your startup code. Have you set SDA and SCL to digital mode (using ANSELC)? Do you have pullup resistors on SCL and SDA? |
|
|
|
|
|
HI,我用MCC做初始化和(空){I2C1YObj.pTrHead=I2C1YTr.Que};I2C1YObj.pTrTe= I2C1YTrSeQue2;I2C1YObj.TrStasu.S.Value= TRUE;I2C1YObjut.TrStUST.S.Pult= FALSE;I2C1YObj.I2CIERROR=0;/SMP标准速度;CKE禁用;SSP1STAT= 0x80;//SSPN使能;CKP空闲:Low,Active:高;SSPM FoC/4SSPXADADII2C;SSP1CON1= 0x28;/SBCDE禁用;BOEN禁用;SCIE禁用;PCIE禁用;DHEN禁用;SDAHT 300 NS;AHEN禁用;SSP1CON3= 0x08;/波特率发生器值:SSP1ADAD: 19;SSP1ADAD= 0x13;/ /清除主中断标志PIP1比特。SSP1IF=0;//启用主中断Py1BIT。SSP1IE=1;} Pin管理器初始化(空隙){/**LATX寄存器*/List= 0x00;LATD= 0x00;LATA= 0x00;LATB= 0x00;LATC= 0x00;/**TrISX寄存器*/TrISe= 0x07;TrISA=0xFF;TrISB= 0xFF;TrISC= 0xBF;TrISD= 0xFF;/**ANSELX寄存器*/ANSELC= 0x24;ANSELB=0x3F;ANSELD=0xFF;ANSELE=0x07;ANSELLA=0x2F;/**WPUX寄存器*/WPUB= 0xFF;ItNCO2BITS.NRBPU=0;}在SDA和SCL上有上拉电阻。
以上来自于百度翻译 以下为原文 Hi, I used the MCC to do the initialization and pin management. void I2C1_Initialize(void) { i2c1_object.pTrHead = i2c1_tr_queue; i2c1_object.pTrTail = i2c1_tr_queue; i2c1_object.trStatus.s.empty = true; i2c1_object.trStatus.s.full = false; i2c1_object.i2cErrors = 0; // SMP Standard Speed; CKE disabled; SSP1STAT = 0x80; // SSPEN enabled; WCOL no_collision; CKP Idle:Low, Active:High; SSPM FOSC/4_SSPxADD_I2C; SSPOV no_overflow; SSP1CON1 = 0x28; // SBCDE disabled; BOEN disabled; SCIE disabled; PCIE disabled; DHEN disabled; SDAHT 300ns; AHEN disabled; SSP1CON3 = 0x08; // Baud Rate Generator Value: SSP1ADD 19; SSP1ADD = 0x13; // clear the master interrupt flag PIR1bits.SSP1IF = 0; // enable the master interrupt PIE1bits.SSP1IE = 1; } void PIN_MANAGER_Initialize(void) { /** LATx registers */ LATE = 0x00; LATD = 0x00; LATA = 0x00; LATB = 0x00; LATC = 0x00; /** TRISx registers */ TRISE = 0x07; TRISA = 0xFF; TRISB = 0xFF; TRISC = 0xBF; TRISD = 0xFF; /** ANSELx registers */ ANSELC = 0x24; ANSELB = 0x3F; ANSELD = 0xFF; ANSELE = 0x07; ANSELA = 0x2F; /** WPUx registers */ WPUB = 0xFF; INTCON2bits.nRBPU = 0; } I had pull up resistance on SDA and SCL. |
|
|
|
|
|
你有示波器吗?你能观察到当设置SEN位时SDA和SCL会发生什么吗?在设置SEN之前,它们都应该是高的,并且当设置SEN时,它们都应该切换为低。如果您使用调试器(PK3,ICD3)单步,那么您甚至可以用一个表来检查这一点。
以上来自于百度翻译 以下为原文 Do you have an oscilloscope? Can you observe what happens to SDA and SCL when you set the SEN bit? They should both be high before you set SEN, and they should both switch low when you set SEN. If you're single stepping with a debugger (PK3, ICD3), then you could even check this with just a meter. |
|
|
|
|
只有小组成员才能发言,加入小组>>
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
485 浏览 0 评论
5806 浏览 9 评论
2346 浏览 8 评论
2234 浏览 10 评论
请问是否能把一个ADC值转换成两个字节用来设置PWM占空比?
3540 浏览 3 评论
1144浏览 1评论
有偿咨询,关于MPLAB X IPE烧录PIC32MX所遇到的问题
1114浏览 1评论
我是Microchip 的代理商,有PIC16F1829T-I/SS 技术问题可以咨询我,微信:A-chip-Ti
882浏览 1评论
MPLAB X IDE V6.25版本怎么对bootloader和应用程序进行烧录
485浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-8 19:37 , Processed in 0.629439 second(s), Total 45, Slave 38 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖
2116