Отговори на тема  [ 5 мнения ] 
I2C C30 pic24 problem 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 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 7:46 pm
Профил
Ранг: Почетен член
Ранг: Почетен член

Регистриран на: Съб Окт 30, 2004 11:19 pm
Мнения: 609
Мнение 
в ератата го има като бъг

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

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


Пет Юли 02, 2010 8:42 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
Хм, не мисля, че е от контролера. Все пак той си изпраща всички данни ОК. Отсрещната страна (сензорът) не отговаря коректно.
Би ли обяснил по-подробно защо мислиш, че е от контролера?

_________________
Хайде де!


Пон Юли 05, 2010 10:12 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 20, 2005 12:02 pm
Мнения: 9119
Местоположение: Разград
Мнение 
А ти смяташ че TCN-a е проблема? Аз пък такава ситуация никога не съм имал. Хич да не е доста съм го ползвал.


Пон Юли 05, 2010 4:57 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение Решението
Такааа. Проблемът идваше от това, че TCN75 иска преди да се изпрати втория адресиращ байт с указание за четене, да се изпрати "стоп-" и после "старт-" последователност. Вече всичко си бачка ОК.
Мерси на отзовалите се!

_________________
Хайде де!


Чет Юли 08, 2010 12:43 pm
Профил
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 5 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 2 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни