Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

I2C C30 pic24 problem
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=7963
Страница 1 от 1

Автор:  dan [ Пет Юли 02, 2010 7:46 pm ]
Заглавие:  I2C C30 pic24 problem

Здравейте!
Опитвам да свържа pic24FJ32GA004 с TCN75AVOA с хардуерния I2C.
Гледам на осцилоскоп данните. Контролера праща всичко както трябва, сензорът отговаря с ACK при всеки байт, но като се стигне до данните изпраща само единици.
Ето го кода:
Код:
void config_i2c1_write(){
I2C1CON=0b1000001000110000;
I2C1BRG=39;
IdleI2C1();

StartI2C1();
  /* Wait till Start sequence is completed */
while(I2C1CONbits.SEN);
  /* Clear interrupt flag */
  IFS1bits.MI2C1IF = 0;

/*send address for write*/
MasterWriteI2C1(0x9e);//9f
while(I2C1STATbits.TBF);  // 8 clock cycles
  while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
  IFS1bits.MI2C1IF = 0;     // Clear interrupt flag


/*send pointer*/
MasterWriteI2C1(0x00);//9f
while(I2C1STATbits.TBF);  // 8 clock cycles
  while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
  IFS1bits.MI2C1IF = 0;     // Clear interrupt flag

/*send adress for read*/
MasterWriteI2C1(0x9f);//9f
while(I2C1STATbits.TBF);  // 8 clock cycles
  while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
  IFS1bits.MI2C1IF = 0;     // Clear interrupt flag


value = MasterReadI2C1();
while(I2C1STATbits.RBF);  // 8 clock cycles
  while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
  IFS1bits.MI2C1IF = 0;     // Clear interrupt flag

     

AckI2C1();
  while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
  IFS1bits.MI2C1IF = 0;     // Clear interrupt flag



value = MasterReadI2C1();
while(I2C1STATbits.RBF);  // 8 clock cycles
  while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
  IFS1bits.MI2C1IF = 0;     // Clear interrupt flag




NotAckI2C1();
  while(!IFS1bits.MI2C1IF); // Wait for 9th clock cycle
  IFS1bits.MI2C1IF = 0;     // Clear interrupt flag



return;
}

Ето и изходния сигнал:
Изображение
http://img188.imageshack.us/img188/5918/comm2e.png

Някой може ли да окаже братска помощ?
п.с. да уточня: към А0-А2 съм подал 3.3 V.

Автор:  Ники [ Пет Юли 02, 2010 8:42 pm ]
Заглавие: 

в ератата го има като бъг

и аз за по лесно си взех за опити от комет без да чета ератите и бях изумен от бъг листа в последствие

за следващи опити минах на серия GA104, пусната с откоригирани доста бъгове(по ерата)

Автор:  dan [ Пон Юли 05, 2010 10:12 am ]
Заглавие: 

Хм, не мисля, че е от контролера. Все пак той си изпраща всички данни ОК. Отсрещната страна (сензорът) не отговаря коректно.
Би ли обяснил по-подробно защо мислиш, че е от контролера?

Автор:  Cekins [ Пон Юли 05, 2010 4:57 pm ]
Заглавие: 

А ти смяташ че TCN-a е проблема? Аз пък такава ситуация никога не съм имал. Хич да не е доста съм го ползвал.

Автор:  dan [ Чет Юли 08, 2010 12:43 pm ]
Заглавие:  Решението

Такааа. Проблемът идваше от това, че TCN75 иска преди да се изпрати втория адресиращ байт с указание за четене, да се изпрати "стоп-" и после "старт-" последователност. Вече всичко си бачка ОК.
Мерси на отзовалите се!

Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/