FLProg
Вход на сайт
Логин:
Пароль:
Поиск
...
Статистика
Пятница, 15.12.2017, 20:43
Приветствую Вас Гость | RSS
Главная | Регистрация | Вход

Поиск по сайту


Форум
[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
Страница 1 из 11
Модератор форума: support, Сергей, Олег, Anydy 
Форум » Основной » Спросить у знатоков » Генератор пачки импульсов (Управление серводрайвером)
Генератор пачки импульсов
Rovki Дата: Вторник, 01.08.2017, 15:26 | Сообщение # 1
Генерал-полковник
Группа: Модераторы
Сообщений: 1379
Награды: 29
Репутация: 13
Статус: Offline
Уважаемые знатоки СИ ,нужен блок пользователя генератора пачки импульсов .ВХОДА - 1,Пуск(по прерыванию) 2- количество импульсов ,выход1- импульсы .Период импульсов 4мкс (можно сделать отдельный вход для задания периода ).
Сделал проект с использованием программного генератора и счетчика - не успевает .На малых частотах(сигнал пуск)  работает ,на больших  (свыше 3 гц)  не успевает сформировать пачку .Сделайте пожалуйста ,отблагодарю чем могу  smile .
Нужно срочно -линия стоит ...
Прикрепления: 5084308.jpg(192Kb)


Электронщик до мозга костей и не только

Сообщение отредактировал Rovki - Вторник, 01.08.2017, 15:38
 
Rovki Дата: Вторник, 01.08.2017, 19:18 | Сообщение # 2
Генерал-полковник
Группа: Модераторы
Сообщений: 1379
Награды: 29
Репутация: 13
Статус: Offline
Вот сын накидал код ,а как его вставить в пользовательский ???

//Макрос прерывания
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 < FCV_ZAD)
{

// 1 в B0
DDRB = DDRB | 0x01;
if ((1))
PORTB = (PORTB & 0xFE) | 0x01;
else
PORTB = PORTB & 0xFE;

//Задержка 3 микросекунды
delay_us(3);

//1 в B0B0
DDRB = DDRB | 0x01;
if ((0))
PORTB = (PORTB & 0xFE) | 0x01;
else
PORTB = PORTB & 0xFE;

//Задержка 3 микросекунды
delay_ms(3);

//с каждым периодом прибавлеям в переменной "shag" 1
//  shag = shag + 1
FCV_SHAG = FCV_SHAG + 1;

} else {

//Если кол-во генерируемых импульсов достигло кол-ва заданных - выходим из цикла и ждем следующего прерывания
goto FCC_gen_A;

}

}


FCC_gen_A:
;

// } else {

}

}

int main()
{
//Initialization
MCUSR=0x00;

//Interrupt initialization code

//включаем подтягивающий резистор на ноге D2 (прерывания)
DDRD = DDRD | 0x04;
if ((1))
PORTD = (PORTD & 0xFB) | 0x04;
else
PORTD = PORTD & 0xFB;


EICRA |= (1 << ISC01);
EICRA &= ~(1 << ISC00);
sei();
EIMSK |= (1 << INT0);

//Пустой цикл (ожидание прерываний)
while (1)
{

}

mainendloop: goto mainendloop;
}

//Handler code for [INT0]
#ifndef MX_INT0_HANDLER
#define MX_INT0_HANDLER
ISR(INT0_vect)
{
FCM_gen();
}
#else
#warning The interrupt has previously been enabled, so the macro may never get called.
#endif


Электронщик до мозга костей и не только
 
Rovki Дата: Вторник, 01.08.2017, 19:55 | Сообщение # 3
Генерал-полковник
Группа: Модераторы
Сообщений: 1379
Награды: 29
Репутация: 13
Статус: Offline
Почитал как создавать пользовательский блок ,нашел куда вставлятькод ,но не понял как связать входа с переменными и про скобки ...что то кудато добавлять ,убирать ...

Электронщик до мозга костей и не только
 
pan Дата: Вторник, 01.08.2017, 20:53 | Сообщение # 4
Генерал-полковник
Группа: Проверенные
Сообщений: 1263
Награды: 41
Репутация: 38
Статус: Online
Цитата Rovki ()
как связать входа с переменными
вход это и есть переменная. добавляете вход , обзываете его переменной как в коде - она и будет подставляться. со входа. или имя входа вставляете вместо каких либо цифровых значений чтобы их можно было менять
 
Rovki Дата: Вторник, 01.08.2017, 21:09 | Сообщение # 5
Генерал-полковник
Группа: Модераторы
Сообщений: 1379
Награды: 29
Репутация: 13
Статус: Offline
А если в коде вход пин2 привязан уже к прерыванию ,то в схеме уже не нужно использовать , указывать как то пин2 ?

Электронщик до мозга костей и не только
 
pan Дата: Вторник, 01.08.2017, 21:35 | Сообщение # 6
Генерал-полковник
Группа: Проверенные
Сообщений: 1263
Награды: 41
Репутация: 38
Статус: Online
если пин жестко привязан то не надо с ним ни чего делать. на входы и в параметры назначаются переменные которые нужно менять
 
Rovki Дата: Вторник, 01.08.2017, 22:11 | Сообщение # 7
Генерал-полковник
Группа: Модераторы
Сообщений: 1379
Награды: 29
Репутация: 13
Статус: Offline
Ясно ,спасибо ,завтра код подправим и попробую .
Не удержался ,подправил - ошибки в типах данных 
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 Дата: Вторник, 01.08.2017, 22:15 | Сообщение # 8
Генерал-полковник
Группа: Проверенные
Сообщений: 1263
Награды: 41
Репутация: 38
Статус: Online
Цитата Rovki ()
In function 'void setup()':
может что то не туда вставили. судя по коду там нет ни чего для setup
 
Rovki Дата: Вторник, 01.08.2017, 22:36 | Сообщение # 9
Генерал-полковник
Группа: Модераторы
Сообщений: 1379
Награды: 29
Репутация: 13
Статус: Offline
Я заменил лонг инт 32 на инт16 и еще исправил ошибку -было 1 в В0ВО ,стало 0 ВО.И заменил ВО (8 пин) на В5 (пин13)
Прикрепления: servo.flp(103Kb)


Электронщик до мозга костей и не только

Сообщение отредактировал Rovki - Вторник, 01.08.2017, 22:51
 
pan Дата: Среда, 02.08.2017, 00:26 | Сообщение # 10
Генерал-полковник
Группа: Проверенные
Сообщений: 1263
Награды: 41
Репутация: 38
Статус: Online
я не знаток Си, но зачем вы запихали весь код в секцию setup .
 и на объявление переменных ругается -  volatile MX_UINT32 FCV_ZAD;
может я что то не понимаю, но вроде должно быть так- volatile uint32_t FCV_ZAD;
вот примерно раскидал код. не факт что правильно.
еще ругается на строчку   ISR(INT0_vect). не до конца понял что к чему.
Прикрепления: genservo-CODE-.ubi(28Kb)
 
Rovki Дата: Среда, 02.08.2017, 00:48 | Сообщение # 11
Генерал-полковник
Группа: Модераторы
Сообщений: 1379
Награды: 29
Репутация: 13
Статус: Offline
Так а я вообще не знаток .Есть код на СИ ,нужно впихнуть в блок пользовательский .Вопрос -что куда и сколько впихивать ,в описании пока не понял ...Будем ждать Автора или спеца по СИ и FL/

Электронщик до мозга костей и не только
 
pan Дата: Среда, 02.08.2017, 08:12 | Сообщение # 12
Генерал-полковник
Группа: Проверенные
Сообщений: 1263
Награды: 41
Репутация: 38
Статус: Online
Цитата Rovki ()
Есть код на СИ
он даже в чистом виде не компилируется в ide, поэтому и блоке работать не будет.
в любом случае надо код править.


Сообщение отредактировал pan - Среда, 02.08.2017, 08:14
 
Rovki Дата: Среда, 02.08.2017, 20:58 | Сообщение # 13
Генерал-полковник
Группа: Модераторы
Сообщений: 1379
Награды: 29
Репутация: 13
Статус: Offline
Добил схему ,на столе работает ,завтра буду серву крутить .
пин 2- вход с датчика -по нему отрабатывается прерывание и формируется пачка импульсов 
вход блока - задание количества импульсов по модбасу  устройство 1,регистр0 
пин13 выход импульсов
4 -rx
5- tx
Прикрепления: new_v3.ino(9Kb)


Электронщик до мозга костей и не только
 
Rovki Дата: Четверг, 03.08.2017, 16:20 | Сообщение # 14
Генерал-полковник
Группа: Модераторы
Сообщений: 1379
Награды: 29
Репутация: 13
Статус: Offline
Сегодня тестировал на железе управление серводрайвером в условиях реальных помех - резюме без оптопар ловить нечего ,а точнее все помехи ваши ,а с ними все гуд.

Электронщик до мозга костей и не только
 
Форум » Основной » Спросить у знатоков » Генератор пачки импульсов (Управление серводрайвером)
Страница 1 из 11
Поиск:

FLProg © 2017
Яндекс.Метрика