Радиомастер гид в мире электроники » Статьи » Программирование » Arduino » Часы DS1302 для Arduino Uno с ЖК экраном BTHQ 22005VSS
Информация к новости
  • Просмотров: 5379
  • Добавил: Dina
  • Дата: 29 ноября 2013
29 ноября 2013

Часы DS1302 для Arduino Uno с ЖК экраном BTHQ 22005VSS

Категория: Статьи » Программирование » Arduino

Началось все с того, что волею случая я оказался владельцем текстового ЖК экрана BTHQ 22005VSS (2 строки по 20 знаков в каждой) и платы электронных часов DS1302. По правде говоря, в «Ардуиностроении» я делаю первые шаги, по этому, в приобретении данных деталей решающую роль сыграла демократичная цена и возможность быстрой доставки. Ведь, зачастую ждать, когда «девайс» прибудет из Поднебесной, обогнув почти «пол мира» некогда, да и просто не хочется.

Почему именно часы? В то время, когда вокруг продается масса разнообразных часов, цена самых простых из которых сравнима с пакетом сока. А дело все в том, что зачастую необходимо не просто знать точное время (и дату, что тоже иногда нужно) но еще и оперировать этим временем. Например – вести логи изменения температуры (влажности, давления, освещенности и т.п.) с указанием точного времени, когда эти изменения произошли. Вот тут-то ARDUINO оснащенный часами и окажет замечательную услугу. Да и кроме того, приятно, когда прибор ко всему прочему показывает еще и время. Ведь, даже работая на персональном компьютере мы изредка, да поглядываем в правый нижний угол, а вдруг уже пора на обед, или наступил конец рабочего дня, а может быть уже скоро рассвет?

Сердцем данного проекта послужил ARDUINO UNO, приобрести который довольно просто это, конечно, если хочется купить что-то качественное и быстро. Можно, конечно найти и дешевле, но опять-же ждать, а ждать не хотелось. «Ардуинка» бодро моргала светодиодиком, выполняла все, что от неё требовалось давая простенькие сообщения через последовательный порт, в общем радовала. Но вернемся к часам. Проблемы начались, как всегда, неожиданно. Толковых статей и всего остального ни на экранчик, ни на часы «слёту» найти не удалось. На другие экраны – есть, на другие часы – сколько угодно, а вот на то, что в руках – почти ничего. Но, когда нет ничего – «почти» это тоже очень много. Начнем с экрана. BTHQ 22005VSS оказался банальным ЖК экраном 20х2 (т.е. имеет 2 строки по 20 символов в каждой) вместо него вполне можно использовать, например экран

Часы DS1302 для Arduino Uno с ЖК экраном BTHQ 22005VSS


Часы DS1302 для Arduino Uno с ЖК экраном BTHQ 22005VSS


правда в нем «всего» 16 символов в каждой из строк, но для большинства проектов этого более, чем достаточно. Данный экран имеет 16-пиновый разъем, правда не однорядный, а двухрядный (2х8), если держать устройство экраном от себя, а разъемом справа, то первый пин будет нижним левым, второй нижним правым, третий над первым, четвертый над вторым, и т.д. Верхний левый (15) будет анод, верхний правый (16) – катод. Если есть знания английского и любознательность – можно почитать техническое описание (1).

Если первого крайне мало, а любознательность гораздо слабее желания поэкспериментировать – вот, как подключал я:

Часы DS1302 для Arduino Uno с ЖК экраном BTHQ 22005VSS


В некоторых источниках «распиновка» со стороны Ардуино отличается, но ведь мне было удобнее так. Подключение часов также не вызвало проблем:

Часы DS1302 для Arduino Uno с ЖК экраном BTHQ 22005VSS


Подключать можно проводками, шлейфом, лично я собрал на макетной плате. Проблемы начались, когда был загружен демоскетч и часы заработали. Правда показали они 2165 год, 45 месяц, 85 неделю... Наверное это по «уранскому» или «нептунскому» календарю… Но жить мне на Земле, а на Уран с Нептуном я пока не собираюсь. В общем надо что-то делать. Пайка в цепь GND->GND резистора 10кОм не помогла. Проблема оказалась в некорректной библиотеке. Сразу скажу, что корректную библиотеку можно взять здесь (2). Это для часов. Экранчик успешно пользуется библиотекой из стандартного набора, которая зовется LiquidCrystal.h.

Проблема №2. Часы при каждом запуске начинают отсчет с того времени, которое «прошито» в программе. Есть сложное решение этой проблемы. Создать хеш, записать его в память часов, потом, при запуске считать его оттуда, сравнить… В общем для новичка в «Ардуиностроении» как то сложновато. Как оказалось есть и простое решение. точнее очень простое. А именно – прошить 2 раза. Первый раз – прошить с установкой даты и времени, второй раз прошить, предварительно «закомментировав» (поставив знак // в самом начале строки) строки с установкой этой самой даты.

Часы DS1302 для Arduino Uno с ЖК экраном BTHQ 22005VSS


Часы DS1302 для Arduino Uno с ЖК экраном BTHQ 22005VSS


Часы DS1302 для Arduino Uno с ЖК экраном BTHQ 22005VSS


Часы DS1302 для Arduino Uno с ЖК экраном BTHQ 22005VSS


Собственно говоря скетч:
// DS1302_LCD (C)2010 Henning Karlsen
// web: http://www.henningkarlsen.com/electronics
//
// A quick demo of how to use my DS1302-library to make a quick
// clock using a DS1302 and a 20x2 LCD.
//
// Соответствие пинов часов и экрана пинпм Ардуино.
// DS1302: CE pin -> Arduino Digital 3
// I/O pin -> Arduino Digital 1
// SCLK pin -> Arduino Digital 0
// LCD: DB7 -> Arduino Digital 13
// DB6 -> Arduino Digital 12
// DB5 -> Arduino Digital 11
// DB4 -> Arduino Digital 10
// E -> Arduino Digital 5
// RS -> Arduino Digital 4
#include <liquidcrystal.h> // Подключение библиотеки экрана.
#include <ds1302.h> // Подключение библиотеки часов.
// Инициализация пинов часов
DS1302 rtc(3, 1, 0);
// Инициализация пинов экрана
LiquidCrystal lcd(4, 5, 10, 11, 12, 13);
void setup()
{
// Запуск часов
rtc.halt(false);
rtc.writeProtect(false);
// Запуск экрана с указанием количества символов и строк
lcd.begin(20, 2);
// Три нижние строчки в первый раз раскомментированы, в них указываем текущую дату и время. Второй раз - закомментруем.
//rtc.setDOW(THURSDAY); // День недели, если пятница, то FRIDAY на русском не писать!
//rtc.setTime(11, 41, 0); // Часы, минуты, секунды 24-часовой формат.
//rtc.setDate(13, 6, 2013); // Дата. ЦИФРАМИ!!! Ноль перед одиночной цифрой можно не ставить!
}
void loop()
{
// Display time centered on the upper line
lcd.setCursor(6, 0); // Устанавливаем курсор для печати времени в верхней строчке
lcd.print(rtc.getTimeStr()); // Печатаем время
// Display abbreviated Day-of-Week in the lower left corner
lcd.setCursor(0, 1); // Устанавливаем курсор слева внизу для печати дня недели
lcd.print(rtc.getDOWStr(FORMAT_LONG)); // Печатаем день недели полностью, благо экран позволяет.
// Display date in the lower right corner
lcd.setCursor(9, 1); // Устанавливаем курсор для печати даты
lcd.print(rtc.getDateStr()); // Печатаем дату
// Wait one second before repeating :)
delay (1000); // Пауза 1 секунда и все по новой!
}


Возникают вопросы:
1. - А что будет, если отключить питание?
- Ничего. Часы погаснут. Когда питание включится они покажут нужное время.
2. – А что будет, если отключить питание на сутки, или неделю?
- Если нормальная батарейка – запустятся и через неделю и покажут корректное время.
3. – А если разобрать Ардуинку?
- Если поблочно – т.е. отключить экран и часы, а потом аккуратно собрать, то все запустится и будет нормально работать.
4. - А если использовать Ардуинку в другом проекте, что тогда?
- Тогда при сборке часов придется прошивать, скорее всего, будет достаточно только 2-го варианта.
5. – А если вынуть одни часы и поставить такие-же, но другие?
- Отобразится время, «прошитое» в «других» часах.
6. – А что еще было применено в данном проекте?
- Двухсторонняя макетная плата, резистор и несколько разъемов. Также блок питания 6В, 1А. Всё это на сумму примерно 5$.

(1). Вы не можете скачивать файлы с нашего сервера
(2). Вы не можете скачивать файлы с нашего сервера

Метки к статье: часы, схема часов, часы с жк экраном, схема часов с жк экраном



Добавление комментария

Имя:*
E-Mail:*
Введите два слова, показанных на изображении: *

Друзья и партнеры:

Архив новостей

Декабрь 2016 (8)
Ноябрь 2016 (1)
Сентябрь 2016 (3)
Июнь 2016 (1)
Май 2016 (1)
Апрель 2016 (1)
^
 
-->