Работа с модулем реального времени DS1307 и LCD 16×2 в Proteus
Данная статья написана для обучения работе с симулятором Proteus и демонстрирует, как использовать модуль реального времени DS1307 совместно с Arduino UNO и символьным LCD-дисплеем 16×2.
Проект позволяет получить базовое понимание протокола I2C, принципов работы RTC-микросхем и вывода времени на дисплей.
Использование Proteus даёт возможность полностью отладить схему и программную логику без подключения реальных компонентов, что особенно удобно для обучения и экспериментов.
Назначение проекта
Проект предназначен для отображения текущего времени (часы, минуты, секунды), считываемого с микросхемы DS1307, на LCD-дисплее. Подобное решение часто используется в:
- электронных часах;
- таймерах и контроллерах;
- системах автоматизации;
- проектах с логированием данных;
- устройствах «умного дома».
Необходимые компоненты
- Arduino UNO;
- RTC-модуль DS1307;
- LCD-дисплей 16×2 (HD44780-совместимый);
- Proteus 8 или 9;
- Библиотеки Wire и LiquidCrystal.
Что такое DS1307
DS1307 — это микросхема реального времени (RTC), работающая по интерфейсу I2C. Она хранит текущие значения секунд, минут, часов, даты, месяца и года, а также поддерживает резервное питание от батарейки.
В данном примере используется только базовая часть функционала — чтение времени. Микросхема возвращает данные в формате BCD (двоично-десятичный код), поэтому перед выводом значения необходимо преобразовать в десятичный формат.
Подключение компонентов
DS1307 подключается к Arduino по шине I2C:
- SDA → A4 (Arduino UNO);
- SCL → A5 (Arduino UNO);
LCD-дисплей работает в 4-битном режиме и подключён к цифровым пинам Arduino:
- RS → пин 2;
- EN → пин 3;
- D4–D7 → пины 4, 5, 6, 7.
Принцип работы программы
В начале программы задаётся I2C-адрес микросхемы DS1307 — 0x68. Затем подключаются библиотеки Wire (для I2C) и LiquidCrystal (для работы с дисплеем).
В функции setup() инициализируется I2C-шина и LCD-дисплей,
после чего выводится тестовая надпись.
В основном цикле выполняются следующие шаги:
- установка указателя регистра DS1307 на секунды;
- чтение секунд, минут и часов;
- преобразование значений из BCD в десятичный формат;
- вывод текущего времени на LCD;
- задержка 1 секунда.
Arduino-скетч
#define slave_adress 0x68 // I2C-адрес микросхемы DS1307
#include <Wire.h> // библиотека для работы с I2C
#include <LiquidCrystal.h> // библиотека для LCD-дисплея
byte sec_bcd = 0, min_bcd = 0, hour_bcd = 0; // данные времени в формате BCD
byte sec_dec = 0, min_dec = 0, hour_dec = 0; // данные времени в десятичном формате
// пины подключения LCD
const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
void setup() {
Wire.begin(); // инициализация I2C
lcd.begin(16, 2); // инициализация LCD 16x2
lcd.print("RTC by DS1307");
}
void loop() {
// установка указателя регистра на секунды
Wire.beginTransmission(slave_adress);
Wire.write(0x00); // регистр секунд
Wire.endTransmission();
// запрос 3 байтов: секунды, минуты, часы
Wire.requestFrom(slave_adress, 3);
sec_bcd = Wire.read();
min_bcd = Wire.read();
hour_bcd = Wire.read();
// преобразование BCD в десятичный формат
sec_dec = (sec_bcd & 0x0F) + ((sec_bcd & 0xF0) >> 4) * 10;
min_dec = (min_bcd & 0x0F) + ((min_bcd & 0xF0) >> 4) * 10;
hour_dec = (hour_bcd & 0x0F) + ((hour_bcd & 0xF0) >> 4) * 10;
// вывод времени на LCD
lcd.setCursor(4, 1);
lcd.print(hour_dec);
lcd.print(":");
lcd.print(min_dec);
lcd.print(":");
lcd.print(sec_dec);
delay(1000); // обновление раз в секунду
}
Запуск проекта в Proteus
Для запуска проекта в Proteus:
- распакуйте архив с проектом;
- откройте файл .pdsprj;
- убедитесь, что в Arduino указан путь к файлу .hex;
- нажмите кнопку Run;
- наблюдайте текущее время на LCD-дисплее.
В Proteus микросхема DS1307 имеет встроенную модель реального времени. Начальные значения часов задаются в свойствах компонента, после чего симулятор автоматически эмулирует ход времени, аналогично работе реального кварцевого RTC.
Если что-то не работает
Если у вас возникают сложности с запуском проекта или вы не уверены в базовых шагах, рекомендуется сначала пройти вводный урок.
Подробно разобран первый проект в Proteus:
Первый проект в Proteus — мигание светодиода