Перейти к содержанию
    

Почти 16КБ, не многовато ли на асме? Сколько в итоге памяти тратится на датчик bmp085? А что за тип дисплея у вас и какой там контроллер и система команд?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Еще как много! Правда я поковырялся в том что компилятор родил и в своем - вынес кучу всякого ненужного, нужное оптимизировал - получилось 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, но это не проблема.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тоже использую этот датчик, повоевал немного и получил правдивые значение давления- 101307 Па (759мм рт ст). Использую готовую библиотеку BMP085_SMD500_API. :rolleyes:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно узнать, кто какой точности добился? У меня значение прыгает +-10 Па. Хочу его использовать для измерения высоты, а это по высоте почти 1 метр.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно узнать, кто какой точности добился? У меня значение прыгает +-10 Па. Хочу его использовать для измерения высоты, а это по высоте почти 1 метр.

 

Древняя мудрость гласит о том что чтобы измерить точность одного прибора - надо иметь другой, раз в 10 точнее. У меня такого нет. Но я могу поделится с вами файликом, где датчик в течение почти что суток раз в минуту замеряет давление и шлет в комп, комп считает и кладет в текст, текст кладется в эксель и вуаля - файл ниже (для нагляднусти еще гиф). О точности судите сами (зашумленность сигнала ничем кроме шума датчика не определяется). Режим oss=3 - максимальная точность. (Кстати проверьте как у вас сконфигурирован датчик) У меня - навскидку - +-10 и не пахнет. Меньше.

Данные все в файле - можете на наклонном участке забубенить линейную аппроксимацию, вычесть этот тренд - получите в чистом виде шум датчика.

 

Кстати увеличение точности в датчике реализуется тупо тем, что он осредняет 8 измерений, и потом отдает вам то что получилось. Можно осреднять и дальше, но уже на компе - даташит заявляет что можно добится +- 0,1 м. ИМХО - на правду похоже.

0531_bar.zip

post-65588-1309517086_thumb.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У Bosch есть новый датчик bmp180, у него заявленная точность +-1 м. (шумы 17см)

http://www.bosch-sensortec.com/content/lan...80-DS000-07.pdf

Изменено пользователем chirik

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да, насчет шумов - конденсатор рядом с датчиком по питанию поставили? Причем надо именно РЯДОМ - как можно ближе. Мой опыт показывает что разные датчики, подключенные по I2C очень не любят когда конденсатора нет или он не рядом. Причем даже 1 см - это уже не рядом. Когда экспериментаровал с ad7416 - без конденсатора показания скакали градусов на 5, это при том что разрешение у него 0.25. А с конденсатором - шум на млядший разряд и только.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Поставил кондер поближе, кажется шумов стало по меньше. Записал эксперимент хождение по этажам.

http://20ms_step.JPG

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу найти ошибку. До 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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не могу найти ошибку. До 25 С давление высчитывается правильно , но после 25 С начинается черти что. При тех значенниях , что указаны в коде - давление должно быть 750 мм.рт.ст., а выдает 746 HELP !

 

А что это там у вас в комментариях про ошибку в DS написано? Нет никаких ошибок. Считать надо так, как указано в DS.

Еще есть в зарубежном инете некий pdf (я ща в отпуске, а ссылки все на работе), где один человек очень обстоятельно перевел все эти формулы для вычисления в float - типа точнее выходит. Формулы выглядят совершенно по-другому и для вычислений на контроллере не пригодны. Но как альтернативный способ вычисления на компе (для проверки) как раз самое то. Помнится мне что яндексом я его искал недолго, по каким-то весьма очевидным запросам.

 

А вот собственно и ссылочка http://wmrx00.sourceforge.net/Arduino/BMP085-Calcs.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А что это там у вас в комментариях про ошибку в DS написано? Нет никаких ошибок. Считать надо так, как указано в DS.

Еще есть в зарубежном инете некий pdf (я ща в отпуске, а ссылки все на работе), где один человек очень обстоятельно перевел все эти формулы для вычисления в float - типа точнее выходит. Формулы выглядят совершенно по-другому и для вычислений на контроллере не пригодны. Но как альтернативный способ вычисления на компе (для проверки) как раз самое то. Помнится мне что яндексом я его искал недолго, по каким-то весьма очевидным запросам.

 

А вот собственно и ссылочка http://wmrx00.sourceforge.net/Arduino/BMP085-Calcs.pdf

Вы несколько не поняли. Я написал этот код исходя из формул в DS и с их примером. Подставьте значения из DS и увидите , что всё полностью совпадает с их значениями, но на практике при температуре свыше 25C (реальной температуре и с реально работающем датчиком в железе) начинается чахарда с давлением. При 24.9 и ниже будет показывать давление один в один с имеющимися у меня реальными данными и на данный момент времени и именно для того места где я нахожусь. Я не могу понять , что же происходит после 25С.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я не могу понять , что же происходит после 25С.

 

В документе, ссылку на который я привел, одна из служебных констант, которая необходима для термокомпенсации значения давления, определяется как s = T - 25. Не трудно догадаться, что Т - истинное значение температуры. Причем надо полагать что эти формулы - они составлены с тем же СМЫСЛОМ, что и те что в DS. Т.е. физический смысл формул - сохранен. Вообще довольно типична ситуация, когда что-то высчитывается для 25 С, а потом дается поправка на разницу 25 С и текущей температуры.

Возвратимся к вашей беде - после 25С что-то не так... Если опять же - смотреть на s = T - 25 то при превышении 25С s изменит свой знак. Других изменений нет. Значит - вероятно что ваш код как-то неверно реагирует на изменение знака поправки. Например, воспринимает значение как unsigned, хотя на самом деле оно совсем даже signed. Внимательно посмотрите PDF - там объясняется откуда берется эта s.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В документе, ссылку на который я привел, одна из служебных констант, которая необходима для термокомпенсации значения давления, определяется как s = T - 25. Не трудно догадаться, что Т - истинное значение температуры. Причем надо полагать что эти формулы - они составлены с тем же СМЫСЛОМ, что и те что в DS. Т.е. физический смысл формул - сохранен. Вообще довольно типична ситуация, когда что-то высчитывается для 25 С, а потом дается поправка на разницу 25 С и текущей температуры.

Возвратимся к вашей беде - после 25С что-то не так... Если опять же - смотреть на s = T - 25 то при превышении 25С s изменит свой знак. Других изменений нет. Значит - вероятно что ваш код как-то неверно реагирует на изменение знака поправки. Например, воспринимает значение как unsigned, хотя на самом деле оно совсем даже signed. Внимательно посмотрите PDF - там объясняется откуда берется эта s.

Что меняется знак я вычислил и без pdf, вот именно его то я и не могу найти - где я его потерял :laughing:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня была вроде бы такая же заморочка - немного подвирало в какую-то сторону. Правда я не заметил влияния порога "выше 25С", но просто потому что в последнее время у меня на работе всегда выше 25С :). Я отловил это путем вывода промежуточных значений различных констант и сравнения их со значениями, считаемыми на компьютере (Эксель). Вот к сожалению файлик-то на работе... Не помню на каком конкретно шаге вылезало. Вылечилось тем что в одном месте вызов подпрограммы которая множит unsigned был заменен на умножение signed.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашёл. Немного подвирал сдвиг вправо при вычислении X3 - вот там то и надо учитывать знак. :laughing:

Теперь надо ехать на дачу и проверять в железе. Хорошо , что много данных снял заранее -стабильно

BMP085.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...