Каталог статей

Главная » Все схемы » Схемы устройств на микроконтроллерах » Устройства на микроконтроллерах

Выбранная схема!!!


3652
МегаТермо

Автор: Алексей aka Gordon Shumway
Все началось с того, что мне в руки попал дисплей от народной Нокии 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

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

           


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





          Категория: Устройства на микроконтроллерах | Добавил: brys99 (04.12.2011)
          Просмотров: 5542 | Комментарии: 2 | Теги: МегаТермо | Рейтинг: 5.0/4


          Всего комментариев: 2
          0
          2 igor43nv   (10.10.2012 20:59)
          Собрал-работает(правда пока датчики не купил).Спасибо.
          http://cxema.my1.ru/forum/54-1239-1

          0
          1 igor43nv   (09.10.2012 21:56)
          Какие фузы надо выставлять?

          Все ссылки на книги и журналы, представлены на этом сайте, исключительно для ознакомления, авторские права на эти публикации принадлежат авторам книг и издательствам журналов! Подробно тут!
          Жалоба

          Пожалуйста оставьте свои комментарии !!!!

          Имя *:
          Email:
          Код *:


          ElectroTOP - Рейтинг сайтов
          Copyright Zloy Soft (Company) © 2008 - 2016