генератор импульсов

KamovEugeniy
Offline
Зарегистрирован: 24.02.2014

Для тестирования нужно генерировать импульсы (ширина не важна, в пределах 3-5 мкс ) с точным интервалом следования. Интервал между импульсами разный для каждого следующего  импульса и заранее определен в массиве.

Пожалуйста подскажите общий метод реализации . Пока предполагаю такой алгоритм:

1 Установить таймер-1  (для следующего  интервала) на прерывание-1.

2. Внутри  прерывания-1 установить выход генератора в HIGH и  установить таймер-1 для следующего интервала  по прерыванию-1, установить таймер-2 для длительности 3-5 мкс  на прерывание-2.

3. в прерывании-2 установить выход генератора в LOW, перейти к строке 2

Вижу недостаток - пока внутри прерывания-1 устанавливаю выход генератора в HIGH время идет, и за время установки таймера-1 (для следующего  интервала)  опять идет время. Как бы  компенировать такие  задержки во времени?

 

 

 

KamovEugeniy
Offline
Зарегистрирован: 24.02.2014

Посоветуйте пожалуйства метод работы генератора такой, чтобы переключение выхода в 0 или 1 отнимало как можно меньше процессорного времени.

Как этого достичь?

 

 

Garry
Garry аватар
Offline
Зарегистрирован: 07.04.2012

KamovEugeniy пишет:

Посоветуйте пожалуйства метод работы генератора такой, чтобы переключение выхода в 0 или 1 отнимало как можно меньше процессорного времени.

Как этого достичь?

Надо работать с портами GPIO MCU, в Инете часто втречал примеры работы.

Генератор1

 

Michal
Michal аватар
Offline
Зарегистрирован: 26.04.2013

задежки по времени можно банально подсчитать, посмотрев ассемблерный листинг программы. Время на выполнение команды ивестно, корректруем настройку таймера.

Dima_student
Offline
Зарегистрирован: 27.02.2014

Ребята, если кто может то перейдите пожалуйста сюда http://arduino.ru/forum/programmirovanie/rabota-s-multipleksorom

Зарание спасибо!

KamovEugeniy
Offline
Зарегистрирован: 24.02.2014

Michal пишет:
задержки по времени можно банально подсчитать, посмотрев ассемблерный листинг программы. Время на выполнение команды ивестно, корректруем настройку таймера.

1) как получить ассемблерный текст программы?

2) где взять таблицу длительности выполнения команд

3) как зависит длительность выполнения команды от частоты процессора (  обычного 16 МГц   и    DUE  )?

Garry
Garry аватар
Offline
Зарегистрирован: 07.04.2012

KamovEugeniy пишет:

Michal пишет:
задержки по времени можно банально подсчитать, посмотрев ассемблерный листинг программы. Время на выполнение команды ивестно, корректруем настройку таймера.

2) где взять таблицу длительности выполнения команд

3) как зависит длительность выполнения команды от частоты процессора (  обычного 16 МГц   и    DUE  )?

2) Ищи/смотри даташит на свой МК, там есть таблица команд, каждая команда выполняется за сколько-то тактов, время 1 такта = 1/частота МК (доли микросекунд получается).

3) смотри ответ пункта (2).

KamovEugeniy
Offline
Зарегистрирован: 24.02.2014

Garry пишет:
2) Ищи/смотри даташит на свой МК, там есть таблица команд, каждая команда выполняется за сколько-то тактов, время 1 такта = 1/частота МК (доли микросекунд получается).

3) смотри ответ пункта (2).

а с 1-ым оссемблирным пунктом как быть ?

pcdeath
Offline
Зарегистрирован: 03.03.2014

Вдогонку.

Есть задача генерировать импульсы с различной частотой на разных выводах Arduino Uno R3. При этом задержка ежду импульсами различных ног должна быть регуируемой.

Например, 10 Гц на выходе 3, 20 Гц на выходе 4 и 1280 Гц на выходе 5.

При это между пиком ноги 3 и одним из пиков ноги 4 должен быть интервал 1,56мс. Задержка 5 ноги не имеет значения.

tone () отметаем сразу, т.к.управляет только одним выходом в один момент времени.

beep () тоже не годится, т.к. управление частотой очень убогое.

Остаётся CTC, но все примеры, которые приведены для него - поочерёдное управление. Одновременного не удалось найти.

 

Возможен ли генератор на Uno с такими параметрами?

KamovEugeniy
Offline
Зарегистрирован: 24.02.2014

pcdeath пишет:
Возможен ли генератор на Uno с такими параметрами?

пожалуйста не засоряй мою тему, создай свою в нужном тебе разделе