Как записать из часов DS3231 дату-время в EEPROM

Внешняя EEPROM по шине I2C запись дата-время

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

Как записать из часов DS3231 дату-время в EEPROM

#1

Сообщение Ivan_Kornege » 08.03.2019{, 08:53}

Люди помогите =слёзно молю!!!
Весна на носу, готовлю свой мотоблок к огороду.
Делал прошлым годом счетчик моточасов на ардуино.
А зимой прикупил часы DS323 , на плате есть память.
Решил доработоть счетчик и в память DS323 записывать дату и время включения выключения мотоблока.
На ум не приходит как записывать все даты вкл/выкл и не стирать предыдущие записи. Т.е. всю историю жизни мотоблока.

valand
Рядовой
Сообщения: 63
Зарегистрирован: 15.07.2018{, 15:12}
Репутация: 13
Имя: Андрей

Как записать из часов DS3231 дату-время в EEPROM

#2

Сообщение valand » 08.03.2019{, 10:39}

ну вот же есть тема там есть всё и даже больше чем нужно

Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03.02.2017{, 12:23}
Репутация: 56

Как записать из часов DS3231 дату-время в EEPROM

#3

Сообщение AVGN » 08.03.2019{, 15:39}

Выкладывал пример записи событий Sancho
тут как раз часы DS3231
Test_led_eeprom_v5.flp
(1.84 МБ) 69 скачиваний
Или можно наверно блок сделать из этого примера, часы правда 1302
СпойлерПоказать

Код: Выделить всё

/*
http://arduino.ru/forum/programmirovanie/organizatsiya-zhurnala-sobytii-v-eeprom#comment-98329
*/
#include <logEEPROM.h>
#include <DS1302.h>

Log LОG(241, 255);
DS1302 rtc(2, 3, 4);
//int t;
//int x;

void setup()
{
  rtc.halt(false);                         // Запуск часов
  rtc.writeProtect(false);
  Serial.begin(9600);
}

void loop()
{
  Rec t;
  char output[23]; 
  if (Serial.available() > 0) {
    int incomingByte = Serial.parseInt();
    switch (incomingByte) {
    // Чтение последней записи
    case 1:
      if (LОG.MoveLast()) {
        t = LОG.Read();
        sprintf(output, "%02d:%02d:%02d %02d-%02d-%04d Flag:%01d", t.DateTime.hour, t.DateTime.min, t.DateTime.sec, t.DateTime.date, t.DateTime.mon, t.DateTime.year, t.flag);
        Serial.println(output);
      }
      break;
    // Чтение текущей записи
    case 2:
      t = LОG.Read();
      sprintf(output, "%02d:%02d:%02d %02d-%02d-%04d Flag:%01d", t.DateTime.hour, t.DateTime.min, t.DateTime.sec, t.DateTime.date, t.DateTime.mon, t.DateTime.year, t.flag);
      Serial.println(output);
      break;
    // Чтение предидущей записи
    case 3:
      if (LОG.MovePrevious()) {
        t = LОG.Read();
        sprintf(output, "%02d:%02d:%02d %02d-%02d-%04d Flag:%01d", t.DateTime.hour, t.DateTime.min, t.DateTime.sec, t.DateTime.date, t.DateTime.mon, t.DateTime.year, t.flag);
        Serial.println(output);
      }
      break;
    // Чтение следующей записи
    case 4:
      if (LОG.MoveNext()) {
        t = LОG.Read();
        sprintf(output, "%02d:%02d:%02d %02d-%02d-%04d Flag:%01d", t.DateTime.hour, t.DateTime.min, t.DateTime.sec, t.DateTime.date, t.DateTime.mon, t.DateTime.year, t.flag);
        Serial.println(output);
      }
      break;
    // Добавить новую запись
    case 5:
      t.DateTime = rtc.getTime();;
      t.flag = 2;
      LОG.AddNew(t);
      break;
    // Очистить все записи
    case 0:
      LОG.Clear();
      break;
    }
  }
}
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

Как записать из часов DS3231 дату-время в EEPROM

#4

Сообщение Ivan_Kornege » 08.03.2019{, 15:45}

Спасибо мужики, пока курю темы. Не въезжаю как как записать новое событие при этом сохранить предыдущие даты и потом считать для просмотра .

Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19.01.2016{, 06:09}
Репутация: 40
Откуда: Березники
Имя: Сергей

Как записать из часов DS3231 дату-время в EEPROM

#5

Сообщение Fuji1604 » 08.03.2019{, 20:06}

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

Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03.02.2017{, 12:23}
Репутация: 56

Как записать из часов DS3231 дату-время в EEPROM

#6

Сообщение AVGN » 08.03.2019{, 21:33}

Вот заменил блоки деления на блок modulo
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

Как записать из часов DS3231 дату-время в EEPROM

#7

Сообщение Ivan_Kornege » 11.03.2019{, 13:51}

Fuji1604 писал(а):
08.03.2019{, 20:06}
прицепите cd карточку, штатный блок работы с ней записывает дату и время +вашу информацию, на карточке формируется файл для экселя.
Спасибо. Но если бы я это мог то не писал бы в теме НИМАГУ :smile44:

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Как записать из часов DS3231 дату-время в EEPROM

#8

Сообщение Sancho » 11.03.2019{, 14:21}

Ivan_Kornege, Иван, давайте определимся с алгоритмом.
Например, как Ваша ардуино как узнает, что надо сейчас записать?
Возьмём один из вариантов - при запуске мотоблока появляется питание, при выключении - кондёр задержки по питанию и сигнал его о его пропадании.
Сам блок, чего будет делать:
Изначально память очищена, во всех ячейках нули.
при включении ардуино, т.е. запуск мотоблока, блок сканирует(считывает) память по-блочно пока меяц не будет равен нулю, значит свободная ячейка. В неё производится запись текущего времени и даты и признак/бит включения.
При появлении сигнала "немедленная запись", скоро питанию придёт хана, производится запись времени и даты и признак/бит выключение.
Другой блок, читалка, будет считывать попарно две ячейки, 0 и 1, 2 и 3 и т.д. для Вашего дальнейшего анализа.
Как Вам?

Отправлено спустя 3 минуты 49 секунд:
Секунды тоже нужно???
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

Как записать из часов DS3231 дату-время в EEPROM

#9

Сообщение Ivan_Kornege » 11.03.2019{, 14:42}

Sancho,
Ардуина у меня питается от аккумулятора, который заряжается от генератора мотоблока (приклячил на мотоблок).
Определять момент включения будет, как только появляется на выпрямителе генератора +13,5v.
Выключение, когда падает меньше 13,5V.
Ардуина питается всегда, пока не отключаю от АКБ. Если долго не пользую мотоблок.
Вот мне и надо время события включение и выключения записать в память.
Например: 2019 г 14 апреля 10часо11минут22сек. Что выдают часы.
Все, какие накопились, потом считать, как понадобится.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Как записать из часов DS3231 дату-время в EEPROM

#10

Сообщение Sancho » 11.03.2019{, 14:44}

Вариант некст:
Выделяем ячейку, в последних местах :) под номер последней записанной ячейки.
После очередной записи даты/времени обновляем.
На жизнь мотоблока перезаписей хватит :)

Отправлено спустя 50 секунд:
Ок, сейчас придумаю...

Отправлено спустя 43 минуты 33 секунды:
Ivan_Kornege, У Вас 24С32?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

Как записать из часов DS3231 дату-время в EEPROM

#11

Сообщение Ivan_Kornege » 11.03.2019{, 15:34}

Да 24С32

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Как записать из часов DS3231 дату-время в EEPROM

#12

Сообщение Sancho » 11.03.2019{, 17:47}

Заготовка, надо доделать немного. Есть очепятки.
Смена закончилась, может дома или завтра
Вложения
Для Ивана запись времени v01.flp
(341.11 КБ) 57 скачиваний
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

valand
Рядовой
Сообщения: 63
Зарегистрирован: 15.07.2018{, 15:12}
Репутация: 13
Имя: Андрей

Как записать из часов DS3231 дату-время в EEPROM

#13

Сообщение valand » 11.03.2019{, 17:57}

Ivan_Kornege писал(а):
11.03.2019{, 14:42}
Все, какие накопились, потом считать, как понадобится.
Как то не практично именно для счетчика наработки. Может накопиться столько что и не сосчитать даже с калькулятором).
Не логичней было бы считывать старое и приплюсовывать новое, и сразу иметь все посчитанное и понятное для восприятия?

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

Как записать из часов DS3231 дату-время в EEPROM

#14

Сообщение Ivan_Kornege » 12.03.2019{, 08:14}

Sancho писал(а):
11.03.2019{, 17:47}
Заготовка, надо доделать немного. Есть очепятки.
Смена закончилась, может дома или завтра

Вложения

Для Ивана запись времени v01.flp
Спасибо. Что то у меня часы не запускаются. Буду разбираться с железом.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Как записать из часов DS3231 дату-время в EEPROM

#15

Сообщение Sancho » 12.03.2019{, 10:33}

Ivan_Kornege, Иван, дерзайте!
Протестировано.
Если не использовать секунды или год, а вместо них записывать номер события, получится логгер. Автоматический. Круговой, на 1021 событие. На 1000 кругов, потом можно продлить жизън.

Отправлено спустя 59 минут 3 секунды:
Алгоритм:
под каждую запись выделено 4 байта.
Последние 8 байт памяти не участвуют в записи данных, предназначены для записи номера ячейки под следующую запись.
По фронту на входе запись происходит считывание адреса для записи, запись по этому адресу данных со входов, приращение адреса и его запись.
При достижении адреса байта после 4086 запись начнётся с 0, по кругу.
Блок чтения читает при смене входного адреса данные.
Формат данных:
сек и мин - 0...63
час и день - 0...31
месяц - 0..15
Год 18...33, запись по формуле год минус 18
два дискретных.
Вложения
Для Ивана запись времени v02.flp
(468.68 КБ) 68 скачиваний
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

Как записать из часов DS3231 дату-время в EEPROM

#16

Сообщение Ivan_Kornege » 14.03.2019{, 09:52}

Sancho, Спасибо огромное за труд!
Китаец посадил соплюху с плюса по ногам, глазами не увидел. Рассмотрел только в микроскоп.
Часы не запустились. Видимо чипу хана. Память ведёт себя странно.
Скетч тест залил вроде записывает и считывается. Но не стирает.
Буду перепаивать чипы -заказал в поднебесной.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Как записать из часов DS3231 дату-время в EEPROM

#17

Сообщение Sancho » 14.03.2019{, 10:37}

Ivan_Kornege писал(а):
14.03.2019{, 09:52}
Память ведёт себя странно.
Скетч тест залил вроде записывает и считывается. Но не стирает.
Буду перепаивать чипы -заказал в поднебесной.
Очистка работает после двух секундного удержания кнопки :)
Или, возможно, Вам нужно немного подредактировать блок стирания - в функции
void eeprom_i2c_cler()
изменить delay с 3 мс на 5..7
С микрухами из чиподипа проблем нет.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

Как записать из часов DS3231 дату-время в EEPROM

#18

Сообщение Ivan_Kornege » 16.03.2019{, 12:09}

В общем доэксперементировался. Жду новые чипы.

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 342
Зарегистрирован: 29.04.2017{, 08:24}
Репутация: 27
Откуда: гАндурас
Имя: Ivan

Как записать из часов DS3231 дату-время в EEPROM

#19

Сообщение Ivan_Kornege » 26.03.2019{, 06:22}

Китаец оказался нереально крут 24с32 cmd пригнал за 12 дней!
Самая быстрая доставка за 5 лет покупок на али.
Sancho, пока нет часового чипа, решил проверить память.
Вот так запишет 26.03.2019 и время 23ч58м59сек напримр ?
СпойлерПоказать
24C32A.PNG
Отправлено спустя 49 минут 49 секунд:
Почему то на дисплее вижу одни нули и вторая строка 00-00-2018
СпойлерПоказать
24С32.jpeg
24С32.jpeg (12.94 КБ) 897 просмотров

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Как записать из часов DS3231 дату-время в EEPROM

#20

Сообщение Sancho » 26.03.2019{, 08:56}

Ivan_Kornege, Иван, можно проект - что-бы был 100% повтор проблемы?

Отправлено спустя 2 минуты 8 секунд:
ВВерх/вниз нажимали?

Отправлено спустя 1 минуту 8 секунд:
Sancho писал(а):
12.03.2019{, 11:32}
Год 18...33, запись по формуле год минус 18
Соответственно, при восстановлении к 2018 добавляется что в памяти.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Ответить

Вернуться в «Помогите, а то я "нимагу"»