Спешат часы. DS1302 + TM1637 + UnoR3

DimaFIX
Offline
Зарегистрирован: 07.07.2016

Всем привет. Собрал небольшие часики, но вот в чём проблема: За одну минуту время спешит на 10 секунд, секунды переключаются быстрее нужного. Если ставить delay(1000) в конце loop() проблем не возникает.
Можно ли обойтись без зловещей задержки? (в т.ч. if (millis() ... ) )

#include <math.h>
#include <DS1302.h>
DS1302 rtc(2, 3, 4);
Time t;

#include "TM1637.h"
TM1637 tm1637(6,5);
int8_t TimeDisp[] = {0x00,0x00,0x00,0x00};

void setup()
{
  rtc.halt(false);
  rtc.writeProtect(true);

  //TimeSetup();

  tm1637.set();
  tm1637.init();
}

void loop()
{  
    TimeHour();      // Тип времени 
    Blink();         // Мигание двоеточием
    tm1637.display(TimeDisp);
}

void Blink(void)
{
  t = rtc.getTime();
  if (t.sec % 2 == 1)
    tm1637.point(POINT_ON);
  else
    tm1637.point(POINT_OFF);
}

void TimeHour(void)
{
  t = rtc.getTime();
  TimeDisp[0] = t.hour / 10;
  TimeDisp[1] = t.hour % 10;
  TimeDisp[2] = t.min / 10;
  TimeDisp[3] = t.min % 10;
}

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вопрос на засыпку: с какой периодичностью меняются показания часов, и с какой периодичностью Вы их опрашиваете?

DimaFIX
Offline
Зарегистрирован: 07.07.2016

В этой библиотеке: https://yadi.sk/d/xMK-iHMeWzgQ8 не нашёл как установить периодичность смены показания часов, а вот опрос идеально сделать раз в пол секунды, что бы двоеточие мигало каждую секунду, а не через секунду

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Периодичность смены показаний часов заложена в "железе" и изменению не подлежит.

Вопрос остается: как соотносится оптимальный период опроса и тот период, что реализован в Вашей программе?

DimaFIX
Offline
Зарегистрирован: 07.07.2016

Я пробовал ставить разное время, и 1 секунда -- минимальный вариант, когда время идёт правильно. Но у других людей с таким же модулем и дисплеем есть без этой секунды. Вот и спрашиваю, может кто знает...

MacSim
Offline
Зарегистрирован: 28.11.2012

1302 с внешним кварцем. пробовал менять, заземлял. но все спешат.

взял с внутренним кварцем. идут точно. надо ставить аккумулятор или отпаивать диод для батарейки.

DimaFIX
Offline
Зарегистрирован: 07.07.2016

Уже заказал его, спасибо :)
Но прикол в том, что на сколько бы секунд в час я не уменьшал время (программно), они всё равно будут спешить. И как ни крути

lfsfzdaz
Offline
Зарегистрирован: 05.04.2017

Здравствуйте, а как вы настраиваете время?