www.kn34pc.com

Форум на силистренските радиолюбители
Дата и час: 23 Сеп 2023, 04:01

Часовете са според зоната UTC + 2 часа [ DST ]




Напиши нова тема Отговори на тема  [ 13 мнения ] 
Автор Съобщение
МнениеПубликувано на: 15 Юни 2022, 17:30 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1412
Местоположение: Силистра
Часовникова схема с real-time clock DS1307.
Трябва ли при старт да установявам изрично CH = 0 (enable oscillator), bit 7, reg_0, че да заработи?
Или ще си заработи сам?

Защо? Сега го установявам, но за да запазя насчетените секунди, чета reg_0, установявам изрично bit 7 в 0, и пак записвам reg_0.
Наред с безусловния старт на осцилатора, губя секундно време отчетенето-обработка-записа. При 100 kHz и 16 MHz mcu не че е много, но ... идейно разбутвам часовника при всеки преход батерия->захранване ... :mail. (който и без това си бяга с ок. +2 сек на денонощие (в зависимост от температурата) с китайски кварц 32768 Hz).

фрагмент от кода:
Код за потвърждение:
void ds1307_init(void) {
  uint8_t reg_0 = ds1307_get_time(0);

  i2c_start();
  i2c_write(DS1307_ADDR << 1);
  i2c_write(0x00);
  i2c_write(reg_0 & 0b01111111);  // CH = 0, enable oscillator
  i2c_stop();
  ...


Прикачени файлове:
ds_ch.jpg
ds_ch.jpg [ 129.83 KiB | Прегледано 1597 пъти ]
Върнете се в началото
 Профил  
 
МнениеПубликувано на: 17 Юни 2022, 06:58 
Offline

Регистриран на: 05 Юни 2020, 16:51
Мнения: 22
Само първия път при сверяване и пускане на часовника.
После нищо по DS1307 не инициализирам.
Директно си чета или пиша каквото ми трябва.


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 17 Юни 2022, 07:13 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1412
Местоположение: Силистра
Би трябвало да са обработени всички събития.

За първия старт говорим:
При свалена батерия и при свалено захранване и последвало пускане, RTC безусловно трябва винаги да заработва.
RTC заработва на тестовата конструкция и без манипулациите по CH, но за да съм сигурен, давам CH -> 0.

А това породи въпроса, защото следва доп. внесено "изоставане".


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 17 Юни 2022, 07:42 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1412
Местоположение: Силистра
t = 618 μs за четене-обработка-запис (clock 16 MHz, I2C 100 kHz).
Следва времето на доп. изоставане хич няма да го вземам под внимание :mail.

Код за потвърждение:
void ds1307_init(void) {
  uint32_t ttt = get_ticks();
  uint8_t reg_0 = ds1307_get_time(0);

  i2c_start();
  i2c_write(DS1307_ADDR << 1);
  i2c_write(0x00);
  i2c_write(reg_0 & 0b01111111);  // CH = 0, enable oscillator
  i2c_stop();

  printf("t = %Lu\r\n", get_ticks() - ttt);
  ...

Код за потвърждение:
#use timer(TIMER = 1, TICK = 1 us, BITS = 16, NOISR)


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 17 Юни 2022, 13:45 
Offline

Регистриран на: 05 Юни 2020, 16:51
Мнения: 22
LZ2WSG написа:
.....
RTC заработва на тестовата конструкция и без манипулациите по CH, но за да съм сигурен, давам CH -> 0.
.....

Според даташита:

Please note that the initial power-on state of all registers is not defined. Therefore, it is important
to enable the oscillator (CH bit = 0) during initial configuration.

Тоест може да тръгне може и да не тръгне клока.
Това само при първо включване на захранването и неработещ часовник. След пускане и включена батерия той си върви и без VCC. При подаване на VCC си го чета директно.


Прикачени файлове:
DS1307.pdf [348.48 KiB]
68 пъти
Върнете се в началото
 Профил  
 
МнениеПубликувано на: 17 Юни 2022, 15:24 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1412
Местоположение: Силистра
(Разширих темата, ИС DS1307 е интересна).
Намират ми се десетина кв. рзонатора 32768 Hz, къде нови незапоявани, къде сваляни от апаратури, от дънни платки ...

От тестовете с няколко кварца, сваляните от комп. платки са привидно по-точни. Ще трябва да се подбира, а и отклонението също е интересно. Измерване на честотата е достатъчна за целта (напр. по SQW), но нямам под 1 Hz при честотомерите си. А следенето на отклонението за 24 часа в часовникова схема не e лесен вариант. Други идеи?


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 17 Юни 2022, 16:21 
Offline

Регистриран на: 05 Юни 2020, 16:51
Мнения: 22
Кварца трябва да е 12.5 pF. Ако е по-малко може затова да избързва.
Пробвай да добавиш външни кондензатори.


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 17 Юни 2022, 16:23 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1412
Местоположение: Силистра
Оригинално на китайското модулче си дойде с този кварц без кондензатори.
Кондензатори не ми се добавя, настройката ще е безкрайна :biggrin. Днес натам-утре натам ...


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 18 Юни 2022, 08:54 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1412
Местоположение: Силистра
Интересни неща се случват, отклонението е както в положителната страна, така и в отрицателната (китайският модул е с оригиналния си кварц 32 768 Hz):

- настроен часовник в 17:07 ч., отклонение: 0 сек.
- към 0:00 ч., 7 часа след сверяване, отклонение: +7 сек.
- към 8:20 ч., 15 часа след сверяване, отклонение: -1 сек.
- към 10:00 ч., 17 часа след сверяване, отклонение: 0 сек.
- към 16:00 ч., 23 часа след сверяване, отклонение: +4 сек.
- 17:07 ч., 24 часа след сверяване, отклонение: +5 сек.

Освен леко изменение на температурата, друго да се е случило не се сещам.
---
А компютърния часовник (без синхронизация) в този времеви прозорец устремено върви напред.
- към 16:00 ч., 23 часа след сверяване:
Код за потвърждение:
Вашият часовник избързва с 3.4 секунди.

----------------------------------------------------
втори ден:
- 29 часа след сверяване, отклонение -3 сек.

компютърен часовник, 29 часа след сверяване:
Код за потвърждение:
Вашият часовник избързва с 4.0 секунди


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 20 Юни 2022, 00:20 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1412
Местоположение: Силистра
Променям кода на DS1307 с "инициализация когато е необходимо" -> само при необходимост (захранването и батерията са били свалени).
И използване на първата клетка от NV SRAM за "секретно число" :crazy - дали ИС е вече запускана? или не е :smt041.
Ако е - нищо не правим. И четем времето. Ако не е - пълна инициализация (и без това действие времето и датата би трябвало сами да се занулят?, но така ми е по-лесно).
Код за потвърждение:
void ds1307_init(void) {
  uint8_t m_secret_num;

  i2c_start();
  i2c_write(DS1307_ADDR << 1);
  i2c_write(0x08);  // reg in NVSRAM
  i2c_start();
  i2c_write(DS1307_ADDR << 1 | 0x01);  // read
  m_secret_num = i2c_read(FALSE);
  i2c_stop();
 
  if (m_secret_num != 0x73) {  // my secret number
    i2c_start();
    i2c_write(DS1307_ADDR << 1);
    i2c_write(0x00);
    i2c_write(0b00000000);  // CH = 0, enable oscillator, seconds
    i2c_write(0b00000000);  // minutes
    i2c_write(0b00000000);  // hours
    i2c_write(0b00000000);  // day
    i2c_write(0b00000000);  // date
    i2c_write(0b00000000);  // month
    i2c_write(0b00000000);  // year
    i2c_write(0b00010000);  // SQWE 1 Hz
    i2c_write(0x73);        // my secret number
    i2c_stop();
  }
}

Под захранване и под батерия, точността се определя от кварцовия резонатор. Въпросите са решени :comp.


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 20 Юни 2022, 00:47 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1412
Местоположение: Силистра
Бързи тестове:
- със захранване по няколко минути
- със захранване, с BAT по няколко минути
- с BAT по няколко минути
- многократен RESET на микроконтролерчето
Отклонение: видимо няма.

- без захранване и без BAT за десетина секунди: часовникът се стартира нулиран.

Нищо непредвидимо не се случва. :rolleyes
Доволен съм засега. Сверявам и оставам на BAT за дълъг период от време ...


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 20 Юни 2022, 07:38 
Offline
Аватар

Регистриран на: 07 Дек 2006, 18:24
Мнения: 1412
Местоположение: Силистра
Без захранване, на BAT, 9 часа след сверяване - отклонение: +5 сек.


Върнете се в началото
 Профил  
 
МнениеПубликувано на: 01 Яну 2023, 11:24 
Offline

Регистриран на: 25 Ное 2009, 18:21
Мнения: 10
Скоро правих часовник с DS3231, при работа ту на захранване, ту на батерия, за 1 месец беше избързал с около 1 секунда. Не се слага кварц, тъй като има вграден в чипа, с температурна компенсация.


Върнете се в началото
 Профил  
 
Покажи мненията от миналия:  Сортирай по  
Напиши нова тема Отговори на тема  [ 13 мнения ] 

Часовете са според зоната UTC + 2 часа [ DST ]


Кой е на линия

Потребители, разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
cron
Форумът се задвижва от phpBB® Forum Software © phpBB Group
Преведено от yarnaudov.com