А что, разве в МК с его 512 байтами ОЗУ, прямо-таки и не хватает места, чтобы не загрузить в эту ОЗУ все цифры напрямую, пусть даже и в двоично-десятичном формате???
И автор не учитывает того, что
в EEPROM цифры не меняются, и индикатор будет выводить только то, что хранится в EEPROM, если брать значения оттуда. Изменять же EEPROM при счете таймеров или при вводе новых значений - верный способ в скором времени исчерпать ресурс циклов перезаписи. Да и вообще, запись в EEPROM идет гораздо дольше, чем в ОЗУ.
В двоичной системе гораздо быстрее и проще идет сложение (вычитание), чем в двоично-десятичной.
Перед выводом на индикацию число из двоичной переводится в двоично-десятичную (BCD). А при изменении значений (программировании начальных значений) - наоборот, из двоично-десятичной в двоичную.
Сообщение от ARTEM277
|
Или есть какие то рамки приличия...?
|
Именно у этого МК эти "рамки" - 512 однобайтных переменных. Хватит для таймеров?
Сообщение от ARTEM277
|
.Работают они
так .... выводится на индикацию сумма всех таймеров.
|
Для суммы нужна всего лишь
одна переменная (двухбайтная, целое число не больше 65536). В нее будут просто суммироваться значения каждого таймера, прочитанные последовательно из EEPROM или ОЗУ перед запуском таймера (или после изменения значений)
Сообщение от ARTEM277
|
Еще пытаюсь не использовать деление
|
Деление не нужно - считай в целых числах. А десятичную точку ты всегда можешь поставить самостоятельно в любом месте, просто засветив сегмент индикатора в нужной позиции.
Я бы сделал так. Значения таймеров загружаются в ОЗУ и если их нужно изменить, то они меняются прямо в ОЗУ. А когда изменения будут закончены (по нажатию кнопки), то значения переписываются из ОЗУ в EEPROM и там хранятся до следующих изменений начальных значений.
Для счета в принципе то нужна только
одна двухбайтная переменная. В нее читается из EEPROM первый таймер при запуске, и счет таймера идет в этой переменной. Далее, когда первый таймер досчитает до 0, в
эту же переменную загружается из EEPROM значение второго таймера и счет повторяется. Далее третий и четвертый таймеры запускаются аналогично. А потом после окончания счета в
эту же переменную читаются с накопительным суммированием значения таймеров из EEPROM.
Если нужно изменить значения конкретного таймера, читаются из EEPROM в ОЗУ и там изменяются, затем перезаписываются обратно.