Прямоугольный сигнал RTC
У меня есть модуль часов реального времени DS3231, и я хотел бы использовать выход прямоугольной волны.
Интересно, как мне установить частоту импульса?
Какова (временная) продолжительность импульса?
ОБНОВЛЕННЫЙ ВОПРОС
Чтобы использовать DS3231 как прерывание 1PPS, я хочу использовать выход Square Wave. Вот как я подключил его к Arduino.
Я подключил к выходу SQW подтягивающий резистор 10 кОм и светодиод. После этого я протестировал код, который показывает время, и он отлично заработал.
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 rtc;
void setup () {
Serial.begin(9600);
#ifdef AVR
Wire.begin();
#else
Wire1.begin();
#endif
rtc.begin();
if (! rtc.isrunning()) {
Serial.println("RTC is NOT running!");
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop () {
DateTime now = rtc.now();
Serial.print(now.year(), DEC);
// и т. д
}
(DS3231 отлично работает с библиотекой DS1307)
В этом случае светодиод просто мерцал, поэтому я подумал, что частота по умолчанию SQW должна быть больше 1 Гц. Я немного погуглил и понял, что мне нужно изменить некоторые регистры. Поэтому я нашел этот фрагмент кода, который я вызвал из функции setup(), но безуспешно, светодиод все еще мерцает.
void set1Hz() {
// Частота хранится в регистре 0x0e в битах 3 и 4
Wire.beginTransmission(0x68);
Wire.write(0x0e);
Wire.endTransmission();
Wire.requestFrom(0x68, 1);
uint8_t register0E = Wire.read();
// очистить биты 3 и 4 для 1 Гц
register0E &= ~(1 << 3);
register0E &= ~(1 << 4);
// вернуть значение регистра обратно
Wire.beginTransmission(0x68);
Wire.write(0x0e);
Wire.write(register0E);
Wire.endTransmission();
}
Поскольку теперь я имею квалификацию для низкоуровневого программирования, любые предложения по изменению регистров будут оценены по достоинству.
@user3060854, 👍1
2 ответа
с библиотекой DS1307 Tiny RTC:
"rtc.writeSqwPinMode(0x10);" в цикле настройки...
устанавливает выход DS на 1 Гц, прямоугольный сигнал
Это не совсем сигнал 1PPS, который обычно представляет собой узкий импульс,
но этот сигнал с 50%-ным рабочим циклом будет работать как 1-секундное прерывание.
Выход SQWV имеет только низкий уровень, это выход с открытым стоком.
Подключите следующим образом: 5 В к аноду светодиода, катод светодиода к резистору ограничения тока, другая ножка резистора к выводу SQWV.
Проверьте допустимую нагрузку на вывод. 10 кОм сделают светодиод очень тусклым (если вообще будет виден). Попробуйте 1 кОм.
- Преобразование в Unix Timestamp и обратно
- Разница между «time_t» и «DateTime»
- Создание таймера с использованием часов реального времени с указанием времени начала и остановки
- DS1307RTC Выводит загадочную дату 165/165/2165. Какие возможны исправления?
- RtcDateTime' не называет тип
- Библиотека времени Arduino и библиотеки RTC
- Не удалось выделить SSD1306 при добавлении константы
- Как получить текущую дату