Страница 1 из 2
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 08 мар 2019, 08:53
Ivan_Kornege
Люди помогите =слёзно молю!!!
Весна на носу, готовлю свой мотоблок к огороду.
Делал прошлым годом счетчик моточасов на ардуино.
А зимой прикупил часы DS323 , на плате есть память.
Решил доработоть счетчик и в память DS323 записывать дату и время включения выключения мотоблока.
На ум не приходит как записывать все даты вкл/выкл и не стирать предыдущие записи. Т.е. всю историю жизни мотоблока.
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 08 мар 2019, 10:39
valand
ну вот же есть
тема там есть всё и даже больше чем нужно
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 08 мар 2019, 15:39
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]
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 08 мар 2019, 15:45
Ivan_Kornege
Спасибо мужики, пока курю темы. Не въезжаю как как записать новое событие при этом сохранить предыдущие даты и потом считать для просмотра .
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 08 мар 2019, 20:06
Fuji1604
прицепите cd карточку, штатный блок работы с ней записывает дату и время +вашу информацию, на карточке формируется файл для экселя.
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 08 мар 2019, 21:33
AVGN
Вот заменил блоки деления на блок modulo
Запись в память дату и время_чтение_MODULO.flp
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 11 мар 2019, 13:51
Ivan_Kornege
Fuji1604 писал(а): 08 мар 2019, 20:06прицепите cd карточку, штатный блок работы с ней записывает дату и время +вашу информацию, на карточке формируется файл для экселя.
Спасибо. Но если бы я это мог то не писал бы в теме НИМАГУ

Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 11 мар 2019, 14:25
Sancho
[ref]Ivan_Kornege[/ref], Иван, давайте определимся с алгоритмом.
Например, как Ваша ардуино как узнает, что надо сейчас записать?
Возьмём один из вариантов - при запуске мотоблока появляется питание, при выключении - кондёр задержки по питанию и сигнал его о его пропадании.
Сам блок, чего будет делать:
Изначально память очищена, во всех ячейках нули.
при включении ардуино, т.е. запуск мотоблока, блок сканирует(считывает) память по-блочно пока меяц не будет равен нулю, значит свободная ячейка. В неё производится запись текущего времени и даты и признак/бит включения.
При появлении сигнала "немедленная запись", скоро питанию придёт хана, производится запись времени и даты и признак/бит выключение.
Другой блок, читалка, будет считывать попарно две ячейки, 0 и 1, 2 и 3 и т.д. для Вашего дальнейшего анализа.
Как Вам?
Отправлено спустя 3 минуты 49 секунд:
Секунды тоже нужно???
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 11 мар 2019, 14:42
Ivan_Kornege
[ref=#ff8000]Sancho[/ref],
Ардуина у меня питается от аккумулятора, который заряжается от генератора мотоблока (приклячил на мотоблок).
Определять момент включения будет, как только появляется на выпрямителе генератора +13,5v.
Выключение, когда падает меньше 13,5V.
Ардуина питается всегда, пока не отключаю от АКБ. Если долго не пользую мотоблок.
Вот мне и надо время события включение и выключения записать в память.
Например: 2019 г 14 апреля 10часо11минут22сек. Что выдают часы.
Все, какие накопились, потом считать, как понадобится.
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 11 мар 2019, 15:28
Sancho
Вариант некст:
Выделяем ячейку, в последних местах

под номер последней записанной ячейки.
После очередной записи даты/времени обновляем.
На жизнь мотоблока перезаписей хватит
Отправлено спустя 50 секунд:
Ок, сейчас придумаю...
Отправлено спустя 43 минуты 33 секунды:
[ref]Ivan_Kornege[/ref], У Вас 24С32?
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 11 мар 2019, 15:34
Ivan_Kornege
Да 24С32
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 11 мар 2019, 17:47
Sancho
Заготовка, надо доделать немного. Есть очепятки.
Смена закончилась, может дома или завтра
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 11 мар 2019, 17:57
valand
Ivan_Kornege писал(а): 11 мар 2019, 14:42Все, какие накопились, потом считать, как понадобится.
Как то не практично именно для счетчика наработки. Может накопиться столько что и не сосчитать даже с калькулятором).
Не логичней было бы считывать старое и приплюсовывать новое, и сразу иметь все посчитанное и понятное для восприятия?
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 12 мар 2019, 08:17
Ivan_Kornege
Sancho писал(а): 11 мар 2019, 17:47Заготовка, надо доделать немного. Есть очепятки.
Смена закончилась, может дома или завтра
Вложения
Для Ивана запись времени v01.flp
Спасибо. Что то у меня часы не запускаются. Буду разбираться с железом.
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 12 мар 2019, 11:32
Sancho
[ref]Ivan_Kornege[/ref], Иван, дерзайте!
Протестировано.
Если не использовать секунды или год, а вместо них записывать номер события, получится логгер. Автоматический. Круговой, на 1021 событие. На 1000 кругов, потом можно продлить жизън.
Отправлено спустя 59 минут 3 секунды:
Алгоритм:
под каждую запись выделено 4 байта.
Последние 8 байт памяти не участвуют в записи данных, предназначены для записи номера ячейки под следующую запись.
По фронту на входе запись происходит считывание адреса для записи, запись по этому адресу данных со входов, приращение адреса и его запись.
При достижении адреса байта после 4086 запись начнётся с 0, по кругу.
Блок чтения читает при смене входного адреса данные.
Формат данных:
сек и мин - 0...63
час и день - 0...31
месяц - 0..15
Год 18...33, запись по формуле год минус 18
два дискретных.
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 14 мар 2019, 09:52
Ivan_Kornege
[ref=#ff8000]Sancho[/ref], Спасибо огромное за труд!
Китаец посадил соплюху с плюса по ногам, глазами не увидел. Рассмотрел только в микроскоп.
Часы не запустились. Видимо чипу хана. Память ведёт себя странно.
Скетч тест залил вроде записывает и считывается. Но не стирает.
Буду перепаивать чипы -заказал в поднебесной.
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 14 мар 2019, 10:37
Sancho
Ivan_Kornege писал(а): 14 мар 2019, 09:52Память ведёт себя странно.
Скетч тест залил вроде записывает и считывается. Но не стирает.
Буду перепаивать чипы -заказал в поднебесной.
Очистка работает после двух секундного удержания кнопки

Или, возможно, Вам нужно немного подредактировать блок стирания - в функции
void eeprom_i2c_cler()
изменить delay с 3 мс на 5..7
С микрухами из чиподипа проблем нет.
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 16 мар 2019, 12:09
Ivan_Kornege
В общем доэксперементировался. Жду новые чипы.
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 26 мар 2019, 07:11
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]
Как записать из часов DS3231 дату-время в EEPROM
Добавлено: 26 мар 2019, 08:59
Sancho
[ref]Ivan_Kornege[/ref], Иван, можно проект - что-бы был 100% повтор проблемы?
Отправлено спустя 2 минуты 8 секунд:
ВВерх/вниз нажимали?
Отправлено спустя 1 минуту 8 секунд:
Sancho писал(а): 12 мар 2019, 11:32
Год 18...33, запись по формуле год минус 18
Соответственно, при восстановлении к 2018 добавляется что в памяти.