Начинаем разработку фонокорректора. На каком варианте фонокорректора останавливаемся?
Для активации новой учетной записи и ее подтверждения на Форуме - необходимо связаться с администратором по электронной почте p-i-n-o-k-i-o@mail.ru.
Все новые учетные записи не прошедшие подтверждения администратором воспринимаются как спам.
Все новые учетные записи не прошедшие подтверждения администратором воспринимаются как спам.
POEMA'NU - 6С52Н ММ-фонокорректор с двумя переключаемыми входами
- poty
- Профи
- Сообщения: 4289
- Зарегистрирован: 24 мар 2014, 10:00
- Откуда: Россия, Москва
- Благодарил (а): 141 раз
- Поблагодарили: 391 раз
POEMA'NU - 6С52Н ММ-фонокорректор с двумя переключаемыми входами
Начинаем разработку фонокорректора. На каком варианте фонокорректора останавливаемся?
Владислав
- Алаев Ян
- Основатель Форума
- Сообщения: 1165
- Зарегистрирован: 19 мар 2014, 12:05
- Откуда: Саратов
- Благодарил (а): 251 раз
- Поблагодарили: 119 раз
Отлично! Давайте попробуем проверить версию "прошивка встала криво", загрузите последнюю версию и давайте попробуем установить факт повторения глюка.Роман Мирошниченко писал(а):Я думаю, это уже факт - со старой прошивкой все работает.
Есть такое дело. Там есть специальная небольшая задержка.Роман Мирошниченко писал(а):Заметил - с этой прошивкой "щекание" другое. "Щелчек" в колонках заметно отстает от механического "щелчка" селектора входов.
- Роман Мирошниченко
- Заслуженный Ветеран
- Сообщения: 4294
- Зарегистрирован: 09 май 2014, 13:31
- Откуда: Саратов
- Благодарил (а): 488 раз
- Поблагодарили: 165 раз
- Контактная информация:
Хорошо, как только появится возможность, я переустановлю прошивку.
Прошивку загрузил. Контроллер отморгал, как ты и показывал.
Это получилось не с первого раза. Я ждал частого двоичного и не отпускал "кнопку". Но, он лишь три раза одинарно моргнул и все. В результате появилась надпись красным в программе. Я так понял, какая-то ошибка. Второй раз я отпустил кнопку после одиночного моргания и началось частое двоичное перемаргивание. Все прошло успешно.
Собираю корректор. Возможно уже сегодня испытаю (через наушники).
Начал испытания - пока переключается. Но, задержка между поворотом ручки и "щелчком" в наушниках фактически отсутсвует. Попробую проверить через колонки. Это ведь не громко.
Так и есть, пауза очень незначительная.
Прошивку загрузил. Контроллер отморгал, как ты и показывал.
Это получилось не с первого раза. Я ждал частого двоичного и не отпускал "кнопку". Но, он лишь три раза одинарно моргнул и все. В результате появилась надпись красным в программе. Я так понял, какая-то ошибка. Второй раз я отпустил кнопку после одиночного моргания и началось частое двоичное перемаргивание. Все прошло успешно.
Собираю корректор. Возможно уже сегодня испытаю (через наушники).
Начал испытания - пока переключается. Но, задержка между поворотом ручки и "щелчком" в наушниках фактически отсутсвует. Попробую проверить через колонки. Это ведь не громко.
Так и есть, пауза очень незначительная.
- Алаев Ян
- Основатель Форума
- Сообщения: 1165
- Зарегистрирован: 19 мар 2014, 12:05
- Откуда: Саратов
- Благодарил (а): 251 раз
- Поблагодарили: 119 раз
Вы нажимаете "Загрузить" при нажатой кнопке. Сначала будет надпись в нижнем левом углу - "Компилируем", потом "Загружаем", как только увидите надпись "Загружаем" - кнопку нужно отпустить.Роман Мирошниченко писал(а):Это получилось не с первого раза. Я ждал частого двоичного и не отпускал "кнопку". Но, он лишь три раза одинарно моргнул и все. В результате появилась надпись красным в программе. Я так понял, какая-то ошибка. Второй раз я отпустил кнопку после одиночного моргания и началось частое двоичное перемаргивание. Все прошло успешно.
- Роман Мирошниченко
- Заслуженный Ветеран
- Сообщения: 4294
- Зарегистрирован: 09 май 2014, 13:31
- Откуда: Саратов
- Благодарил (а): 488 раз
- Поблагодарили: 165 раз
- Контактная информация:
- Роман Мирошниченко
- Заслуженный Ветеран
- Сообщения: 4294
- Зарегистрирован: 09 май 2014, 13:31
- Откуда: Саратов
- Благодарил (а): 488 раз
- Поблагодарили: 165 раз
- Контактная информация:
- Роман Мирошниченко
- Заслуженный Ветеран
- Сообщения: 4294
- Зарегистрирован: 09 май 2014, 13:31
- Откуда: Саратов
- Благодарил (а): 488 раз
- Поблагодарили: 165 раз
- Контактная информация:
- Роман Мирошниченко
- Заслуженный Ветеран
- Сообщения: 4294
- Зарегистрирован: 09 май 2014, 13:31
- Откуда: Саратов
- Благодарил (а): 488 раз
- Поблагодарили: 165 раз
- Контактная информация:
- Роман Мирошниченко
- Заслуженный Ветеран
- Сообщения: 4294
- Зарегистрирован: 09 май 2014, 13:31
- Откуда: Саратов
- Благодарил (а): 488 раз
- Поблагодарили: 165 раз
- Контактная информация:
- Алаев Ян
- Основатель Форума
- Сообщения: 1165
- Зарегистрирован: 19 мар 2014, 12:05
- Откуда: Саратов
- Благодарил (а): 251 раз
- Поблагодарили: 119 раз
Я некоторое время потратил на попытки разобраться в природе глюка, но каждый раз макет работал совершенно одинаково и глюк не проявлялся ни с какой стороны. Я оставлял работающий макет на несколько дней - тот же результат. Вчера я "плюнул" на это дело и решил просто перекроить программу под те изменения которые мы обсуждали. Сделал индикацию включения выбранного входа - первый вход моргаем один раз, второй вход - моргаем два раза. Ранее я писал, что есть разница, между переключением входов из спящего режима и переключением входов при включении устройства (это разные участки кода прошивки). Так вот я внес изменения только в переключении входов из спящего режима и решил проверить макет. Моему удивлению не было предела, когда я нажал кнопку "включение" и моргающий код отработал и там. Это означало, что при внешнем прерывании по питанию - сработало прерывание и по входам. Такого быть не должно. Здесь было за что зацепиться и я начал копать и разбираться в этом. Сначала подумал, что я неверно что-то сконфигурировал. Оставил только одно прерывание по входу - проверил, все работает. Потом то же самое сделал с прерыванием по питанию - тоже работал. Потом начал думать, что у них есть какое-то взаимовлияние. Написал дополнительный код, который бы показывал, что мы попадаем в оба прерывания при срабатывании одного из них, проверил в разных комбинациях - опять ничего, прерывания работают независимо и не мешают друг другу. Попутно на форумах читал различную информацию по схожим вопросам и проблемам и уже подумывал, что стоило на выводы внешнего прерывания повесить какой-нибудь логический элемент, чтобы исключить дребезг контактов от переключателя, который может вызывать множественные прерывания при переключении и сводить контроллер с ума. Но каждый раз, когда я загружал прошивку версии 1.3 - при срабатывании прерывания по питанию - возникало прерывание и по входу. Я модифицировал код прошивки и искал то место, где могло происходить подобное. Включал и выключал различные разрешения на выполнение прерываний прямо в процессе выполнения кода. В конечном итоге помогла пауза после пробуждения, возможно, что-то еще я там вставил, сегодня еще раз внимательно проверю код. Но в общем виде логика такая - мы засыпаем, по факту пробуждения просыпаемся и попадаем на паузу, ничего не делаем некоторое время и только потом думаем, а что же нас разбудило. Вчера код работал без этой ошибки, надеюсь, что там больше нет подводных камней и сюрпризов больше не будет.
- Роман Мирошниченко
- Заслуженный Ветеран
- Сообщения: 4294
- Зарегистрирован: 09 май 2014, 13:31
- Откуда: Саратов
- Благодарил (а): 488 раз
- Поблагодарили: 165 раз
- Контактная информация:
- Алаев Ян
- Основатель Форума
- Сообщения: 1165
- Зарегистрирован: 19 мар 2014, 12:05
- Откуда: Саратов
- Благодарил (а): 251 раз
- Поблагодарили: 119 раз
Владислав, я не могу с уверенностью сказать, что проблема была решена только с помощью паузы. Когда я начал кроить код, то я много чего там успел наворотить, я делал и задержки, включал/выключал различные разрешения на прерывания. Читал разные форумы и проверял те советы, которые там давались. Вчера было уже очень поздно, но я специально сделал разную реакцию на прерывания по входу и на прерывания по питанию и вижу, что они либо возникают (оба и по отдельности, либо нет). В интернете очень много статей, где описываются ложные срабатывания прерываний. Например, вот ссылка http://arduino.ru/forum/apparatnye-voprosy/takhom ... ak-i-ne-reshena#comment-159012
Прерывание по выводу int0 имеет больший приоритет, чем по выводу int1, возможно, с этим связано, что int0 никогда не вызывает случайного срабатывания int1, а вот int1 иногда прихватывает с собой и int0. С точки зрения схемотехники мне не нравится, конечно же, решение, когда кнопка в чистом виде заведена на внешнее прерывание. Нужно было поставить RC цепочку и логический элемент, чтобы убрать дребезг. Представляете, что происходит там? Мы щелкнули, сработало прерывание, начал выполняться код, но за счет дребезга контактов мы опять залетаем в прерывание и рвем начавшийся код и так, возможно, несколько раз. Введенная задержка, возможно, помогает убрать этот мусор в себе. Т.е. пока серия заходов в прерывания пытается портить код, то портит она тот участок, когда контроллер ничего не делает, а тупо считает время. Т.е. он после пробуждения начал отсчет времени и в этот отсчет вклинивается десяток ложных срабатываний. Потом задержка заканчивается и контроллер приступает к уже нормальному выполнению кода. Я так себе это представляю. Вчера не было времени, сегодня я проверю внимательно код и посмотрю какой величины задержка нужна для стабильной работы. По поводу публикации прошивки - я ее не скрываю, могу выслать Вам или кому-то при необходимости, но выкладывать на Форуме пока не хочу.
У меня есть еще один козырь в рукаве, при необходимости. Можно сделать совсем иначе. Можно пробуждаться по любому прерыванию. И не сопоставлять действие с прерыванием. А просто просыпаться. Тогда нам будет не важно от кого мы проснулись. И даже если сработало два сразу, то мы все равно проснулись. А дальше мы используем код первой версии прошивки. Где идет опрос кнопки не по прерыванию, а по таймеру. Все сделали, что хотели - опять уходим в сон. В этом случае нам будет абсолютно все равно по какому из сигналов мы проснемся.
Прерывание по выводу int0 имеет больший приоритет, чем по выводу int1, возможно, с этим связано, что int0 никогда не вызывает случайного срабатывания int1, а вот int1 иногда прихватывает с собой и int0. С точки зрения схемотехники мне не нравится, конечно же, решение, когда кнопка в чистом виде заведена на внешнее прерывание. Нужно было поставить RC цепочку и логический элемент, чтобы убрать дребезг. Представляете, что происходит там? Мы щелкнули, сработало прерывание, начал выполняться код, но за счет дребезга контактов мы опять залетаем в прерывание и рвем начавшийся код и так, возможно, несколько раз. Введенная задержка, возможно, помогает убрать этот мусор в себе. Т.е. пока серия заходов в прерывания пытается портить код, то портит она тот участок, когда контроллер ничего не делает, а тупо считает время. Т.е. он после пробуждения начал отсчет времени и в этот отсчет вклинивается десяток ложных срабатываний. Потом задержка заканчивается и контроллер приступает к уже нормальному выполнению кода. Я так себе это представляю. Вчера не было времени, сегодня я проверю внимательно код и посмотрю какой величины задержка нужна для стабильной работы. По поводу публикации прошивки - я ее не скрываю, могу выслать Вам или кому-то при необходимости, но выкладывать на Форуме пока не хочу.
У меня есть еще один козырь в рукаве, при необходимости. Можно сделать совсем иначе. Можно пробуждаться по любому прерыванию. И не сопоставлять действие с прерыванием. А просто просыпаться. Тогда нам будет не важно от кого мы проснулись. И даже если сработало два сразу, то мы все равно проснулись. А дальше мы используем код первой версии прошивки. Где идет опрос кнопки не по прерыванию, а по таймеру. Все сделали, что хотели - опять уходим в сон. В этом случае нам будет абсолютно все равно по какому из сигналов мы проснемся.
- poty
- Профи
- Сообщения: 4289
- Зарегистрирован: 24 мар 2014, 10:00
- Откуда: Россия, Москва
- Благодарил (а): 141 раз
- Поблагодарили: 391 раз
Ссылку почитаю, просто сейчас нет времени...
Не претендуя на истину в последней инстанции. При входе в прерывание вводится команда запрета всех прерываний на время выполнения кода самого прерывания. Перед выходом, соответственно, ставится команда разрешения прерываний. Насколько я помню, есть какой-то фьюз, который управляет тем, сохраняется ли в очереди несработавшее из-за такого запрета прерывание или нет. Поэтому, никакого разрыва выполнения кода быть не может. Теоретически может быть другой вариант, когда очередь прерываний переполняется (из-за дребезга) и последним в очереди остаётся прерывание возврата к старому входу. Но это не объясняет сработку двух прерываний подряд! А в таблице прерываний нет ошибки?Алаев Ян писал(а):С точки зрения схемотехники мне не нравится, конечно же, решение, когда кнопка в чистом виде заведена на внешнее прерывание. Нужно было поставить RC цепочку и логический элемент, чтобы убрать дребезг. Представляете, что происходит там? Мы щелкнули, сработало прерывание, начал выполняться код, но за счет дребезга контактов мы опять залетаем в прерывание и рвем начавшийся код и так, возможно, несколько раз. Введенная задержка, возможно, помогает убрать этот мусор в себе. Т.е. пока серия заходов в прерывания пытается портить код, то портит она тот участок, когда контроллер ничего не делает, а тупо считает время. Т.е. он после пробуждения начал отсчет времени и в этот отсчет вклинивается десяток ложных срабатываний. Потом задержка заканчивается и контроллер приступает к уже нормальному выполнению кода. Я так себе это представляю.
Так я именно это и предлагал (правда, каюсь, уже после того, как ошибка проявилась). Я ещё на 8086 наелся этих прерываний, всегда оставлял опрос портов на "обычный код".Алаев Ян писал(а):Можно пробуждаться по любому прерыванию. И не сопоставлять действие с прерыванием. А просто просыпаться. Тогда нам будет не важно от кого мы проснулись. И даже если сработало два сразу, то мы все равно проснулись. А дальше мы используем код первой версии прошивки. Где идет опрос кнопки не по прерыванию, а по таймеру. Все сделали, что хотели - опять уходим в сон. В этом случае нам будет абсолютно все равно по какому из сигналов мы проснемся.
Владислав
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Простой фонокорректор на ОУ
Tos » 06 май 2020, 14:35 » в форуме Все радиотехнические темы, которые не попали в творческие разделы - 8 Ответы
- 4440 Просмотры
-
Последнее сообщение Tos
23 июн 2020, 12:31
-