Форум любителей катушечных магнитофонов, аналоговой видео и аудио аппаратуры

Хорошая аналоговая, качественная техника необходима тем, кто давно и безуспешно ищет свой звук, она нужна тем, кто уже понял, что цифровому звуку всегда будет чего-то не хватать...
Текущее время: 28 мар 2024, 15:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 112 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 09 дек 2017, 17:35 
Не в сети
Заслуженный участник
Аватара пользователя

Зарегистрирован: 05 июн 2015, 10:24
Сообщений: 1857
Откуда: Россия, Краснодар
Cпасибо сказано: 29
Спасибо получено:
116 раз в 106 сообщениях
Раз уж взялись за разработку, делайте тогда счетчик как положено, соответствующий международному стандарту SMPTE/EBU, основанному на стандартах ISO 2022 и ГОСТ 27463-87. Другими словами надо добавить еще четыре разряда, чтобы получилось 8 разрядов, т.е. часы, минуты, секунды и кадры (00 : 00 : 00 : 00). Как вариант можно сделать на светодиодных матрицах, они уже готовые продаются по два разряда в одной матрице (00).


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 09 дек 2017, 18:25 
Не в сети
Продвинутый участник

Зарегистрирован: 13 ноя 2012, 21:26
Сообщений: 776
Откуда: Россия, Москва
Cпасибо сказано: 7
Спасибо получено:
23 раз в 22 сообщениях
На кадры уже точности не хватит на штатном датчике движения - там на секунду, в зависимости от скорости, получается от 4 до 16 импульсов, так что придётся ставить дополнительный датчик, генерящий больше импульсов.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 09 дек 2017, 20:27 
Не в сети
Заслуженный участник
Аватара пользователя

Зарегистрирован: 05 июн 2015, 10:24
Сообщений: 1857
Откуда: Россия, Краснодар
Cпасибо сказано: 29
Спасибо получено:
116 раз в 106 сообщениях
А если колесо сделать большего диаметра и больше лопастей на него насадить?


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 09 дек 2017, 20:46 
Не в сети
Продвинутый участник

Зарегистрирован: 13 ноя 2012, 21:26
Сообщений: 776
Откуда: Россия, Москва
Cпасибо сказано: 7
Спасибо получено:
23 раз в 22 сообщениях
"Колесо" большего диаметра упрётся в блок головок. Проще ещё один обтюратор с большим количеством секторов и фотодатчиком на другом конце вала этого обводного ролика разместить, как это сделано, к примеру, со штатным ДДН в Олимпе-004.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 09 дек 2017, 20:55 
Не в сети
Заслуженный участник
Аватара пользователя

Зарегистрирован: 05 июн 2015, 10:24
Сообщений: 1857
Откуда: Россия, Краснодар
Cпасибо сказано: 29
Спасибо получено:
116 раз в 106 сообщениях
Кстати да, точно. Не подумал об этом.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 09 дек 2017, 23:19 
Не в сети
Заслуженный участник

Зарегистрирован: 05 дек 2010, 12:14
Сообщений: 1249
Откуда: Россия, Санкт-Петербург
Cпасибо сказано: 29
Спасибо получено:
88 раз в 77 сообщениях
tormozzz писал(а):
Проще ещё один обтюратор с большим количеством секторов и фотодатчиком на другом конце вала этого обводного ролика разместить,
Если именно с фотодатчиком, то незачем лезть на другой конец вала: круг, распечатанный на принтере, можно наклеить прямо на существующие лопасти. Магнитному датчику движения ленты он не помешает, разве что фотодатчик должен работать на отражение.

_________________
Всего доброго.
Евгений.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 09 дек 2017, 23:26 
Не в сети
Продвинутый участник

Зарегистрирован: 13 ноя 2012, 21:26
Сообщений: 776
Откуда: Россия, Москва
Cпасибо сказано: 7
Спасибо получено:
23 раз в 22 сообщениях
Eats писал(а):
Если именно с фотодатчиком, то незачем лезть на другой конец вала

Кстати, да. Я совсем забыл, что в электрониках датчик магнитный - мне как-то больше с олимпами 4-5 дело пришлось иметь, а там оптодатчики...


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 11 дек 2017, 00:20 
Не в сети
Заслуженный участник
Аватара пользователя

Зарегистрирован: 17 фев 2015, 22:44
Сообщений: 2841
Откуда: Россия, Москва
Cпасибо сказано: 11
Спасибо получено:
59 раз в 57 сообщениях
SSA писал(а):
.... соответствующий международному стандарту SMPTE/EBU, основанному на стандартах ISO 2022 и ГОСТ 27463-87. ....

никакой связи между счетчиками и LTC нет. Ни по назначению ни по использованию
Представьте себе кому нужна точность на пленке в 8 мм на 19 скорости? Линейный монтаж медными ножницами? или тогда уж придется делать синхроканал и синхронизатор.
Кстати то, что вы указали ISO и ГОСТ никакой связи с 80 битным LTC словом не имеет

_________________
с дилетантами не спорю, лицензии на преподавательскую и медицинскую деятельность не имею


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 11 дек 2017, 12:39 
Не в сети
Заслуженный участник
Аватара пользователя

Зарегистрирован: 05 июн 2015, 10:24
Сообщений: 1857
Откуда: Россия, Краснодар
Cпасибо сказано: 29
Спасибо получено:
116 раз в 106 сообщениях
Если Вам это не нужно, это не значит, что другим не нужно. Не превращайте тему в срач. В психушке достаточно тем для подобных дискуссий кому что надо и что не надо.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 11 дек 2017, 17:38 
Не в сети
Заслуженный участник
Аватара пользователя

Зарегистрирован: 17 фев 2015, 22:44
Сообщений: 2841
Откуда: Россия, Москва
Cпасибо сказано: 11
Спасибо получено:
59 раз в 57 сообщениях
SSA писал(а):
Если Вам это не нужно, это не значит....

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

_________________
с дилетантами не спорю, лицензии на преподавательскую и медицинскую деятельность не имею


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 11 дек 2017, 18:11 
Не в сети
Заслуженный участник
Аватара пользователя

Зарегистрирован: 18 дек 2013, 00:31
Сообщений: 1196
Откуда: Россия, Москва
Cпасибо сказано: 61
Спасибо получено:
16 раз в 15 сообщениях
Изрядно отстал в плане элементной базы, решил поизучать, что сейчас есть из генераторов. Обнаружил копеечный синтезатор AD9833 с SPI-управлением, готовая плата с которым у наших друзей-китайцев стоит порядка 300 рублей. Надо смотреть в эту сторону - задать по SPI нужную частоту намного проще, чем заморачиваться с делением на основном контроллере...[/quote]
--------------------------------------
300 руб = это нормально, а то я микроволновку и индукционную на ОЗОНЕ покупал за 1400 - 1500, поэтому и интересен был вопрос: а плитка к счетчику прилагается с ШР разъёмом для подсоединения к магу? Чтоб индикатор на два фронта :friends: работал из экономии...

_________________
Число Пи в военное время достигает четырех! Таким образом круг превращается в квадрат, а все дождевые капли - в куб, что в корне меняет их аэродинамику.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 15 дек 2017, 08:53 
Не в сети
Продвинутый участник

Зарегистрирован: 02 июл 2014, 19:05
Сообщений: 788
Откуда: Россия, Астрахань
Cпасибо сказано: 2
Спасибо получено:
45 раз в 45 сообщениях
Нафига там милисекунды то этой точности за глаза хватает песню нужную найти. Можно еще 1 лампу вкрячить но смысл в этом какой? Гораздо интереснее что данный счетчик позволяет настроить нормально скорость движения ленты без приборов всяких лент и тд, достаточно включить режим калибровки и через пару минут уже видно спешит УУВД или отстает. Все таки спрятал лампы внутрь аппарата впритык там еле удалось но все таки вошло без фрезеровки шасси
ИзображениеИзображение

Есть на продажу счетчик как в заголовке темы на красивых диодных индикаторах зеленых , все тоже самое только на светодиодах. Цена 3000р. Есть полная инструкция по установке .

_________________
--- Хорошие люди попишут-попишут, да и выпьют бутылочку.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 31 янв 2018, 17:07 
Не в сети
Заслуженный участник

Зарегистрирован: 21 дек 2016, 20:02
Сообщений: 1415
Откуда: Киргизия, Бишкек
Cпасибо сказано: 6
Спасибо получено:
57 раз в 55 сообщениях
Цитата:
Нафига там милисекунды то этой точности за глаза хватает песню нужную найти. Можно еще 1 лампу вкрячить но смысл в этом какой?


смысл есть , очень глубокий - быть на один шаг ближе к штудеру или тику хотя бы счётчиком :) , кароче чистой воды фетишь народу хотится , им счётчиком так то мало кто пользуется , а что бы ещё и десятые доли ловить, хоспади исусе, накой ? , я лично ( я лично ) вообще им не пользуюсь нигде , ну поиграло , перематал назад , чо там считать , по мне механического штатного за глазища, туда сюда метр ниачом , но ваша разработка по сравнению с олимповской 005 поисково-спасательной лабудой это ещё цветочки, вот в 005ом олимпе инженеры дунули какой то дури от души и не отпускало их до выхода ящика в серию, и замутили такую .....нь что по сей день ей никто , ни разу не воспользовался для дела, так , чисто поржать пробовали и на этом всё, зато типа такого наворота точно нет ни у кого на бытовухе , и пох что всё остальное уныло кратно стало против прошлых изделий, зато кнопок то сколько напехали, слов нет , и кнопки убогий кривой пластик хромированный, одни слюни , ну ведь 004 вроде был почти в ударе после 003 ( хотя кнопки отстойнее стали ) , потом бухая пропасть с 005ым , и вроде опять проснулись в 700ом , ну а потом всё, финита ля комедия , блин .....
сижу чиню очередной раз 005, и очередной раз вспоминаю и трёхэтажными и пятиэтажными тех кто печатку рисовал, кто схемы рисовал , надо же быть таким тупым и бездарным наглухо ..ть , мне бы только избавиться бы этих 005ых , в жисть больше на порог не пущу :) , максимум что бы хотел это 004 живой не упоротый найти , но счётчик бы не трогал .


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 06 фев 2018, 11:26 
Не в сети
Продвинутый участник

Зарегистрирован: 02 июл 2014, 19:05
Сообщений: 788
Откуда: Россия, Астрахань
Cпасибо сказано: 2
Спасибо получено:
45 раз в 45 сообщениях
[ смысл есть , очень глубокий - быть на один шаг ближе к штудеру или тику хотя бы счётчиком :) , кароче чистой воды фетишь народу хотится , им счётчиком так то мало кто пользуется , а что бы ещё и десятые доли ловить, хоспади исусе, накой ? , я лично ( я лично ) вообще им не пользуюсь нигде ]

Нужен счетчик. Хотя бы знать сколько минут на катушке. Назад чтоб возвращаться фрагмент прослушать когда нужно. Удобно. Минут-Секунд как в обычных часах достаточно более чем. Милисекунды там негде взять - датчик не позволяет.

Механический - врет. Даже с новым пассиком поскольку он увеличивает нагрузку на ролик лента проскальзывает и счетчик врет. При перемотках особенно.

_________________
--- Хорошие люди попишут-попишут, да и выпьют бутылочку.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 06 фев 2018, 11:31 
Не в сети
Продвинутый участник

Зарегистрирован: 02 июл 2014, 19:05
Сообщений: 788
Откуда: Россия, Астрахань
Cпасибо сказано: 2
Спасибо получено:
45 раз в 45 сообщениях
[ инженеры дунули какой то дури от души и не отпускало их до выхода ящика в серию ]

Да от души дунули))) Разделить на две платы УВП-УВ это куда веселее чем счетчик))) Сегодняшняя элементная база + любительский ЛУТ позволяет сделать весь тракт аппарата на плате размером 10*5 см которую можно разместить около блока головок

_________________
--- Хорошие люди попишут-попишут, да и выпьют бутылочку.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 06 фев 2018, 22:45 
Влад писал(а):
Милисекунды там негде взять - датчик не позволяет.


Ставьте на вал обводного ролика оптический бесконтактный энкодер инкрементный - будут у вас и миллисекунды. И врать не будет - там подшипники получше родных в магнитофоне - если брать датские энкодеры.
Только нафиг миллисекунды эти не нужны, на самом деле.


Вернуться к началу
  
 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 06 фев 2018, 22:51 
Не в сети
Продвинутый участник

Зарегистрирован: 02 июл 2014, 19:05
Сообщений: 788
Откуда: Россия, Астрахань
Cпасибо сказано: 2
Спасибо получено:
45 раз в 45 сообщениях
Вот и я о чем! Я захотел сделать нормальный счетчик на 003 и сделал из говна и палок , получил удовольствие. Считает. Делает еще некоторые опции. Платку вытравил спаял программку написал)

_________________
--- Хорошие люди попишут-попишут, да и выпьют бутылочку.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 06 фев 2018, 23:01 
Не в сети
Заслуженный участник
Аватара пользователя

Зарегистрирован: 20 дек 2014, 17:10
Сообщений: 5218
Откуда: Россия, Новомосковск
Cпасибо сказано: 169
Спасибо получено:
320 раз в 304 сообщениях
Цитата:
Вот и я о чем! Я захотел сделать нормальный счетчик на 003 и сделал из говна и палок , получил удовольствие. Считает. Делает еще некоторые опции. Платку вытравил спаял программку написал)

Ну так в серию пора запускать.

_________________
Ищите меня на коротких волнах. My call : RA3PPA
Всем добра, Анатолий.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 06 фев 2018, 23:08 
Не в сети
Администратор
Администратор
Аватара пользователя

Зарегистрирован: 24 ноя 2011, 15:02
Сообщений: 10743
Откуда: СССР/БССР, обитаю под Минском.
Cпасибо сказано: 763
Спасибо получено:
275 раз в 268 сообщениях
В серию!!! :)
И себестоимость ниже и продать легче...

_________________
Высококачественный ремонт, восстановление и доработка любой РЭА. /Минск - Москва - С.Петербург/
WhatsApp: +375 29 613-05-09


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 06 фев 2018, 23:15 
Если позволите, один офф-топ?
Для знатоков магнитофонов:
Во всех знакомых мне высококачественных магнитофонах в системе стабилизации натяжения ленты до и после тонвала стоят датчики натяжения, чаще рычажковые, или поворотные.
Но ведь можно же сделать систему стабилизации натяжения без этих датчиков - на основании измерения угловой скорости подкатушников.
Так вот вопрос - были ли такие магнитофоны реализованы в железе? Если да - то какие?


Вернуться к началу
  
 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 06 фев 2018, 23:25 
Не в сети
Продвинутый участник

Зарегистрирован: 02 июл 2014, 19:05
Сообщений: 788
Откуда: Россия, Астрахань
Cпасибо сказано: 2
Спасибо получено:
45 раз в 45 сообщениях
[ В серию!!! :)
И себестоимость ниже и продать легче... ]

Оно - кому надо а??
Нету аппаратов этих, всё вышли все.
Цена падает при массовом производстве при штучном - дорого или очень дорого. Ну не может быть оно по другому. Вы лично будете за флакон сидеть убивать несколько вечеров паять плату глаза сажать? Я и за 2 пузыря вискаря хорошего не буду этого делать. Труд время создания программы тоже учитывать надо. Само оно не сделается

_________________
--- Хорошие люди попишут-попишут, да и выпьют бутылочку.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 07 фев 2018, 09:41 
Не в сети
Участник

Зарегистрирован: 05 мар 2013, 18:10
Сообщений: 95
Откуда: Тамбовская обл. Котовск
Cпасибо сказано: 0
Спасибо получено:
11 раз в 10 сообщениях
VVN
Ростов 012/112


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 07 фев 2018, 11:51 
Не в сети
Заслуженный участник

Зарегистрирован: 21 дек 2016, 20:02
Сообщений: 1415
Откуда: Киргизия, Бишкек
Cпасибо сказано: 6
Спасибо получено:
57 раз в 55 сообщениях
если по честному, всё это для нас игрушки :) , и я бы этот фетиш в свой 003 вкатил бы, но ! , если ваять фетишь, то ваять как и предложили выше в формате 00.00.00 как у ревоскоподобных, как у PR99 например, и мне не столько важна точность последних двух цыфр, она мне вообще не важна, сколько важно просто их наличие- мерцание , и цыферки именно такого размера , прям так же отдельным блоком, там же где родной 003 , как у 99ого того же внизу ну штуки 4 программных кнопки каких нить , типа поиска, ресет, набор метров + - , ну часы ессно или метры ( а не одна на все случаи ) , ну вобщем напридумать можно или самое правильно сплагиатить то что есть и скорректировать чо надо , вот это был бы фетиш так фетишь , а то чо там 3мм фигулины в окошко -щель разлядывать, там с 3 метров уже ничо не видно , народ то в массе уже в возрасте и безочков мало кто ходит уже :) и уж точно не ламповые , это тут лишнее как по мне , не тот стиль, это если стимпанк ваять ( жутко он мне нравится это стиль во всём ) то лампы будут очень нужны


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 07 фев 2018, 12:11 
Не в сети
Продвинутый участник

Зарегистрирован: 02 июл 2014, 19:05
Сообщений: 788
Откуда: Россия, Астрахань
Cпасибо сказано: 2
Спасибо получено:
45 раз в 45 сообщениях
Boris Putintsev

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

_________________
--- Хорошие люди попишут-попишут, да и выпьют бутылочку.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 07 фев 2018, 15:00 
Не в сети
Заслуженный участник

Зарегистрирован: 21 дек 2016, 20:02
Сообщений: 1415
Откуда: Киргизия, Бишкек
Cпасибо сказано: 6
Спасибо получено:
57 раз в 55 сообщениях
тут народ в массе который с паяльником и ЛУТ дружит, но мало кто плавает в программной среде , я бы всё сам сваял с нуля с удовольствием , мне достаточно купить у вас только контроллер , схема и зашитый контроллер - эта версия максимально удешевит вас проект для многих , двинет его в массы не обременяя вас на аппаратную часть , принесёт вам больше прибыли чем готовое устройство за 5тр или кит за 3тр , 1000 рублей зашитый контр с пересылом я бы купил , 3 тр , тем более 5 рублей при всём моём уважении к вашему труду и к проекту для меня не имеет никакого практического смысла, почему ? , ответ - я ещё 5тр добавлю и куплю шикарные новые головы например , перелицую-освежу передок, дерево добавлю, индикаторы уровня эти газовые выкину и поставлю правильные , это мне интереснее например , а мех счётчик примерно считает ну и пусть считает .
давайте фетиш 00.00.00 в массы :) !!


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 07 фев 2018, 15:34 
romke писал(а):
Ростов 012/112


Не, у Ростова обычные фотодатчики положения рычагов-петлевыбирателей подпружиненых. Как и на всей линейке магнитофонов первого класса - они все родня друг-другу.


Вернуться к началу
  
 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 07 фев 2018, 16:38 
Не в сети
Продвинутый участник

Зарегистрирован: 02 июл 2014, 19:05
Сообщений: 788
Откуда: Россия, Астрахань
Cпасибо сказано: 2
Спасибо получено:
45 раз в 45 сообщениях
Boris Putintsev

на спор.
Лови программу.
Готовую компилируй заливай ставь.
Бесплатно
Но ничего ты делать не будешь. Пустая болтовня потому что как обычно у вас

; OLIMP-003 Multifunctional Counter
; Версия под индикатор BS-046GA-001 с общим анодом
;
; Copyright Vladislav B. Ivanov (с) 2017
; Russia, Astrakhan
;
; vladislav370@gmail.com

.include "c:\vlad\asm\Appnotes\m8def.inc"
.org 0x000

.equ SS = 2 ; защелкивание регистров индикаторов, 1-Wire
.equ MOSI = 3 ; данные
.equ SCK = 5 ; стробирование 595х

.equ max_digits = 4 ; число разрядов в индикаторе
.equ blink_time = 19 ; частота мигания символами


rjmp RESET ; на начало программы
reti
reti
rjmp tim2_OVF
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
reti
;------------------------------------------------------------------------
; ОБРАБОТКА ПРЕРЫВАНИЯ ПЕРЕПОЛНЕНИЯ ТАЙМЕРА 2 ДЛЯ РЕЖИМА КАЛИБРОВКИ УУВД
; ВО ВСЕХ ДРУГИХ РЕЖИМАХ ПРЕРЫВАНИЕ НЕ ИСПОЛЬЗУЕТСЯ
;------------------------------------------------------------------------
tim2_OVF:
push r16
in r16, SREG
push r16

ldi r16, 127 ; число переполнений TCNТ2 для 1 секунды
cp r1, r16
breq add_TCNT2_one_sec
inc r1
rjmp exit_int2

add_TCNT2_one_sec:
clr r1
ldi r16, 59
cp r7, r16
breq reset_system_sec
inc r7
rjmp update_sys_counter

reset_system_sec:
clr r7

update_sys_counter:
sbis PINC, 0 ; при отсутствии или обрыве
rjmp exit_int2 ; ленты не выводим цифры

mov r16, r20
andi r16, 0b01111111
cpi r16, 5 ; в режимах установок
brsh exit_int2 ; тоже ничего не выводим
ldi r20, 0b10000001 ; чтоб оно не машало

exit_int2:
pop r16
out SREG, r16
pop r16
reti
;------------------------------------------------------------------------
; процедура заполняет индикатор или нужное число его разрядов символом.
; символ просто выводится в порт SPI, последовательно, бит за битом. При
; этом, то что ранее было в регистрах - не стирается, а смещается вправо.
;
; r16 - символ который надо вывести цифра или ' '
; r17 - количество символов которое надо вывести
; r19 - номер выводимого разряда

write_spi:
push r18
push r17
push r16

write_spi_char:
cbi PORTB, MOSI
nop
nop
nop
nop
rcall convert_IN_lamp ; на выходе в r16 будет битовая маска цифр 0-9

write_spi_loop:
nop
nop
nop
nop
push r19
ldi r19, 4 ; число бит в разряде
push r16

write_next_bit_spi:
cbi PORTB, SCK
nop
nop
nop
nop
lsl r16
brcS set_spi_1
cbi PORTB, MOSI
rjmp set_spi_0

set_spi_1:
sbi PORTB, MOSI

set_spi_0:
nop
nop
nop
nop
sbi PORTB, SCK
dec r19
brne write_next_bit_spi
pop r16
dec r17
pop r19
brne write_spi_loop

write_spi_skip:
pop r16
pop r17
pop r18
add r19, r17
ret
;------------------------------------------------------------------------
; преобразование кода 1-2-4-8 согласно разведению дорожек платы
convert_IN_lamp:
andi r16, 0b01111111
cpi r16, '0'
breq kod0
cpi r16, '1'
breq kod1
cpi r16, '2'
breq kod2
cpi r16, '3'
breq kod3
cpi r16, '4'
breq kod4
cpi r16, '5'
breq kod5
cpi r16, '6'
breq kod6
cpi r16, '7'
breq kod7
cpi r16, '8'
breq kod8
cpi r16, '9'
breq kod9
ldi r16, 0b11110000 ; лампа не светится
ret

kod0: ldi r16, 0b00000000
ret
kod1: ldi r16, 0b00010000
ret
kod2: ldi r16, 0b00100000
ret
kod3: ldi r16, 0b10000000
ret
kod4: ldi r16, 0b10010000
ret
kod5: ldi r16, 0b01010000
ret
kod6: ldi r16, 0b01000000
ret
kod7: ldi r16, 0b01100000
ret
kod8: ldi r16, 0b01110000
ret
kod9: ldi r16, 0b00110000
ret
;------------------------------------------------------------------------
; процедура выполняет "защелкивание" данных в регистрах
; вывода после чего данные сразу же выводятся на индикатор
store_spi:
nop
nop
nop
nop
cbi PORTB, 2
nop
nop
nop
nop
nop
nop
nop
nop
sbi PORTB, 2
nop
nop
nop
nop
ret
;------------------------------------------------------------------------
; процедура перевода числа из r16 в десятичное число
; результат возвращается в регистры r16:r17:r18
;------------------------------------------------------------------------
bin8_dec3:
clr R18
div1_l: subi R16, 100 ;вычитаем 100 пока не получим отрицательную разность
brcs d1_end
inc R18 ; +1 к разряду сотен
rjmp div1_l
d1_end: subi R16, -100 ;корректируем остаток, добавляя 100
clr R17
div2_l: subi R16, 10 ;вычитаем 10 пока не получим отрицательную разность
brcs d2_end
inc r17 ; +1 к разряду десяток
rjmp div2_l
d2_end: subi R16, -10 ;корректируем остаток, добавляя 10
ori r16, $30
ori r17, $30
ori r18, $30
ret
;------------------------------------------------------------------------
update_ind:
mov r16, r20
andi r16, 0b01111111
cpi r16, 5
brsh select_setup

mov r16, r21
andi r16, 0b10000000
breq display_set_off

select_setup:
cbi PORTB, 1 ; включаем индикацию (ШИМ яркости)
mov r19, r15
andi r19, 0b00001000
breq dgts

mov r16, r3 ; мигание всеми символами
andi r16, 0b01111111 ; индикатора при оконч ленты
cpi r16, 64
brlo dgts

display_set_off:
sbi PORTB, 1 ; отключаем индикатор (мигание)

dgts: mov r16, r15
andi r16, 0b10000000
breq sgr_0
sbi PORTB, 0 ; включаем разделитель
ret

sgr_0: cbi PORTB, 0 ; выключаем разделитель
ret
;------------------------------------------------------------------------
RESET: ldi r16, high(RAMEND)
out SPH, r16
ldi r16, low(RAMEND)
out SPL, r16

; инициализация портов
;
ldi r16, 0b00111111 ; биты 0-5 порта B
out DDRB, r16 ; работает на выход

clr r16 ; порт C
out DDRC, r16 ; работает на вход,
out DDRD, r16 ; и порт D тоже работает на вход

; PORTC
; 0 - датчик окончания ( 1 - лента есть, 0 - лента закончилась)
; 1 - упр. реле реверса (1 - реверс вкл, 0 - выкл)
; 2 - кнопка Откат \
; 3 - кнопка Стоп \ при отпущенных кнопках должно быть 5V!
; 4 - кнопка Уск вперед / эти входы должны быть подтянуты к шине
; 5 - кнопка Уск назад / питания через R5.1к. При нажатии ноль.

; PORTD
; биты:
; 6 - счетные ипмульсы с ДД
; 7 - датчик движения (1 - лента движется, 0 - стоит)

; счетчик прерываний переполнения тамера 2
clr r1

; регистр фиксации первого импульса секундного
; счетного интервала в режиме калибровки УУВД
clr r2

; счетчик для организации мигания символами
clr r3

; счетчик пред-делителя счетных импульсов
clr r4

; главный счетчик секунд
clr r5

; главный счетчик минут
clr r6

; счетчик секунд от внутреннего таймера для калибровки УУВД
clr r7

; счетчик яркости индикатора ШИМ
clr r8

; сохранное значения таймера #2
clr r9

; регистр статуса устройства (битовая маска)
clr r10
; 0 - состояние датчика счетных импульсов
; 1 - состояние датчика движения ленты
; 2 - направление строки визуализации движения вправо|влево
; 3 - направление счета вперед|назад
; 4 - включена уск. перемотка вперед
; 5 - включена уск. перемотка назад
; 6 - команда включения противоположной перемотки
; 7 - команда отмены включения противополжной перемотки


; регистр опций вывода и мультиплексирования разрядов
clr r15
; младшие 3 бита счетчик мультиплексирования разрядов
; 000 - экспонируются доп. символы
; 001 - цифра 1
; 010 - цифра 2
; 011 - цифра 3
; 100 - цифра 4
; установленный бит 3 отключает весь индикатор (для мигания)
; старшие 4 бита управление выводом доп. символов
; 4...6 - номер сегмента линии движения ленты
; 000 - все нижние сегменты выключены
; 001 - 1 сег
; 010 - 2 сег
; 011 - 3 сег
; 100 - 4 сег
; 101 - 5 сег
; 110 - резерв
; 111 - резерв
; 7 - включен разделитель разрядов ЧЧ:ММ

; регистр управления обновлением вывода данных на индикатор
clr r20
; в основных режимах:
; 0 - не обновлять
; 1 - обновить показания минут и секунд
; 2 - вывести пустой экран
; 2 - РЕЗЕРВ
; 3 - РЕЗЕРВ
; 4 - РЕЗЕРВ
;
; в режима установок:
; 5 - скорость ленты
; 6 - режимы визуализации
; 7 - включение режима калибровки скорости
; 8 - направление счета в режиме реверс
; 9 - выключение счетчика
; 10 - яркость индикатора

; регистр пользовательских установок (копия этого регистра в eeprom)
clr r21
; биты 0-1 скорость ленты на рабочем ходу
; xxxxxx00 считать в метрах, дециметрах
; xxxxxx01 скорость 9
; xxxxxx10 скорость 19
; xxxxxx11 скорость 38
; биты 2-3 режим визуализации движения ленты на рабочем ходу
; xxxx00xx отключена полностью идет только счёт
; xxxx01xx мигает разделитель в такт секундам
; xxxx10xx бежит строка, разделитель не мигает
; xxxx11xx бежит строка и мигает разделитель
; бит 4
; xxx1xxxx активен режим калибровки скорости УУВД
; бит 5
; xx1xxxxx не анализовать состояние реверса (1 при реверсе считать вперед)
; бит 6
; РЕЗЕРВ
; бит 7
; 1xxxxxxx
; счетчик выключен (счет идет но нет вывода данных)

clr r22
; регистр управления клавиатурой в режиме установок
; биты 0-2 во взвденном состоянии указывают что нажата:
; xxxxxxx1 кнопка <СТОП>
; xxxxxx10 кнопка ->>
; xxxxx100 кнопка <<-
; xxxxx000 все кнопки отпущены
; xxxx1xxx событие "дребезг" первое нажатие любой из кнопок
; xxx11xxx событие "нажатие" когда было 2 опроса кнопок,
; и в обоих случаях отмечено нажатие кнопки

ldi r23, 99
; частота обновления индикатора 0-99 (копия этого регистра в eeprom)

; битовая маска с номером разрядов которые должны мигать
clr r24


; таймер #2 будет работать в асинхронном
; режиме от часового кварца 32768 Гц
clI
clr r16
out TIMSK, r16
ldi r16, (1<<AS2)
out ASSR, r16
clr r16
out TCNT2, r16
out OCR2, r16
ldi r16, (1<<CS20) ; подделитель отключен, работаем от CK кварца
out TCCR2, r16

wait_t: nop
nop
nop
in r16, ASSR
cpi r16, 0b00001000
brne wait_t ; ждем готовности битов в регистре ASSR

;------------------------------
; загрузка параметров из EEPROM
ldi r17, 0
rcall read_EEPROM_byte
cpi r16, 255
brne select_cali
; параметры по умолчанию при первом запуске такие:
; - скорость 19
; - разделители мигают в такт секундам
; - калибровка откл
; - реверс счет идет назад
; - индикация включена
ldi r16, 0b10000110

select_cali:
mov r21, r16
;-----------------------------------
; проверяем запуск режима калибровки
andi r16, 0b00010000
breq int_2OVF_disable

;------------------------------
mov r16, r21
andi r16, 0b00000011
brne setup_int2_ovf

andi r21, 0b11101111 ; не допускаем калибровку при счете в метрах!
rjmp int_2OVF_disable

setup_int2_ovf:
; при калибровке активируем прерывание
; по переполнению таймера TCNT2
clr r16
out TIFR, r16
ldi r16, (1<<OCIE2)
out TIMSK, r16

int_2OVF_disable:
seI

; начальное состояние импульса счета
clr r16
sbic PIND, 6
ldi r16, 0b00000001
or r10, r16

; начальное состояние ДД
ldi r16, 0b00000010
sbic PIND, 7
clr r16
or r10, r16

;------------------------------
; яркость индикатора из EEPROM
ldi r17, 1
rcall read_EEPROM_byte
cpi r16, 100
brsh set_freq_def
mov r23, r16
rjmp check_setup_mode

set_freq_def:
ldi r16, 99
ldi r17, 1
rcall write_EEPROM_byte
mov r23, r16


check_setup_mode:
; --------------------------------
; при нажатии кнопки СТОП в момент
; сброса вход в режим установок
sbis PINC, 3
rjmp setup_mode

; выводим все нули
ldi r17, 1
ldi r19, 1
ldi r16, 0
rcall display_parm
ldi r16, 0
rcall display_parm
rcall store_spi
rjmp MAIN

;-----------------------
; вход в режим установок (нажатие удержание кнопки СТОП после сброса)
setup_mode:
; включаем ":" при входе в сетап
ldi r16, 0b10000000
or r15, r16
ldi r20, 99
ori r20, 128

;-----------------------
; ОСНОВНОЙ ЦИКЛ
MAIN: clr r16
sbic PIND, 6 ; чтение счетного импульса - высший приоритет!
ldi r16, 1 ; иначе он будет теряться что приведет
mov r17, r10 ; к сбоям счета
andi r17, 0b00000001 ; состояние счетного
cp r17, r16 ; импульса не изменилось
breq counter_idle ; ничо не делаем в этом случае
ldi r17, 1
eor r10, r17 ; новое значение счетного импульса сохр
mov r17, r21
andi r17, 0b00000010 ; на скорости 9 и L считаем фронты и спады
breq counter_9
cpi r16, 0 ; на скорости 19, 38 считаем только фронты
breq counter_idle

counter_9:
rcall counter

; -----------------------------------------
; ОПРОС СЧЕТЧИКА АСИНХРОННОГО ТАЙМЕРА TCNT2
counter_idle:
in r16, TCNT2 ; счетный регистр таймера TCNT2
cp r16, r9 ; сравниваем с ранее полученным
breq MAIN ; при равенстве не делаем ничего
mov r9, r16

; уст. частоты обновления индикатора
inc r8
ldi r16, 100
cp r8, r16
breq update_ind_now

; уст яркости индикатора
cp r8, r23
brlo displ_expose

; отключение индикатора и разделителей (ШИМ)
sbi PORTB, 1
cbi PORTB, 0

displ_expose:
mov r16, r9
cpi r16, 1 ; самый низкий временный приоритет
brne MAIN ; при обработке медленных
rcall read_slow_sensor ; сенсоров (кнопки, статусы режимов ЛПМ и тд)
inc r3
rjmp MAIN

update_ind_now:
clr r8
mov r16, r20
andi r16, 0b10000000 ; нет запроса на обновление данных
breq no_update_counters

andi r20, 0b01111111 ; флаг запроса обновления данных сбрасываем
cpi r20, 0
breq no_update_counters

; -----------------
; ОБНОВЛЕНИЕ СЧЕТЧИКА
cpi r20, 1
breq update_mm_ss ; обновить данные счетчика
cpi r20, 2
breq update_blank

; -----------------
; РЕЖИМЫ УСТАНОВОК
cpi r20, 5
breq setup_sp ; установка скорости
cpi r20, 6
breq setup_vi ; режим визуализации
cpi r20, 7
breq setup_ca ; режим включения калибровки
cpi r20, 8
breq setup_re ; режим счета при реверсе
cpi r20, 9
breq setup_of ; отключение счетчика
cpi r20, 10
breq setup_br ; яроксть индикатора
rjmp no_update_counters

update_blank:
; -----------------
; ПРОБЕЛЫ
ldi r17, 1
ldi r19, 1
ldi r16, 255
rcall display_parm
ldi r16, 255
rcall display_parm
rcall store_spi
rjmp no_update_counters


update_mm_ss:
; -----------------
; РЕЖИМ СЧЕТА
mov r16, r21
andi r16, 0b00010000
brne update_ss_ss

rcall update_counter_min
rcall update_counter_sec
rcall store_spi
rjmp no_update_counters

update_ss_ss:
;------------------
; РЕЖИМ КАЛИБРОВКИ
rcall update_system_count
rcall update_counter_sec
rcall store_spi

no_update_counters:
rcall update_ind
rjmp MAIN

;---------------------
; РЕЖИМЫ УСТАНОВОК
setup_sp:
rcall setup_speed
rcall store_spi
rjmp no_update_counters

setup_vi:
rcall setup_vis
rcall store_spi
rjmp no_update_counters

setup_ca:
rcall setup_cal
rcall store_spi
rjmp no_update_counters

setup_re:
rcall setup_rev
rcall store_spi
rjmp no_update_counters

setup_of:
rcall setup_off
rcall store_spi
rjmp no_update_counters

setup_br:
rcall setup_frq
rcall store_spi
rjmp no_update_counters
;------------------------------------------------------------------------
; *** ОБРАБОТКА СЧЕТНЫХ ИМПУЛЬСОВ ***
;------------------------------------------------------------------------
counter:
mov r16, r20
andi r16, 0b01111111
cpi r16, 5 ; в режиме установок
brsh setup_active ; счёт запрещен !!
sbic PINC, 0 ; при отсутствии или обрыве
rjmp lenta_est ; ленты счёт запрещен !

setup_active:
ret

lenta_est:
mov r18, r21
andi r18, 0b00000011 ; при счете в метрах
cpi r18, 0 ; визуализация отключена
breq visual_done

mov r16, r15
ror r16
ror r16
ror r16
ror r16

mov r17, r10
andi r17, 0b000000100
cpi r17, 0
brne count_vis_sub

; визуализация движения ленты вперед
andi r16, 0b00000111
cpi r16, 0
breq visual_done
cpi r18, 0b00000011
brne vis_add_9_19
mov r17, r4
andi r17, 0b00000001
breq visual_done

vis_add_9_19:
cpi r16, 5
brlo inc_sg
clr r16
inc_sg: inc r16
lsl r16
lsl r16
lsl r16
lsl r16
andi r16, 0b01110000
ldi r17, 0b10001111
and r15, r17
or r15, r16
rjmp visual_done

; визуализация движения ленты назад
count_vis_sub:
andi r16, 0b00000111
cpi r16, 0
breq visual_done
cpi r18, 0b00000011
brne vis_sub_9_19
mov r17, r4
andi r17, 0b00000001
breq visual_done

vis_sub_9_19:
cpi r16, 2
brsh dec_sg
ldi r16, 6
dec_sg: dec r16
lsl r16
lsl r16
lsl r16
lsl r16
andi r16, 0b01110000
ldi r17, 0b10001111
and r15, r17
or r15, r16

visual_done:
mov r17, r10
andi r17, 0b000001000
cpi r17, 0
brne count_sub
rcall counter_add
ret

count_sub:
rcall counter_sub
ret
;------------------------------------------------------------------------
; ПРЯМОЙ СЧЕТ (в r18 биты установленной скорости)
;------------------------------------------------------------------------
counter_add:
cpi r18, 0
breq count_add_L ; счет в метрах
ldi r19, 15 ; на скорости 38 каждые 16 фронтов импульсов = 1 сек
cpi r18, 0b00000011
breq count_add_38
ldi r19, 7 ; на скорость 19 каждые 8 фронтов импульсов = 1 сек

count_add_38:
cp r19, r4
breq add_sec
inc r4
ldi r19, 8
cpi r18, 0b00000011
breq delim_add_38
ldi r19, 4
delim_add_38:
cp r4, r19
breq set_add_off_dlm
ret

set_add_off_dlm:
mov r19, r10 ; при перемотках мигание
andi r19, 0b00110000 ; двоеточия запрещаем
brne play_dlm_add_disable
mov r19, r21
andi r19, 0b00001000 ; разделители включены
brne play_dlm_add_disable ; постоянно
ldi r19, 0b01111111
and r15, r19 ; иначе отключаем
ret

play_dlm_add_disable:
ret

;--- счет вперед в МЕТРАХ, ДЕЦИМЕТРАХ
count_add_L:
ldi r20, 0b10000001
ldi r19, 7 ; 7 фронтов и спадов импульсов = 10 см
cp r19, r4
breq add_md
inc r4
ret

add_md: clr r4
mov r19, r5
cpi r19, 99
breq reset_md
inc r5
ret

reset_md:
clr r5
mov r19, r6
cpi r19, 99
breq reset_mm
inc r6
ret

reset_mm:
clr r6
ret

; -- счет вперед в МИНУТАХ и СЕКУНДАХ ск 9, 19, 38
add_sec:
ldi r20, 0b10000001
mov r19, r21
andi r19, 0b00001100 ; разделители отключены
breq dlm_off_add_sec ; пользователем
ldi r19, 0b10000000
or r15, r19

dlm_off_add_sec:
clr r4
mov r19, r5
cpi r19, 59
breq reset_sec
inc r5
rjmp reset_calibrator

reset_sec:
clr r5
mov r16, r21
andi r16, 0b00010000 ; в режиме калибровки
brne reset_calibrator ; минуты вообще не считаем
mov r19, r6
cpi r19, 99
breq reset_min
inc r6 ; счетчик минут
ret

reset_min:
clr r6
ret

;--- сброс счетчика калибратора
reset_calibrator:
mov r16, r21
andi r16, 0b00010000
breq no_reset_calibrator
mov r16, r2
cpi r16, 0
brne no_reset_calibrator

; при отсчете первой секунды с ленты
; сброс системного счетчика секунд,
; что синхронизирует оба счетчика
clr r1
clr r6
clr r5
inc r2
mov r7, r5

no_reset_calibrator:
ret

_________________
--- Хорошие люди попишут-попишут, да и выпьют бутылочку.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 07 фев 2018, 16:38 
Не в сети
Продвинутый участник

Зарегистрирован: 02 июл 2014, 19:05
Сообщений: 788
Откуда: Россия, Астрахань
Cпасибо сказано: 2
Спасибо получено:
45 раз в 45 сообщениях
продолжение

;------------------------------------------------------------------------
; ОБРАТНЫЙ СЧЕТ (в r18 биты установленной скорости)
;------------------------------------------------------------------------
counter_sub:
cpi r18, 0
breq count_sub_L
ldi r19, 0
cp r19, r4
breq sub_sec
dec r4
ldi r19, 7
cpi r18, 0b00000011
breq delim_sub_38
ldi r19, 3
delim_sub_38:
cp r4, r19
breq set_sub_off_dlm
ret

set_sub_off_dlm:
mov r19, r10 ; при перемотках мигание
andi r19, 0b00110000 ; разделителей запрещаем
brne play_dlm_sub_disable
mov r19, r21
andi r19, 0b00001000 ; при включенных постоянно
brne play_dlm_sub_disable ; разделители не выключаем
ldi r19, 0b01111111
and r15, r19
ret

play_dlm_sub_disable:
ret

; -- счет назад в МИНУТАХ и СЕКУНДАХ ск 9, 19, 38
sub_sec:
ldi r20, 0b10000001
ldi r19, 15 ; на ск. 38 1 сек = 16 имп
cpi r18, 0b00000011
breq count_sub_38
ldi r19, 7 ; на ск 19 = 8 имп

count_sub_38:
mov r4, r19
mov r19, r21
andi r19, 0b00001100 ; разделители отключены
breq dlm_off_sub_sec ; пользователем
ldi r19, 0b10000000
or r15, r19

dlm_off_sub_sec:
mov r19, r5
cpi r19, 0
breq set_59s
dec r5
ret

set_59s:
ldi r19, 59
mov r5, r19
mov r19, r6
cpi r19, 0
breq set_99m
dec r6
ret

set_99m:
ldi r19, 99
mov r6, r19
ret

;--- счет назад в МЕТРАХ, ДЕЦИМЕТРАХ
count_sub_L:
ldi r20, 0b10000001
clr r19
cp r19, r4
breq sub_md
dec r4
ret

sub_md: ldi r19, 7 ; 7 фронтов и спадов импульсов ~10 см
mov r4, r19
mov r19, r5
cpi r19, 0
breq set_99md
dec r5
ret

set_99md:
ldi r19, 99
mov r5, r19
mov r19, r6
cpi r19, 0
breq set_99m
dec r6
ret

set_99mm:
ldi r19, 99
mov r6, r19
ret
;------------------------------------------------------------------------
; ОБНОВЛЕНИЕ ДАННЫХ СЧЕТЧИКА МИНУТ
;------------------------------------------------------------------------
update_counter_min:
mov r16, r6
rcall bin8_dec3
ori r16, $30
ori r17, $30
push r16
mov r16, r17
ldi r17, 1
ldi r19, 1
rcall write_spi
pop r16
ldi r17, 1
rcall write_spi
ret

;------------------------------------------------------------------------
; ОБНОВЛЕНИЕ ДАННЫХ СЧЕТЧИКА СЕКУНД
;------------------------------------------------------------------------
update_counter_sec:
mov r16, r5 ; секунды
rcall bin8_dec3
ori r16, $30
ori r17, $30
push r16
mov r16, r17
ldi r17, 1
rcall write_spi
pop r16
ldi r17, 1
rcall write_spi
ret
;------------------------------------------------------------------------
; ОБНОВЛЕНИЕ ДАННЫХ СИСТЕМНОГО СЧЕТЧИКА СЕКУНД
;------------------------------------------------------------------------
update_system_count:
mov r16, r7 ; секунды от системного таймера
rcall bin8_dec3
ori r16, $30
ori r17, $30
push r16
mov r16, r17
ldi r17, 1
rcall write_spi
pop r16
ldi r17, 1
rcall write_spi
ret
;------------------------------------------------------------------------
; ВЫВОД УСТНОВКИ СКОРОСТИ ЛЕНТЫ
;------------------------------------------------------------------------
setup_speed:
ldi r16, 1
ldi r19, 1
rcall display_parm
mov r16, r21
andi r16, 0b00000011
cpi r16, 0
breq speed_LT
cpi r16, 0b00000001
breq speed_9
cpi r16, 0b00000010
breq speed_19
cpi r16, 0b00000011
breq speed_38
ret

speed_9:
ldi r16, 9
rcall display_parm
ret

speed_19:
ldi r16, 19
rcall display_parm
ret

speed_38:
ldi r16, 38
rcall display_parm
ret

speed_LT:
ldi r16, 0
rcall display_parm
ret
;------------------------------------------------------------------------
; ВЫВОД УСТНОВКИ РЕЖИМА ВИЗУАЛИЗАЦИИ
;------------------------------------------------------------------------
setup_vis:
ldi r16, 2
ldi r19, 1
rcall display_parm
mov r16, r21
ror r16
ror r16
andi r16, 0b00000011
rcall display_parm
ret
;------------------------------------------------------------------------
; ВЫВОД ВКЛЮЧЕНИЯ РЕЖИМА КАЛИБРОВКИ
;------------------------------------------------------------------------
setup_cal:
ldi r16, 3
ldi r19, 1
rcall display_parm
mov r16, r21
ror r16
ror r16
ror r16
ror r16
andi r16, 0b00000001
rcall display_parm
ret
;------------------------------------------------------------------------
; ВЫВОД РЕЖИМА СЧЕТА ПРИ РЕВЕРСЕ
;------------------------------------------------------------------------
setup_rev:
ldi r16, 4
ldi r19, 1
rcall display_parm
mov r16, r21
ror r16
ror r16
ror r16
ror r16
ror r16
andi r16, 0b00000001
rcall display_parm
ret
;------------------------------------------------------------------------
; ВЫВОД РЕЖИМА ОТКЛЮЧЕНИЯ СЧЕТЧИКА
;------------------------------------------------------------------------
setup_off:
ldi r16, 5
ldi r19, 1
rcall display_parm
mov r16, r21
mov r16, r21
ror r16
ror r16
ror r16
ror r16
ror r16
ror r16
ror r16
andi r16, 0b00000001
rcall display_parm
ret
;------------------------------------------------------------------------
; ВЫВОД ЯРКОСТИ ИНДИКАТОРА
;------------------------------------------------------------------------
setup_frq:
ldi r16, 6
ldi r19, 1
rcall display_parm
mov r16, r23
rcall display_parm
ret
;------------------------------------------------------------------------
; ВЫВОД ЗНАЧЕНИЯ ПАРАМЕТРА ИЗ r16 В ПОСЛЕДНИЕ 2 РАЗРЯДА ИНДИКАТОРА
;------------------------------------------------------------------------
display_parm:
cpi r16, 100
brlo is_digit
ldi r16, ' '
ldi r17, ' '
rjmp is_space

is_digit:
rcall bin8_dec3
ori r16, $30
ori r17, $30
is_space:
push r16
mov r16, r17
ldi r17, 1
rcall write_spi
pop r16
ldi r17, 1
rcall write_spi
ret
;------------------------------------------------------------------------
; ОБРАБОТКА СОБЫТИЙ ОТ ДАТЧИКОВ ЛПМ И КНОПОК УПРАВЛЕНИЯ
;------------------------------------------------------------------------
read_slow_sensor:
clr r16 ; переводим порт B
out DDRC, r16 ; в режим чтения
mov r16, r20
andi r16, 0b01111111 ; в режиме установок датчики
cpi r16, 5 ; ЛПМ не проверяем
brlo chk_do
rcall setup ; обработка клавиш управления
ret ; в режиме установок

;---------------------------
; ОПРОС ДАТЧИКА ОКОНЧАНИЯ
;
chk_do: ldi r17, 0b00001000
mov r16, r21
andi r16, 0b00001100
breq delim_set_off
ori r17, 0b10000000

delim_set_off:
ldi r16, 0b10001111
sbic PINC, 0 ; состояние датчик окончания
rjmp read_dd ; когда 1 лента есть

; -----------------
; ЛЕНТА ЗАКОНЧИЛАСЬ
clr r2
cp r5, r6
breq test_ms
or r15, r17
and r15, r16
ret

test_ms:
cp r4, r5
breq count_0
or r15, r17
and r15, r16
ret

count_0:
; при запуске когда ленты нет
; выключаем индикатор
ldi r20, 0b10000010
mov r16, r21
andi r16, 0b00001100
brne lenta_delim_on
ret

lenta_delim_on:
; включаем разделители
andi r17, 0b10000000
or r15, r17
ret

;---------------------------
; ОПРОС ДАТЧИКА ДВИЖЕНИЯ
;
read_dd:
ldi r16, 0b11110111
and r15, r16
clr r16
sbic PIND, 7
ldi r16, 2
mov r17, r10
andi r17, 0b00000010
cp r17, r16
breq check_fast
ldi r17, 2
eor r10, r17 ; новое значение статуса датчика движения сохраняем
cpi r16, 0
breq media_stop

;----------------------
; начало движения ленты
mov r18, r21
andi r18, 0b00000011 ; при счете в метрах
breq delimiter_disable ; разделители отключены

mov r18, r21
andi r18, 0b00001100 ; разделители отключены
breq delimiter_disable ; пользователем

mov r18, r21
andi r18, 0b00000100 ; разделители включены
brne delimiter_enable
rjmp lenta_start

delimiter_disable:
ldi r17, 0b01111111
and r15, r17
rjmp lenta_start

delimiter_enable:
ldi r17, 0b00010000
or r15, r17

lenta_start:
clr r16
cp r6, r16
brne check_fast
cp r5, r16
brne check_fast

; выводим все нули если первый
; импульс движения после сброса
ldi r17, 1
ldi r19, 1
ldi r16, 0
rcall display_parm
ldi r16, 0
rcall display_parm
rcall store_spi

; обработка команд перемотка вперед, назад, откат, стоп
check_fast:
ldi r16, 0b10000000
sbis PINC, 3 ; кнопка стоп
or r10, r16
sbis PINC, 2 ; кнопка откат
rcall select_otkat_direction
sbis PINC, 5 ; кнопка перемотка назад
rcall select_reverse_fast
sbis PINC, 4 ; кнопка перемотка вперед
rcall select_forward_fast
rcall direction_counter
ret

; ---------------------
; лента остановилась
media_stop:
clr r2
clr r17 ; порт C в режим чтения
out DDRC, r17
mov r18, r21
andi r18, 0b00000011 ; когда счет в метрах
breq delim_disable ; разделитель двоеточие не включаем

mov r18, r21
andi r18, 0b00001100 ; разделители
breq delim_disable ; отключены пользователем

ldi r17, 0b10000000
or r15, r17 ; при счете времени включаем

delim_disable:
ldi r17, 0b10001111 ; лента не движется - откл визуализации
and r15, r17
ldi r17, 0b11110011 ; сброс флагов направления счета
and r10, r17
mov r17, r10 ; запрос на включение противоположной
andi r17, 0b01000000 ; перемотки после остановки ленты
breq no_exchange_fast
rcall exchange_fast
ret

no_exchange_fast:
ldi r17, 0b00001111 ; отключение перемоток и сброс флагов
and r10, r17
ret

;------------------------------------------------------------------------
; ПРОЦЕДУРА ВКЛЮЧАЕТ СЧЕТ В РЕЖИМЕ ОТКАТ С УЧЕТОМ СОСТОЯНИЯ РЕЛЕ РЕВЕРСА
;------------------------------------------------------------------------
select_otkat_direction:
sbic PINC, 1
rjmp otkat_back
rcall select_reverse_fast
ret

otkat_back:
rcall select_forward_fast
ret

;------------------------------------------------------------------------
; ПРОЦЕДУРА ВКЛЮЧАЕТ СЧЕТ ПРИ ПЕРЕМОТКЕ ВПЕРЕД
;------------------------------------------------------------------------
select_forward_fast:
mov r16, r10
andi r16, 0b00100000 ; перемотка назад уже запущена?
brne stop_fast
ldi r16, 0b00010000
or r10, r16
ret
;------------------------------------------------------------------------
; ПРОЦЕДУРА ВКЛЮЧАЕТ СЧЕТ ПРИ ПЕРЕМОТКЕ НАЗАД
;------------------------------------------------------------------------
select_reverse_fast:
mov r16, r10
andi r16, 0b00010000 ; перемотка вперед уже запущена?
brne stop_fast
ldi r16, 0b00100000
or r10, r16
ret
;------------------------------------------------------------------------
; ПРОЦЕДУРА ПЕРЕВОДИТ ЛПМ В РЕЖИМ СТОП
;------------------------------------------------------------------------
stop_fast:
ldi r16, 0b00001000
out DDRC, r16
clr r16
out PORTC, r16 ; говорим СТОП аппарату заместо другой перемотки
ldi r16, 0b01000000 ; и формируем запрос на смену перемотки
or r10, r16 ; только после полного останова ленты
ret
;------------------------------------------------------------------------
; ПРОЦЕДУРА ВКЛЮЧАЕТ ПРОТИВОПОЖНУЮ ПЕРЕМОТКУ ПОСЛЕ ОСТАНОВА ЛЕНТЫ
;------------------------------------------------------------------------
exchange_fast:
ldi r16, 0b10111111
and r10, r16 ; сброс команды смены направления перемотки
mov r16, r10
andi r16, 0b10000000
brne exchange_cancel
mov r16, r10
andi r16, 0b00100000
brne set_fast_ff
mov r16, r10
andi r16, 0b00010000
brne set_fast_rev
ret

exchange_cancel:
ldi r16, 0b00111111
and r10, r16 ; сброс команды отмены смены направления перемотки
ret

set_fast_rev:
; включение перемотки назад
ldi r16, 0b11101111
and r10, r16
ldi r16, 0b00100000
or r10, r16
ldi r16, 0b00100000
out DDRC, r16
clr r16
out PORTC, r16 ; включаем перемотку назад
ret

set_fast_ff:
; включение перемотки вперед
ldi r16, 0b11011111
and r10, r16
ldi r16, 0b00010000
or r10, r16
ldi r16, 0b00010000
out DDRC, r16
clr r16
out PORTC, r16 ; включаем перемотку назад
ret
;------------------------------------------------------------------------
; ПРОЦЕДУРА ОПРЕДЕЛЯЕТ НАПРАВЛЕНИЕ СЧЕТА В ЗАВИСИМОСТИ
; ОТ РЕЛЕ РЕВЕРСА ВО ВСЕХ РЕЖИМАХ РАБОТЫ АППАРАТА
;------------------------------------------------------------------------
direction_counter:
mov r16, r21
andi r16, 0b00100000 ; пользовательская установка алгоритма счёта
brne rev_alg_1
; ------------------------------------------
; алгоритм когда при реверсе счет идет назад (как в Олимпе-005с)
mov r16, r10
andi r16, 0b00010000
brne dir_ff_a0
mov r16, r10
andi r16, 0b00100000
brne dir_rv_a0
;----------------------------------
; режим воспроизведения алгоритм 0
ldi r16, 0b10110011 ; счет вперед, визуализация - вправо
and r10, r16
ldi r16, 0b00001100
sbic PINC, 1
or r10, r16 ; или назад при включенном реверсе
ret
;----------------------------------
; перемотка вперед алгоритм счета 0
dir_ff_a0:
ldi r16, 0b11110011 ; счет всегда вперед независимо от реверса
and r10, r16
ldi r16, 0b10001111
and r15, r16 ; отключаем визуализацию при перемотках
ret

;----------------------------------
; перемотка назад алгоритм счета 0
dir_rv_a0:
ldi r16, 0b00001000 ; счет всегда назад независимо от реверса
or r10, r16
ldi r16, 0b10001111
and r15, r16 ; отключаем визуализацию при перемотках
ret

; -------------------------------------------
; алгоритм когда при реверсе счет идет вперед
; и направления перемоток наоборот при реверсе
rev_alg_1:
mov r16, r10
andi r16, 0b00010000
brne dir_ff_a1
mov r16, r10
andi r16, 0b00100000
brne dir_rv_a1

;---------------------------------
; режим воспроизведения алгоритм 1
ldi r16, 0b10110011
and r10, r16 ; при воспроизведении счет будет всегда вперед
ldi r16, 0b00000100
sbic PINC, 1 ; меняется только направление визуализации
or r10, r16
ret

;----------------------------
; перемотка вперед алгоритм 1
dir_ff_a1:
ldi r16, 0b11110111
and r10, r16
clr r16
sbic PINC, 1
ldi r16, 0b00001000
or r10, r16
ldi r16, 0b10001111
and r15, r16 ; отключаем визуализацию при перемотках
ret

;------------------------
; перемотка назад алгоритм 1
dir_rv_a1:
ldi r16, 0b00001000
or r10, r16
ldi r16, 0b11111111
sbic PINC, 1
ldi r16, 0b11110111
and r10, r16
ldi r16, 0b10001111
and r15, r16 ; отключаем визуализацию при перемотках
ret

;------------------------------------------------------------------------
; ОБРАБОТКА КЛАВИШ УПРАВЛЕНИЯ В РЕЖИМЕ УСТАНОВОК
;------------------------------------------------------------------------
setup: clr r16
sbis PINC, 5 ; уск. назад
ori r16, 0b00000100
sbis PINC, 4 ; уск. вперед
ori r16, 0b00000010
sbis PINC, 3 ; стоп
ori r16, 0b00000001
cpi r16, 0
breq key_up
or r22, r16 ; код нажатой кнопки
mov r16, r22 ; сохраняем в r22
andi r16, 0b00001000
cpi r16, 0
breq key_press_first
ori r22, 0b00001000
ret

key_press_first:
ori r22, 0b00001000
mov r16, r22
andi r16, 0b00010000
cpi r16, 0b00010000
brne key_press_complete
ret

key_press_complete:
ori r22, 0b00010000
mov r16, r22
andi r16, 0b00100000
cpi r16, 0
brne key_wait_delay
mov r16, r22
andi r16, 0b00000111
cpi r16, 0b00000001
breq key_stop_press
andi r16, 0b00000110
brne key_change_press
ret

key_stop_press:
rcall navi_command
ori r20, 128
ret

key_change_press:
rcall changed_command
cpi r20, 10
breq set_freq_eeprom
mov r16, r21
ldi r17, 0
rcall write_EEPROM_byte
ori r20, 128
ret

set_freq_eeprom:
mov r16, r23
ldi r17, 1
rcall write_EEPROM_byte
ori r20, 128
ret

key_wait_delay:
ori r22, 0b00100000
ret

key_up: mov r16, r22
andi r16, 0b00001000
cpi r16, 0
breq reset_all_key
andi r22, 0b11110111 ; сброс бита нажатия кнопки
ret

reset_all_key: ; отпускание кнопки
clr r22
ret
;------------------------------------------------------------------------
; ПРОЦЕДУРА ИЗМЕНЕНЕНИЯ ЗНАЧЕНИЯ ПАРАМЕТРОВ УСТАНОВОК
;------------------------------------------------------------------------
changed_command:
cpi r20, 5
breq change_speed
cpi r20, 6
breq change_vi
cpi r20, 7
breq change_ca
cpi r20, 8
breq change_re
cpi r20, 9
breq change_of
cpi r20, 10
breq change_fr
ret

change_fr:
ldi r18, 99 ; значения от 0 до 99
mov r19, r23
seT
rcall change
mov r23, r19
clT
ret

change_speed:
ldi r18, 3 ; значения от 0 до 3
mov r19, r21
andi r19, 0b00000011
rcall change
andi r21, 0b11111100
or r21, r19
ret

change_vi:
ldi r18, 2 ; значения от 0 до 2
mov r19, r21
ror r19
ror r19
andi r19, 0b00000011
rcall change
lsl r19
lsl r19
andi r21, 0b11110011
or r21, r19
ret

change_ca:
ldi r18, 1 ; значения от 0 до 1
mov r19, r21
ror r19
ror r19
ror r19
ror r19
andi r19, 0b00000001
rcall change
lsl r19
lsl r19
lsl r19
lsl r19
andi r21, 0b11101111
or r21, r19
ret

change_re:
ldi r18, 1 ; значения от 0 до 1
mov r19, r21
ror r19
ror r19
ror r19
ror r19
ror r19
andi r19, 0b00000001
rcall change
lsl r19
lsl r19
lsl r19
lsl r19
lsl r19
andi r21, 0b11011111
or r21, r19
ret

change_of:
ldi r18, 1 ; значения от 0 до 1
mov r19, r21
ror r19
ror r19
ror r19
ror r19
ror r19
ror r19
ror r19
andi r19, 0b00000001
rcall change
lsl r19
lsl r19
lsl r19
lsl r19
lsl r19
lsl r19
lsl r19
andi r21, 0b01111111
or r21, r19
ret
;------------------------------------------------------------------------
; ПРОЦЕДУРА НАВИГАЦИИ В МЕНЮ УСТАНОВОК
;------------------------------------------------------------------------
navi_command:
andi r20, 0b01111111
cpi r20, 5
brlo navi_reset
cpi r20, 10
brsh navi_reset
inc r20
ret

navi_reset:
ldi r20, 5
ret
;------------------------------------------------------------------------
; универсальная процедурка изменяющая значение любого параметра
; вход: r18 максимальное значение параметра 23 или 59 и тд
; r19 исходное значение параметра
; флаг T=1 запрещает переход через 0 или максимум, иначе - разрешено
; выход:
; r19 новое значение параметра
;
change: mov r16, r22
andi r16, 0b00000110
cpi r16, 0b00000010
breq chg_add
cpi r16, 0b00000100
breq chg_sub
ret
chg_add:
cp r19, r18
brsh chg_rst
inc r19
ret
chg_max:
brTs exit_change
mov r19, r18
ret
chg_sub:
cpi r19, 0
breq chg_max
dec r19
ret
chg_rst:
brTs exit_change
clr r19
exit_change:
ret

;------------------------------------------------------------------------
; процедура записывает 1 байт в Eeprom
; r16 - данные
; r17 - адрес
write_EEPROM_byte:
clr r18
write_eep_loop:
sbic EECR, EEWE
rjmp write_eep_loop
out EEARH, r18
out EEARL, r17
out EEDR, r16
sbi EECR, EEMWE
sbi EECR, EEWE
ret
;------------------------------------------------------------------------
; процедура читает 1 байт из Eeprom
; r17 - адрес
; на выходе r16 - данные
read_EEPROM_byte:
clr r18
read_eep_loop:
sbic EECR, EEWE
rjmp read_eep_loop
out EEARH, r18
out EEARL, r17
sbi EECR, EERE
in r16, EEDR
ret

_________________
--- Хорошие люди попишут-попишут, да и выпьют бутылочку.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 07 фев 2018, 22:53 
Не в сети
Заслуженный участник

Зарегистрирован: 21 дек 2016, 20:02
Сообщений: 1415
Откуда: Киргизия, Бишкек
Cпасибо сказано: 6
Спасибо получено:
57 раз в 55 сообщениях
Влад, спасибо большое, но без схемы я вряд ли пойму что куда лепить. Давай номер карты перекину тебе моё вознаграждение.


Вернуться к началу
 Профиль  
Cпасибо сказано 
 Заголовок сообщения: Re: Многофункциональный счетчик для Электроники-003
СообщениеДобавлено: 07 фев 2018, 23:40 
Не в сети
Администратор
Администратор
Аватара пользователя

Зарегистрирован: 24 ноя 2011, 15:02
Сообщений: 10743
Откуда: СССР/БССР, обитаю под Минском.
Cпасибо сказано: 763
Спасибо получено:
275 раз в 268 сообщениях
Влад 2 недели отдыхает...

_________________
Высококачественный ремонт, восстановление и доработка любой РЭА. /Минск - Москва - С.Петербург/
WhatsApp: +375 29 613-05-09


Вернуться к началу
 Профиль  
Cпасибо сказано 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 112 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Вы можете создать форум бесплатно PHPBB3 на Getbb.Ru, Также возможно сделать готовый форум PHPBB2 на Mybb2.ru
Русская поддержка phpBB