История изменений
Исправление cvs-255, (текущая версия) :
Да.
Мой алгоритм таков:
есть 3 состояния:
0) idle
1) ждем указанное время. Когда дождались, включаем ток через катушку, загружаем время работы катушки в таймер и переходим в состояние 2
2) ждем. когда время истекло, выключаем катушку. В этот момент проскакивает искра. Переходим в состояние 0.
Также на каждом тике таймера мы увеличиваем на 1 счетчик времени.
Есть датчик. Он срабатывает в НМТ. Когда он срабатывает, мы запоминаем счетчик времени, делим его пополам, чтобы найти время до ВМТ. И счетчик сбрасываем в 0. Т.о. мы меряем период, и поделив его, получаем полпериода. При этом я также усредняю его с средним значением периода.
Затем полпериода умножаем на число (256-УОЗ)/256, где УОЗ меняется от 0 до 255 - 0 дает зажигание в ВМТ, 255 в НМТ.
Из полученной величины вычитаем время, необходимео чтобы катушка набрала ток. И эту величину записываем в таймер. И переходим в состояние 1.
Баг же заключается в том, что иногда проскакивает 2 искры. При этом это не помеха от первой искры, которая бы перезагрузила МК. В этом я убедился, когда в самом начале инициализации моргаю свободным контактом. Когда 2 искры, он не моргает.
Исправление cvs-255, :
Да.
Мой алгоритм таков:
есть 3 состояния:
0) idle
1) ждем указанное время. Когда дождались, включаем ток через катушку, загружаем время работы катушки в таймер и переходим в состояние 2
2) ждем. когда время истекло, выключаем катушку. В этот момент проскакивает искра. Переходим в состояние 0.
Также на каждом тике таймера мы увеличиваем на 1 счетчик времени.
Есть датчик. Он срабатывает в НМТ. Когда он срабатывает, мы запоминаем счетчик времени, делим его пополам, чтобы найти время до ВМТ. И счетчик сбрасываем в 0. Т.о. мы меряем период, и поделив его, получаем полпериода.
Затем полпериода умножаем на число (256-УОЗ)/256, где УОЗ меняется от 0 до 255 - 0 дает зажигание в ВМТ, 255 в НМТ.
Из полученной величины вычитаем время, необходимео чтобы катушка набрала ток. И эту величину записываем в таймер. И переходим в состояние 1.
Баг же заключается в том, что иногда проскакивает 2 искры. При этом это не помеха от первой искры, которая бы перезагрузила МК. В этом я убедился, когда в самом начале инициализации моргаю свободным контактом. Когда 2 искры, он не моргает.
Исходная версия cvs-255, :
Да.
Мой алгоритм таков:
есть 3 состояния:
0) idle
1) ждем указанное время. Когда дождались, включаем ток через катушку, загружаем время работы катушки в таймер и переходим в состояние 2
2) ждем. когда время истекло, выключаем катушку. В этот момент проскакивает искра. Переходим в состояние 0.
Также на каждом срабатывании таймера мы увеличиваем на 1 счетчик времени.
Есть датчик. Он срабатывает в НМТ. Когда он срабатывает, мы запоминаем счетчик времени, делим его пополам, чтобы найти время до ВМТ. И счетчик сбрасываем в 0. Т.о. мы меряем период, и поделив его, получаем полпериода.
Затем полпериода умножаем на число (256-УОЗ)/256, где УОЗ меняется от 0 до 255 - 0 дает зажигание в ВМТ, 255 в НМТ.
Из полученной величины вычитаем время, необходимео чтобы катушка набрала ток. И эту величину записываем в таймер. И переходим в состояние 1.
Баг же заключается в том, что иногда проскакивает 2 искры. При этом это не помеха от первой искры, которая бы перезагрузила МК. В этом я убедился, когда в самом начале инициализации моргаю свободным контактом. Когда 2 искры, он не моргает.