Помогите с ШИМом.
- Войдите на сайт для отправки комментариев
Пнд, 11/03/2019 - 23:55
Здравствуйте. Я начинающий ардуинщик. Помогите разобраться: нужно на форсунку подать импульс длительностью 2000мс. Управление минусом. Сам же этот импульс выглядит как меандр прямоугольной формы: 5 мс. Всего 200 импульсов низкого уровня и 200 высокого. Думаю , что цикл надо организовать, но не въеду с чего начать и чем закончить. Пните в нужном направлении. Фото сюда не удалось скинуть.
Начните с изучения любой несложной книжки по программированию, хоть вот этой, а закончите написанием обычного блинка с периодом 10мс на 200 блинков - это и будет то, что Вам нужно.
А вот мне не понятно:
- Что такое "импульс низкого уровня"
- При чем здесь ШИМ?
А фраза "меандр прямоугольной формы" звучит примерно как "окружность круглой формы"
- При чем здесь ШИМ?
да ладно, чего зря придираться. То что описал ТС - есть ШИМ с частотой 100 Гц и скважностью 50% :)
Ну конечно придраться не к чему.
Меандр прямоугольной формы 5 мс длительностью 2000 мс. Чего ж тут неясного.
Берём переменку 50 герц, пускаем через диодный мост - получаем 100 герц, далее триггер шмита с формирователем в 2 секунды. Ардуина не нужна.
Не . Так сложно. Два 555 таймера- и можно регулировать и частоту, и длительность.
пинаю, пост 1 и 2 этого топика
Не . Так сложно. Два 555 таймера- и можно регулировать и частоту, и длительность.
а на#рена два?
А как же 2 секунды?
так все равно длительность подбирать RC цепочкой, хватит и одной 555, еще один кондер после зарядки 2сек, тормозит работу.
А как же 2 секунды?
На каждую секунду своя 555-ая? :)
Может так, если я правильно понял ТС?
Если полярность обратная сменить HIGH на LOW
Может так, если я правильно понял ТС?
Если полярность обратная сменить HIGH на LOW
Благодарю. Сегодня вечером буду пробовать.
Не . Так сложно. Два 555 таймера- и можно регулировать и частоту, и длительность.
ребята, у нас тут программисткий форум :) Делать на аппаратных таймерах то, что можно сделать ногодрыгом - это ОФФТОП для этого сайта :)
Может так, если я правильно понял ТС?
Если полярность обратная сменить HIGH на LOW
tone(pin, 100, 2000); - не?
ребята, у нас тут программисткий форум :) Делать на аппаратных таймерах то, что можно сделать ногодрыгом - это ОФФТОП для этого сайта :)
С одной стороны, согласен, с другой, сам иногда советую, не маяться х-ей, а просто поставить выключатель и т.п.. В данной задаче, в ардуине, есть хоть какое-то разумное зерно. ИМХО.
ребята, у нас тут программисткий форум :) Делать на аппаратных таймерах то, что можно сделать ногодрыгом - это ОФФТОП для этого сайта :)
Во! Пральна! Родная душа нашлась! А то тут, блин, некоторые наезжают, что я мол интеграл программно считаю, вместо того, чтобы интегрирующую цепочку ставить :(
Таки уговорили- давайте поногодрыгаем.
Может так, если я правильно понял ТС?
Если полярность обратная сменить HIGH на LOW
tone(pin, 100, 2000); - не?
ТС попросил - Думаю , что цикл надо организовать
Может так, если я правильно понял ТС?
Если полярность обратная сменить HIGH на LOW
tone(pin, 100, 2000); - не?
ТС попросил - Думаю , что цикл надо организовать
дык... в tone.cpp этих циклов есть, уже организованных.
Может так, если я правильно понял ТС?
Если полярность обратная сменить HIGH на LOW
tone(pin, 100, 2000); - не?
ТС попросил - Думаю , что цикл надо организовать
дык... в tone.cpp этих циклов есть, уже организованных.
Так оно может и есть, только ТС на форуме с 2017 года и никак не одолеет простейшие скетчи, надо помочь разобраться )))
Здравствуйте. Спасибо всем за посказки и что напомнили про tone. Сейчас собрал схему на светодиоде для наглядности. При нажатии кнопки и ее отпускании светодиод горит две секунды. Но если кнопку держать нажатой, то
сигнал постоянно идет(шим) и сетодиод горит. Как сделать, что бы время нажатия кнопки не влияло на продолжительность сигнала?
и запускайте таймер по нужному переходу или ставьте флаг
и запускайте таймер по нужному переходу или ставьте флаг
Видно же, что с логикой у ТС совсем не очень, надо пнуть в нужном направлении, так как следующим шагом будет вопрос, что опять работает наоборот )))
tone() неблокирующий. Если после него сразу поставить digitalWrite(), то фокус неполучится.
tone() неблокирующий. Если после него сразу поставить digitalWrite(), то фокус неполучится.
кошмарр )))
ну не вводить жеж отслеживание через миллис, тогда уж лучше через цикл или добавить брокирующий delay(2000)
ЗЫ я поправил выше код, благодарю!
Через цикл, код на 600 байт меньше )))
tone() неблокирующий. Если после него сразу поставить digitalWrite(), то фокус неполучится.
Понятия не имею, что в нём хорошего или плохого. В данной ситуации вообще по-барабану какой он.
Я написал про то, что конструкция tone(pin, freq, duration) не будет вести себя ожидаемо, если сразу после неё вызвать digitalWrite(pin), а не про циклы.
Я написал про то, что конструкция tone(pin, freq, duration) не будет вести себя ожидаемо, если сразу после неё вызвать digitalWrite(pin), а не про циклы.
и я поправил код, так как понятия не имел о функции tone(), а в данном случае блокирующие или неблокирующие функции ТС безразлично, так как ничего другого, кроме выдать пачку импульсов при нажатии кнопки не требуется, как говорит главный по целебату в России, будет другая неделя будут другие новости )))
Я бы вообще этот луп в четыре блокирующих строчки написал. Если, конечно, tone() канает.
Если, конечно, tone() канает.
а вот в этом я не уверен ))) поэтому и привёл пример с циклом, там количество импульсов можно скорректировать
и запускайте таймер по нужному переходу или ставьте флаг
Видно же, что с логикой у ТС совсем не очень, надо пнуть в нужном направлении, так как следующим шагом будет вопрос, что опять работает наоборот )))
ua6em, большое спасибо ! Вот этот скетч работает. Я конечно же не написал бы его. Разбирался как он работает долго. )Теорию буду читать. А второй не работает. Ну и ладно.
ua6em, большое спасибо ! Вот этот скетч работает. Я конечно же не написал бы его. Разбирался как он работает долго. )Теорию буду читать. А второй не работает. Ну и ладно.
да нет тут никакой теории, по шагам:
1. назначаем пин на выход ШИМ
2. назначаем пин на кнопку, включаем подтягивающий резистор, на пине будет 1, пока кнопка не притянута к земле.
в теле программы:
1.Читаем состояние кнопки и флага, что нажатия кнопки еще не было, если есть нажатие то
2. выставляем флаг, что было нажатие кнопки, шимим 2 секунды, так как процедура неблокирующая (скажите Садману спасибо, не знал) ждём эти 2 секунды, для определённости состояния переводим пин ШИМ в выключено.
3. Читаем состояние кнопки, если отжата и был выставлен флаг нажатия кнопки, сбрасываем флаг
Далее крутимся в цикле ожидая следующего нажатия кнопки, то есть, второй и последующие разы запустить процедуру для форсунки, надо сначала отжать кнопку, а потом снова нажать
)))