Измеритель температуры и влажности на STM8L-Discovery + SHT21

Как и общал, выкладываю код своего термометра на базе STM8L-Discovery.
Для повторения девайса из внешних деталей понадобится sht21 и пара резисторов для подтяжки.

Программа регулярно опрашивает датчик и выводит на дисплей поочередно температуру и влажность, меняя их каждые 3 секунды.



Алгоритм работы выглядит так:
1) Инициализация периферии
2) Подаем датчику команду на измерение температуры
3) Уходим в halt режим на 100мс
4) Читаем показания датчика
5) Подаем команду на измерение влажности
6) Спим 50мс
7) Читаем влажность
8) Пересчитываем влажность и температуру. Переводим в BCD для вывода на дисплей.
9) Выводим на дисплей температуру.
10) Спим 3 секунды
11) Выводим на дисплей влажность.
12) Спим еще 3 секунды.
— goto 2).

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

Код там довольно хорошо напичкан комментами, но если возникнут вопросы — спрашивайте.

Перед компиляцией в iar надо переписать пути для inc и src в настройках проекта. При переносе проекта в другой компилятор, обратите внимание, что обработчики прерываний прописаны в файле stm8l15x_it.c
  • +3
  • 05 августа 2011, 11:33
  • dcoder
  • 1
Файлы в топике: I2C (SHT21).zip

Комментарии (18)

RSS свернуть / развернуть
эх, высокие языки, стандартные библиотеки… интересно, на авр эта программа в килобайт влезет?
0
  • avatar
  • hexFF
  • 05 августа 2011, 19:21
Легко, если юзать семисегментники для индикации
Я на тини2313 делал термометр на два датчика DS18b20 c трехразрядным семисегментником и функцией обмена с компом по самопальному протоколу типа 1-wire
0
Но и тут можно было оптизировать. Но зачем? 32кБ памяти же :)
+1
А сколько это всё потребляет?
0
На время измерения (~100мс для температуры и ~50мс для влажности) потребляет около 300мкА. В остальное время — не больше 10мкА. Это при условии, что работает только МК, дисплей и датчик
0
Насколько я вижу, ты выводишь влажность округляя до процента. Нафига тебе тогда полная точность? На 8/12 же он раз в 10 быстрее и, соответственно, экономичнее.
0
Думал в лог писать или скидывать на комп. А если так, то и температуру обрезать можно.
0
sht, влажность. ds18b20 — вот сила:)
0
  • avatar
  • PRC
  • 09 августа 2011, 19:28
Да он прожорливый как черт :) целый миллиампер кушает.

Алсо, что там делает кварц на 20Мгц, если максимум — 16?
0
Работает однако. Он мне первым попался, его и вкорячил.
0
Доброго всем времени суток, есть задача выводить на дисплей STM8l-Discovery числа (разные в зависимости от вычисления программы и смещать их), такая программа должна быть написана на ассемблере. Вопрос в следующем: есть ли какая библиотека для LCD на ассемблере?

P. S. Не удивляйтесь вопросу я профан)
0
Зачем ассемблер?
Если ты способен писать на ассемблере — даташит в зубы и вперед, работать с контроллером ЖК напрямую.
0
  • avatar
  • Vga
  • 01 сентября 2011, 17:27
я уже всю логику написал и дисплей «подключил». Но вот не хватает опыта:
например: двойка в первой позиции дисплея выглядит так:
mov LCD_RAM6, #%00000100 ;X,X,X,X,F1,A1,F2,A2
mov LCD_RAM0, #%00000011 ;4E,4M,3E,3M,2E,2M,1E,1M
mov LCD_RAM2, #%11000000 ;G1,B1,G2,B2,G3,B3,G4,B4
mov LCD_RAM3, #%00010000 ;C2,D2,C1,D1,X,X,X,X
во второй и в третьей позициях она выглядит совершенно по-другому и логики не прослеживается.
Если мне нужно, что бы в 6 позициях выводить числа 0,1,2,.., Е,F, то потребуется описать 96 таких комбинаций!!! Или я чего-то не понимаю???
Вот я и спрашиваю: есть ли какие библиотеки для ЖК формата ".inc"
ОЧЕНЬ НАДЕЮСЬ НА ПОМОЩЬ, ЗАРАНЕЕ БЛАГОДАРЕН!!!
0
Можешь посмотреть как сделано у STM в ее periferal library. Заодно и массивы кодов символов можно оттуда же спереть.
0
  • avatar
  • Vga
  • 01 сентября 2011, 18:15
проблема в том, что там только библиотеки ".c, .h"
0
И что? Разбирайся как работают и реализуй на ассемблере. Можно правда еще их скомпилить и слинковать с проектом на асме.
0
  • avatar
  • Vga
  • 01 сентября 2011, 19:20
спасибо )
буду пробовать
0
В качестве отдыха решил повторить описанную конструкцию.
Все скачал, спаял, собрал, запустил.
Поставил на подтяжку для начала 12КОм. Работало неустойчиво (на осцилле видно было как с трудом SCL поднимается), точней вообще не работало (команду еще отправляло, а считывало только 2 байта, на третьем уже ошибка шины).
А воткнул 4,7К и сразу заработало как надо :)
Провода похоже длинные (30см), да еще и лапшой.
Спасибо за разработку. Теперь будет дома гигрометр.
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.