Прямоугольник низкой частоты и финкция tone()
- Войдите на сайт для отправки комментариев
Ср, 10/08/2016 - 10:22
Приветствую!
Нужна помощь...
Требуется генерация прямоугольного сигнала (меандр) низкой частоты (в диапазоне 5-10 герц).
Функция tone() работает только до 25-30 Гц, ниже не генерирует.
Подскажите код который сможет генерировать меандр низкой частоты.
Спасибо.
Пример Blink из поставки IDE генерирует меандр с частотой 0,5 герц. Переделать на нужную Вам частоту сами сумеете?
Пример Blink из поставки IDE генерирует меандр с частотой 0,5 герц. Переделать на нужную Вам частоту сами сумеете?
Конечно сумею...
но используемый в Blink оператор delay() останавливает выполнение программы, меня это не устраивает.
Необходимо решение с программироанием таймеров.
https://arduino-info.wikispaces.com/Timers-Arduino
но используемый в Blink оператор delay() останавливает выполнение программы, меня это не устраивает.
http://arduino.ru/tutorials/BlinkWithoutDelay
http://robocraft.ru/blog/arduino/385.html
но используемый в Blink оператор delay() останавливает выполнение программы, меня это не устраивает.
Кто Вам мешает написать блинк без delay? Пример прямо на главной странице этого сайта.
Необходимо решение с программироанием таймеров.
Ну, надо было так сразу и говорить, а то попросили код - Вам дали.
Если уж Вы решили, что Вам нужно связываться с таймерами, так определитесь дальше - Вас интересует таймер в нормальном режиме (работать по переполнению) или таймер в режиме СТС - там можно вообще один раз его сконфигурить и больше ни строчки Вашего кода не исполняется. Вот здесь есть пример на частоты от 0,12Гц и калькулятор частоты.
negavoid, проще в СТС, там не нужен обработчик прерывания.
но используемый в Blink оператор delay() останавливает выполнение программы, меня это не устраивает.
Кто Вам мешает написать блинк без delay? Пример прямо на главной странице этого сайта.
Необходимо решение с программироанием таймеров.
Ну, надо было так сразу и говорить, а то попросили код - Вам дали.
Если уж Вы решили, что Вам нужно связываться с таймерами, так определитесь дальше - Вас интересует таймер в нормальном режиме (работать по переполнению) или таймер в режиме СТС - там можно вообще один раз его сконфигурить и больше ни строчки Вашего кода не исполняется. Вот здесь есть пример на частоты от 0,12Гц и калькулятор частоты.
Спасибо, это то, что требуется.
Но, нужен не калькулятор.
Нужен код или библиотека, где можно задать частоту в качестве параметра. Типа LongTime(pin,10)
Так там же есть примеры кода с разными частотами, ну и сделайте по образу и подобию, как Вам надо. Если же Вам нужно, чтобы кто-то для Вас сделал, так обратитесь в профильный раздел, там сделают.
Так там же есть примеры кода с разными частотами, ну и сделайте по образу и подобию, как Вам надо. Если же Вам нужно, чтобы кто-то для Вас сделал, так обратитесь в профильный раздел, там сделают.
Спасибо. Ваш ответ мне понятен. Вы не знаете такой библиотеки.
Будем искать.
Если кто-то поделится библиотекой, в которой есть функция генерирования меандра заданой частоты без использования delay(), посредством программирования таймеров, напишите, пожалуйста, в этом топике.
Подобная искомой, функция tone(pin, frequency, duration) работает до частоты 31 Гц (https://www.arduino.cc/en/Reference/Tone) на частотах ниже - не работает.
VladimrYA, гуглить не пробовали?
Вы не знаете такой библиотеки.
Абсолютно точно! Не знаю. И, собственно, не нуждаюсь в таких знаниях. Да и Вы не особо нуждаетесь. На том примере, что я Вам дал, нужная Вам функциональность пишется на 3-5 минут - это значительно быстрее. чем искать и ставить библиотеку. Сделайте сами и не парьтесь!
Не нравится delay() пользуйтесь antidelay()
Работает до 1кГц. Скорее меньше.
Не нравится delay() пользуйтесь antidelay()
Работает до 1кГц. Скорее меньше.
Спасибо! Улыбнуло ))
Вы или меня прикалываете, либо не поняли вопроса...
Генерация импульсов должна быть фоновой, как у функции tone().
Ну шаг в 0.1 мксек вы позже сказали. А функция tone() делается аппаратным, а не программным путем. Я так в процессор не лезу. И наконец, мне всегда нравится постановка задачи задающими вопросы на форуме. Часть напишут, часть подумают. Вот и вытягивай условия задачи.
Ну шаг в 0.1 мксек вы позже сказали. А функция tone() делается аппаратным, а не программным путем. Я так в процессор не лезу. И наконец, мне всегда нравится постановка задачи задающими вопросы на форуме. Часть напишут, часть подумают. Вот и вытягивай условия задачи.
Простите, где я писал, а вы прочитали про шаг в 0.1 мксек?
Я ищу функцию подобную tone() работующую на частоте НИЖЕ 31 Гц.
Пожалуста, прочитайте топик.
Вам нужно что бы процессор генерировал частоту и при этом работала программа?
VladimrYA, а вы нажимали на ссылку в #10 ? первая же строчка в поиске ведёт к нужной ВАМ библиотеке.
dimax, спасибо.
Извините, ваш пост игнорировал, поскольку конечно же искал и "гуглил". PWM считал другой задачей, как поднять несущую частоту ШИМ...
Постараюсь разобраться, хотя сразу говорят о нижней частоте 31 герц на 8 битных таймерах, как минимально возможных. Видимо ограничения функции tone() имеет эту природу.
dimax ЕвгенийП
я искренне поражаюсь вашему терпению, ну, контингент форума обязывает :)
ЕвгенийП читал ваши статьи ещё до приобретения первой ардуины и задолго до регистрации на форуме, большое спасибо, парочку вещей разложили в моей голове в нужные места по полочкам. Да, через СТС и правда удобнее.
Спасибо всем, кто давал добрые советы )))
Задача:
сделать меандр, низкой частоты (5-10 Гц) используя таймеры и не пользуясь функцией delay() и тем более antidelay(), по понятным соображениям.
Искалась библиотека или функция (код), которые могут это делать. Штатная функция tone() использует 8 битный таймер и имеет ограничение частоты генерации снизу в 31 Гц.
Было предложено разное ((( , в том числе калькулятор расчёта делителей для таймеров, алгоритм выбора таймеров с наименьшей погрешностью генерируемой частоты, библиотека PWM (ШИМ) - видимо всё это работает, не проверялось.
Решение:
скачиваем библиотеку TimerOne.h (16 битный таймер у Arduino Uno) и устанавливаем в системе.
В примере ISRBlink$ генерация меандра 10 Гц: "Timer1.initialize(100000)" в милисекундах. Проверено = работает.
Ура!
Но самому написать было бы полезнее, как ни крути :-)
Ура!
Но самому написать было бы полезнее, как ни крути :-)
ЕвгенийП, я всем уже сказал спасибо в топике #20.
Вам персональное спасибо за топики #1, #5, #8, #11.
Особенно за первый ))
Вот вариант. Но лучше эту программу загружать на плату и смотреть. Потом подгружать по частям код вашей программы.
Да... терпение потрясающее. Шляпу снимаю с нескрываемым уважением.
Сам бы дальше 3-4 поста это "вы что тут все офигели быстро давайте мне сюда готовое а не фуфло что вы тут обычно кидаете я уже третий раз жду" вряд ли бы стерпел)
Уж простите за некропост))