Например TDA7294

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



Текущее время: Вс янв 26, 2020 23:29:06

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


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



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

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


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

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

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



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

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

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


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

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

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

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

Карма: 10
Рейтинг сообщений: 70
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 559
Рейтинг сообщения: 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 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

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

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

Карма: 3
Рейтинг сообщений: 13
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 152
Откуда: Барнаул
Рейтинг сообщения: 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 бит, но каждый второй запрос с некорректным ответом

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

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


Вернуться наверх
 
DC/DC-преобразователи: принципы работы и уникальные решения Maxim Integrated

Что нового можно сказать про DC/DC? Написаны десятки статей, а самостоятельное изготовление преобразователя мощностью от единиц Вт до нескольких кВт даже в домашних условиях не составляет большого труда. Тем не менее, когда речь идет о микро-, или даже нано-ваттах, проектировщик может столкнуться с рядом трудностей. Грамотная схемотехника системы питания не возможна без знания основ работы DC/DC преобразователей. Освежить базовые знания и узнать об особенностях проектирования узлов питания мобильного устройства с оптимальным энергопотреблением можно из следующей статьи.

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

Зарегистрирован: Ср июл 17, 2013 13:55:57
Сообщений: 268
Рейтинг сообщения: 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. Модель короче в протеусе походу кривая. Зато дальше так начинает работать. Проверяйте лучше в железе.


Вернуться наверх
 
Руководство для разработчика приложений на базе STM32WB55

Представив двухъядерные беспроводные микроконтроллеры STM32WB для IoT-приложений, компания STMicroelectronics предлагает разработчикам экосистему, включающую в себя отладочные платы, примеры кода для микроконтроллера, готовое ПО всех уровней и большой массив документации.

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

Карма: 3
Рейтинг сообщений: 13
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 152
Откуда: Барнаул
Рейтинг сообщения: 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 
Вымогатель припоя

Карма: 10
Рейтинг сообщений: 70
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 559
Рейтинг сообщения: 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
Рейтинг сообщений: 13
Зарегистрирован: Ср фев 03, 2010 20:12:15
Сообщений: 152
Откуда: Барнаул
Рейтинг сообщения: 0
Dimon456,
Огромное спасибо. Помогло. Добавил еще одну строку
Код:
fractional=fabs(fractional);

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

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


Вернуться наверх
 
Распродажа паяльных станций ATTEN и аксессуаров!
Индукционная паяльная станция AT315D - 3 977 ₽, станция паяльная AT80D – 2177 ₽, станция паяльная AT936b – 1000 ₽!

Заходите в раздел акции и спецпредложения на сайте prist.ru, покупайте измерительные приборы, инструмент и паяльно-ремонтное оборудование по специальным ценам.
Не в сети
 Заголовок сообщения: Re: Некорректный ответ от SHT21
СообщениеДобавлено: Вс ноя 17, 2019 11:56:11 
Нашел транзистор. Понюхал.

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

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

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


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

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

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


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

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


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

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

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


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

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


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

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


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

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


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