В результате получился домашний термометр, который кушает мало энергии, умеет показывать температуру в комнате и на улице, запоминать и показывать по необходимости максимум и минимум за период измерения. И все это с картинками !
Измерение температуры делается раз в 15 секунд, по таймерному прерыванию.
После измерения информация выводится на дисплей, и микроконтроллер уходит в режим Idle. В любой момент времени можно нажать кнопку S1 для просмотра зафиксированных максимумов и минимумов для внутреннего и наружного датчиков.
При нажатии S2 максимумы и минимумы будут сброшены на текущие показания температуры.
В исходном состоянии на дисплей слева от показаний могут выводиться стрелки, которые указывают на изменение температуры в сравнении с предыдущим измерением.
Появление смайлика в правом верхнем углу указывает на то, что сейчас идет процесс снятия показаний с датчиков температур и вывод обновленной информации на дисплей.
Левая кнопка - показать максимумы и минимумы, правая - сбросить максимумы и минимумы на текущие показания. Под дисплей я подложил отрезок листа белой бумаги - так картинка смотриться лучше. Справа виден датчик, который должен висеть на улице.
Внутренняя температура понизилась, внешняя - повысилась. В такую жару куры несутся вкрутую !
Просмотр максимумов и минимумов. Немного кривовато получилось :)
Вид сзади.
Программа разрабатывалась на Bascom AVR, использовалась немного доработанная библиотека для дисплея Nokia3310:
- в файле 3310end.bas были закомментированы строки с неиспользованными символами, что сильно экономит память;
- были нарисованы новые символы (знак градуса, смайлик, стрелки);
- были внесены изменения в прорисовку самих символов (чтобы сама картинка не портилась при выводе информации).
Картинки рисовались в программе FastLCD.
Символы делались в экселевском генераторе символов.
Схема питается от трех вольт.
В режиме Idle схема употребляет 0.4мА с микроконтроллером Atmega8a-pu (au),
и 0,6 мА с микроконтроллером Atmega8-16PU (но работа его от трех вольт не гарантирована).
При измерении температуры ток возрастает до 2,5 мА.
Повышать питание выше трех вольт не рекомендуется, ибо чревато для дисплея.
Я запитал схему от элемента питания CR123A (от фотоаппаратов).
В процессе работы над термометром у меня появлялось много вопросов по работе с дисплеем от Nokia3310 в среде Bascom AVR. Были эксперименты (иногда со спецэффектами), не обошлось без Гугла и одного погибшего смертью экспериментатора дисплея. В результате я решил набросать небольшой мануал для быстрого старта в работе с диспелеем на Bascom AVR. Все необходимые файлы для глумления над кодом есть в архиве. Так же в архиве есть стандарная и доработанные библиотеки для дисплея.
Разбирая текст программы, несложно разобраться с принципом вывода информации на дисплей, но я остановлюсь на нескольких деталях:
- Файлы из библиотеки должны быть в одной папке с вашей программой.
- Дисплей Nokia 3310 состоит из 14 столбцов (с 0 по 13) и 6 строк (с 0 по 5).
- Выводить можно только строковую переменную или нужный текст в кавычках:
$include "3310init.bas"
Call D3310reset ‘сброс и инициализация дисплея
Call D3310init
Call D3310clear ‘очистка дисплея
Dim a as integer
Dim b As String * 10
‘Программа, в результате чего считаем переменную “a”
b = str (a)
Call D3310position(4 , 1) ‘ здесь задаем позицию для вывода, X и Y
Call D3310print(b) ‘ и выводим значение “b”
Call D3310position(4 , 3)
Call D3310print(“Hello world !!!”) ‘ здесь выводим текст
* * * * *
$include "3310end.bas" ‘в самом конце программы !
- Картинку готовим в программе FastLCD – выбираем размер экрана 84х48 точек, и сетку 6х8 – так мы будем видеть экран, поделенный на знакоместа. Рисуем точками, потом нажимаем кнопку BAS и сохраняем полученный файл в виде файла “имя.bas”. Открываем полученный файл и приводим его к такому виду:
bmp:
data &hFC,&h02,&h01,&h01,&h01,&h01,&h01,&h01,&h81,&h41,&h21,&h11,&hC9,&h11
data &hF9,&hF9,&h01,&h01,&h01,&h01,&h01,&h01,&h01,&h01,&h01,&h01,&h01,&h01
А выводим так:
Restore Bmp
Call D3310bmpout
* * * * *
Текст программы
* * * * *
$include "имя.bas" ‘в самом конце программы !
- Нужные символы рисуем так: открываем генератор символов, ставим единички там, где нужно закрасить точку. Потом копируем строку Data и вставляем ее в файл 3310end.bas в блок “ASCII data” вместо нужного символа. Например, нам не нужен символ "b", вместо него мы хотим нарисовать символ градуса. Находим строку:
B1:
Data &H7F , &H48 , &H44 , &H44 , &H38
И вставляем свою:
B1
Data &H00 , &H00 , &H06 , &H06 , &H00
Теперь если написать
Call D3310position(4 , 3)
Call D3310print(b)
то выведется символ градуса.
Символы рисуются размером 5x7 точек, нижняя шестая строка и правый восьмой столбец забиваются автоматически нулями, чтобы был межсимвольный и межстроковой интервал.
Это делает сама библиотека.
PS: Хочу выразить свою огромную благодарность посетителю форума edm2007
за его огромную помощь, напутствия и тестирование сего девайса ! СПАСИБО !!!
Файлы:
Оригинальная библиотека
Файлы проекта
Генератор символов
Рисовалка