Сейчас на рынке доступно множество модулей часов реального времени (RTC), таких как DS1307 и DS3231. Но когда дело доходит до оценки энергопотребления, их энергопотребление окажется немного выше чем хотелось бы, что может быстро разрядить батарею в случае, если мы работаем с устройствами с питанием от батареи. Поэтому в подобных устройствах оправдано использование модуля часов реального времени, энергопотребление которого значительно меньше — это модуль PCF8563. Дополнительное отличие данного модуля от других подобных является то, что этот модуль работает по интерфейсу I2C.
PCF8563 — это КМОП (CMOS) часы реального времени (Real-Time Clock, RTC) и календарь, оптимизированные для низкого энергопотребления. Также предусмотрены программируемый выход часов, выход прерывания и детектор низкого напряжения. Все адреса и данные передаются последовательно через двухпроводную двунаправленную шину I²C. Максимальная скорость данной шины составляет 400 кбит/с.
В данной статье мы рассмотрим подключение модуля часов реального времени PCF8563 к плате Arduino UNO. Считываемые с модуля значения даты и времени мы будем отображать на ЖК-дисплее 16×2. Ранее на нашем сайте мы рассматривали аналогичный проект на основе модуля DS1307.
Необходимые компоненты
- Плата Arduino Uno (купить на AliExpress).
- Модуль RTC PCF8563 (купить на AliExpress).
- ЖК дисплей 16х2 (купить на AliExpress).
- Потенциометр 10 кОм (купить на AliExpress).
- Макетная плата
- Соединительные провода.
Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158
Модуль часов реального времени PCF8563
Данный модуль часов реального времени основан на чипсете NXP PCF8563T — программируемом чипсете часов реального времени высокой точности с интерфейсом I2C и частотой обмена данными до 400 кГц / 400 Кбит/с.
Он предлагает множество функций, таких как внешний программируемый выход часов, будильник, таймер и лучшую резервную батарею. Он более устойчив и точен, чем DS1302 или DS1307. Плата RTC PCF8563 обеспечивает функцию часов реального времени/календаря, которая может работать от батареи на плате и работает независимо, даже когда микроконтроллер выключен . Это недорогой, чрезвычайно точный модуль часов реального времени (RTC), работающий по интерфейсу I2C .
Более подробную информацию можно найти в техническом описании PCF8563.
Характеристики PCF8563
1. Отображает год, месяц, день, день недели, часы, минуты и секунды на основе кварцевого кристалла 32,768 кГц.
2. Флаг столетия.
3. Рабочее напряжение часов: от 1,0 В до 5,5 В при комнатной температуре.
4. Низкий ток резервного питания; типично 0,25 мкА при VDD = 3,0 В и температуре = 25 °C.
5. Двухпроводной интерфейс шины I2C 400 кГц (при VDD = 1,8 В до 5,5 В).
6. Программируемый выход часов для периферийных устройств (32,768 кГц, 1,024 кГц, 32 Гц и 1 Гц).
7. Функции будильника и таймера.
8. Встроенный конденсатор генератора.
9. Внутренний сброс при включении питания (POR).
10. Адрес подчиненного (slave) устройства шины I2C: чтение A3h и запись A2h.
11. Контакт прерывания с открытым стоком.
Распиновка PCF8563
Модуль часов реального времени PCF8563 — это модуль I2C, т.е. он работает по двухпроводному протоколу. Он имеет выводы SDA и SCL, которые можно легко подключить к любому микроконтроллеру. Он считывает адрес I2C A3h и записывает адрес I2C как A2h .
Он имеет 4 контакта:
КОНТАКТ 1: VCC — от 1 В до 5,5 В.
КОНТАКТ 2: GND — GND.
КОНТАКТ 3: SDA — Последовательные данные.
КОНТАКТ 4: SCL — Контакт синхронизации.
Схема проекта
Схема подключения модуля часов реального времени PCF8563 к плате Arduino представлена на следующем рисунке.
Подключите контакты SDA и SCL модуля PCF8563 к контактам Arduino A4 и A5. Подключите его контакт VCC к 5 В или 3,3 В, а GND к GND. Аналогично подключите контакты 1, 5, 16 ЖК-дисплея к GND, а 2, 15 к VCC. Подключите потенциометр 10 кОм к контакту 3 ЖК-дисплея для регулировки контрастности. Контакты ЖК-дисплея 4, 6, 11, 12, 13, 14 должны быть подключены к цифровым контактам Arduino 12, 11, 5, 4, 3, 2.
Исходный код программы
Ниже представлен исходный код для подключения модуля часов реального времени PCF8563 к плате Arduino и получения времени и даты. Но перед этим вам нужно установить библиотеку для работы с ним. Загрузите библиотеку по следующей ссылке.
Теперь скопируйте код ниже и загрузите его на плату Arduino. Обязательно измените дату и время в коде на текущее время/дату.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
#include <Wire.h> #include <Rtc_Pcf8563.h> #include <LiquidCrystal.h> //init the real-time clock Rtc_Pcf8563 rtc; LiquidCrystal lcd(12 ,11 ,5 ,4 ,3 ,2); void setup() { // set up the LCD's number of rows and columns: lcd.begin(16, 2); lcd.setCursor(4, 0); lcd.print("PCF8563"); lcd.setCursor(0, 1); lcd.print("Real Time Clock"); delay(4000); lcd.clear(); //clear out all the registers rtc.initClock(); //set a time to start with. //day, weekday, month, century, year rtc.setDate(20, 3, 1, 20, 20); //hr, min, sec rtc.setTime(16, 38, 48); } void loop() { lcd.setCursor(0, 0); lcd.print("Time:"); lcd.setCursor(6, 0); //lcd.print(rtc.formatTime(RTCC_TIME_HM)); lcd.print(rtc.formatTime()); lcd.setCursor(0, 1); lcd.print("Date:"); lcd.setCursor(6, 1); //lcd.print(rtc.formatDate(RTCC_DATE_ASIA)); lcd.print(rtc.formatDate()); // delay(1000); } |
После загрузки кода на ЖК-дисплее начнет отображаться текущее время и дата с указанием прошедшего времени.

6 ответов к “Подключение модуля часов реального времени PCF8563 к Arduino”
Здравствуйте. Как изменится скетч и подключение если ЖК дисплей 16х2 заменить на LCD1602?
Добрый день. Так это один и тот же дисплей.
LCD1602 подключается четырьмя пинами по шине 12С.
1. Назначение контактов модуля
Модуль I2C (обычно на базе чипа PCF8574) имеет 4 вывода :
Вывод модуля Назначение Подключение к Arduino Uno
GND Земля GND
VCC Питание (5В) 5V
SDA Линия данных I2C A4
SCL Линия синхронизации I2C A5
Важно: На модуле есть синий потенциометр для регулировки контрастности и перемычка для управления подсветкой
2. Установка необходимых библиотек
В стандартном наборе Arduino IDE нет библиотеки для I2C-версии дисплея, поэтому ее нужно установить.
Откройте Arduino IDE.
Перейдите в меню Инструменты → Управление библиотеками… (или Sketch -> Include Library -> Manage Libraries).
В строке поиска введите LiquidCrystal I2C.
Найдите библиотеку «LiquidCrystal I2C» (автор: Frank de Brabander) и установите ее
3. Определение I2C-адреса дисплея
Это самый частый источник проблем. Адрес дисплея может отличаться (обычно 0x27 или 0x3F) . Чтобы узнать точный адрес, загрузите в Arduino следующий скетч-сканер
include
void setup() {
Wire.begin();
Serial.begin(9600);
while (!Serial);
Serial.println(«\nI2C Scanner»);
}
void loop() {
byte error, address;
int nDevices;
Serial.println(«Scanning…»);
nDevices = 0;
for (address = 1; address < 127; address++) { Wire.beginTransmission(address); error = Wire.endTransmission(); if (error == 0) { Serial.print("I2C device found at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); nDevices++; } else if (error == 4) { Serial.print("Unknown error at address 0x"); if (address < 16) Serial.print("0"); Serial.println(address, HEX); } } if (nDevices == 0) Serial.println("No I2C devices found\n"); else Serial.println("done\n"); delay(5000); } Загрузите этот код в Arduino Uno. Откройте Инструменты → Монитор порта (скорость 9600). В мониторе порта вы увидите надпись: I2C device found at address 0x27 (или другой адрес). Запомните этот адрес. 4. Пример кода для вывода текста Этот код выведет сообщение "Hello, World!" и количество прошедших секунд. include
include
// Укажите адрес, который вы получили в предыдущем шаге (0x27 или 0x3F)
// 16 — количество символов в строке, 2 — количество строк
LiquidCrystal_I2C lcd(0x27, 16, 2);
int count = 0;
void setup() {
lcd.init(); // Инициализация дисплея
lcd.backlight(); // Включение подсветки
lcd.print(«Hello, World!»);
}
void loop() {
lcd.setCursor(0, 1); // Переместить курсор в начало второй строки
lcd.print(«Count: «);
lcd.print(count);
count++;
delay(1000);
}
5. Возможные проблемы и их решение
Дисплей не показывает текст, видна только подсветка или верхняя строка залита белыми квадратами :
Причина: Чаще всего это неверный I2C-адрес.
Решение: Повторите шаг 3, чтобы определить точный адрес, и исправьте его в строке LiquidCrystal_I2C lcd(…).
Причина: Слишком низкая или высокая контрастность.
Решение: Аккуратно поверните синий потенциометр на задней стороне модуля маленькой отверткой, пока текст не станет четко виден .
Ошибка компиляции «LiquidCrystal_I2C.h: No such file or directory»:
Решение: Библиотека установлена неправильно. Повторите шаг 2, убедитесь, что вы установили именно библиотеку «LiquidCrystal I2C» .
Выводятся только первые символы в строке:
Решение: Это редкая проблема, связанная с версией библиотеки. Если вы столкнулись с тем, что после текста из 16 символов дальше ничего не выводится, можно попробовать найти и установить другую версию библиотеки LiquidCrystal_I2C или отредактировать файл LiquidCrystal_I2C.cpp, изменив в нем return 0; на return 1; в одной из функций, как описано в некоторых источниках . Начните с проверки адреса и контрастности — они решают 99% проблем.
Таким образом, использование I2C значительно упрощает подключение LCD1602 к Arduino Uno, требуя всего 4 провода и небольшого количества кода.
Если все это у вас получится, то вам останется только добавить в него фрагмент кода из статьи для работы с модулем часов реального времени PCF8563
Вам бы нанять переводчика, который разбирается в электронике. И переводит без Гугла.
Вот что это: «Низкий ток резервного копирования; типично 0,25 А»? Во-первых, это ток резервного питания, а не копирования. Во-вторых, ток 0.25А посадит резервный элемент питания всего-то за 1 (один) час. Это не резерв! Если почитать даташит, то там указан ток резервного питания 0.25 микроамперa, так что ваш «переводчик» ошибся. Так, совсем чуть-чуть, всего-то в миллион раз.
Почему так получилось? а потому, что не во всех шрифтах есть греческая буква «мю», которая используется в качестве сокращения для «микро».
Был бы переводчик более внимательным и ответственным, он написал бы так:
«Низкий ток резервного питания; типично 0,25 мкА».
А вообще сайт хорош! Читаю с удовольствием и интересом.
Удачи!
Спасибо, исправил отмеченную вами опечатку. И спасибо что оценили мой труд.
Раньше я все статьи на сайт переводил вручную и большая часть статей на сайте переведена именно так, но в последнее время стал прибегать и к услугам гугл переводчика (его переводы стали сейчас значительно лучше чем раньше) чтобы сэкономить время, но я обязательно читаю его перевод и поправляю вручную все неточности в его переводе. А опечатку, которую вы нашли, да, к сожалению, я пропустил из-за невнимательности. Но, надеюсь, таких опечаток на сайте сейчас все же мало.
Ну и в программировании мне, конечно, легче находить неточности в переводе гугла чем в электронике потому что программирование я знаю лучше чем электронику, хотя изначально у меня диплом по специальности «Инженер радиосвязи» и, конечно же, определенные знания по электронике у меня еще остались.