Александр,
Да, ошибка инициализации была и я также её благополучно просмотрел.
Однако, я пока не понял почему были случайные пропуски в начальном варианте. В EICRB значения бит по умолчанию "0". То есть прерывание с 4 ноги (без инициализации) должно было срабатывать по низкому уровню входного сигнала.
А откуда взялись случайные пропуски?
В принципе, у Вас сейчас всё работает, но хочется найти причину проблемы. Мне всегда интересно разобраться.
Управление печкой(нагревателем)
Oleg
- R9OFG
- Сообщения: 1183
- Зарегистрирован: 03 ноя 2019, 22:30
- Позывной: R9OFG, ex R0AEK
- Город: Новосибирск
- Имя: Саша
- Благодарил (а): 182 раза
- Поблагодарили: 276 раз
- Контактная информация:
Управление печкой(нагревателем)
Сообщение R9OFG » 18 сен 2023, 14:27
Получается, прерывание срабатывало несколько раз в период от нуля до нуля (настройка как раз была срабатывать по низкому уровню), соответственно и переменная zero_crossing_counter постоянно изменялась, и скорее всего были моменты когда перед очередным нулем значение переменной было ноль, а по условию, импульс давался по значению переменной zero_crossing_counter равному единице, вот и пропуск случайный, я так понял.
R9OFG
-
- Сообщения: 365
- Зарегистрирован: 22 окт 2019, 16:06
- Позывной: R2AVB
- Город: Москва
- Имя: Олег
- Благодарил (а): 48 раз
- Поблагодарили: 117 раз
Управление печкой(нагревателем)
Сообщение Oleg » 28 сен 2023, 23:07
Я прогнал тот первый (ошибочный) вариант в железе. Только вместо датчика использовал внешний генератор импульсов.
Получилось примерно так (желтая осциллограмма - выходной сигнал, малиновая - входной) Собственно, всё как и должно быть. То есть пока уровень входного сигнала низкий, постоянно генерируется условие прерывания. MCU честно их отрабатывает. Короткие паузы только на возврат из прерывания, выполнение следующей команды и далее - все снова.
Как только уровень входного сигнала меняется на высокий, процесс приостанавливается. Это хорошо видно.
А вот почему у Вас прерывания шли с периодичностью входного сигнала и хаотично пропадали выходные импульсы - до сих пор неясно.
В принципе это уже и неважно. Подозреваю, что симулятор неправильно отрабатывает программу с прерываниями.
Получилось примерно так (желтая осциллограмма - выходной сигнал, малиновая - входной) Собственно, всё как и должно быть. То есть пока уровень входного сигнала низкий, постоянно генерируется условие прерывания. MCU честно их отрабатывает. Короткие паузы только на возврат из прерывания, выполнение следующей команды и далее - все снова.
Как только уровень входного сигнала меняется на высокий, процесс приостанавливается. Это хорошо видно.
А вот почему у Вас прерывания шли с периодичностью входного сигнала и хаотично пропадали выходные импульсы - до сих пор неясно.
В принципе это уже и неважно. Подозреваю, что симулятор неправильно отрабатывает программу с прерываниями.
Олег
R2AVB
R2AVB
Oleg
Вернуться в «Микроконтроллеры и программирование»
Перейти
- Обязательно к прочтению
- Аналоговая схемотехника
- ↳ Супергетеродинные приемники и трансиверы
- ↳ Прямое преобразование
- ↳ Прямое усиление
- ↳ Регенераторы
- ↳ Узлы, блоки, модули
- ↳ Усилители мощности
- Цифровая техника
- ↳ SDR приемники
- ↳ SDR приставки
- ↳ SDR трансиверы
- ↳ Микроконтроллеры и программирование
- Теплая лампота
- ↳ Супергетеродины
- ↳ Регенераторы
- ↳ Прямого усиления
- ↳ УНЧ
- ↳ ВЧ усилители мощности
- Источники питания
- ↳ Трансформаторные и линейные
- ↳ Импульсные и преобразователи
- ↳ Гибриды
- ↳ Аккумуляторы и батареи
- ↳ Альтернативные источники
- Антенны
- ↳ Антенны КВ
- ↳ Антенны УКВ
- ↳ Фидеры кабели
- ↳ Антенные приборы и устройства
- ↳ Тюнеры
- Фирменная аппаратура
- ↳ Yaesu
- ↳ Icom
- ↳ Kenwood
- ↳ Прочие
- Мастерская
- ↳ Измерения, приборы и софт
- ↳ Паяльное оборудование
- ↳ Слесарка
- ↳ ЧПУ и 3D принтеры
- Разное
- ↳ Другие радио темы
- ↳ Полевой день
- ↳ Помогите опознать
- ↳ Куплю Продам Магазины Продавцы
- ↳ Флудильня и оффтоп
- Работа форума