Счетчик ресурса с EEPROM

Тема в разделе "Arduino & Shields", создана пользователем Fau, 8 июн 2016.

Метки:
  1. Fau

    Fau Нуб

    Уважаемые форумчане, появилась задача сделать прибору счетчик наработки до 500 часов или 30 000 мин - прямой, а в идеале обратный, который будет сохранять значение после отключения питания, а при включении - продолжать считать.

    Использовал uno SMD Ch340g и реле + дисплей

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

    Без записи EEPROM все работает (единственное, реле делает 2 цикла включения/выключания до того как загорается дисплей, когда дисплей горит - диод на реле тухнет. Нормально или нет - не знаю).

    Написал скетч, как к нему прилепить EEPROM, переводить в биты, не переводить, делать ли задержку для того чтобы EEPROM постоянно не перезаписывался, или перезаписывать без задержки.

    Перечитал все что нашел, перепробовал все варианты, получил все результаты, кроме нужного - помогите пожалуйста )

    #include <EEPROM.h>
    #include <LiquidCrystal_I2C.h>
    LiquidCrystal_I2C lcd(0x27,16,2);

    void setup()
    {
    pinMode(8, OUTPUT);
    lcd.init();
    lcd.backlight();
    lcd.print("G-10-1 08.06.16"); // Модель устройства, дата обслуживания
    lcd.setCursor(6, 1);
    lcd.print("Time(hour)");
    }

    void loop()

    {
    digitalWrite(8, HIGH);
    int val = millis()/1000;
    lcd.setCursor(0, 1);
    lcd.print(val);

    }
     
  2. ostrov

    ostrov Гуру

    Особо обратите внимание на put и get - пишут и читают любые типы данных, хоть структуры. Причем если данные не менялись, то не перезаписываются, что экономия.
     
  3. Fau

    Fau Нуб

    Не могу все это сложить в кучу - где объявляться переменные должны, где читаться, где записываться, что с байтами делать
     
  4. ostrov

    ostrov Гуру

    Вечером напишу, если не забуду.
     
  5. ostrov

    ostrov Гуру

    Опишите что именно вы хотите записывать в EEPROM и как часто? Как вообще работает устройство? Выключается внезапно или по команде? По вашей программе вообще ничего не понятно, она с бешеной частотой выводит секунды на экран (хотя достаточно 1 раз в секунду), наверняка потому изображение блеклое и неравномерное. Зачем то постоянно включает пин 8. Опишите своими словами что вы хотите от устройства?

    И еще, имейте в виду, что ячейки EEPROM не вечные, по даташиту кол-во записи в них примерно 100 000 раз (в реальности больше, но никто ничего не гарантирует). Если вы будете писать туда каждую секунду, то надолго этой памяти не хватит.
     
  6. Fau

    Fau Нуб

    Устройство (это озонатор) должно учитывать ресурс наработки перед заменой расходных элементов. Идея какая - устройство запитывается: запускается ардуина, начинает счет времени, на 8 пине стоит реле (в принципе заделка на будущее) через реле питается само устройство. Минимум времени работы устройства 30 мин, допустим раз в минуту или раз в 5 мин ардуина должна записать в EEPROM время с момента включения (это если внезапное выключение выдергиванием шнура), а после следующего включения продолжить счет от записанного в EEPROM времени.

    Можно сделать конечно кнопку включения/выключения, от кнопки через реле запускать устройство, кнопкой выключать (задержка/запись/отключение по сигналу от кнопки).

    К сожалению, очень в теории представляю ардуину и только-только начинаю осваивать. А тут начальство - сделай, хоть тресни.

    С уважением
     
  7. ostrov

    ostrov Гуру

    Тогда так: обьявляете переменную типа unsigned int (0 - 65 535). Еще нужен флажок для проверки состояния счиетчика типа byte. Флажок размещаете в EEPROM по адресу 0 (или 1). При первом запуске программа, заметив что флаг не установлен, устанавливает его, записывает в переменную-счетчик нужное вам максимальное значение (30 000 минут, например) и начинает убавлять его каждую минуту на 1. Раз, допустим, в 5 минут значение счетчика скидывается в EEPROM функцией EEPROM.put() по адресу, например 2. Учитывайте, что счетчик занимает 4 байта. При последующих запусках, заметив, что запуск не первый, значение счетчика берется из EEPROM и продолжает убавлять и записывать до нуля. При нуле не знаю что, пищать наверное начнет и лампочками мигать. )

    Далее, меняете картридж, сбрасываете флажок и все пошло по новой. Вот такая система. Все абсолютно реально и работоспособно. Через годик можно адреса поменять, чтобы износ ячеек предупредить.
     
    Fau нравится это.
  8. Fau

    Fau Нуб

    Спасибо большое за указанное направление буду потихоньку разбираться.
    С уважением