Управление печкой(нагревателем)

Oleg
Сообщения: 363
Зарегистрирован: 22 окт 2019, 16:06
Позывной: R2AVB
Город: Москва
Имя: Олег
Благодарил (а): 48 раз
Поблагодарили: 117 раз

Управление печкой(нагревателем)

Сообщение Oleg » 14 сен 2023, 22:19

Александр,

Да, ошибка инициализации была и я также её благополучно просмотрел. :(
Однако, я пока не понял почему были случайные пропуски в начальном варианте. В EICRB значения бит по умолчанию "0". То есть прерывание с 4 ноги (без инициализации) должно было срабатывать по низкому уровню входного сигнала.
А откуда взялись случайные пропуски?

В принципе, у Вас сейчас всё работает, но хочется найти причину проблемы. Мне всегда интересно разобраться.
Олег
R2AVB

Аватара пользователя
R9OFG
Сообщения: 1182
Зарегистрирован: 03 ноя 2019, 22:30
Позывной: R9OFG, ex R0AEK
Город: Новосибирск
Имя: Саша
Благодарил (а): 181 раз
Поблагодарили: 276 раз
Контактная информация:

Управление печкой(нагревателем)

Сообщение R9OFG » 18 сен 2023, 14:27

Oleg писал(а):
14 сен 2023, 22:19
Однако, я пока не понял почему были случайные пропуски в начальном варианте. В EICRB значения бит по умолчанию "0". То есть прерывание с 4 ноги (без инициализации) должно было срабатывать по низкому уровню входного сигнала.
А откуда взялись случайные пропуски?
Получается, прерывание срабатывало несколько раз в период от нуля до нуля (настройка как раз была срабатывать по низкому уровню), соответственно и переменная zero_crossing_counter постоянно изменялась, и скорее всего были моменты когда перед очередным нулем значение переменной было ноль, а по условию, импульс давался по значению переменной zero_crossing_counter равному единице, вот и пропуск случайный, я так понял.


Oleg
Сообщения: 363
Зарегистрирован: 22 окт 2019, 16:06
Позывной: R2AVB
Город: Москва
Имя: Олег
Благодарил (а): 48 раз
Поблагодарили: 117 раз

Управление печкой(нагревателем)

Сообщение Oleg » 28 сен 2023, 23:07

Я прогнал тот первый (ошибочный) вариант в железе. Только вместо датчика использовал внешний генератор импульсов.
Получилось примерно так (желтая осциллограмма - выходной сигнал, малиновая - входной)
int2.jpg
Собственно, всё как и должно быть. То есть пока уровень входного сигнала низкий, постоянно генерируется условие прерывания. MCU честно их отрабатывает. Короткие паузы только на возврат из прерывания, выполнение следующей команды и далее - все снова.
Как только уровень входного сигнала меняется на высокий, процесс приостанавливается. Это хорошо видно.

А вот почему у Вас прерывания шли с периодичностью входного сигнала и хаотично пропадали выходные импульсы - до сих пор неясно.

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

Аватара пользователя
R9OFG
Сообщения: 1182
Зарегистрирован: 03 ноя 2019, 22:30
Позывной: R9OFG, ex R0AEK
Город: Новосибирск
Имя: Саша
Благодарил (а): 181 раз
Поблагодарили: 276 раз
Контактная информация:

Управление печкой(нагревателем)

Сообщение R9OFG » 29 сен 2023, 22:12

Oleg писал(а):
28 сен 2023, 23:07
Подозреваю, что симулятор неправильно отрабатывает программу с прерываниями.
Скорее всего так и есть, я уже заметил, что протеус напрямую зависит от скорострельности ПК

Ответить

Вернуться в «Микроконтроллеры и программирование»