我用单片机按照iic的时序往bq27541的ccgain和ccdelta写数据的时候,为什么会有时候写2次呢,我单片机明明只写了一次!
Cheng.W:
两次都是完全相同的数据么?bq27541是属于从设备。
MCU程序如何执行?
gang yang2:
回复 Cheng.W:
@wang cheng
我是按照ti给的规格书来操作的,我只要把
对应的数据写到这几个dataflash的位置即可实现温度和电流,电压校准,
按照ti给的读写Dataflash时序去 写对应的程序即可!
但是现在遇到了点问题,就是校准电压的时候,我明明是校准的5mv,偏偏我自己用单片机校准10mv,说明执行了2次校准,但是我不知道这2次是怎么来的!
zhoucan bi:
你用的是什么型号单片机呢?能提供你的IIC程序么?
gang yang2:
回复 zhoucan bi:
怎么提供,我自己琢磨好久才弄出来的,你无条件的向我索要,我自己用上位机做的协议,发命令,然后做校准
zhoucan bi:
回复 gang yang2:
您是用模拟IIC吗?延时多少才可以呢?
gang yang2:
回复 zhoucan bi:
跟延迟没关系吧,我最快能做到80khz,保证稳定,还有读写dataflash跟读寄存器是一样的。
zhoucan bi:
回复 gang yang2:
void IIC27541_Start1(void){ SDA_OUT();
IIC_SDA=1; IIC_SCL=1; delay_us(56); IIC_SDA=0;//START:when CLK is high,DATA change form high to low delay_us(56); IIC_SCL=0;//
delay_us(56);}
void IIC27541_Send_Byte1(u8 txd){ u8 t; SDA_OUT(); IIC_SCL=0;//ÀµÍʱÖÓ¿ªÊ¼Êý¾Ý´«Êä for(t=0;t<8;t++) { IIC_SDA=(txd&0x80)>>7; txd<<=1; delay_us(56); IIC_SCL=1; delay_us(56); IIC_SCL=0; // delay_us(40); } }
u8 IIC27541_Wait_Ack1(void){ u16 ucErrTime=0; SDA_IN(); //SDAÉèÖÃΪÊäÈë IIC_SDA=1;delay_us(1); IIC_SCL=1;delay_us(1); while(READ_SDA) { ucErrTime++; if(ucErrTime>2500) { IIC_Stop(); return 1; } } IIC_SCL=0;//ʱÖÓÊä³ö0 return 0; }
先开始 IIC27541_Start1();
再发送 IIC27541_Send_Byte1(0xaa);
等应答 IIC27541_Wait_Ack1(void);
结果是一直没应答 READ_SDA一直没变低电平!
TI中文支持网
对应的数据写到这几个dataflash的位置即可实现温度和电流,电压校准,

