Статистика
Время:
Зарегистрированных: 88285
Последним зарегистрирован: tr_sergey
Рекорд посещаемости: 12585
Групп пользователей: 4
 Группы:
[Admin] [Cоучастник] [Автор] [Модератор]
 Сейчас на сайте
 Всего: 510
 Гостей: 504
 Анонимных: 1
 Пользователей: 5
 Зарегистрированные:
kollega bodikkosun Ghost1 Iskander79 tr_sergey
Forum Rules Внимание!

Внимание! Перед тем как создавать тему на форуме, воспользуйтесь поиском! Пользователь создавший тему, которая уже была, будет немедленно забанен! Читайте правила названия тем. Пользователи создавшие тему с непонятными заголовками, к примеру: "Помогите, Схема, Резистор, Хелп и т.п." также будут заблокированны навсегда. Пользователь создавший тему не по разделу форума будет немедленно забанен! Уважайте форум, и вас также будут уважать!

Страницы: (5) [1] 2 3 4 5  ( Перейти к первому непрочитанному сообщению ) Ответить Новая тема Новый опрос

> Барограф, Делаю клон Bohlken BG1512G
Philin05
Сообщение: # 411979   Mar 4 2012, 01:07 AM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Наверное, тема вроде анонса, задался целью сделать клон немецкого морского барографа Bohlken BG-1512G (BG-1512G), но с небольшими улучшениями.
И так характеристики закладываю такие:
Диапазон рабочего давления: 300…1100 гПа (225…825 мм. рт. ст);
Время отображения барограммы – последние 48 часов
Время хранения барограммы последние 27 дней с дискректностью 5 минут;
Внешний термодатчик (DS18BB20 или DS18S20, возможно DS1821), у немецкого варианта датчик встроенный, что не очень интересно. (Барограф сам будет определять тип, и работать с ним как положено)
Дисплей графический 128/64 с уже всем известным контроллером KS0107/0108
Как и немецкий вариант, барограф будет поддерживать протокол NMEA, но только уже через виртуальный COM, а не через реальный.

В качестве первичного датчика давления буду использовать HP03SA, может не очень дешево, зато очень просто, если кто помнит мой прошлый проект барометр был делан на аналоговом MPX4115A, что потребовало высокоточных резисторов и т.п.
Микроконтроллер выбираю AT90USB647 потому что у меня их много, и барограф сможет повторить человек, у которого нет программатора, так как он прошивается через родной USB котроллер.
Часы классика - DS1307
В качестве памяти барограммы на последние 27 дней пока что закладываю FM24C256(FRAM), но возможно в будущем заменю на AT24C256, когда пойму что алгоритм не превысит количества перезаписей на страницу за приемлемый срок службы.
В остальном, кнопочки, лицевая панель и буззер будет, как и у немецкого варианта. Тему создаю по двум причинам, во первых может, найду единомышленников, во вторых это будет стимулом довести работу до конца, чтобы никто потом не сказал, что типа не доделал =)
Вообще тема моя и я тут буду писать как продвигаются результаты, но и не против услышать сторонние мнения.

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
WiteNoise
Сообщение: # 411993   Mar 4 2012, 08:06 AM
Quote Post


Фанат
******

Группа: Cоучастник
Сообщений: 2179
Пользователь №: 1189
Регистрация: 18-August 05




Регулярно -постоянно наблюдаю за своим барометром в комнате, эта тема очень интересна, возможно если найду комплектуху буду собирать.


--------------------
PM
Top
Philin05
Сообщение: # 412016   Mar 4 2012, 11:37 AM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Схема в приложении.

Яркость подсветки заведена на ШИМ, однако будет три ступени как и в немецком варианте. Дело в том, что это удобнее, так как в темноте включил, выключил и все. А со ступенчатой регулировкой придется несколько раз тыкать (или долго держать) на кнопку и потом также чтобы выключить.
Сам LCD будет подключен через разъем и стоять на стойках, это позволит его снять при необходимости или получить доступ к плате без необходимости его выпаивать.
Часы DS1307 буду установлены на плате вместе со стандартным держателем батарейки по CR2032.
Выход сигнала часов заведен на датчик давления и на вход таймера микроконтроллера, таким образом, будет удобнее считать время. Часовой кварц у микроконтроллера пока что на всякий случай, потом уберу, если не понадобится.
Датчик давления подключен через стабилитрон на 3,3В, так как этого достаточно вполне, отдельный стабилизатор для него городить не правильно. Входные сигналы приводить к 3,3 не нужно, (это уже проверялось, датчик так уже год работает, да и вообще там 5В на него будет попадать только через подтягивающие резисторы в 10К, включая вывод XCLR где встоенная подтяжка у микроконтроллера и я буду подавать только 0, а 1 будет сам образовываться).
FRAM подвешено на общую i2C, на адрес настроен на 0x51 а не 0x50, так как датчик давления имеет в своем составе EEPROM на адресе 0x50 в котором хранятся константы. Как я уже сказал возсожно FRAM будет заменено на EEPROM и конечно барограф будет работать и без этой памяти вообще, просто данные будет хранить 48 часов и ве.
Входное напряжение измеряется через делитель с коэффициентом деления 10,1, фильтруется конденсатором и подается на буфер собранный на одной секции ОУ, это сделано для защиты МК (то есть входное напряжение на него не попадает, даже если замкнуть делитель).
Цепи для температурного датчика защищены защитными диодами на +5В, и в цепи питания на всякий случай стоит резистор. Это позволит как защитить сам температурный датчик от всяких гадостей и схему барографа, если вместо +5В там появится 15.
Также в схему введет серийный номер DS2411, он нужен будет для работы чрез USB (конечно можно и без него, но у меня например к моему компу подключено несколько самоделок через USB и бес серийного номера придется следить за тем чтобы не было конфликта, поэтому я его ставлю уже в виду привычки и удобства)
Стабилизатор ставил какой есть импульсник LM2576, барограф будет хорошо работать от 8 до 27В.
Кварц МК на 16 МГц, но фактически он будет работать на 2МГц, так как микроконтроллер поставляется со встроенным загрузчиком и установленным предделтелем на 8. Чтобы снять предделитель нужно стереть загрузчик, я это могу конечно сделать, но многие не смогу. Поэтому чтобы он прошивался от USB, прошивка будет заточена по 2МГц (этого вполне хватит).
На плате будут разъемы для SPI, JTAG (в процессе тестирования прошивки я буду его использовать)
Пока что я закладывал в схему комплектацию которая есть у меня в наличии, народной ее не назовешь (зато все SMD ), но я думаю при необходимости многие детали можно заменить на более распространенные.

В течении нескольких дней соберу макет соответствующий это схеме из тех платок которые у меня есть.

Это сообщение отредактировал Philin05 - Mar 4 2012, 11:45 AM

Присоединённый файл ( Кол-во скачиваний: 1013 )
Присоединённый файл  Barograf.pdf
PMEmail Poster
Top
WiteNoise
Сообщение: # 412019   Mar 4 2012, 12:02 PM
Quote Post


Фанат
******

Группа: Cоучастник
Сообщений: 2179
Пользователь №: 1189
Регистрация: 18-August 05




В проекте будет печатная плата для повторения устройства ?


--------------------
PM
Top
Philin05
Сообщение: # 412020   Mar 4 2012, 12:04 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Будет, но односторонняя скорее всего не получится, но посмотрим. Сначала макет соберу, чтобы узнать что в схеме не так.
PMEmail Poster
Top
Philin05
Сообщение: # 412208   Mar 5 2012, 11:22 AM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Собрал макет, который почти соответствует схеме, некоторые выводы микроконтроллера используются по другому, так как заняты, но это мелочи и на работу не сказывается. Сегодня проверю его и завтра начну думать над прошивкой. О новостях буду сообщать.

Взял готовую плату где установлен МК AT90USB647, USB разъем, стабилизатор +5В. На макетке собрал часть схемы с датчиком давления, микросхемой часов, батарейкой, FRAM, буззером и серийным номером. + подключил три кнопки (выключатель питания пока не нужен) Также на макетной плате штыревой разъем для подключения термодатчиков DS18x20.

Это сообщение отредактировал Philin05 - Mar 5 2012, 11:27 AM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 412288   Mar 5 2012, 06:30 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Макет проверил, дым не пошел smile.gif Все цепи соответствуют схеме, JTAG ICE видит микроконтроллер, USB загрузчик работал, но я его удалил, так как требуется установить бит для включения JTAG. Все готово для прошивки.

Перед началом создания прошивки самое главное определится с функциями которые будет выполнять барограф.

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



Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 412289   Mar 5 2012, 06:40 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Так как основным средством вывода информации является графический дисплей, то в первую очередь считаю нужным разобраться с ним.

И так в ближайшее время решаю следующие вопросы:

1. Драйвер ШИМ для регулировки яркости подсветки (грубо говоря набор функций, чтобы включать/выключать подсветку и менять ее яркость)

2. Драйвер для работы с дисплеем (контроллером дисплея KS0107/0108), с полным набором функций чтения/записи и настроек

3. Библиотека графических примитивов (точки, линии, окружности, текст и т.п, что может понадобится для отображения)

4. Два шрифта, один 5*7 для основных надписей и цифр, второй 3*5 для дополнительной информации.

Буду рассказывать о ходе выполнения этих пунктов smile.gif

P.S в схеме барографа обнаружились ошибки в наименовании цепей (Например MIN+ называлась HR+, что могло ввести в заблуждение). Поэтому последняя версия схем 1.2 в приложении.

Это сообщение отредактировал Philin05 - Mar 5 2012, 08:22 PM

Присоединённый файл ( Кол-во скачиваний: 884 )
Присоединённый файл  Barograf_1V2.pdf
PMEmail Poster
Top
Philin05
Сообщение: # 412396   Mar 6 2012, 12:27 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Драйвер ШИМ подсветки готов, можно включать/выключать подсветку, а также менять яркость.

Драйвер LCD контроллера также написан. Как и ожидалось, если контрастность установлена правильно, а а также подсветка включена, то после подачи команды на включение - на дисплее отобразится мусор, который находится в его видеопамяти.

Это сообщение отредактировал Philin05 - Mar 6 2012, 12:37 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 412397   Mar 6 2012, 12:35 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



После очистки видеопамяти, мусор исчезает.

А вот пример записи 16 байт 0x55/0xAA

По адресу 4-й страницы, начиная с 16 линии.

Понятно, что, чтобы что-то отобразить человеко читаемое, необходимо создать библиотеку графических примитивов, потому как работать с голой видеопамятью очень неудобно и жестоко.

Как минимум библиотека графических примитивов должна поддерживать следующие функции:
1. Точка
2. Линия
3. Прямоугольник
3. Окружность (скорее всего не понадобится, но пусть будет на будущее)
4. Функцию выбора шрифта (которая не зависит от количества шрифтов)
5. Функция печати символа
6. Функция печати строки по координатам

И два сменных шрифта 5*7 и 3*5 (будут меняться функцией установки шрифта)

Для начала хватит, если чего-то нужно будет еще будем добавлять по ходу.

О ходе работы буду писать тут...

Это сообщение отредактировал Philin05 - Mar 6 2012, 12:36 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 412433   Mar 6 2012, 06:31 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Вот и первый тест простейших графических примитивов smile.gif

В рисовании линий и окружностей никаких сложностей нет и эта часть библиотеки уже готова, несколько сложнее выводить шрифт, чем и займусь сегодня-завтра.
Велосипед изобретать не будем. Каждый шрифт будет представлять собой массив из наборов, данных описывающий каждый символ.
Для удобства ручного редактирования и чтобы код был более красивым использованы символьные константы. К примеру, символ «3», в шрифте 5*7 будет выглядеть так:
{
_XXX____,
X___X___,
____X___,
__XX____,
____X___,
X___X___,
_XXX____,
________
}
Если эти константы заменить цифрами, то все точно также будет отрисовываться, просто для человека это станет не читаемое, вот пример символа «3» в двоичном виде:
{
0B01110000,
0B10001000,
0B00001000,
0B00110000,
0B00001000,
0B10001000,
0B01110000,
0B00000000
}

Как видно, «1» и «0» почти стерли информацию о том, как будет выглядеть этот символ на дисплее, можно пойти дальше и полностью скрыть ее шестнадцатеричными константами, и связь между графическим изображением символа и кода программы пропадет полностью:
{
0x70,
0x88,
0x08,
0x30,
0x08,
0x88,
0x70,
0x00
}

То есть получается как бы двумерный массив, где первый индекс это код символа, например 0x33 – это символ «3», и по этому индексу находится массив, который представляет битовое изображение этого символа, которое и нужно записать в видеопамять дисплея.

Остается сделать функции, которые выбирает массив со шрифтом в качестве активного для преобразования кода символа в битовое изображение, функцию для печати одного символа и функцию для печати строки символов. В результате у нас получится библиотека графических примитивов, которая печатает строки разными шрифтами.

Ну и конечно, нужно получить сами шрифты – 5*7 и 3*5, иначе ничего не получиться. Самое приятное, что шрифты можно будет добавлять и менять как перчатки smile.gif

Это сообщение отредактировал Philin05 - Mar 6 2012, 06:38 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 412571   Mar 7 2012, 11:41 AM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Функции для работы с шрифтами написаны, вот результат их теста:

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 412573   Mar 7 2012, 11:51 AM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



После того как библиотека графических примитивов готова, можно приступать к созданию виджета барографа. Придумывать нового не буду, делаем клон как никак.
От себя добавлю только реперные черточки около 24 и 48 часов, которые позволят лучше ориентироваться на кривой которую будет чертить барограф. А рядом с напряжением питания будет отображаться температура от внешнего термодатчика .
Сама реализация виджета будет состоять из функций установки текущих параметров, а также добавления данных барограммы. Причем шкала амплитуды давления будет пересчитываться динамически, всякий раз при добавлении новых данных, что позволит всегда корректно отображать кривую давления в независимости от амплитуды ее изменения (в разумных пределах естественно)

P.S как видим влезает не 48 часов, а 54, но тут как говорится чем больше тем лучше, получается 2-е суток и 6 часов smile.gif

В результате будем стремиться написать такой виджет барографа:

Это сообщение отредактировал Philin05 - Mar 7 2012, 12:12 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 412618   Mar 7 2012, 03:53 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



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

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
WiteNoise
Сообщение: # 412634   Mar 7 2012, 05:08 PM
Quote Post


Фанат
******

Группа: Cоучастник
Сообщений: 2179
Пользователь №: 1189
Регистрация: 18-August 05




vo.gif


--------------------
PM
Top
Philin05
Сообщение: # 412820   Mar 8 2012, 12:42 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Продолжаем…
Виджет барографа готов, может какие-то мелкие недостатки еще вылезут, но это буду по ходу выявлять их.
Работает так, имеет буфер данных на 54 часа(с разрешением 30 минут), в него добавляются данные, при чем так, что самые старые исчезают, а на место первого ставится новое значение, таким образом буфер направлен из прошлого в настоящее smile.gif
Всякий раз при добавлении новых данных высчитывается тенденция за час и за тричаса, а также заново отрисовывается барограмма. Максимальное и минимальное значение давления в данных используется для построения боковой шкалы амплитуды давления. Если данных меньше чем за 54 часа, то барограмма строиться только из тех значений что есть .
Дополнительно есть функции установки текущих параметров – время, текущее давление, температура, и напряжение питания, они просто отображаются как есть.
Вот пример виджета с тестовыми данными (настоящих пока нет, так как не один датчик еще не работает):

Это сообщение отредактировал Philin05 - Mar 8 2012, 12:43 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 412822   Mar 8 2012, 12:54 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Когда можем отображать что желаем, можем приступать к созданию драйверов для обеспечения нашего виджета информацией:
Нам понадобится:
1. Драйвер I2C
2. Драйвер 1-WIRE
3. Драйвер HP03SA (будет работать через I2C)
4. Драйвер DS1307 (будет работать через I2C)
5. Драйвер FM24C256 (будет работать через I2C)
6. Драйвер DS2411 как таковой не нужен, так как достаточно просто определить серийный номер.
7. Драйвер термомтеров DS1820, DS18B20, возможно DS18B21 (нет в наличии), его можно сделать как групповым, например драйвер DS18X2X, а можно сделать структурным, то есть вверху будет драйвер термометра (корневой), и он сам будет выбирать с каким конкретным драйвером термометра ему работать. Разберусь как удобнее потом.
Драйвер 1-WIRE должен поддерживать функции поиска, так как все устройства 1Wire висят на одной шине (но это меня не пугает, наоборот интересно), к тому же это позволит потом добавить дополнительные датчики не меняя железа.

Конечно хочется как можно быстрее опробовать HP03SA, но к сожалению пока не запустим RTC DS1307, ничего от датчика давления не увидим, так как для их работы нужна частота 32768Гц, которую будет выдавать микросхема RTC.

Значит работает в такой последовательности I2C->DS1307->HP03SA, о результатах буду докладывать…

Это сообщение отредактировал Philin05 - Mar 8 2012, 12:56 PM
PMEmail Poster
Top
Philin05
Сообщение: # 412874   Mar 8 2012, 06:36 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Вот пример работы с DS1307 по I2C.
Сразу хочу обратить на то, что работать с DS1307 я решил по байтно просто потому что мне так захотелось smile.gif. Многие скажут что это увеличивает время опроса и т.п., если бы речь шла об АЦП или ЦАП и т.п. я бы согласился, но в данном случае ни 450 мкс ни 2мс (как сейчас) никакой роли не играют.
Если серьезно, то побайтовый обмен на I2C позволяет логическим анализатором увидеть больше информации, чем работа массивом, так как каждый раз засвечивается информация к какому устройству и к какому регистру обращается микроконтроллер.
Само чтение времени довольно простое:
Сначала читаем секунды, затем минуты, затем часы, и потом снова секунды. Если чтение секунд не изменилось по сравнению с контрольным чтение в конце, то считаем что время прочитано правильно (при условии соблюдения всех остальных требований обмена по I2C конечно).
Это сделано для исключения коллизий перехода на новый час в момент считывания информации.
Например ситуация такая: 17:59:59 и мы успели считать 59 секунд, 59 минут, и стало 18 часов, это значит что м итоге мы считаем 18:59:59, однако контрольное чтение секунд покажет 00, и в результате, считывание признаем не действительным и повторяем попытку, и считываем корректные 18:00:00 и контрольные секунды 00.



Прилагаю набор скринов с логического анализатора, на которых изображен обмен между микроконтроллером и микросхемой DS1307 по I2C. Читать нужно сверху вниз по строчно. Зеленый кружек – старт условие, красный, стоп. Адресс DS1307 для записи[0xD0], чтение [0xD1] Все остальное понятно.

То есть: | (START) | Write[0xD0] | [0x01]+ACK | (STOP) | Read[0xD1] | [0x55] + NAK | (STOP) | означает следующее Производим установку по которому будем читать из DS1307 равным 0 (секунды), даем рестарт и читаем значение секунд по ранее установленному адресу (55 секунд), точно также читается все остальное.

Так как сигнал в 32768Гц, у нас теперь есть, то переходим к самой интересной части - работа с HP03SA. Я уже бегло изучил даташит, там получается составное устройство EEPROM для хранения констант производителя и АЦП для преобразования температуры и давления. По всем этим данным нужно будет произвести несколько расчетов средней сложности и получить искомое давление. Я думаю это займет пару дней, так как потребуется оптимизация математических расчетов. Как сделаю доложу.

Это сообщение отредактировал Philin05 - Mar 8 2012, 06:48 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 413198   Mar 10 2012, 07:32 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Разобрался с HP03SA.
1. Нужно всегда скачивать с сайта производителя последний даташит, та как за последние 5 лет даташитов на HP03SA сменилось черт знает сколько.
2. Очень важный момент: при считывания коэффициентов из EEPROM вывод XCLR должен быть в «0», иначе производитель не гарантирует корректность чтения из EEPROM. В моем случае коэффициент C5 не соответствовал диапазону, который указал производитель (4096 - 65535) до тех пор пока я не установил XCLR -> «0». Это очень легко забыть, та как обычно настраиваешься на то что сброс, это сброс, и по умолчанию он должен быть 1.
3. Убедившись что все коэффициенты считанные из EEPROM находятся в указанном в даташите диапазоне можно считать инициализацию датчика давления законченной.
4. Следующий момент, что перед началом преобразования данных нужно XCLR вернуть в 1, иначе девайс будет находиться в состоянии сброса и преобразование не получится. (потом можно сбросить в 0, или сбросить в 0 и установить в 1 пред следующим преобразованием)
5. Между началом преобразования и считыванием данных должно пройти не менее 40 мс, так как выполняется два преобразования (давление и температура) то в сумме чуть больше 80 мс это занимает.
6. И наконец, самое главное это пересчет данных из АЦП в давление и температуру. Нужно хорошо было оптимизировать алгоритм. Следует обращать внимание на то, что промежуточные результаты могут быть очень большими числами, а также следует обратить на округления при делении чисел. Для того чтобы можно было контролировать правильность расчетов я в Excel сделал две таблицы, одна контрольная, которая делает расчет как в даташите, вторая в которую можно записать свои значения и получить результат температуры и давления. (этот файл я прилагаю).
7. При помощи JTAG или DEBUG порта (да хоть на дисплей вывести, если больше ничего нет), нужно прочитать эти константы и результат второго преобразования АЦП (первое как говорит производитель использовать нельзя) занести в проверочную таблицу и увидеть результат расчета в виде всех промежуточных значений как в даташите и конечных значений давления и температуры.
8. Далее необходимо убедится, что программа выдает такие же значения. Для тех, кто, когда либо будет использовать этот датчик давления прилагаю скрин из JTAG-отладчика. В нем приведены все исходные, промежуточные и конечные данные как в даташите. Забив их в свою программу вы смежите проверить, выдает ли она такой же результат или нет.
9. Сравнив данные которые получаются из расчета в Excel и своей программы, а также с данными скрина JTAG отладки можно убедится что расчет верный или нет. Если верный, то на этом задача считается выполненной.
У меня как видите верный smile.gif

Следующая задача - это драйвер 1-WIRE и драйвер термометра, я решил делать групповой драйвер на семейства DS1820, DS18S20, DS18B20 и отдельный на DS1821. То есть к барографу нужно будет подключить любой из этих датчиков, и он сам определит его тип и как с ним работать, единственное DS1821 , будет определяться по косвенным признакам, так как своего уникального номера и группового кода он не имеет. То факт его наличия будет определять по ответам на его специфичные команды.

И конечно нужно сделать сам датчик для уличного исполнения, есть кое какие соображения, но это чуть позже...

Скрин коэффициентов:

Это сообщение отредактировал Philin05 - Mar 10 2012, 07:52 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 413201   Mar 10 2012, 07:41 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



И Excel файл для проверки правильности расчета:

Присоединённый файл ( Кол-во скачиваний: 388 )
Присоединённый файл  ____________HP03SA.zip
PMEmail Poster
Top
Philin05
Сообщение: # 413227   Mar 10 2012, 09:25 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Небольшое введение в температурные датчики DS18x

DS1820 - Наверное уже не встретить, она снята с производства уже давно
DS18S20 - (маркировка DS1820), улучшенная замена DS1820, причем полностью совместима с предшественником, точность измерения у них 0,5 град и разрешение 0,5 градуса.

DS18B20 - Чуть более навороченный термометр, точность 0,5 град, а разрешение настраивается от 0,5 до 0,0625, Причем в 9 битом режиме время преобразования в 8 раз меньше, чем в 12 битом.

DS1821 - это термометр/термостат, точность 1 град, разрешение 1 град.

Барограф будет работать со всеми этими датчиками.

Существует несколько мне известных мнений на счет этой группы температурных датчиков, которые ЛИЧНО Я не разделяю:

1. Очень часто приходится слышать о точности измерения температуры, многие думают, что DS18B20 намного точнее чем DS18S20, это не так, по точности измерения они одинаковые.

2. Слышал пару раз, что для замены DS18B20 на DS18S20 нужно менять программу, это не так, надо просто с самого начала писать программу так, чтобы ее не нужно было менять (с момента появления DS18B20 это не простительно, так как никакой сложности в этом нет).

3. Бывает приходится видеть как термометр на основе DS18S20 показывает температуру с разрешением 0,5 град, потому что в регистрах результата хранится результат с разрешением 9 бит. Однако, у термометров DS18S20 и DS1821 разрешение можно увеличить до 12 бит, если при получении температуры считывать еще и остаток от результата преобразования и после простого расчета можно выводить температуру в более привычном формате, с разрешением 0,1 град.

Это сообщение отредактировал Philin05 - Mar 10 2012, 09:34 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 413411   Mar 11 2012, 09:31 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Драйвер 1-WIRE, драйвер DS18X20 и драйвер DS1821 готовы.

В самом драйвере 1-WIRE в принципе нет особых сложностей, он всего лишь должен предоставлять драйверам более высокого уровня удобный интерфейс для обмена по 1-WIRE шине. Необходимо только обратить внимание на расчет CRC8 (хотя есть устройства, где нужно и CRC16). Наиболее сложный момент это функции организации поиска устройств на 1-WIRE. В большинстве драйверов они вообще не реализованы, но так как барографу требуется работать с разными устройствами, то выбора нет, нужно было разобраться и реализовать их. Все тонкости поиска подробно описаны в документе «Application Note 187, 1-Wire Search Algorithm», там даже для тех, кто не хочет вникать, как это все работает, есть готовые исходные коды.

Я лишь остановлюсь на самых важных момента поиска:
1. Поиск устройств осуществляется по их индивидуальному номеру;
2. При поиске, первым будет найдено устройство с самым маленьким номером, последним, с самым большим.
3. Можно осуществлять поиск среди определенного семейства устройств. К примеру, мы хотим найти термометр DS18B20, для этого мы осуществляем поиск по групповому коду 0x28. И если есть хоть один термометр этого семейства, то он будет найден (если не один, то можно найти все последующие)
4. Можно периодически проверять, не появилось ли новое устройство в семействе, для этого существует функция поиска нового устройства в семействе.

Барограф пытаться найти следующие устройства:
1. Серийный номер DS2411
2. Термометр DS18B20, если не получилось DS18B20, то будет пытаться найти DS1820(DS18S20), если не получилось и этот, то попробует вычислить есть ли на шине DS1821, если и это не получится, то он будет считать, что термометров нет и температуру отображать не будет.
Когда барограф найдет термометр, например DS18B20, то он начинает работать с ним используя команду «MATH ROM, совпадение ПЗУ». В случае c DS1821, то он будет просто посылать команды, которые не понимает больше никакое устройство, подключенное к шине, кроме DS1821. Поэтому конфликта не будет (напомню, у DS1821, нет своего номера, и он лишь частично поддерживает 1-WIRE).
Ниже прилагаю скрин с логического анализатора, которым был записан момент считывания температуры с DS18B20. (смотреть построчно, сверху в низ, реально это одна строка без разрывов, просто тут по-другому ее нельзя отразить)

Действующие лица:
DS18B20 – групповой код 0x28, индивидуальный номер 0x000001504FD6, CRC8 0x9D
И микроконтроллер, который передает RESET, DS18B20, отвечает, я тут «P»(и кстати параллельно отвечает и DS2411), микроконтроллер говорит, тогда раз кто-то есть, то меня интересует только термометр с кодом 0x000001504FD6 и предает команду совпадение ПЗУ и этот код(естественно вместе с групповым и CRC). После микроконтроллер говорит, что от этого термометра ему нужна только температура, и передает команду чтение температуры 0xBE и читает 9 байт памяти, где последнее 0x75 это CRC8.

Первые два байта 0x24, 0x00 это и есть температура, если 0x0024 (36 в десятичном виде), умножить на 625 (разрешение 1 разряда 0,0625) и разделить на 1000, то получится число 22,5, если использовать целые числа, то получится 22(+2,2 градуса), можно округлить все что больше 4 в большую сторону, то получится 23(+2,3 градуса), правда смысла в округлении особого нет, так как точность все равно +-/0,5.
Такой вариант расчета удобен тем, что температура приводится к такому же формату что и у HP03SA. И с ним очень удобно работать, так как используются целые числа со знаком, а точку всегда можно нарисовать на экране. Если число отрицательное, то ничего не меняется, к примеру – 0,5 это 0xFFF8(см. даташит), его можно представить как 0,0625 * -8, то бишь -0,5 = -8 smile.gif (может даже кто-то в гробу перевернулся), и теперь -8 * 625 / 1000 = -5(-0,5 градуса). Вот так вот.

Естественно для DS18S20/DS1820 расчет будет несколько иной. Но не, сколько не сложнее чем для DS18B20. Когда известен групповой код, то драйвер сам определяет по какому алгоритму производить пересчет результата преобразования в температуру. Если используется термометр DS1821. То для него отдельный драйвер, так как алгоритм работы с ним несколько отличается от похожих друг на друга DS18x20.

Но так как есть корневой драйвер терометра, то в конечном итоге есть функция «Получить температуру», а он сам решает у какого датчика что спрашивать, главное чтобы результат был в одном и том же формате, в не зависимости от типа датчика – 16 битное со знаком, где 256 это +25,6.

Это сообщение отредактировал Philin05 - Mar 11 2012, 11:06 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 413415   Mar 11 2012, 09:47 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Теперь барограф может считать время, измерять атмосферное давление, измерять температуру, а также имеется компонент который может все это отобразить. Значит теперь мы может временно все это объединить, чтобы посмотреть что у нас получилось, и что нужно подправить.

Почему временно?

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

То есть по тупому делаем цикл и смотрим. Как наберется необходимое количество информации, опубликую скрин с экрана барографа (как раз циклон на подходе)

А пока он будет накапливать информацию, я сделаю драйвер клавиатуры (заодно сделаю ступенчатое управление подсветкой - будет три положения ВЫКЛ/30%/100%, управление подсветкой через уже написанный примитивный драйвер ШИМ подсветки), и в BSP добавлю обработку АЦП, а также функции пересчета значения АЦП в напряжение питания барографа. Все равно рано или поздно это придется делать.

Это сообщение отредактировал Philin05 - Mar 11 2012, 09:50 PM
PMEmail Poster
Top
Philin05
Сообщение: # 413695   Mar 13 2012, 12:00 AM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Сегодня у меня выходной, так как барограф все еще накапливает данные, нужно чтобы прошло 54 часа, а прошло только 24.

Вместо этого предлагаю статью-тему(Технология изготовления оболочки для DS18B20 т.п.), как изготовить оболочку для уличного использования DS1820/DS18S20/DS1821.

Наверное чисто с эстетической точки зрения, так как показывает практика DS18B20 с герметиком на выводах может работать 5 лет без перерыва бех единого сбоя.

Это в рамках того, что у меня были мысли об уличном исполнении температурного датчика.

Это сообщение отредактировал Philin05 - Mar 13 2012, 12:01 AM
PMEmail Poster
Top
Philin05
Сообщение: # 413907   Mar 13 2012, 08:58 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Ну вот и прошли 54 часа. В принципе я доволен, хотя и пару багов выявил, без этого никак. очень удачно получилось поймать циклон после длительного затишья, давление временами падало 1,3 гПа/ч и 3.9гПа/3ч, когда циклон ушел, начало расти.

Один из багов, это не отображение последних 30 минут в 54 часовом массиве, видно что нет последней точки. Это исправил уже. Температура отображается правильно, я просто сфотографировал в момент перерисовки дисплея.

Это сообщение отредактировал Philin05 - Mar 13 2012, 08:59 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 413908   Mar 13 2012, 09:04 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Остается сделать:

1. Функции настройки даты времени, корректировки давления
2. Драйвер USB со стороны девайса, который должен поддерживать USB класс CDC
3. Необходимо организовать поддержку NMEA. Чтобы передавать в общепринятом формате данные о давлении и температуре;
4. Создать inf файл для установки виртуального COM порта, чтобы винда видела барограф как известное устройство smile.gif
5. Добавить функцию сохранения каждые 5 минут данных о давлении и температуре в FRAM (еще надо будет придумать как их потом от туда забирать)
6. Сделать примитивный драйвер буззера, чтобы подавать тревожный звуковой сигнал каждые 5 минут при резком падении давления, ну и нажатие кнопок озвучивать. Эта функция будет отключаемая. Порог падения давления для подачи сигнала будет -4гПа/3ч или -1,4гПа за 1 час.
7. Нужно сделать стартовый экран, где будет описано состояние барографа(там, какие датчики подключены, что не так и т.п.), версия прошивки и другая дополнительная информация которая постоянна не нужна для пользователя.

И после этого прошивка барографа будет готова, во всяком случае 1-вая релизная версия.

Зеленым отмечено что уже сделано, красным крестиком, что еще предстоит сделать:

Это сообщение отредактировал Philin05 - Mar 13 2012, 09:05 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 414127   Mar 14 2012, 08:33 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Функции настройки времени готовы, корректировки давления готовы (эта функция нужна чтобы устранить незначительный производственный разброс датчика давления, наверное по сравнению с немецким барографам тут она не так актуальна, так как производственный разброс HP03SA +/- 1,5 гПа, но все же будет приятно если по образцовому барометру выставить точно как на нем). В конце концов делаю клон!

Также барограф подает звуковой сигнал каждые 5 минут, если скорость падения давления превышает 1,4 гПа/ч и 4,0 гПа/3ч соответственно.

Работаю дальше. Параллельно начинаю думать над печатной платой и лицевой панелью...

P.S думаю сделать "Двойной БИП", если давление падает быстрее чем 4гПа/3ч...

функция "БИП" отключается/включается одновременным нажатием кнопок Min+ P-, при этом на экране появляется зачеркнутый динамик, если звука нет

Это сообщение отредактировал Philin05 - Mar 14 2012, 09:12 PM

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 414390   Mar 15 2012, 10:02 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Оттрасировал печатную плату сегодня, вроде бы нормально получается, вот 3D модели:

Зеленое и круглое слева в низу, это не НЛО, это и есть тот самый HP03SA smile.gif

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 414392   Mar 15 2012, 10:05 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Виден отсек для CR2032

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top
Philin05
Сообщение: # 414393   Mar 15 2012, 10:08 PM
Quote Post


Соучастник
****

Группа: Cоучастник
Сообщений: 678
Пользователь №: 34013
Регистрация: 17-June 08
Место жительства: Тюмень-15 (Ольга-2)



Ну и дисплей

Присоединённое изображение (Нажмите для увеличения)
Присоединённое изображение
PMEmail Poster
Top

Настройки темыСтраницы: (5) [1] 2 3 4 5  Ответить Шустрый ответ Новая тема Новый опрос


 




  banner DIPTRACE - САМЫЙ ЛУЧШИЙ ТАКСИРОВЩИК ПЕЧАТНЫХ ПЛАТ
Portal-X