尘埃未定

    1. MSP430 I2C通讯的疑问 19/7581 微控制器 MCU 2014-12-17
      弱弱的问一句,结贴怎么操作?
    2. MSP430 I2C通讯的疑问 19/7581 微控制器 MCU 2014-12-17
      本帖最后由 尘埃未定 于 2014-12-17 11:47 编辑 感谢大家的耐心解答!
    3. MSP430 I2C通讯的疑问 19/7581 微控制器 MCU 2014-12-17
      本帖最后由 尘埃未定 于 2014-12-17 11:47 编辑 感谢大家的耐心解答!
    4. MSP430 I2C通讯的疑问 19/7581 微控制器 MCU 2014-12-15
      到现在也没有解决,请问各位有没有什么建议?
    5. MSP430 I2C通讯的疑问 19/7581 微控制器 MCU 2014-12-14
      deweyled 发表于 2014-12-14 14:56 根据你的描述,这个模拟的I2CMaster是可以正常访问 ADS1100和其他一些Slave的,那是不是应该查查你的430实现的I2Cslave是不是有问题?
      这个应该不是吧,因为使用430自带的I2C接口做主机读取这个430的从机就没问题,他们之间就差这个地址的响应脉冲,甚是奇怪
    6. MSP430 I2C通讯的疑问 19/7581 微控制器 MCU 2014-12-14
      有人知道问题出在哪里吗?
    7. MSP430 I2C通讯的疑问 19/7581 微控制器 MCU 2014-12-13
      出问题的地方是 if(WriteByte(0X91) == ACK) ,但是检查了半天,怎么也看不出哪里不对,把程序放到ADS1100上用也没问题。
    8. MSP430 I2C通讯的疑问 19/7581 微控制器 MCU 2014-12-13
      程序如下: #include #define SCL_H  SCL_IN #define SCL_L  SCLPullDown() #define SDA_H  SDA_IN #define SDA_L  SDAPullDown() #define SCL_OUT  P1DIR |= BIT6 #define SDA_OUT  P1DIR |= BIT7 #define SDA_IN   P1DIR &= ~BIT7 #define SCL_IN   P1DIR &= ~BIT6 #define SDA_VAL  P1IN & BIT7 #define SCL_VAL  P1IN & BIT6 #define ACK  0X00 #define NACK 0X01 #define ADSADDRESS 0X01 void InitializeClock(); void Start(); void Stop(); unsigned char WriteByte(unsigned char command); unsigned char ReadByte(); unsigned char CheckACK(); void MACK(); void NMACK(); void Write1(); void Write0(); void SDAPullDown(); void SCLPullDown(); void UartRegCfg(); void UartGpioCfg(); void UartInit(); void UARTPutChar(unsigned char cTX); void UARTPutstring( char *str); void main(void) {         volatile float voltage = 0;         volatile unsigned char MSB, LSB, parameters;         volatile unsigned int msb, lsb;         volatile char VOL[4];         volatile unsigned int vol;         UartInit();         WDTCTL = WDTPW | WDTHOLD;        // Stop watchdog timer         InitializeClock();         while(1) {                 Start();                 if(WriteByte(0X91) == ACK) {                         MSB =ReadByte();                         MACK();                         LSB = ReadByte();                         NMACK();                         Stop();                 }                 _delay_cycles(800000);         } } void InitializeClock(){         BCSCTL1 = CALBC1_8MHZ;         DCOCTL = CALDCO_8MHZ; } void Start() {         SDA_H;         _delay_cycles(100);         SCL_H;         _delay_cycles(100);         SDA_L;         _delay_cycles(100);         SCL_L;         _delay_cycles(100); } void Stop() {         SDA_L;         _delay_cycles(100);         SCL_H;         _delay_cycles(100);         SDA_H;         _delay_cycles(100);         SCL_L;         _delay_cycles(100); } unsigned char WriteByte(unsigned char command) {         unsigned char temp, count, ACKFlag;         for (count = 8; count > 0; count--) {                 temp = command & 0x80;                 if (temp)                         Write1();                 else                         Write0();                 command
    9. MSP430 I2C通讯的疑问 19/7581 微控制器 MCU 2014-12-13
      deweyled 发表于 2014-12-12 23:32 I2C总线在空闲的时候应该为高的吧?你量一下硬件I2C的波形看看。
      请版主看第一个图,地址发送完毕后,SDA是被从机拉低了,但是响应位的SCL却丢失了一个脉冲,这个脉冲程序中我是有的。在请看第二个图,地址不变,我将最后一位读指令换成写指令,从机就有了响应,下图比上图多一个脉冲。
    10. MSP430 I2C通讯的疑问 19/7581 微控制器 MCU 2014-12-13
      这个程序之前用在ADS1100上没有问题,将主函数略加修改用在SHT21和CPS131气压传感器上也没有问题,但是不知为何在做I2C从机的MSP430上却不行,波形上在地址的响应上少了一个脉冲,但是程序中SCL是产生了9个,而地址这里却只出现了8个脉冲,如果我将地址有意写错,SCL丢失的脉冲就出来了,知识SDA维持在高电平而已。不明白用在ADS1100上的程序为什么用在MSP430上就不对,如果我在程序中添加一个脉冲这里就对了,但是程序中的脉冲个数始终和波形的脉冲个数对不上。ADS1100和MSP430的从机地址都是0x48。

最近访客

< 1/1 >

统计信息

已有6人来访过

  • 芯积分:--
  • 好友:--
  • 主题:1
  • 回复:10

留言

你需要登录后才可以留言 登录 | 注册


现在还没有留言