Easyelectronics.ru

Электроника для всех
Текущее время: 29 окт 2020, 22:10

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Чтение неск.байт по I2C
СообщениеДобавлено: 20 июл 2012, 23:04 
Заглядывает иногда

Зарегистрирован: 21 окт 2011, 09:25
Сообщения: 71
Откуда: Уфа
Подскажите кодом, как правильно считать несколько байт по i2c. Как один прочитать я понял и сделал, а вот 2 и более не понятно. кусок кода:
Код:
...
/* Send RESTART condition */
I2C_GenerateSTART(I2C2, ENABLE);
/* Test on EV5 and clear it */
while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
/* Send TMP100 address for read */
I2C_Send7bitAddress(I2C2, 0x91, I2C_Direction_Receiver);
//while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));

/* Test on EV6 and clear it */
while(!I2C_CheckEvent(I2C2,I2C_EVENT_MASTER_BYTE_RECEIVED));

tmpH=I2C_ReceiveData(I2C2);
I2C_AcknowledgeConfig(I2C2, DISABLE);

/* Send STOP Condition */
I2C_GenerateSTOP(I2C2, ENABLE);
return tmpH;
....


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чтение неск.байт по I2C
СообщениеДобавлено: 21 июл 2012, 06:49 
Старожил
Аватара пользователя

Зарегистрирован: 05 май 2010, 11:56
Сообщения: 1083
Откуда: Иркутск
Ну, судя по всему, читай в массив функцией I2C_ReceiveData(I2C2), и ставь акноледжи I2C_AcknowledgeConfig(I2C2, ENABLE) после каждого байта, кроме последнего, там I2C_AcknowledgeConfig(I2C2, DISABLE) и I2C_GenerateSTOP(I2C2, ENABLE).

_________________
Форум-не место для политических дебатов. Место им в толчке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чтение неск.байт по I2C
СообщениеДобавлено: 21 июл 2012, 10:49 
Заглядывает иногда

Зарегистрирован: 21 окт 2011, 09:25
Сообщения: 71
Откуда: Уфа
ТАк попробовал, но странно всеравно, второй байт постоянно нулю равен, хотя там должно дыть значение дес сост температуры датчика.

Код:
/* Send RESTART condition */
   I2C_GenerateSTART(I2C2, ENABLE);
   /* Test on EV5 and clear it */
   while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_MODE_SELECT));
   /* Send TMP100 address for read */
   I2C_Send7bitAddress(I2C2, 0x91, I2C_Direction_Receiver);
   //while(!I2C_CheckEvent(I2C2, I2C_EVENT_MASTER_RECEIVER_MODE_SELECTED));

    /* Test on EV6 and clear it */
   while(!I2C_CheckEvent(I2C2,I2C_EVENT_MASTER_BYTE_RECEIVED));

   tmpH=I2C_ReceiveData(I2C2);
   I2C_AcknowledgeConfig(I2C2, ENABLE);


   tmpL=I2C_ReceiveData(I2C2);
    I2C_AcknowledgeConfig(I2C2, DISABLE);

    /* Send STOP Condition */
    I2C_GenerateSTOP(I2C2, ENABLE);
    temp = (((uint16_t)(tmpH))<<8)|(((uint16_t)(tmpL))>>8);
    return temp;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Чтение неск.байт по I2C
СообщениеДобавлено: 22 июл 2012, 00:40 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 14 июл 2011, 01:36
Сообщения: 72
Откуда: Москва
Derspiwak писал(а):
Ну, судя по всему, читай в массив функцией I2C_ReceiveData(I2C2), и ставь акноледжи I2C_AcknowledgeConfig(I2C2, ENABLE) после каждого байта, кроме последнего, там I2C_AcknowledgeConfig(I2C2, DISABLE) и I2C_GenerateSTOP(I2C2, ENABLE).

Поправка: перед приемом первого байта необходимо выполнить I2C_AcknowledgeConfig(I2C2, ENABLE) и перед приемом последнего I2C_AcknowledgeConfig(I2C2, DISABLE)
см. RM0008 пункт 26.3.3 Figure 273. Method 2: transfer sequence diagram for master receiver when N>2


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB