Например TDA7294

Форум РадиоКот • Просмотр темы - Некорректный ответ от SHT21
Форум РадиоКот
Здесь можно немножко помяукать :)



Текущее время: Вт окт 27, 2020 06:26:33

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 12 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: Некорректный ответ от SHT21
СообщениеДобавлено: Пт ноя 01, 2019 16:08:49 
Нашел транзистор. Понюхал.

Карма: 3
Рейтинг сообщений: 14
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 168
Откуда: Барнаул
Рейтинг сообщения: 0
Всем доброго здоровья.
Столкнулся с проблемой и не вижу где же я ошибся. Прошу помочь подсказать кто может:)
Суть в следующем, есть МК Атемега32(по сути не важно какая) и датчик влажности/температуры SHT21. Пытаюсь подружить их по шине I2C. проверяю аботу в протеусе 8 версии. и вот тут получаю ошибки в чтении с датчика.
Ниже участок кода для работы с I2C


Запускаю в протеусе и смотрю в I2C дебаггер, от него получаю такую картину:
см вложение.

Как видно из скрина, то ответы от датчика идут через один.
ответ 95 и 12 - корректный
следом за этим идут данные 12 и 12 - и это уже бред. и так по кругу.
Где то есть ошибка, вопрос где? прошу помочь

Добавлено after 2 hours 27 minutes 7 seconds:
Опытным путем, пришел к выводу что проблема где то тут



Вложения:
Безымянный.jpg [124.53 KiB]
Скачиваний: 160

_________________
Я все еще учусь, и ох как тяжело это дается
Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Пт ноя 01, 2019 16:59:11 
Сверлит текстолит когтями

Карма: 2
Рейтинг сообщений: 275
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1152
Рейтинг сообщения: 0
Ну а если задержку на 1 с раскомментировать - работает как надо?


Вернуться наверх
 
JLCPCB, всего $2 за прототип печатной платы! Цвет - любой!

Отличное качество, подтвержденное более чем 600,000 пользователей! Более 10,000 заказов в день.

Зарегистрируйтесь и получите два купона по 5$ каждый:https://jlcpcb.com/quote

Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Пт ноя 01, 2019 17:44:31 
Опытный кот

Карма: 14
Рейтинг сообщений: 106
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 712
Рейтинг сообщения: 0
Попробуйте так
Код:
//Функция чтения с шины TWI (I2C) ПОСЛЕДНЕГО БАЙТА
unsigned char I2C_ReadLastByte(void)
{
   TWCR &= (~(1<<(TWEA)));
   TWCR |= (1<<TWINT)|(1<<TWEN);//включим прием данных
   while(!(TWCR&(1<<TWINT)));//подождем пока установится TWIN
   return TWDR;
}


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Шестое юбилейное мероприятие в процессе
Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Пт ноя 01, 2019 18:00:45 
Нашел транзистор. Понюхал.

Карма: 3
Рейтинг сообщений: 14
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 168
Откуда: Барнаул
Рейтинг сообщения: 0
Ну а если задержку на 1 с раскомментировать - работает как надо?

Нет, в протеусе она ни на что не влияет. в железе 100 оставлю.

Добавлено after 38 seconds:
Попробуйте так
Код:
//Функция чтения с шины TWI (I2C) ПОСЛЕДНЕГО БАЙТА
unsigned char I2C_ReadLastByte(void)
{
   TWCR &= (~(1<<(TWEA)));
   TWCR |= (1<<TWINT)|(1<<TWEN);//включим прием данных
   while(!(TWCR&(1<<TWINT)));//подождем пока установится TWIN
   return TWDR;
}

Попробовал. Результата нет

Мне почему то кажется что проблема в unsigned char I2C_Read(void), так как если его закоментировать, то в дебагере отображается получение первыйх восьми бит, и все корректно.
Если же закоментировать unsigned char I2C_ReadLastByte(void, то так же пишутся первые 8 бит, но каждый второй запрос с некорректным ответом

Во втором запросе, второй байт почему то попадает на первое место.

_________________
Я все еще учусь, и ох как тяжело это дается


Вернуться наверх
 
Вебинар «STM32L5. Секреты оценки энергопотребления» (05.11.2020)

Компания КОМПЭЛ приглашает 5 ноября принять участие в вебинаре, посвященном первому семейству МК STM32L5 на ядре Cortex-M33. На вебинаре будет рассказано об ошибках при расчете энергопотребления МК с помощью отладки STM32L562E-DK. Отладки STM32L562E-DK будут разыгрываться среди участников. Информация об условиях участия будет озвучена на вебинаре.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Пт ноя 01, 2019 20:37:44 
Сверлит текстолит когтями

Карма: 2
Рейтинг сообщений: 275
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1152
Рейтинг сообщения: 1
А что у вас в I2C_Init(); ?

Добавлено after 26 minutes 57 seconds:
Проблема в Hold Master. Уж не знаю реализован ли в меге clock stretching, читать ДШ некогда уже. Но если будете без hold master отправлять запрос на измерение (I2C_SendByte(0b11110101);), то всё заработает.
А может это и глюк протеуса, т.к. проверял тоже в нём.

Добавлено after 8 minutes 8 seconds:
В ДШ написано, что в no hold master, сенсор должен прислать NACK в ответ на чтение, если данные не готовы. А в протеусе в этом режиме первая передача возвращает ACK, но данные с 0. Модель короче в протеусе походу кривая. Зато дальше так начинает работать. Проверяйте лучше в железе.


Вернуться наверх
 
Управляй таймером с пикосекундным разрешением!

Для систем с цифровым управлением одним из важнейших параметров является разрешение. Чем точнее выполняется генерация и измерение сигналов, тем выше будет качество управления. Это касается таких приложений как источники питания, мощные инверторы, системы освещения, управление электродвигателями и прочие. Специально для ответственных задач компания STMicroelectronics предлагает использовать микроконтроллеры STM32 со встроенным таймером повышенного разрешения HRTIM.

Читать статью>>
Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Сб ноя 02, 2019 17:18:09 
Нашел транзистор. Понюхал.

Карма: 3
Рейтинг сообщений: 14
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 168
Откуда: Барнаул
Рейтинг сообщения: 0
NStorm, в I2C_Init(); у меня следующее:





Сделал, как вы посоветовали, без hold master, и все заработало корректно. проверю позже еще в железе, с hold master, а пока пусть так. Спасибо огромное!

Добавлено after 4 hours 55 minutes 54 seconds:
Так появился новый вопрос по этой же теме.
после того как получили данные от датчика температуры и склеили два байта для получения 16 битного значения, (sht21 отдает значение температуры в 14 битном значении). Согласно даташита нужно произвести вычисления по формуле temp=1*((data*175.72/65536)-46.85)
И вот тут моих знаний не хватает.



При такой записи, на экран выводится только целое значение температуры, без дробей. Логично предположить что нужно изменить тип переменной "temp",на float но в этом случае на экран выводится вообще что попало.
Решения пока не нашел (.

_________________
Я все еще учусь, и ох как тяжело это дается


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Сб ноя 02, 2019 19:07:13 
Опытный кот

Карма: 14
Рейтинг сообщений: 106
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 712
Рейтинг сообщения: 1
densir писал(а):
При такой записи, на экран выводится только целое значение температуры, без дробей. Логично предположить что нужно изменить тип переменной "temp",на float но в этом случае на экран выводится вообще что попало.
Тут надо sprintf сказать что бы float выводил, что увеличит размер кода и sprintf (buffer, "%f", temp);.
Гораздо проще сделать
Код:
   float temp=1*((data*175.72/65536)-46.85);   
   int integer = (int)temp;
   int fractional = (int)(temp*100)%100;// 100 - 2 знака после запятой
   sprintf (buffer, "%1d.%02d", integer, fractional);


Вернуться наверх
 


Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Вс ноя 03, 2019 07:51:39 
Нашел транзистор. Понюхал.

Карма: 3
Рейтинг сообщений: 14
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 168
Откуда: Барнаул
Рейтинг сообщения: 0
Dimon456,
Огромное спасибо. Помогло. Добавил еще одну строку
Код:
fractional=fabs(fractional);

Без нее при отрицательных значених температуры получалась запись типа "-13,-10" вместо "-13,10". Сейчас все отлично! огромное спасибо!

_________________
Я все еще учусь, и ох как тяжело это дается


Вернуться наверх
 
Бытовой пирометр АКИП-9312 – просто удобно!

Диапазон 35 °С ...42°С (температура тела) погрешность 0,3 °С
Диапазон 0 °С ...100°С (бытовая сфера) погрешность 1,0 °С
Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Вс ноя 17, 2019 11:56:11 
Нашел транзистор. Понюхал.

Карма: 3
Рейтинг сообщений: 14
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 168
Откуда: Барнаул
Рейтинг сообщения: 0
Дабы не плодить темы спрошу здесь, все равно эти вопросы по тому же устройству :)

В устройстве имеется многоуровневое меню, с подменю в пунктах. управление будет осуществляться китайским энкодером с кнопкой. Защита от дребезга контактов - программная(имеется счетчик, значение которого инкрементиуются/декрементируется и при достижении некого значения считается что кнопка нажата). так вот при нажатии кнопки возникает такая ситуация, что МК отрабатывает нажатие, переходит в подменю и видя что кнопка все еще нажата проваливается глубже. можно конечно увеличить значение счетчика при котором кнопка дожна срабатывать, но будет складываться впечатление что система тормозит. как можно обойти это? пока в голову ничего не приходит.

_________________
Я все еще учусь, и ох как тяжело это дается


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Вс ноя 17, 2019 16:36:48 
Поставщик валерьянки для Кота

Карма: 16
Рейтинг сообщений: 328
Зарегистрирован: Вт ноя 27, 2007 11:32:06
Сообщений: 2212
Откуда: Tashkent
Рейтинг сообщения: 0
densir писал(а):
как можно обойти это?

Фиксируйте в программе момент перехода от ненажатого к нажатому состоянию кнопки. К примеру смену уровня H->L после прохождения программной фильтрации. Таким образом вы не будете зависеть от каких-либо задержек кроме минимальной задержки подавления дребезга контактов(20-50мс).


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Вс ноя 17, 2019 21:35:29 
Сверлит текстолит когтями

Карма: 2
Рейтинг сообщений: 275
Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 1152
Рейтинг сообщения: 0
densir, ждите "отжатия" кнопки и только потом снова начинайте фиксировать нажатие, с учетом антидребезга аналогично.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Пн ноя 18, 2019 06:07:20 
Нашел транзистор. Понюхал.

Карма: 3
Рейтинг сообщений: 14
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 168
Откуда: Барнаул
Рейтинг сообщения: 0
NStorm,
Как же я сам не сообразил!?
Все гениальное просто. Дописал. Спасибо в очередной раз

_________________
Я все еще учусь, и ох как тяжело это дается


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

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y