Генератор пачки импульсов

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Аватара пользователя
Rovki
Полковник
Сообщения: 4495
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 238
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Генератор пачки импульсов

#1

Сообщение Rovki » 01.08.2017{, 15:26}

Уважаемые знатоки СИ ,нужен блок пользователя генератора пачки импульсов .ВХОДА - 1,Пуск(по прерыванию) 2- количество импульсов ,выход1- импульсы .Период импульсов 4мкс (можно сделать отдельный вход для задания периода ).
Сделал проект с использованием программного генератора и счетчика - не успевает .На малых частотах(сигнал пуск)  работает ,на больших  (свыше 3 гц)  не успевает сформировать пачку .Сделайте пожалуйста ,отблагодарю чем могу   .
Нужно срочно -линия стоит ...
Вложения
5084308.jpg
Последний раз редактировалось Rovki 01.08.2017{, 15:38}, всего редактировалось 1 раз.
Электронщик до мозга костей и не только

Аватара пользователя
Rovki
Полковник
Сообщения: 4495
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 238
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Генератор пачки импульсов

#2

Сообщение Rovki » 01.08.2017{, 19:18}

Вот сын накидал код ,а как его вставить в пользовательский ???

//Макрос прерывания
void FCM_gen();

//Деклорация переменных
#define FCV_FALSE (0)
#define FCV_TRUE (1)
volatile MX_UINT32 FCV_ZAD;
volatile MX_UINT32 FCV_SHAG;
volatile MX_BOOL FCV_START;

void FCM_gen()
{

//Проверяем пин D2 на низкий фронт по срабатыванию прерывания (Защита от помех)
DDRD = DDRD & 0xFB;
FCV_START = ((PIND & 0x04) == 0x04);

//Если фронт низкий - обрабатываем прерывание
if (FCV_START == 0)
{

//Цикл
while (1)
{

//Если кол-во генерируемых импульсов(помещается в переменную "imp" меньше заданного кол-ва в переменной "zad"
if (FCV_SHAG interrupt has previously been enabled, so the macro may never get called.
#endif
Электронщик до мозга костей и не только

Аватара пользователя
Rovki
Полковник
Сообщения: 4495
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 238
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Генератор пачки импульсов

#3

Сообщение Rovki » 01.08.2017{, 19:55}

Почитал как создавать пользовательский блок ,нашел куда вставлятькод ,но не понял как связать входа с переменными и про скобки ...что то кудато добавлять ,убирать ...
Электронщик до мозга костей и не только

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Генератор пачки импульсов

#4

Сообщение pan » 01.08.2017{, 20:53}

Rovki писал(а):как связать входа с переменными
вход это и есть переменная. добавляете вход , обзываете его переменной как в коде - она и будет подставляться. со входа. или имя входа вставляете вместо каких либо цифровых значений чтобы их можно было менять

Аватара пользователя
Rovki
Полковник
Сообщения: 4495
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 238
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Генератор пачки импульсов

#5

Сообщение Rovki » 01.08.2017{, 21:09}

А если в коде вход пин2 привязан уже к прерыванию ,то в схеме уже не нужно использовать , указывать как то пин2 ?
Электронщик до мозга костей и не только

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Генератор пачки импульсов

#6

Сообщение pan » 01.08.2017{, 21:35}

если пин жестко привязан то не надо с ним ни чего делать. на входы и в параметры назначаются переменные которые нужно менять

Аватара пользователя
Rovki
Полковник
Сообщения: 4495
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 238
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Генератор пачки импульсов

#7

Сообщение Rovki » 01.08.2017{, 22:11}

Ясно ,спасибо ,завтра код подправим и попробую .
Не удержался ,подправил - ошибки в типах данных 
Arduino: 1.8.1 (Windows 10), Плата:"Arduino Nano, ATmega328"

C:\Users\User\AppData\Local\Temp\flprog\pr8\pr8.ino: In function 'void setup()':

pr8:24: error: 'MX_UINT16' does not name a type

 volatile MX_UINT16 FCV_ZAD;

          ^

pr8:25: error: 'MX_UINT32' does not name a type

 volatile MX_UINT32 FCV_SHAG;

          ^

pr8:26: error: 'MX_BOOL' does not name a type

 volatile MX_BOOL FCV_START;

          ^

pr8:34: error: a function-definition is not allowed here before '{' token

 {

 ^

pr8:353: error: expected '}' at end of input

 }

 ^

exit status 1
'MX_UINT16' does not name a type

Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
"Показать подробный вывод во время компиляции"
Электронщик до мозга костей и не только

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Генератор пачки импульсов

#8

Сообщение pan » 01.08.2017{, 22:15}

Rovki писал(а):In function 'void setup()':
может что то не туда вставили. судя по коду там нет ни чего для setup

Аватара пользователя
Rovki
Полковник
Сообщения: 4495
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 238
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Генератор пачки импульсов

#9

Сообщение Rovki » 01.08.2017{, 22:36}

Я заменил лонг инт 32 на инт16 и еще исправил ошибку -было 1 в В0ВО ,стало 0 ВО.И заменил ВО (8 пин) на В5 (пин13)
Вложения
servo.flp
(102.55 КБ) 46 скачиваний
Последний раз редактировалось Rovki 01.08.2017{, 22:51}, всего редактировалось 1 раз.
Электронщик до мозга костей и не только

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Генератор пачки импульсов

#10

Сообщение pan » 02.08.2017{, 00:26}

я не знаток Си, но зачем вы запихали весь код в секцию setup .
 и на объявление переменных ругается -  volatile MX_UINT32 FCV_ZAD;
может я что то не понимаю, но вроде должно быть так- volatile uint32_t FCV_ZAD;
вот примерно раскидал код. не факт что правильно.
еще ругается на строчку   ISR(INT0_vect). не до конца понял что к чему.
Вложения
genservo-CODE-.ubi
(27.85 КБ) 37 скачиваний

Аватара пользователя
Rovki
Полковник
Сообщения: 4495
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 238
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Генератор пачки импульсов

#11

Сообщение Rovki » 02.08.2017{, 00:48}

Так а я вообще не знаток .Есть код на СИ ,нужно впихнуть в блок пользовательский .Вопрос -что куда и сколько впихивать ,в описании пока не понял ...Будем ждать Автора или спеца по СИ и FL/
Электронщик до мозга костей и не только

pan
Полковник
Сообщения: 2860
Зарегистрирован: 13.04.2017{, 11:57}
Репутация: 204
Имя: noname

Генератор пачки импульсов

#12

Сообщение pan » 02.08.2017{, 08:12}

Rovki писал(а):Есть код на СИ
он даже в чистом виде не компилируется в ide, поэтому и блоке работать не будет.
в любом случае надо код править.
Последний раз редактировалось pan 02.08.2017{, 08:14}, всего редактировалось 1 раз.

Аватара пользователя
Rovki
Полковник
Сообщения: 4495
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 238
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Генератор пачки импульсов

#13

Сообщение Rovki » 02.08.2017{, 20:58}

Добил схему ,на столе работает ,завтра буду серву крутить .
пин 2- вход с датчика -по нему отрабатывается прерывание и формируется пачка импульсов 
вход блока - задание количества импульсов по модбасу  устройство 1,регистр0 
пин13 выход импульсов
4 -rx
5- tx
Вложения
new_v3.ino
(8.96 КБ) 44 скачивания
Электронщик до мозга костей и не только

Аватара пользователя
Rovki
Полковник
Сообщения: 4495
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 238
Откуда: Чехов
Имя: Анатолий
Контактная информация:

Генератор пачки импульсов

#14

Сообщение Rovki » 03.08.2017{, 16:20}

Сегодня тестировал на железе управление серводрайвером в условиях реальных помех - резюме без оптопар ловить нечего ,а точнее все помехи ваши ,а с ними все гуд.
Электронщик до мозга костей и не только

Ответить

Вернуться в «Спросить у знатоков»