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

Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

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

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

Сообщение valand »

ну вот же есть тема там есть всё и даже больше чем нужно
Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03 фев 2017, 12:23

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

Сообщение AVGN »

Выкладывал пример записи событий [ref=#ff8000]Sancho[/ref]
тут как раз часы DS3231
Test_led_eeprom_v5.flp
Или можно наверно блок сделать из этого примера, часы правда 1302
[spoiler]

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

/*
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;
    }
  }
}
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

Спасибо мужики, пока курю темы. Не въезжаю как как записать новое событие при этом сохранить предыдущие даты и потом считать для просмотра .
Аватара пользователя
Fuji1604
Сержант
Сообщения: 282
Зарегистрирован: 19 янв 2016, 06:09
Откуда: Березники
Имя: Сергей

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

Сообщение Fuji1604 »

прицепите cd карточку, штатный блок работы с ней записывает дату и время +вашу информацию, на карточке формируется файл для экселя.
когда мастерю обычно подсматриваю,
не рыли ли окоп в том же направлении,
не изобретали ли велосипед с такими-же квадратными как у меня колёсами,
а уже потом - не торопясь, торю свою лыжню
Аватара пользователя
AVGN
Капитан
Сообщения: 727
Зарегистрирован: 03 фев 2017, 12:23

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

Сообщение AVGN »

Вот заменил блоки деления на блок modulo
Запись в память дату и время_чтение_MODULO.flp
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Если вы не можете объяснить это просто – значит, вы сами не понимаете этого до конца.
☆Альберт Эйнштейн
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

Fuji1604 писал(а): 08 мар 2019, 20:06прицепите cd карточку, штатный блок работы с ней записывает дату и время +вашу информацию, на карточке формируется файл для экселя.
Спасибо. Но если бы я это мог то не писал бы в теме НИМАГУ :smile44:
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение Sancho »

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

Отправлено спустя 3 минуты 49 секунд:
Секунды тоже нужно???
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

[ref=#ff8000]Sancho[/ref],
Ардуина у меня питается от аккумулятора, который заряжается от генератора мотоблока (приклячил на мотоблок).
Определять момент включения будет, как только появляется на выпрямителе генератора +13,5v.
Выключение, когда падает меньше 13,5V.
Ардуина питается всегда, пока не отключаю от АКБ. Если долго не пользую мотоблок.
Вот мне и надо время события включение и выключения записать в память.
Например: 2019 г 14 апреля 10часо11минут22сек. Что выдают часы.
Все, какие накопились, потом считать, как понадобится.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение Sancho »

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

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

Отправлено спустя 43 минуты 33 секунды:
[ref]Ivan_Kornege[/ref], У Вас 24С32?
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

Да 24С32
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение Sancho »

Заготовка, надо доделать немного. Есть очепятки.
Смена закончилась, может дома или завтра
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
valand
Рядовой
Сообщения: 64
Зарегистрирован: 15 июл 2018, 15:12
Имя: Андрей

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

Сообщение valand »

Ivan_Kornege писал(а): 11 мар 2019, 14:42Все, какие накопились, потом считать, как понадобится.
Как то не практично именно для счетчика наработки. Может накопиться столько что и не сосчитать даже с калькулятором).
Не логичней было бы считывать старое и приплюсовывать новое, и сразу иметь все посчитанное и понятное для восприятия?
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

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

Вложения

Для Ивана запись времени v01.flp
Спасибо. Что то у меня часы не запускаются. Буду разбираться с железом.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение Sancho »

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

Отправлено спустя 59 минут 3 секунды:
Алгоритм:
под каждую запись выделено 4 байта.
Последние 8 байт памяти не участвуют в записи данных, предназначены для записи номера ячейки под следующую запись.
По фронту на входе запись происходит считывание адреса для записи, запись по этому адресу данных со входов, приращение адреса и его запись.
При достижении адреса байта после 4086 запись начнётся с 0, по кругу.
Блок чтения читает при смене входного адреса данные.
Формат данных:
сек и мин - 0...63
час и день - 0...31
месяц - 0..15
Год 18...33, запись по формуле год минус 18
два дискретных.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

[ref=#ff8000]Sancho[/ref], Спасибо огромное за труд!
Китаец посадил соплюху с плюса по ногам, глазами не увидел. Рассмотрел только в микроскоп.
Часы не запустились. Видимо чипу хана. Память ведёт себя странно.
Скетч тест залил вроде записывает и считывается. Но не стирает.
Буду перепаивать чипы -заказал в поднебесной.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение Sancho »

Ivan_Kornege писал(а): 14 мар 2019, 09:52Память ведёт себя странно.
Скетч тест залил вроде записывает и считывается. Но не стирает.
Буду перепаивать чипы -заказал в поднебесной.
Очистка работает после двух секундного удержания кнопки :)
Или, возможно, Вам нужно немного подредактировать блок стирания - в функции
void eeprom_i2c_cler()
изменить delay с 3 мс на 5..7
С микрухами из чиподипа проблем нет.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

В общем доэксперементировался. Жду новые чипы.
Аватара пользователя
Ivan_Kornege
Лейтенант
Сообщения: 338
Зарегистрирован: 29 апр 2017, 08:24
Откуда: гАндурас
Имя: Ivan

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

Сообщение Ivan_Kornege »

Китаец оказался нереально крут 24с32 cmd пригнал за 12 дней!
Самая быстрая доставка за 5 лет покупок на али.
[ref=#ff8000]Sancho[/ref], пока нет часового чипа, решил проверить память.
Вот так запишет 26.03.2019 и время 23ч58м59сек напримр ?
[spoiler]
24C32A.PNG
[/spoiler]

Отправлено спустя 49 минут 49 секунд:
Почему то на дисплее вижу одни нули и вторая строка 00-00-2018
[spoiler]
24С32.jpeg
[/spoiler]
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25 дек 2015, 17:32
Откуда: Ярославль.
Имя: Александр
Поблагодарили: 5 раз
Контактная информация:

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

Сообщение Sancho »

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

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

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

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

Кто сейчас на конференции

Сейчас этот форум просматривают: grin-mpx и 1 гость