МегаТермо
Автор: Алексей aka Gordon Shumway
Доброго времени суток, уважаемые гуру даташитов и паяльников ! Часть первая, официально-поздравительная.
Поздравляю уважаемого Кота с днем рождения ! Желаю ему нескончаемую бочку сметаны ! Ну а чтобы уважаемому коту комфортно дремалось после очередной порции сметанки, предлагаю собрать нижеописанный высокотехнологичный девайс под названием
“Мега Термометр” !
Часть вторая, повествовательно-техническая.
Все началось с того, что мне в руки попал дисплей от народной Нокии 3310, а вернее его китайский аналог. И доэкспериментировался я с ним до термометра, поскольку решил попутно позаниматься с термодатчиками DS18b20. В результате получился домашний термометр, который кушает мало энергии, умеет показывать температуру в комнате и на улице, запоминать и показывать по необходимости максимум и минимум за период измерения. И все это с картинками !
Измерение температуры делается раз в 15 секунд, по таймерному прерыванию. После измерения информация выводится на дисплей, и микроконтроллер уходит в режим Idle. В любой момент времени можно нажать кнопку S1 для просмотра зафиксированных максимумов и минимумов для внутреннего и наружного датчиков. При нажатии S2 максимумы и минимумы будут сброшены на текущие показания температуры. В исходном состоянии на дисплей слева от показаний могут выводиться стрелки, которые указывают на изменение температуры в сравнении с предыдущим измерением. Появление смайлика в правом верхнем углу указывает на то, что сейчас идет процесс снятия показаний с датчиков температур и вывод обновленной информации на дисплей.
Левая кнопка - показать максимумы и минимумы, правая - сбросить максимумы и минимумы на текущие показания. Под дисплей я подложил отрезок листа белой бумаги - так картинка смотриться лучше. Справа виден датчик, который должен висеть на улице.
Внутренняя температура понизилась, внешняя - повысилась. В такую жару куры несутся вкрутую !
Просмотр максимумов и минимумов. Немного кривовато получилось :)
Вид сзади. Программа разрабатывалась на Bascom AVR, использовалась немного доработанная библиотека для дисплея Nokia3310:
Картинки рисовались в программе FastLCD. Символы делались в экселевском генераторе символов. Схема питается от трех вольт. В режиме Idle схема употребляет 0.4мА с микроконтроллером Atmega8a-pu (au), и 0,6 мА с микроконтроллером Atmega8-16PU (но работа его от трех вольт не гарантирована). При измерении температуры ток возрастает до 2,5 мА. Повышать питание выше трех вольт не рекомендуется, ибо чревато для дисплея. Я запитал схему от элемента питания CR123A (от фотоаппаратов). Часть третья, обучающая.
В процессе работы над термометром у меня появлялось много вопросов по работе с дисплеем от Nokia3310 в среде Bascom AVR. Были эксперименты (иногда со спецэффектами), не обошлось без Гугла и одного погибшего смертью экспериментатора дисплея. В результате я решил набросать небольшой мануал для быстрого старта в работе с диспелеем на Bascom AVR. Все необходимые файлы для глумления над кодом есть в архиве. Так же в архиве есть стандарная и доработанные библиотеки для дисплея. Разбирая текст программы, несложно разобраться с принципом вывода информации на дисплей, но я остановлюсь на нескольких деталях:
$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" ‘в самом конце программы !
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" ‘в самом конце программы !
B1: Data &H7F , &H48 , &H44 , &H44 , &H38
И вставляем свою: B1 Data &H00 , &H00 , &H06 , &H06 , &H00
Теперь если написать Call D3310position(4 , 3) Call D3310print(b)
то выведется символ градуса. Символы рисуются размером 5x7 точек, нижняя шестая строка и правый восьмой столбец забиваются автоматически нулями, чтобы был межсимвольный и межстроковой интервал. Это делает сама библиотека. PS: Хочу выразить свою огромную благодарность посетителю форума edm2007 за его огромную помощь, напутствия и тестирование сего девайса ! СПАСИБО !!!
Файлы: Все вопросы в Форум.
|
|
|||||||||||||||
|
||||