Приветствую всех! Очередная проблемма из серии "Ща соберу на коленке" превратилась в "А как это его..." Итак, опишу проблемму: Для тестирования Устройства необходимо подавать импульсы, и простой ШИМ-генератор на Ардуино справлялся с поставленной задачей. Но вскоре возникла трудность, поскольку скваженность импульса идет в процентах, то и его длительность (при снижении частоты растет). Проще говоря нужны, к примеру, импульсы по 5мск, но с разной частотой. Видемо пришло время вплотную изучать таймеры и прочие... Конечно, если подобный скетч уже был написан- будет здорово, но я буду благодарен и мощному пинку в нужном направлении ps С разными millis и micros уже наигрался, ничего путнего не выходит.
Длина импульса постоянна 5мск (0,000005с), частота меняется в каком-то диапазоне, который поддерживает контролер. Интересно, какие частоты Вас интересуют? Если правильно понял, и у Вас UNO, Nano, Mega (Arduino на базе AVR), то Вас интересует таймер 1, режим CTC top = ICR1 (сброс при совпадении с top = ICR1). Смена частоты ICR1, длина OCR1A, OCR1B соответственно для канала A и B. Ваша задача похожа на задачу формирования PDM (там только частота сигнала одинаковая, а длина разная). Вот пример таймер 1, режим CTC top = ICR1 (PDM, частота 20Khz, длина 0,6ms) - https://github.com/SimpleRov/AVR/blob/master/Servo/Atmega328pOnT1/Atmega328pOnT1.ino. Что почитать о таймерах, в сети написано не мало, тут, что легче будет читаться. В идеале pdf от соответствующего чипа, или общее описание таймеров. К примеру ссылки, на мой вкус, базовые знания http://chipenable.ru/index.php/programming-avr/item/171-avr-timer-t0-ch1.html, http://chipenable.ru/index.php/prog...vr-taymer-schetchik-t0-rezhim-normal-ch2.html, http://chipenable.ru/index.php/prog...s-avr-taymer-schetchik-t0-rezhim-ctc-ch2.html и описание регистров на рус. под Вашу задачу - http://avrprog.blogspot.com.by/2013/03/t1-16.html.
Это код, первого таймера в режиме CTC top = ICR1, о котором говорил, он почти идентичен. Но было бы не плохо, если бы Вы понимали как выставляется диапазон, частоты, шаг и т.д. К примеру длительность импульса 5мкс, нам подойдет предделитель 1 и 8 (или внешний источник тактирования, он нем не говорим). В первом случае (предделитель 1) мы получаем шаг 0,0625 мкс, как в примере на arduino.ru (1<<CS10)), в таком случае точные 5мкс равны 80 тикам. С предделителем 8, шаг 0,5 мкс, интервал 5мкс равен 10 тикам. То есть OCR1A, OCR1B соответственно для канала A и B, будет всегда равно 80 или 10 в зависимости от предделителя. С предделителем 1 минимальная частота около 250Hz, c 8 около 33Hz и т.д., максимальная и так понятна длина импульса + промежуток между.
Ребята, у меня такая проблема. Нужно сделать генератор прямоугольных импульсов с регулируемой частотой от 1 до 300 (или более) Гц и скважностью (длительностью импульса). Чтобы частоту и скважность задавать через сириал. Мои знания в программировании слабые для этого. Может у кого есть готовый скейтч или сылка на пример?
Готового кода у меня нет, как и ссылок. Если надумаете сделать сами, пишите в этой теме, подскажу (безвозмездно - то есть даром).
http://arduino.ru/forum/proekty/generator-s-reguliruemoei-chastotoi-na-arduino?page=1 посмотрите здесь. Регулируется частота и скважность импульсов