Рубрики
Схемы на MSP430

Цифровые часы на MSP430G2 и RTC модуле DS3231

В данной статье мы рассмотрим создание цифровых часов на основе платы MSP430G2 и модуля часов реального времени (RTC module) DS3231. Отображать время и дату в нашем проекте мы будем на экране ЖК дисплея 16×2. MSP-EXP430G2 представляет собой плату разработки, также известную как LaunchPad, от компании Texas Instruments. Данная плата позволяет производить программирование всей линейки микроконтроллеров MSP430. Если вы только начали знакомство с данной платой, то рекомендуем прочитать статью про начало работы с ней.

Ранее на нашем сайте мы уже рассматривали аналогичные проекты цифровых часов на основе других микроконтроллеров (плат):

Необходимые компоненты

  1. Плата MSP430G2 LaunchPad (купить на AliExpress).
  2. Модуль часов реального времени DS3231 (купить на AliExpress).
  3. Потенциометр 10 кОм (купить на AliExpress).
  4. ЖК дисплей 16х2 (купить на AliExpress).
  5. Соединительные провода.
  6. Макетная плата.

Что такое RTC модуль DS3231

DS3231 – это модуль часов реального времени (Real Time Clock, RTC). Он используется для хранения информации о времени и дате во множестве электронных устройств во всем мире. В своем составе он имеет собственную батарейку, поэтому он сохраняет информацию о времени и дате даже когда питание основного устройства (в которое он входит) отключается или когда производится сброс устройства (микроконтроллера). То есть если мы один раз установим дату и время в модуле он будет хранить их постоянно, до тех пор пока не истощится его батарейка. В настоящее время существует несколько различных микросхем реального времени: DS1307, DS3231 и т.д.

Внешний вид модуля DS3231 показан на следующем рисунке.

Схема проекта

Схема подключения модуля часов реального времени DS3231 к плате MSP430G2 представлена на следующем рисунке.

Поскольку модуль DS3231 работает по протоколу I2C, поэтому его контакты Serial Clock (SCL) и Serial Data (SDA) необходимо подключить к соответствующим I2C контактам плате MSP430G2 – контакт 9 (PIN 2.1, SCL) и контакт 10 (PIN 2.2, SDA).

MSP430 работает от 3.3V, но нам будут необходимы 5V для питания ЖК дисплея и модуля DS3231. Для этого можно использовать небольшой лайфхак, описанный в данной статье – 5V можно получить с джампера TP1, расположенного рядом с USB разъемом платы.

Объяснение кода программы

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты. Для написания программы мы будем использовать среду Energia IDE являющуюся фактически аналогом Arduino IDE.

Для работы с модулем часов реального времени DS3231 нам потребуется специальная библиотека, которую можно скачать по следующей ссылке. Также нам будут необходимы библиотека Wire (для связи по протоколу I2C) и библиотека для работы с ЖК дисплеем – обе эти библиотеки уже предустановлены в Energia IDE, дополнительно устанавливать их не нужно.

Первым делом в программе подключим библиотеку для I2C связи между модулем DS3231 и MSP430. Контакты SDA и SCK уже прописаны в этой библиотеке, поэтому отдельно нам их объявлять уже не нужно.

Далее подключим библиотеку RTClib.h для работы с модулем RTC и библиотеку LiquidCrystal.h для работы с ЖК дисплеем.

Затем создадим объект для работы с модулем часов реального времени.

После этого объявим массив из 7 элементов для хранения в нем дней недели.

Для подключения ЖК дисплея мы будем использовать контакты платы RS (P2.0), EN (P1.4), D4 (P1.5), D5 (P2.3), D6 (P2.4), D7 (P2.5).

В функции void setup() мы инициализируем ЖК дисплей и укажем размеры его экрана и модуль часов реального времени. Метод begin() для ЖК дисплея должен быть вызван до того, как подавать на него команды для отображения информации на его экране.

Примечание: в приведенном фрагменте кода закомментированная строчка крайне важна – с помощью нее можно установить актуальные дату и время в вашем модуле часов реального времени если они у вас не установлены. После того как при первом запуске программы вы их установите эту строчку кода необходимо будет закомментировать иначе при каждом сбросе платы или подаче на нее питания у вас снова будет устанавливаться это же время.

В функции loop мы будем считывать время и дату из модуля RTC и сохранять их в соответствующей переменной, после чего отображать их на экране ЖК дисплея с помощью функции lcd.print().

Исходный код программы

Видео, демонстрирующее работу проекта

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *