Измерение длительности импульса Ардуино Mega2560+Flowcode v5
Добавлено: Ср июн 13, 2018 19:30:30
Доброго времени. Стал недавно осваивать МК, используя данную программу и взял, в качестве платы Ардуино. Всё шло, можно сказать отлично, пока в большой программе( по сути первой
) не потребовалось измерить длительность интервала времени с длительностью от 1,33сек до 2сек. Обычный частотомер - пошёл(включая Протеус) - без заминок и вопросов. Чем только не пытался заполнить период: внутренним таймером и внешними прерываниями по INT....Результат выводил( для уменьшения действий преобразования, в <числе импульсов заполнения>).Результат был абсолютно неадекватен(непропорционален) длительности периода относительно длительности заполнения. Потом взял за основу вариант с YT(Андрей ник RADIOSOFT урок №24 )....Период задаётся "0-1 на выводе ПОРТа", соответственно идёт подсчёт времени "единичного" интервала времени на выводе. До, этого, сам делал выделение периода по прерыванию INT( в макросе суммирование переменной до 2 -> выход из бесконечного цикла суммирования эталонных импульсов заполнения). Получались "левые" цифры числа заполняющих импульсов....
Ну, и во варианте из урока YT. При периоде подаваемого импульса в 1,81сек, имеем правильный результат 1/2 = 0,905сек и так вплоть до периода импульса в 1,5сек, где ПЕРВОЕ выводимое значение 0,749сек(верно), а все последующие = 0,691сек. При 1,33сек первое значение 0,664сек(верно), а дальше 0,521сек...и самое наглядное при 1сек периода: Первое показание 0,499сек, а потом 0,191сек!!!??? Математические действия в программе не вносят данную ошибку, да и частота эталонных импульсов - тоже...При задании максимальной частоты импульсов таймера....Протеус( комп) вообще может "встать"...
Поэтому, в чём проблема и есть ли она ПРИНЦИПИАЛЬНО в программе-коде или только в симуляции - не знаю, а хотелось бы удостовериться в работе в Протеусе, такой, по сути, элементарной программы. Частотомер, по крайней мере, вплоть до 20КГц - работает чётко. Может у кого-то, вообще заработает в том виде, как есть, тогда - ясно, что не работает симуляция. Если, кто подскажет - буду рад
Файлы в архиве.
Ну, и во варианте из урока YT. При периоде подаваемого импульса в 1,81сек, имеем правильный результат 1/2 = 0,905сек и так вплоть до периода импульса в 1,5сек, где ПЕРВОЕ выводимое значение 0,749сек(верно), а все последующие = 0,691сек. При 1,33сек первое значение 0,664сек(верно), а дальше 0,521сек...и самое наглядное при 1сек периода: Первое показание 0,499сек, а потом 0,191сек!!!??? Математические действия в программе не вносят данную ошибку, да и частота эталонных импульсов - тоже...При задании максимальной частоты импульсов таймера....Протеус( комп) вообще может "встать"...
Поэтому, в чём проблема и есть ли она ПРИНЦИПИАЛЬНО в программе-коде или только в симуляции - не знаю, а хотелось бы удостовериться в работе в Протеусе, такой, по сути, элементарной программы. Частотомер, по крайней мере, вплоть до 20КГц - работает чётко. Может у кого-то, вообще заработает в том виде, как есть, тогда - ясно, что не работает симуляция. Если, кто подскажет - буду рад
Файлы в архиве.