=GM= 0 17 июня, 2011 Опубликовано 17 июня, 2011 · Жалоба Почти 16КБ, не многовато ли на асме? Сколько в итоге памяти тратится на датчик bmp085? А что за тип дисплея у вас и какой там контроллер и система команд? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LexsLavrov 0 17 июня, 2011 Опубликовано 17 июня, 2011 · Жалоба Еще как много! Правда я поковырялся в том что компилятор родил и в своем - вынес кучу всякого ненужного, нужное оптимизировал - получилось 13 кило. Не слишком понятно что значит "тратится на датчик"? Если вы об обмене с датчиком - то можно сказать нифига. Я пользую аппаратный I2C. Еще у меня есть наворот - при каждом ожидании ответа по I2C крутится софтовый таймер - если не ответило за 100 мс - случается таймаут. В данной прошивке это не нужно и поэтому по таймауту программа просто останавливается и врубает сигнальный светодиод. (Это произойдет если датчик сдохнет/зависнет). Кстати в другой прошивке, где идет работа с 8 штуками I2C датчиками температуры - их можно втыкать и отключать прямо во время работы, и ничего, все корректно :) Есть две основные жрущие части: вычисления (почти секунду считает на 3 МГц) и протокол обмена с компом. Он хитрый. Комп посылает пакет, два байта : адрес устройства и код команды. Устройство обязано это вернуть в виде текстового сообщения что устройство [адрес] приняло команду [код]. Потом комп (если все хорошо) шлет такой же пакет, то там передается код команды, которая означает "выполнить". Устройство выполняет команду. В данном случае: показывает константы/показывает UT и UP/показывает версию прошивки/делает самосброс (rjmp RESET :) ) Протокол, разумеется, может быть значительно упрощен в плоть до тупого посылания пачки байт из датчика на комп раз в какое-то время. Просто это специально разработанный протокол для системы управления различными устройствами на радиотелескопе той шарашки, где я работаю (http://www.ipa.nw.ru/PAGE/rusipa.htm). Устройств - куча. Длина проводов - без малого километр. Интерфейс - RS485 на злых опторазвязанных драйверах... Я на этом диссер защитил :) Дисплей WINSTAR WG12864E-WGH-TZ http://www.winstar.com.tw/products_detail_...ru&ProID=52 Насчет какой контроллер дисплея - не знаю, но система команд такая же как и у большинства дисплеев. Я использовал подпрограммы, написанные мной ранее для текстовых дисплеев МЭЛТ и Data International - работают. Только тут на самом деле ДВА контроллера - каждый рулит своей половинкой дисплея 64х64 - приходится еще шевелить CS1 и CS2, но это не проблема. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chirik8807 0 28 июня, 2011 Опубликовано 28 июня, 2011 · Жалоба Я тоже использую этот датчик, повоевал немного и получил правдивые значение давления- 101307 Па (759мм рт ст). Использую готовую библиотеку BMP085_SMD500_API. :rolleyes: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chirik8807 0 30 июня, 2011 Опубликовано 30 июня, 2011 · Жалоба А можно узнать, кто какой точности добился? У меня значение прыгает +-10 Па. Хочу его использовать для измерения высоты, а это по высоте почти 1 метр. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LexsLavrov 0 1 июля, 2011 Опубликовано 1 июля, 2011 · Жалоба А можно узнать, кто какой точности добился? У меня значение прыгает +-10 Па. Хочу его использовать для измерения высоты, а это по высоте почти 1 метр. Древняя мудрость гласит о том что чтобы измерить точность одного прибора - надо иметь другой, раз в 10 точнее. У меня такого нет. Но я могу поделится с вами файликом, где датчик в течение почти что суток раз в минуту замеряет давление и шлет в комп, комп считает и кладет в текст, текст кладется в эксель и вуаля - файл ниже (для нагляднусти еще гиф). О точности судите сами (зашумленность сигнала ничем кроме шума датчика не определяется). Режим oss=3 - максимальная точность. (Кстати проверьте как у вас сконфигурирован датчик) У меня - навскидку - +-10 и не пахнет. Меньше. Данные все в файле - можете на наклонном участке забубенить линейную аппроксимацию, вычесть этот тренд - получите в чистом виде шум датчика. Кстати увеличение точности в датчике реализуется тупо тем, что он осредняет 8 измерений, и потом отдает вам то что получилось. Можно осреднять и дальше, но уже на компе - даташит заявляет что можно добится +- 0,1 м. ИМХО - на правду похоже. 0531_bar.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chirik8807 0 4 июля, 2011 Опубликовано 4 июля, 2011 (изменено) · Жалоба У Bosch есть новый датчик bmp180, у него заявленная точность +-1 м. (шумы 17см) http://www.bosch-sensortec.com/content/lan...80-DS000-07.pdf Изменено 4 июля, 2011 пользователем chirik Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LexsLavrov 0 4 июля, 2011 Опубликовано 4 июля, 2011 · Жалоба Да, насчет шумов - конденсатор рядом с датчиком по питанию поставили? Причем надо именно РЯДОМ - как можно ближе. Мой опыт показывает что разные датчики, подключенные по I2C очень не любят когда конденсатора нет или он не рядом. Причем даже 1 см - это уже не рядом. Когда экспериментаровал с ad7416 - без конденсатора показания скакали градусов на 5, это при том что разрешение у него 0.25. А с конденсатором - шум на млядший разряд и только. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
chirik8807 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Поставил кондер поближе, кажется шумов стало по меньше. Записал эксперимент хождение по этажам. http://20ms_step.JPG Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Не могу найти ошибку. До 25 С давление высчитывается правильно , но после 25 С начинается черти что. При тех значенниях , что указаны в коде - давление должно быть 750 мм.рт.ст., а выдает 746 HELP ! ____VersionREL__2.BMP_03_05_11_Real_data_sensor.rar ____VersionREL__2.BMP_03_05_11_Real_data_sensor.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LexsLavrov 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Не могу найти ошибку. До 25 С давление высчитывается правильно , но после 25 С начинается черти что. При тех значенниях , что указаны в коде - давление должно быть 750 мм.рт.ст., а выдает 746 HELP ! А что это там у вас в комментариях про ошибку в DS написано? Нет никаких ошибок. Считать надо так, как указано в DS. Еще есть в зарубежном инете некий pdf (я ща в отпуске, а ссылки все на работе), где один человек очень обстоятельно перевел все эти формулы для вычисления в float - типа точнее выходит. Формулы выглядят совершенно по-другому и для вычислений на контроллере не пригодны. Но как альтернативный способ вычисления на компе (для проверки) как раз самое то. Помнится мне что яндексом я его искал недолго, по каким-то весьма очевидным запросам. А вот собственно и ссылочка http://wmrx00.sourceforge.net/Arduino/BMP085-Calcs.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба А что это там у вас в комментариях про ошибку в DS написано? Нет никаких ошибок. Считать надо так, как указано в DS. Еще есть в зарубежном инете некий pdf (я ща в отпуске, а ссылки все на работе), где один человек очень обстоятельно перевел все эти формулы для вычисления в float - типа точнее выходит. Формулы выглядят совершенно по-другому и для вычислений на контроллере не пригодны. Но как альтернативный способ вычисления на компе (для проверки) как раз самое то. Помнится мне что яндексом я его искал недолго, по каким-то весьма очевидным запросам. А вот собственно и ссылочка http://wmrx00.sourceforge.net/Arduino/BMP085-Calcs.pdf Вы несколько не поняли. Я написал этот код исходя из формул в DS и с их примером. Подставьте значения из DS и увидите , что всё полностью совпадает с их значениями, но на практике при температуре свыше 25C (реальной температуре и с реально работающем датчиком в железе) начинается чахарда с давлением. При 24.9 и ниже будет показывать давление один в один с имеющимися у меня реальными данными и на данный момент времени и именно для того места где я нахожусь. Я не могу понять , что же происходит после 25С. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LexsLavrov 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба Я не могу понять , что же происходит после 25С. В документе, ссылку на который я привел, одна из служебных констант, которая необходима для термокомпенсации значения давления, определяется как s = T - 25. Не трудно догадаться, что Т - истинное значение температуры. Причем надо полагать что эти формулы - они составлены с тем же СМЫСЛОМ, что и те что в DS. Т.е. физический смысл формул - сохранен. Вообще довольно типична ситуация, когда что-то высчитывается для 25 С, а потом дается поправка на разницу 25 С и текущей температуры. Возвратимся к вашей беде - после 25С что-то не так... Если опять же - смотреть на s = T - 25 то при превышении 25С s изменит свой знак. Других изменений нет. Значит - вероятно что ваш код как-то неверно реагирует на изменение знака поправки. Например, воспринимает значение как unsigned, хотя на самом деле оно совсем даже signed. Внимательно посмотрите PDF - там объясняется откуда берется эта s. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба В документе, ссылку на который я привел, одна из служебных констант, которая необходима для термокомпенсации значения давления, определяется как s = T - 25. Не трудно догадаться, что Т - истинное значение температуры. Причем надо полагать что эти формулы - они составлены с тем же СМЫСЛОМ, что и те что в DS. Т.е. физический смысл формул - сохранен. Вообще довольно типична ситуация, когда что-то высчитывается для 25 С, а потом дается поправка на разницу 25 С и текущей температуры. Возвратимся к вашей беде - после 25С что-то не так... Если опять же - смотреть на s = T - 25 то при превышении 25С s изменит свой знак. Других изменений нет. Значит - вероятно что ваш код как-то неверно реагирует на изменение знака поправки. Например, воспринимает значение как unsigned, хотя на самом деле оно совсем даже signed. Внимательно посмотрите PDF - там объясняется откуда берется эта s. Что меняется знак я вычислил и без pdf, вот именно его то я и не могу найти - где я его потерял :laughing: Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
LexsLavrov 0 8 июля, 2011 Опубликовано 8 июля, 2011 · Жалоба У меня была вроде бы такая же заморочка - немного подвирало в какую-то сторону. Правда я не заметил влияния порога "выше 25С", но просто потому что в последнее время у меня на работе всегда выше 25С :). Я отловил это путем вывода промежуточных значений различных констант и сравнения их со значениями, считаемыми на компьютере (Эксель). Вот к сожалению файлик-то на работе... Не помню на каком конкретно шаге вылезало. Вылечилось тем что в одном месте вызов подпрограммы которая множит unsigned был заменен на умножение signed. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ILYAUL 0 9 июля, 2011 Опубликовано 9 июля, 2011 · Жалоба Нашёл. Немного подвирал сдвиг вправо при вычислении X3 - вот там то и надо учитывать знак. :laughing: Теперь надо ехать на дачу и проверять в железе. Хорошо , что много данных снял заранее -стабильно BMP085.rar Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться