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

Для повторения девайса из внешних деталей понадобится 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
На время измерения (~100мс для температуры и ~50мс для влажности) потребляет около 300мкА. В остальное время — не больше 10мкА. Это при условии, что работает только МК, дисплей и датчик
Доброго всем времени суток, есть задача выводить на дисплей STM8l-Discovery числа (разные в зависимости от вычисления программы и смещать их), такая программа должна быть написана на ассемблере. Вопрос в следующем: есть ли какая библиотека для LCD на ассемблере?
P. S. Не удивляйтесь вопросу я профан)
P. S. Не удивляйтесь вопросу я профан)
я уже всю логику написал и дисплей «подключил». Но вот не хватает опыта:
например: двойка в первой позиции дисплея выглядит так:
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"
ОЧЕНЬ НАДЕЮСЬ НА ПОМОЩЬ, ЗАРАНЕЕ БЛАГОДАРЕН!!!
например: двойка в первой позиции дисплея выглядит так:
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"
ОЧЕНЬ НАДЕЮСЬ НА ПОМОЩЬ, ЗАРАНЕЕ БЛАГОДАРЕН!!!
В качестве отдыха решил повторить описанную конструкцию.
Все скачал, спаял, собрал, запустил.
Поставил на подтяжку для начала 12КОм. Работало неустойчиво (на осцилле видно было как с трудом SCL поднимается), точней вообще не работало (команду еще отправляло, а считывало только 2 байта, на третьем уже ошибка шины).
А воткнул 4,7К и сразу заработало как надо :)
Провода похоже длинные (30см), да еще и лапшой.
Спасибо за разработку. Теперь будет дома гигрометр.
Все скачал, спаял, собрал, запустил.
Поставил на подтяжку для начала 12КОм. Работало неустойчиво (на осцилле видно было как с трудом SCL поднимается), точней вообще не работало (команду еще отправляло, а считывало только 2 байта, на третьем уже ошибка шины).
А воткнул 4,7К и сразу заработало как надо :)
Провода похоже длинные (30см), да еще и лапшой.
Спасибо за разработку. Теперь будет дома гигрометр.
Комментарии (18)
RSS свернуть / развернуть