leoniv (leoniv) wrote,
leoniv
leoniv

Categories:

Счетчик для "Электроника-004" (часть 5)



Пробная эксплуатация магнитофона с новым счетчиком выявила крайне неудобное управление. Пришлось снова садиться за переделку программы.



Весьма предсказуемо, но лишний раз убедился, что основным режимом счетчика является реальное время. Все остальные режимы тоже должны быть доступны (а не закрыты в прошивке), но не должны мешать. И я отступил от совета, данного мне автолюбителями. Сделал сброс по короткому нажатию. Если кнопку просто нажимать и ничего с ней больше не делать, то словно и нет у счетчика больше никаких режимов.



Но если кнопку удерживать 1 сек., то переключится режим индикации. И так по кругу. В каждом из режимов индикации сброс - простым нажатием кнопки. Исключение составляет режим индикации скорости - там сброс не нужен, поэтому короткое нажатие производит переход в режим индикации текущего диаметра ролика и обратно.



Если в режиме индикации диаметра ролика удерживать кнопку 4 сек., то происходит вход в калибровку диаметра ролика.



Коротким нажатием можно выйти из калибровки без изменения диаметра, а удержанием 1 сек. - загрузить диаметр ролика по умолчанию.

Если удерживать кнопку во время включения питания, то можно увидеть текущую версию прошивки, которая индицируется 1 сек. вместо теста дисплея (вывода 8.8.8.8.8.8.).



Эксплуатация счетчика с возможностью точного отображения текущей скорости ленты сильно подмочила репутацию магнитофона. Стало видно как на ладони, что на скорость ленты влияет все на свете: сила прижима и состояние ролика, загрязнение ведущего вала, толщина ленты и ее натяжение. Конечно, речь идет об отклонениях порядка 0.1%, но все равно неприятно. Была даже добавлена опция компиляции, чтобы скрыть последний знак измерителя скорости.

Вместе с доработкой интерфейса пользователя решил попробовать сделать вывод десятых долей секунды. Такое часто бывает на счетчиках профессиональных магнитофонов - там есть десятые доли секунды или даже кадры. Хоть штатная крыльчатка имеет всего 5 лопастей, но благодаря 4X квадратурному декодеру, имеем 20 событий на оборот. На скорости 19 это почти 32 события в секунду, что позволяет выводить десятые. Они будут чуть "хромать", но вряд ли на глаз это будет заметно. И тут я столкнулся с трудностью, о которой даже не подозревал.

Это проблема с целыми числами. Допустим, сбросили счетчик во время прямого хода. Он начал показывать 0. Логично предположить, что значение 1 должно появиться ровно через секунду. Если же сбросить счетчик во время обратного хода (реверса), то ровно через секунду должно появиться значение -1. Вроде, логично. Но тогда при проходе нуля от отрицательных чисел к положительным число 0 будет гореть 2 секунды! Счетчик будет в этом месте "хромать"!



Ничего подобного в промышленных счетчиках я не замечал. Даже специально проверил счетчик Technics RS-B965 - все нормально. После сброса проходит секунда, а при проходе нуля он горит тоже ровно секунду. Единственное, там нет реверса, не могу проверить, через сколько появится -1 после сброса.

В старой прошивке счетчика не думая применил знаковое округление (t + ((t > 0)? 0.5 : -0.5). Но в результате после сброса до появления 1 проходило всего 0.5 сек., чего я не замечал.

Если счетчик имеет разряд индикации десятых секунды, то после -1.0 он покажет -0.9, -0.8 и так далее, затем 0, 0.1, 0.2 и так далее, затем 1.0. Теперь, если представить, что разряд десятых секунды мы просто закрыли бумажкой, то число 0 будет висеть 2 секунды - половину времени с минусом, половину - с плюсом. Как так, ведь счетчик будет "хромать"? Что с этим делать?

Еще одно изменение, которое захотелось внести в программу, это другой способ ограничения счета. Поскольку основным режимом является реальное время, то "красивое" максимальное значение лучше выбрать именно для этого режима. Все скорости отличаются ровно в 2 раза, поэтому в теории можно сделать, скажем, для скорости 9 ограничение 7.59.59, для 19 - 3.59.59, для 38 - 1.59.59. Следующее значение будет 8, 4 или 2 часа, величины отличаются ровно в два раза. В теории должно получиться.

Но что тут началось! Для варианта счетчика без знака такое сделать удалось, но для знакового варианта, где необходимо округление, начались глюки. Отлаживать алгоритм контроля переполнения в микроконтроллере стало совсем тоскливо, пришлось написать эмулятор счетчика.



Свою лепту вносил и способ счета - на каждом шаге добавлялась/вычиталась не единица, а некоторая дельта, которая могла перешагнуть за пределы переполнения. Надо было правильно "заворачивать" значение. Переполнение надо контролировать по метражу, но так, чтобы его перевод в единицы времени давал нужный результат. Проблем добавил и перевод обратно из времени в метраж, ведь время обладает меньшей точностью, правильно округлить не всегда возможно. Много раз карандашом на листке бумаги я приходил к "правильному" решению, но проверка его в коде давала ошибку то в одном, то в другом месте. Ничего не оставалось, как пойти на компромисс. В знаковых режимах перед переполнением появлялось время с нулями, типа 4.00.00, а не 3.59.59, как хотелось. Последняя секунда перед переполнением тоже оказалась разной длины при разных скоростях. Но выполнено главное условие - переполнение происходит на одном и том же шаге для всех скоростей. Добиваться этого пришлось с помощью параметрического программирования, т.е. подбором. Не знал, что целые числа столь коварны.

Теперь интервалы измерения времени более "красивые": ±8.00.00, ±4.00.00 и ±2.00.00 (для скорости 9, 19, 38). Зато пределы метража кривые: ±2743.1 м (причем для разных диаметров ролика будут отличаться). Опцией компиляции можно включить беззнаковый режим. Это подойдет для магнитофонов без реверса. При этом максимальная емкость счетчика увеличивается до 99.59.59, 49.59.59 и 24.59.59, а емкость измерителя метража - до 34289.9 м. Другой опцией компиляции можно включить отображение десятых долей секунды. Опция работает только в режиме без знака, иначе не хватает знакомест индикатора. Емкость счетчика в таком режиме составляет 7.59.59.9, 3.59.59.9 и 1.59.59.9. Сейчас прошил себе именно этот вариант - с десятыми долями секунды. Аппарат сразу приобрел очень профессиональный вид.

Tags: electronics, reel-to-reel, Электроника-004, катушечник, магнитофон, микроконтроллер
Subscribe

  • Мясной салат

    То, что так часто хочется есть, уже возмущает само по себе. Это животное желание постоянно отвлекает от интересных дел. А то, что иногда хочется…

  • Цифровое слабоумие

    Такой недуг старики приписывают современной молодежи. Меня всегда расстраивало, что люди не умеют смотреть на мир в целом, не выхватывая отдельные…

  • Micro-SIM

    Сегодня подвернулась халтурка: попросили обрезать Mini-SIM (2FF) до размеров Micro-SIM (3FF). А в остальном жизнь пуста и однообразна, не о чем…

  • Post a new comment

    Error

    default userpic
    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments