Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Удаленная работа
Помощь проекту

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

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

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

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

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

Контакт экрана Контакт Ардуино Примечание
1 GND Это «минус», или «земля».
2 +5V  
3 GND Если нужны яркие знаки.
4 4  
5 GND Если только «писать».
6 5  
7 -- Не использовал
8 -- Не использовал
9 -- Не использовал
10 -- Не использовал
11 10  
12 11  
13 12  
14 13  
А(15) +5V Я подключил через резистор 500 Ом
К(16) GND  

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

Часы DS1302 Ардуино Примечание
VCC +5V  
GND GND Тут я подключал через резистор 10кОм.
CLK 0 Не путать с GND!!! Контакт также называется SCLK
DAT 1 Контакт также называется IO
RST 3 Контакт также называется СЕ

Подключать можно проводками, шлейфом, лично я собрал на макетной плате.

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

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


 


Собственно говоря скетч:

 
Код:
// 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$. 

Обзор подготовил Павел Сергеев


C этой схемой также часто просматривают:

ЗАЖИГАЛКА ДЛЯ ГАЗА
Зарядное устройство для автомобильных и мотоциклетных батарей
Зарядное устройство для автомобильных аккумуляторов
Имитатор для проверки телефонных аппаратов
Простые датчики для охранной сигнализации
Arduino UNO урок 14 - цифровой компас HMC5883L
Arduino UNO урок 13 - драйвер двигателя L298N
Arduino UNO урок 12 - Подключение джойстика
Arduino UNO урок 11 - Serial LCD

Главные категории

Arduino


Аудио


В Вашу мастерскую


Видео


Для автомобиля


Для дома и быта


Для начинающих


Зарядные устройства


Измерительные приборы


Источники питания


Компьютер


Медицина и здоровье


Микроконтроллеры


Музыкантам


Опасные, но интересные конструкции


Охранные устройства


Программаторы


Радио и связь


Радиоуправление моделями


Световые эффекты


Связь по проводам и не только...


Телевидение


Телефония


Узлы цифровой электроники


Фототехника


Шпионская техника



Реклама на KAZUS.RU




Последние поступления

Графический семиполосный эквалайзер-радуга на Arduino Nano и MSGEQ7

Часы реального времени для Arduino

Старинные часы-метеостанция

Блок питания для Arduino из ATX

ATX блок питания управляемый Arduino

Arduino своими руками с USB портом

Подключение монетоприемника к Arduino

Подключение PS/2 клавиатуры к Arduino

Пробуждение ПК по сети на Arduino

Запись/чтение на SD-карту с Arduino



© 2003—2017 «KAZUS.RU - Электронный портал»