leoniv (leoniv) wrote,
leoniv
leoniv

Categories:

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



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



Самые примитивные счетчики ведут счет в условных единицах. Часто это механические счетчики, связанные с какой-то вращающейся деталью ЛПМ. Хорошо, если это обводной ролик. Его скорость вращения пропорциональна скорости ленты, это значит, показания счетчика с помощью некоторого коэффициента можно перевести в метры или секунды времени звучания. Но в простых ЛПМ обводных роликов нет, поэтому зачастую счетчик был связан с принимающим боковым узлом (подкатушечником). Скорость его вращения зависит не только от скорости ленты, но и от диаметра рулона, поэтому в таком случае счетчик показывает ну совсем условные единицы, которые невозможно во что-то перевести. Общий недостаток счетчиков условных единиц - их показания на разных магнитофонах невозможно сопоставить. Это такой счетчик "для внутреннего пользования". Хотя он тоже иногда выручает, например, помогает вернуться в заданное место фонограммы.

Лучше, если счетчик будет измерять расход ленты в метрах. Это позволит легко переводить показания в секунды. Такие счетчики на разных магнитофонах будут показывать одинаково, что сделает пометки в единицах метража понятными для многих пользователей. Но практических реализаций таких счетчиков я не встречал.

Еще более продвинутыми являются счетчики реального времени звучания, которые показываю в секундах, минутах и часах. Если метраж ленты однозначно связан с количеством оборотов обводного ролика, то реальное время еще связано и со скоростью ленты - на каждой скорости оно будет свое. Счетчики реального времени можно встретить во многих магнитофонах высокого класса. Разумеется, делать надо именно счетчик реального времени.

Если магнитофон имеет одну скорость движения ленты, то такой счетчик строится несложно, количество импульсов с датчика движения просто умножается на некоторый коэффициент и выводится на дисплей. Сложнее обстоит дело в многоскоростных магнитофонах. При переключении скорости показания счетчика должны тоже меняться. В этом случае логично производить счет метража, который не зависит от скорости ленты. А затем метраж переводить в реальное время для текущей выбранной скорости.

Количество импульсов с датчика вращения и метраж связаны через диаметр ролика. В магнитофоне "Электроника-004" обводной ролик обрезиненный, поэтому его диаметр выдерживается не очень точно.



Неточно заданный диаметр ролика на всей длине катушки ленты (а это может быть больше километра) даст заметную погрешность. Поэтому желательно иметь процедуру калибровки диаметра ролика, а все расчеты вести в достаточно мелкой сетке (диаметр выражать в микронах). Забегая немного вперед, могу отметить, что проскальзывание ленты на обводном ролике совсем незначительное. Конечно, оно зависит от качества работы системы стабилизации натяжения ленты. Если натяжение всегда поддерживается, проскальзывания практически нет. Если образуется петля, то некоторое проскальзывание будет. На практике при перемотке километровой катушки туда-сюда погрешность исчисляется секундами. Если в процессе активно переключать режимы, погрешность увеличивается, но все равно остается вполне приемлемой. Теперь про проблемы.

Первая проблема - организация оптимальной обработки значений счета. Как было описано выше, счетчик реального времени - это не просто примитивный двоичный счетчик. Чтобы получить выходное значение, надо произвести ряд вычислений с числами большой разрядности. Делать это все в прерывании по каждому событию оптодатчика невозможно. При перемотке частота событий может быть высокой - до 1700 Гц. С другой стороны, нет никакой необходимости так часто получать результат. Ведь счетчик работает для человека, а он не может воспринимать информацию, которая меняется быстрее, чем примерно 10 раз в секунду. Поэтому было решено отвязать период индикации от периода событий оптодатчика. Обновление индикации идет в своей сетке. Можно было выбрать период 100 - 300 мс, но из соображений "красивости" смены цифр при перемотке был выбран более маленький период - 10 мс. Но это все равно намного больше минимального периода событий оптодатчика. В прерывании формируется лишь восьмиразрядная "дельта" - сколько событий набежало с момента предыдущего опроса. Все остальные вычисления делаются в основной программе.

Вторая проблема - обработка переполнения. Счетчик может индицировать метраж, а также время при скорости 9.525 см/с, 19.05 см/с и 38.1 см/с. Между всеми этими значениями можно переключаться во время движения ленты. Поэтому между ними должно быть однозначное соответствие. Поэтому переполняться они все должны в одной точке. Не получится, скажем, чтобы время на скорости 9 и скорости 19 доходило до 9.59.59, а затем наступало переполнение. На низкой скорости ведь оно наступит на меньшем метраже ленты, и что потом будет отображаться при переключении на более высокую скорость? Потеряется однозначное соответствие.

Емкость счетчика ограничена дисплеем. Информационная емкость дисплея в режиме метража составляет ±9999.9 метров, а в режиме реального времени составляет ±9 часов, 59 минут, 59 секунд (±35999 секунд). На скорости 38.1 см/с это соответствует метражу примерно ±13716 м, на скорости 19.05 см/с это ±6858 м, на скорости 9.525 см/с это ±3429 м. Как видно, наиболее жесткое ограничение дает индикация реального времени на самой низкой скорости. Чтобы избежать переполнения, был ограничен диапазон метража "красивой" величиной ±2999.9 м, что достаточно для катушек любого размера с любой толщиной ленты. В результате диапазоны реального времени стали равны:

- на скорости 9.525 см/с до ±31496 секунд (±8 часов, 44 минут, 56 секунд),
- на скорости 19.05 см/с до ±15748 секунд (±4 часа, 22 минут, 28 секунд),
- на скорости 38.1 см/с до ±7874 секунд (±2 часа, 11 минут, 14 секунд).

Наверное, это несколько некрасиво. Весьма неожиданно, например, после 4.22.28 получить переполнение. Но как сделать иначе? Хотя переполнение может возникнуть только в том случае, если продолжать проигрывание нескольких катушек без сброса счетчика. Если делать сброс счетчика при смене катушки, переполнения никогда не увидим.

Третья проблема - это уже надоевшая проблема неудобного интерфейса пользователя в условиях ограниченного количества органов управления. Штатный счетчик имел только одну кнопку, которая сбрасывала показания. Увеличить количество кнопок сложно, это потребует сложной механической доработки панели магнитофона. Поэтому надо во что бы то ни стало обойтись одной кнопкой. В новом счетчики кроме сброса есть еще и разные режимы индикации, между которыми как-то надо переключаться.

Ситуация почти безвыходная, пришлось обращаться к помощи сетевого разума. Там меня убедили, что сброс лучше всего делать удержанием кнопки, так, мол, делается сброс суточного пробега в автомобилях. Но я понятия в этом не имею, ведь не автолюбитель. Послушался, сделал. Еще один совет был поставить вместо кнопки энкодер. Это позволит не меняя панель получить больше свободы в управлении. Энкодер на плате развел, но пока программно не поддерживал. В результате получилось следующее:

- Индикация реального времени (часы.минуты.секунды)
- Индикация времени фрагмента (часы.минуты.секунды)
- Индикация метража до ±2999.9 м
- Индикация реальной скорости ленты до 999.999 см/с
- Калибровка диаметра ролика от 30 до 70 мм
- Автоматическое сохранение всех величин в EEPROM

Управление счетчиком производится с помощью одной кнопки. Различается короткое нажатие, удержание в течение 1 сек. и длинное удержание в течение 4 сек.

Короткое нажатие кнопки переключает режимы индикации: "Реальное время", "Время фрагмента", "Метраж", "Скорость" и так далее по кругу.



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

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

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

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

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

Удержание кнопки в течение 1 сек. производит сброс текущих показаний (в режиме "Скорость" сброс не производится). Для режимов "Реальное время" и "Метраж" используется общий счетчик, поэтому при сбросе одной величины будет сброшена и другая. "Время фрагмента" сбрасывается независимо. По сути, это второй независимый счетчик реального времени.



При удержании кнопки в течение 4 сек. производится вход в режим калибровки диаметра обводного ролика. Вход возможен из любого режима индикации, но если нежелательно, чтобы сбрасывался счетчик, вход надо осуществлять из режима "Скорость". При входе в режим калибровки на дисплей выводится буква "d" и текущее значение диаметра ролика (до сотой миллиметра). Чтобы выйти из режима калибровки без изменения диаметра, надо сделать короткое нажатие кнопки.



Если в режиме калибровки удерживать кнопку в течение 4 сек., на дисплее появится мигающая надпись "CAL", и начнется процесс калибровки. Для правильной калибровки диаметра ролика необходимо, чтобы скорость ленты была заранее выставлена точно 19.05 см/с по измерительной ленте. Примерно через 20 сек. процесс калибровки закончится, при этом будет выведено новое значение диаметра ролика. Калибровку можно повторить длинным удержанием кнопки, или выйти из нее коротким нажатием. При этом новое значение диаметра будет сохранено.

Если при калибровке произошла ошибка (например, скорость ленты при калибровке имела сильное отклонение от 19.05 см/с), то на дисплее вместо нового значения диаметра ролика появится надпись "Err". В этом случае можно или повторить калибровку длинным удержанием кнопки, или выйти из нее коротким нажатием, при этом новое значение сохраняться не будет. Допустимые пределы калибровки для диаметра ролика – от 30 до 70 мм.



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

При вычислении реального времени учитывается скорость 9 или 19, которая выбирается с помощью логического сигнала 19/9 (контакт 1 разъема XP1). Для работы на скорости 19 и 38 на плате надо установить перемычку J3.

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

Исходники можно скачать тут.

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

  • Эффект горячего шоколада

    Кофе я не люблю. Вернее, не так: он мне безразличен. Особого вкуса в нем не нахожу. С трудом могу отличить вкус кофе от вкуса какао. В детстве у…

  • Чипсы

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

  • Пост

    Пост про холодные закуски.

  • 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