POEMA'NU - 6С52Н ММ-фонокорректор с двумя переключаемыми входами

Модераторы: Алаев Ян, poty, Роман Мирошниченко

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2284
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов

#621

Сообщение Алаев Ян » 07 мар 2017, 19:07

Роман Мирошниченко писал(а):Я думаю, это уже факт - со старой прошивкой все работает.
Отлично! Давайте попробуем проверить версию "прошивка встала криво", загрузите последнюю версию и давайте попробуем установить факт повторения глюка.

[upd=1488902882][/upd]
Роман Мирошниченко писал(а):Заметил - с этой прошивкой "щекание" другое. "Щелчек" в колонках заметно отстает от механического "щелчка" селектора входов.
Есть такое дело. Там есть специальная небольшая задержка.
Стремление к совершенству рождает шедевры!

Аватара пользователя
Роман Мирошниченко
Заслуженный Ветеран
Заслуженный Ветеран
Сообщения: 3787
Зарегистрирован: 09 май 2014, 13:31
Откуда: Саратов
Контактная информация:

#622

Сообщение Роман Мирошниченко » 07 мар 2017, 20:33

Хорошо, как только появится возможность, я переустановлю прошивку.

[upd=1488909915][/upd]
Прошивку загрузил. Контроллер отморгал, как ты и показывал.

Это получилось не с первого раза. Я ждал частого двоичного и не отпускал "кнопку". Но, он лишь три раза одинарно моргнул и все. В результате появилась надпись красным в программе. Я так понял, какая-то ошибка. Второй раз я отпустил кнопку после одиночного моргания и началось частое двоичное перемаргивание. Все прошло успешно.

Собираю корректор. Возможно уже сегодня испытаю (через наушники).

[upd=1488910916][/upd]
Начал испытания - пока переключается. Но, задержка между поворотом ручки и "щелчком" в наушниках фактически отсутсвует. Попробую проверить через колонки. Это ведь не громко.

[upd=1488911069][/upd]
Так и есть, пауза очень незначительная.

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2284
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов

#623

Сообщение Алаев Ян » 07 мар 2017, 22:26

Роман Мирошниченко писал(а):Это получилось не с первого раза. Я ждал частого двоичного и не отпускал "кнопку". Но, он лишь три раза одинарно моргнул и все. В результате появилась надпись красным в программе. Я так понял, какая-то ошибка. Второй раз я отпустил кнопку после одиночного моргания и началось частое двоичное перемаргивание. Все прошло успешно.
Вы нажимаете "Загрузить" при нажатой кнопке. Сначала будет надпись в нижнем левом углу - "Компилируем", потом "Загружаем", как только увидите надпись "Загружаем" - кнопку нужно отпустить.
Стремление к совершенству рождает шедевры!

Аватара пользователя
Роман Мирошниченко
Заслуженный Ветеран
Заслуженный Ветеран
Сообщения: 3787
Зарегистрирован: 09 май 2014, 13:31
Откуда: Саратов
Контактная информация:

#624

Сообщение Роман Мирошниченко » 07 мар 2017, 22:31

Блин, я этот урок не запомнил... Или забыл.
Но, по идее все работает. Это точно та самая обновленная прошивка (по щелчкам чую) и вот уже второй час я жду глюк.

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2284
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов

#625

Сообщение Алаев Ян » 07 мар 2017, 23:07

Если вход переключается почти мгновенно после поворота ручки - то это последняя прошивка.
Стремление к совершенству рождает шедевры!

Аватара пользователя
Роман Мирошниченко
Заслуженный Ветеран
Заслуженный Ветеран
Сообщения: 3787
Зарегистрирован: 09 май 2014, 13:31
Откуда: Саратов
Контактная информация:

#626

Сообщение Роман Мирошниченко » 07 мар 2017, 23:10

Спать хочу... но и эксперимент жалко прерывать. :zombie:

[upd=1488919410][/upd]
Все, больше не переключается... :cry:
Теперь ясно - виновата прошивка.

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2284
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов

#627

Сообщение Алаев Ян » 08 мар 2017, 00:25

Это хороший результат. Было бы хуже, если бы пришлось лезть в железо. Поправим.
Стремление к совершенству рождает шедевры!

Аватара пользователя
Роман Мирошниченко
Заслуженный Ветеран
Заслуженный Ветеран
Сообщения: 3787
Зарегистрирован: 09 май 2014, 13:31
Откуда: Саратов
Контактная информация:

#628

Сообщение Роман Мирошниченко » 08 мар 2017, 08:34

Да, это меньшее из зол.
Плюс, работающая прошивка у нас все-таки есть.
Вопрос - мне ее ставить обратно или следующая будет в скором времени?
Вообще-то, перепрошивка не сложная процедура.

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2284
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов

#629

Сообщение Алаев Ян » 09 мар 2017, 13:29

Вы можете поставить пока первый вариант, чтобы Вас не раздражал этот баг. Я постараюсь в скором времени родить альтернативную версию прошивки.
Стремление к совершенству рождает шедевры!

Аватара пользователя
Роман Мирошниченко
Заслуженный Ветеран
Заслуженный Ветеран
Сообщения: 3787
Зарегистрирован: 09 май 2014, 13:31
Откуда: Саратов
Контактная информация:

#630

Сообщение Роман Мирошниченко » 09 мар 2017, 13:30

Я так и сделал уже. :smile:

Аватара пользователя
poty
Профи
Профи
Сообщения: 3269
Зарегистрирован: 24 мар 2014, 10:00
Откуда: Россия, Москва

#631

Сообщение poty » 11 мар 2017, 20:47

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

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2284
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов

#632

Сообщение Алаев Ян » 13 мар 2017, 01:47

2.46... поздно уже... :sad: :sad: :sad:
Глюк в прошивке нашел, завтра внимательно проверю ее и отдам на тестирование.
Стремление к совершенству рождает шедевры!

Аватара пользователя
Роман Мирошниченко
Заслуженный Ветеран
Заслуженный Ветеран
Сообщения: 3787
Зарегистрирован: 09 май 2014, 13:31
Откуда: Саратов
Контактная информация:

#633

Сообщение Роман Мирошниченко » 13 мар 2017, 05:38

:clap: :clap: :clap:

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2284
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов

#634

Сообщение Алаев Ян » 13 мар 2017, 08:16

Я некоторое время потратил на попытки разобраться в природе глюка, но каждый раз макет работал совершенно одинаково и глюк не проявлялся ни с какой стороны. Я оставлял работающий макет на несколько дней - тот же результат. Вчера я "плюнул" на это дело и решил просто перекроить программу под те изменения которые мы обсуждали. Сделал индикацию включения выбранного входа - первый вход моргаем один раз, второй вход - моргаем два раза. Ранее я писал, что есть разница, между переключением входов из спящего режима и переключением входов при включении устройства (это разные участки кода прошивки). Так вот я внес изменения только в переключении входов из спящего режима и решил проверить макет. Моему удивлению не было предела, когда я нажал кнопку "включение" и моргающий код отработал и там. Это означало, что при внешнем прерывании по питанию - сработало прерывание и по входам. Такого быть не должно. Здесь было за что зацепиться и я начал копать и разбираться в этом. Сначала подумал, что я неверно что-то сконфигурировал. Оставил только одно прерывание по входу - проверил, все работает. Потом то же самое сделал с прерыванием по питанию - тоже работал. Потом начал думать, что у них есть какое-то взаимовлияние. Написал дополнительный код, который бы показывал, что мы попадаем в оба прерывания при срабатывании одного из них, проверил в разных комбинациях - опять ничего, прерывания работают независимо и не мешают друг другу. Попутно на форумах читал различную информацию по схожим вопросам и проблемам и уже подумывал, что стоило на выводы внешнего прерывания повесить какой-нибудь логический элемент, чтобы исключить дребезг контактов от переключателя, который может вызывать множественные прерывания при переключении и сводить контроллер с ума. Но каждый раз, когда я загружал прошивку версии 1.3 - при срабатывании прерывания по питанию - возникало прерывание и по входу. Я модифицировал код прошивки и искал то место, где могло происходить подобное. Включал и выключал различные разрешения на выполнение прерываний прямо в процессе выполнения кода. В конечном итоге помогла пауза после пробуждения, возможно, что-то еще я там вставил, сегодня еще раз внимательно проверю код. Но в общем виде логика такая - мы засыпаем, по факту пробуждения просыпаемся и попадаем на паузу, ничего не делаем некоторое время и только потом думаем, а что же нас разбудило. Вчера код работал без этой ошибки, надеюсь, что там больше нет подводных камней и сюрпризов больше не будет.
Стремление к совершенству рождает шедевры!

Аватара пользователя
Роман Мирошниченко
Заслуженный Ветеран
Заслуженный Ветеран
Сообщения: 3787
Зарегистрирован: 09 май 2014, 13:31
Откуда: Саратов
Контактная информация:

#635

Сообщение Роман Мирошниченко » 13 мар 2017, 08:59

Понятно теперь почему ночь не спал.

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2284
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов

#636

Сообщение Алаев Ян » 13 мар 2017, 10:31

Конечно, я хотя бы увидел, что код выполняется неправильно! Это все благодаря тому, что Владислав предложил сделать индикацию. Если бы ее не было, то я бы не увидел, что процесс включения проходит как-то иначе. А тут я зацепку получил и пошел ее "долбить".
Стремление к совершенству рождает шедевры!

Аватара пользователя
poty
Профи
Профи
Сообщения: 3269
Зарегистрирован: 24 мар 2014, 10:00
Откуда: Россия, Москва

#637

Сообщение poty » 13 мар 2017, 13:15

Мне так и неясно, как введение паузы могло выправить ситуацию? Я, кстати, не понял и про структуру программы, но это, возможно, из-за того, что Ян не хочет её раскрывать, поэтому этот вопрос не первоочередной.
Владислав

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2284
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов

#638

Сообщение Алаев Ян » 13 мар 2017, 14:54

Владислав, я не могу с уверенностью сказать, что проблема была решена только с помощью паузы. Когда я начал кроить код, то я много чего там успел наворотить, я делал и задержки, включал/выключал различные разрешения на прерывания. Читал разные форумы и проверял те советы, которые там давались. Вчера было уже очень поздно, но я специально сделал разную реакцию на прерывания по входу и на прерывания по питанию и вижу, что они либо возникают (оба и по отдельности, либо нет). В интернете очень много статей, где описываются ложные срабатывания прерываний. Например, вот ссылка http://arduino.ru/forum/apparatnye-voprosy/takhom ... ak-i-ne-reshena#comment-159012
Прерывание по выводу int0 имеет больший приоритет, чем по выводу int1, возможно, с этим связано, что int0 никогда не вызывает случайного срабатывания int1, а вот int1 иногда прихватывает с собой и int0. С точки зрения схемотехники мне не нравится, конечно же, решение, когда кнопка в чистом виде заведена на внешнее прерывание. Нужно было поставить RC цепочку и логический элемент, чтобы убрать дребезг. Представляете, что происходит там? Мы щелкнули, сработало прерывание, начал выполняться код, но за счет дребезга контактов мы опять залетаем в прерывание и рвем начавшийся код и так, возможно, несколько раз. Введенная задержка, возможно, помогает убрать этот мусор в себе. Т.е. пока серия заходов в прерывания пытается портить код, то портит она тот участок, когда контроллер ничего не делает, а тупо считает время. Т.е. он после пробуждения начал отсчет времени и в этот отсчет вклинивается десяток ложных срабатываний. Потом задержка заканчивается и контроллер приступает к уже нормальному выполнению кода. Я так себе это представляю. Вчера не было времени, сегодня я проверю внимательно код и посмотрю какой величины задержка нужна для стабильной работы. По поводу публикации прошивки - я ее не скрываю, могу выслать Вам или кому-то при необходимости, но выкладывать на Форуме пока не хочу.

[upd=1489406428][/upd]
У меня есть еще один козырь в рукаве, при необходимости. Можно сделать совсем иначе. Можно пробуждаться по любому прерыванию. И не сопоставлять действие с прерыванием. А просто просыпаться. Тогда нам будет не важно от кого мы проснулись. И даже если сработало два сразу, то мы все равно проснулись. А дальше мы используем код первой версии прошивки. Где идет опрос кнопки не по прерыванию, а по таймеру. Все сделали, что хотели - опять уходим в сон. В этом случае нам будет абсолютно все равно по какому из сигналов мы проснемся.
Стремление к совершенству рождает шедевры!

Аватара пользователя
poty
Профи
Профи
Сообщения: 3269
Зарегистрирован: 24 мар 2014, 10:00
Откуда: Россия, Москва

#639

Сообщение poty » 13 мар 2017, 15:20

Ссылку почитаю, просто сейчас нет времени...
Алаев Ян писал(а):С точки зрения схемотехники мне не нравится, конечно же, решение, когда кнопка в чистом виде заведена на внешнее прерывание. Нужно было поставить RC цепочку и логический элемент, чтобы убрать дребезг. Представляете, что происходит там? Мы щелкнули, сработало прерывание, начал выполняться код, но за счет дребезга контактов мы опять залетаем в прерывание и рвем начавшийся код и так, возможно, несколько раз. Введенная задержка, возможно, помогает убрать этот мусор в себе. Т.е. пока серия заходов в прерывания пытается портить код, то портит она тот участок, когда контроллер ничего не делает, а тупо считает время. Т.е. он после пробуждения начал отсчет времени и в этот отсчет вклинивается десяток ложных срабатываний. Потом задержка заканчивается и контроллер приступает к уже нормальному выполнению кода. Я так себе это представляю.
Не претендуя на истину в последней инстанции. При входе в прерывание вводится команда запрета всех прерываний на время выполнения кода самого прерывания. Перед выходом, соответственно, ставится команда разрешения прерываний. Насколько я помню, есть какой-то фьюз, который управляет тем, сохраняется ли в очереди несработавшее из-за такого запрета прерывание или нет. Поэтому, никакого разрыва выполнения кода быть не может. Теоретически может быть другой вариант, когда очередь прерываний переполняется (из-за дребезга) и последним в очереди остаётся прерывание возврата к старому входу. Но это не объясняет сработку двух прерываний подряд! А в таблице прерываний нет ошибки?
Алаев Ян писал(а):Можно пробуждаться по любому прерыванию. И не сопоставлять действие с прерыванием. А просто просыпаться. Тогда нам будет не важно от кого мы проснулись. И даже если сработало два сразу, то мы все равно проснулись. А дальше мы используем код первой версии прошивки. Где идет опрос кнопки не по прерыванию, а по таймеру. Все сделали, что хотели - опять уходим в сон. В этом случае нам будет абсолютно все равно по какому из сигналов мы проснемся.
Так я именно это и предлагал (правда, каюсь, уже после того, как ошибка проявилась). Я ещё на 8086 наелся этих прерываний, всегда оставлял опрос портов на "обычный код".
Владислав

Аватара пользователя
Алаев Ян
Основатель Форума
Сообщения: 2284
Зарегистрирован: 19 мар 2014, 12:05
Откуда: Саратов

#640

Сообщение Алаев Ян » 13 мар 2017, 15:32

poty писал(а):А в таблице прерываний нет ошибки?
Я все уже перепроверил. Я постараюсь сегодня Роману выслать новую прошивку на тестирование, будем исходить из практического использования, так как я могу 30 раз на макете проверить и не увидеть того, что Роман отловит во время эксплуатации.
Стремление к совершенству рождает шедевры!

Ответить