Подключение часов реального времени к arduino: Arduino для начинающих. Урок 11. Подключение модуля часов реального времени DS3231

DS3231 – подключение часов реального времени | RadioLaba.ru

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

              #include <P16F628A.INC>

              LIST        p=16F628A    

              __CONFIG    H’3F10′           ;Конфигурация микроконтроллера

                                              

              errorlevel  -302              ;не выводить сообщения с ошибкой 302 в листинге

 

Sec           equ         0020h             ;вспомогательные регистры счета

Sec1          equ         0021h             ;

Sec2          equ         0022h             ;

scetbit       equ         0024h             ;вспомогательный регистр счета кол-ва бит  

perem         equ         0025h             ;вспомогательный регистр приема/передачи байта по spi, i2c                

temp          equ         0026h             ;регистр температуры

 

perem_1       equ         0027h             ;вспомогательный регистр двоично-десятичного преобр.

result        equ         0028h             ;вспомогательный регистр двоично-десятичного преобр.

 

dat_ind       equ         0029h             ;регистр данных для передачи по протоколу spi

adr_ind       equ         002Ah             ;регистр адреса для передачи по протоколу spi

 

second        equ         002Bh             ;регистр хранения секунд для установки времени

minut         equ         002Ch             ;регистр хранения минут для установки времени

hour          equ         002Dh             ;регистр хранения часов для установки времени

 

adr_i2c       equ         002Eh             ;регистры подпрограммы передачи данных интерфейса i2c

tmp_i2c       equ         002Fh

slave_adr     equ         0030h

data_i2c      equ         0031h

 

 

flag          equ         007Fh             ;регистр флагов

              

#DEFINE       int         PORTB,0           ;линия прерывания INT/SQW DS3231

#DEFINE       sda         PORTB,1           ;линия SDA для подключения DS3231

#DEFINE       scl         PORTB,2           ;линия SCL для подключения DS3231

#DEFINE       sda_io      TRISB,1           ;направление линии SDA

#DEFINE       scl_io      TRISB,2           ;направление линии SCL

 

#DEFINE       datai       PORTB,5           ;линия входа данных драйвера MAX7219

#DEFINE       cs          PORTB,6           ;линия выбора драйвера MAX7219

#DEFINE       clk         PORTB,7           ;линия тактирования драйвера MAX7219

 

#DEFINE       led         PORTB,4           ;светодиод ошибки i2c

#DEFINE       led_sec     PORTB,3           ;светодиод индикации хода часов 1Гц

 

#DEFINE       regim       PORTA,2           ;кнопка Индикация — смены режима индикации

#DEFINE       nast        PORTA,3           ;кнопка Настройка — входа в режим настройки времени

#DEFINE       ust         PORTA,4           ;кнопка Установка — установка значения часов

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

              org         0000h             ;начать выполнение программы с адреса 0000h

              goto        Start             ;переход на метку Start

          

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;Основная программа

                                            

Start         movlw       b’00000000′       ;установка значений выходных защелок порта A    

              movwf       PORTA             ;

              movlw       b’01000000′       ;установка значений выходных защелок порта B    

              movwf       PORTB             ;

              

              movlw       b’00000111′       ;выключение компараторов

              movwf       CMCON             ;

 

              bsf         STATUS,RP0        ;выбрать 1-й банк    

              movlw       b’00000111′       ;настройка линий ввода\вывода порта B      

              movwf       TRISB             ;RB0-RB2 — на вход, остальные на выход

              movlw       b’11111111′       ;настройка линий ввода\вывода порта A  

              movwf       TRISA             ;все линии на вход                      

              bcf         STATUS,RP0        ;выбрать 0-й банк

                    

              clrf        flag              ;сброс регистра флагов

                          

              call        init_lcd          ;вызов подпрограммы инициализации драйвера (MAX7219)

              call        viv_not           ;вывод на индикаторы символов тире »  —— «

              

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

              

              movlw       b’11010000′       ;адрес устройства (DS3231)

              movwf       slave_adr

                                            ;Запись 4-х байт в регистры приема/передачи по i2c

                                            ;здесь выполняется настройка 1-го будильника, сигнал каждую секунду

              movlw       data_i2c          ;установка первого регистра приема/передачи по i2c

              movwf       FSR               ;

              movlw       b’10000000′       ;данные для регистра секунд 1-го будильника

              movwf       INDF              ;

              incf        FSR,F             ;

              movlw       b’10000000′       ;данные для регистра минут 1-го будильника

              movwf       INDF              ;

              incf        FSR,F             ;

              movlw       b’10000000′       ;данные для регистра часов 1-го будильника

              movwf       INDF              ;

              incf        FSR,F             ;

              movlw       b’10000000′       ;данные для регистра даты/дня недели 1-го будильника

              movwf       INDF              ;

                

              movlw       . 4                ;передача 4-х байта по i2c

              movwf       tmp_i2c           ;

              movlw       0x07              ;установка адреса регистра секунд 1-го будильника

              movwf       adr_i2c           ;

              call        write_i2c         ;вызов подпрограммы записи по интерфейсу i2c

              call        err_prov          ;проверка на ошибки записи/чтения I2C  

 

              movlw       .1                ;передача 1-го байта по i2c

              movwf       tmp_i2c           ;

              movlw       0x0E              ;установка адреса регистра Control

              movwf       adr_i2c           ;

              movlw       data_i2c          ;установка первого регистра приема/передачи по i2c

              movwf       FSR               ;

              movlw       b’00000101′       ;запуск тактового генератора, запрет функционирования вывода INT/SQW для

              movwf       INDF              ;режима питания от батареи, частота импульсов на выходе INT/SQW 1Гц,

                                            ;выход INT/SQW задействован для генерации прерываний по будильнику,

                                            ;разрешение прерываний по 1-му будильнику

              call        write_i2c         ;вызов подпрограммы записи по интерфейсу i2c

              call        err_prov          ;проверка на ошибки записи/чтения I2C    

 

met_2         movlw       . 1                ;передача 1-го байта по i2c

              movwf       tmp_i2c           ;

              movlw       0x0F              ;установка адреса регистра Status

              movwf       adr_i2c           ;

              movlw       data_i2c          ;установка первого регистра приема/передачи по i2c

              movwf       FSR               ;

              movlw       b’00000000′       ;сброс бита OSF, запрет генерирования импульсов на выходе EN32kHz,

              movwf       INDF              ;сброс флагов прерываний будильников A2F, A1F

              call        write_i2c         ;вызов подпрограммы записи по интерфейсу i2c

              call        err_prov          ;проверка на ошибки записи/чтения I2C        

 

met_1         btfsc       int               ;опрос линии прерывания будильника

              goto        met_3             ;

              bsf         led_sec           ;включение светодиода индикации хода часов

              goto        met_4             ;

met_3         bcf         led_sec           ;выключение светодиода индикации хода часов

 

              btfsc       nast              ;опрос кнопки настройки часов

              goto        met_5             ;

              call        nast_time         ;вызов подпрограммы установки времени

              goto        met_2             ;

 

met_5         btfsc       regim             ;опрос кнопки режима индикации

              goto        met_1             ;

met_6         call        paus_knp          ;

              btfss       regim             ;

              goto        met_6             ;

 

              btfss       flag,2            ;изменение значения флага режима индикации

              goto        met_7             ;

              bcf         flag,2            ;сброс флага индикации, режим отображения часов

              goto        met_1             ;

met_7         bsf         flag,2            ;установка флага индикации, режим отображения температуры и часов

              goto        met_1             ;

 

met_4         movlw       . 1                ;передача 1-го байта по i2c

              movwf       tmp_i2c           ;

              movlw       0x11              ;установка адреса старшего регистра температуры

              movwf       adr_i2c           ;

              call        read_i2c          ;вызов подпрограммы чтения по I2C

              call        err_prov          ;проверка на ошибки записи/чтения I2C

              

              movf        INDF,W            ;копирование значения температуры в регистр temp

              movwf       temp        

 

rd_time       movlw       .3                ;передача 3-х байт по i2c

              movwf       tmp_i2c           ;

              movlw       0x00              ;установка адреса регистра секунд

              movwf       adr_i2c           ;

              call        read_i2c          ;вызов подпрограммы чтения по I2C

              call        err_prov          ;проверка на ошибки записи/чтения I2C

 

              btfsc       flag,2            ;опрос флага режима индикации

              goto        met_8             ;

              call        vivod             ;вызов подпрограммы вывода значения часов на цифровое табло

              goto        met_2             ;

met_8         call        vivod_temp        ;вызов подпрограммы вывода температуры и часов на цифровое табло                  

              goto        met_2

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

Цифровые часы Arduino без RTC в Tinkercad

Цифровые часы Arduino без RTC Модуль часов реального времени в Tinkercad

Введение

В этом проекте я сделал простые цифровые часы с использованием Arduino без модуля RTC и построил симулятор в среде Tinkercad.

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

Но если ваше приложение настолько простое и вам нужно просто посмотреть время, то вы можете принять небольшую ошибку и использовать Arduino для расчета времени в программном обеспечении. Что мы и сделали в этом проекте.

Если вам нравится этот проект, пожалуйста, проголосуйте за него и подпишитесь на мою рассылку новостей на AeroArduino.com и на мой канал YouTube.

Компоненты

Поскольку мы используем Tinkercad Simulation, нам не нужно покупать какие-либо компоненты или даже программное обеспечение. Tinkercad — это бесплатная онлайн-среда. Он поставляется со многими платами Arduino, блоками питания, датчиками и исполнительными механизмами.

Итак, единственное, что вам нужно использовать, это зайти на сайт www. tinkercad.com и построить наши схемы.

Вы также можете собрать свою реальную схему, поэтому вот необходимые компоненты:

Плата Arduino UNO

16×2 LCD

2 кнопки для ввода

Резисторы

Провода

компоненты, которые вам понадобятся в Tinkercad, а также в реальном мире, если вы собираетесь построить физическую схему.

Контур

Здесь мы собираемся выбрать компоненты в среде Tinkercad и соединить их вместе.

Опять же, то же самое соединение применяется к физической цепи.

Сначала мы открываем Tinkercad.com

Создайте новую учетную запись, если у вас ее нет, и войдите в систему.

Затем мы выбираем Circuits на вкладке в левом верхнем углу экрана.

Затем у нас есть чистый лист, на котором мы можем разместить наши компоненты схемы.

Вы можете увидеть панель поиска в правом верхнем углу. Здесь вы можете ввести нужные компоненты.

Начнем с ввода Arduino. Заметим, что платы Arduino начинаются ниже строки поиска. Выбираем плату Arduino UNO. Затем помещаем его на чистый лист.

Тогда мы пишем LCD. Мы находим ЖК-дисплей, выбираем его и помещаем.

Вы можете подключить цепь с помощью проводов. Провода подключаются в программе Tinkercad с помощью нажатия на нужный контакт и удержания его на другом контакте.

Теперь мы подключаем ЖК-дисплей к плате Arduino UNO.

Мы подключаем один контакт ЖК-дисплея к Arduino, используя четырехконтактную конфигурацию, как в схеме выше.

Подключаем резисторы и кнопки.

Теперь мы завершили подключение схемы в Tinkercad.

Программное обеспечение

Вот код, использующий библиотеку LCD.

Теперь нам нужно запрограммировать плату Arduino UNO в среде Tinkercad с помощью этого кода, чтобы начать его выполнение.

На вкладке «Код» в правом верхнем углу щелкните раскрывающееся меню и выберите только текст. Когда вам будет предложено предупредить, что вы собираетесь удалить все блоки, вы нажимаете «Продолжить».

Затем вы вставляете приведенный выше код в лист программного обеспечения.

Теперь вы готовы начать выполнение схемы.

Simulation

Теперь нажмите кнопку Start Simulation, чтобы начать моделирование.

Вы видите, что Arduino подключен к USB-порту на экране, и это указывает на то, что он включен и начал выполнение программного обеспечения.

Если все шаги выполнены правильно, на ЖК-дисплее отобразится время 12:00:00.

Поздравляем, вы только что построили схему Arduino, которая отображает время в Tinkercad.

Теперь вы можете начать установку времени с помощью кнопок.

Теперь вы можете построить схему, используя реальные компоненты.

Вы можете посмотреть видео и подписаться на мой канал.

Читайте об этом проекте на моем сайте AeroArduino.com

Часы реального времени с отображением температуры на Arduino

— Реклама —

Этот проект демонстрирует, как можно построить часы реального времени (RTC) с дисплеем температуры, используя Arduino, микросхему RTC DS3231 и OLED-дисплей SSD1306 (128×64 пикселей).

Чип DS3231 RTC более точен, чем DS1307, а также имеет встроенный датчик температуры. Он поддерживает отсчет времени даже при отключении основного источника питания. Он использует интерфейс I2C для связи с ведущим устройством (микроконтроллером), в данном случае с Arduino.

DS3231 и SSD1306 OLED используют одну и ту же шину I2C, но микроконтроллер может обмениваться данными только с одним из них одновременно, в зависимости от отправленного адреса. Адрес DS3231 RTC — 0×68, а адрес SSD1306 OLED — 0×3C.

— Реклама —

На рис. 1 показан авторский прототип, а на рис. 2 показана блок-схема схемы.

Рис. 1: Авторский прототипРис. 2: Блок-схема проекта

Схема и работа

Принципиальная схема часов реального времени Arduino с индикацией температуры показана на рис. 3. Она построена на основе Arduino Uno (Board1), регулятора 5V 7805 (IC1), 2.4 см OLED-дисплей SSD1306 (DIS1), модуль DS3231 RTC (RTC1) и несколько других компонентов.

Рис. 3: Принципиальная схема часов реального времени на базе Arduino (выводы A4, A5, 5V платы 1)

SSD1306 OLED-дисплей

OLED (органический светоизлучающий диод) представляет собой плоское светоизлучающее устройство, разработанное с использованием тонких органических пленок, последовательно соединенных между двумя электрическими проводниками. OLED-дисплей, используемый в этом проекте, показан на рис. 4. Он имеет улучшенное качество изображения, полный угол обзора, высокую яркость, лучшую контрастность, широкий цветовой диапазон и низкое энергопотребление. Он более эффективен и надежен по сравнению с простым ЖК-дисплеем.

Рис. 4: Модуль дисплея SSD1306 OLED

Он в основном используется в таких цифровых устройствах отображения, как компьютерные мониторы, мобильные телефоны, портативные видеоигры и телевизионные экраны. Он легко доступен на рынке, а также в интернет-магазинах.

Модуль дисплея подключается к Arduino с помощью четырех проводов — двух для питания и еще двух для данных, что делает проводку очень простой. Соединение для передачи данных основано на интерфейсе I2C (межинтегральная схема), который также известен как TWI (двухпроводной интерфейс).

Модуль DS3231 RTC

Модуль DS3231 — это недорогие высокоточные часы реального времени, которые могут отображать время в часах, минутах и ​​секундах, а также информацию о дне, месяце и годе. Он имеет автоматическую компенсацию високосных лет и месяцев с менее чем 31 днем.

Модуль может работать как от 3,3 В, так и от 5 В, что делает его подходящим для многих платформ разработки или микроконтроллеров. Вход батареи составляет 3 В, и типичная батарея CR2032 3 В может питать модуль и хранить информацию более года. Используемый в этом проекте модуль DS3231 (спереди и сзади) показан на рис. 5.9.0003 Рис. 5: Модуль RTC DS3231

Протокол связи I2C, используемый в модуле, упрощает подключение к плате Arduino. Все, что нам нужно, это четыре контакта: контакты VCC и GND для питания модуля и контакты SDA и SCL для связи I2C.

Блок питания

Регулируемый блок питания состоит из двухполупериодного выпрямителя, построенного на основе диодов 1N4007 (D1 и D2), двух конденсаторов (C1 и C2), регулятора напряжения 5 В 7805 (IC1) и 230 В пер. 0-12 В, 500 мА вторичный понижающий трансформатор (X1). В проекте требуется два источника питания: 12 В постоянного тока для разъема питания Arduino Uno и 5 В для DS3231 RTC и модуля SSD1306 OLED.

Arduino Uno

Сердцем проекта является плата Arduino Uno R3, основанная на микроконтроллере ATmega328/ATmega328P. Он имеет 14 цифровых входов/выходов (I/O), шесть аналоговых входов, флэш-память 32 КБ, кварцевый генератор 16 МГц, соединение USB, разъем питания, разъем ICSP, кнопку сброса и другие. Его можно запрограммировать с помощью программного обеспечения Arduino IDE.

В схеме есть две кнопки: S1 для настройки и S2 для изменения режима. Они используются для установки времени и даты часов реального времени. Заземляющее соединение Arduino должно быть подключено к заземлению модуля RTC1 и модуля дисплея DIS1.

Конструкция и тестирование

После выполнения всех подключений проверьте работу схемы, нажав кнопку режима (S2), а затем отпустите ее. Курсор на дисплее будет мигать в поле дня недели. Нажмите и удерживайте кнопку установки (S1), чтобы перейти от дня недели к следующему дню с частотой 5 Гц, или сделайте короткое нажатие, чтобы перейти к следующей настройке.

Нажмите и отпустите кнопку режима (S2), чтобы переместить курсор в поле месяца. Нажмите и удерживайте кнопку настройки (S1), чтобы быстро прокрутить месяцы, или сделайте короткое нажатие, чтобы перейти к следующей настройке. Нажмите и отпустите кнопку S2, чтобы переместить курсор в поле даты. Нажмите и удерживайте кнопку S1, чтобы быстро прокрутить даты, или сделайте короткое нажатие, чтобы перейти к следующей настройке.

Обратите внимание, что микросхема RTC знает правильное количество дней в каждом месяце. Нажмите и отпустите кнопку S2, чтобы переместить курсор в поле года. Нажмите и удерживайте кнопку S1, чтобы быстро прокрутить годы, или сделайте короткое нажатие, чтобы перейти к следующей настройке. Допустимые диапазоны: от 2000 до 2099. Чип RTC автоматически отслеживает високосные годы. Когда вы впервые включите часы, дата будет 1 января 1900 года. Просто переведите год на правильное значение.

Нажмите и отпустите кнопку S2, чтобы перевести курсор в поле часов. Нажмите и удерживайте кнопку S1, чтобы быстро прокрутить часы, или сделайте короткое нажатие, чтобы перейти к следующей настройке. Часы в проекте используют только 24-часовой режим. Нажмите и отпустите кнопку S2, чтобы переместить курсор в поле минут. Нажмите и удерживайте кнопку S1, чтобы быстро прокрутить минуты, или сделайте короткое нажатие, чтобы перейти к следующей настройке. Нажмите и отпустите кнопку S2, чтобы переместить курсор в поле секунд. Кратковременно нажмите кнопку S2, чтобы обнулить секунды, или удерживайте кнопку, чтобы зафиксировать секунды на нуле, и отпустите, чтобы синхронизироваться с внешним источником времени. Чип DS3231 RTC имеет встроенный датчик температуры.

Таким образом, он показывает время, дату и год вместе с показаниями температуры (см. рис. 6).

Рис. 6: Цифровые часы с индикатором температуры

Программное обеспечение

Работа схемы управляется программой (main_code. ino), загруженной во внутреннюю память Arduino Uno. В программе реализованы все необходимые функции.

Программа/скетч написана на языке программирования Arduino. Arduino IDE версии 1.8.11 используется для компиляции и загрузки программы на плату Arduino.

В этом проекте для программирования требуются следующие заголовочные файлы в main_code.ino:

#include . Этот заголовочный файл особенно необходим для устройств с протоколом I2C для более быстрой связи. В этом проекте два устройства I2C — это OLED-дисплей SSD1306 и модуль RTC DS3231. (Этот заголовочный файл уже включен в последнюю версию Arduino IDE.)

#include . Файл заголовка Графическая библиотека Adafruit используется для создания различных типов графики, таких как квадрат, треугольник, инверсия черного и белого цветов, символы звезды и изображения в форматах .bmp. В этом проекте используются различные размеры шрифта и специальные символы для обозначения единиц измерения температуры (градусы Цельсия).

#include . Этот заголовочный файл используется для связи с дисплеем SSD1306 с использованием сопоставления адресов. Дисплей SSD1306 размером 128×64 пикселя может отображать данные до восьми страниц поочередно. Доступ к каждой странице с помощью трех адресных строк. Выбор адресных строк, данных и команд очень прост с помощью заголовочного файла Adafruit_SSD1306.

Для кода Arduino (main_code.ino) требуются две внешние библиотеки: Adafruit-GFX-Library-master.zip и Adafruit_SSD1306-master.zip. Вам необходимо включить их в Arduino IDE перед компиляцией и загрузкой кода на плату Arduino.

Схема печатной платы часов реального времени Arduino с дисплеем температуры показана на рис. 7, а схема расположения компонентов на рис. 8.

Рис. 7: Схема печатной платы часов реального времени с дисплеем температурыРис. 8: Компоновка компонентов печатной платы
Загрузить PDF-файлы печатной платы и компоновки компонентов:
щелкните здесь
Загрузить
Исходный код

После сборки схемы на печатной плате подключите контакты Arduino Uno к печатной плате с помощью перемычек.

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

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