РадиоКот :: МегаТермо
Например TDA7294

РадиоКот >Схемы >Цифровые устройства >Бытовая техника >

Теги статьи: Добавить тег

МегаТермо

Автор: Алексей aka Gordon Shumway
Опубликовано 17.08.2011
Создано при помощи КотоРед.
2011

 

 

Доброго времени суток, уважаемые гуру даташитов и паяльников !

Часть первая, официально-поздравительная.

 

Поздравляю уважаемого Кота с днем рождения ! Желаю ему нескончаемую бочку сметаны !

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

 

“Мега Термометр” !

 

Часть вторая, повествовательно-техническая.

 

Все началось с того, что мне в руки попал дисплей от народной Нокии 3310, а вернее его китайский аналог. И доэкспериментировался я с ним до термометра, поскольку решил попутно позаниматься с термодатчиками DS18b20.

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

 

Измерение температуры делается раз в 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

за его огромную помощь, напутствия и тестирование сего девайса !  СПАСИБО !!!   

 


Файлы:
Оригинальная библиотека
Файлы проекта
Генератор символов
Рисовалка


Все вопросы в Форум.




Как вам эта статья?

Заработало ли это устройство у вас?

56 0 1
15 0 3