ГЕНЕРАТОР В FLProg

Аватара пользователя
Alex54
Сержант
Сообщения: 281
Зарегистрирован: 06.09.2015{, 09:06}
Репутация: 1
Откуда: Москва

ГЕНЕРАТОР В FLProg

#1

Сообщение Alex54 » 18.09.2015{, 11:38}

2300328.jpg
3978264.jpg
3978264.jpg
3978264.jpg
3978264.jpg
Почему генератор в программе FLProg не выдает частоту больше 24кгц.

Работаю с моделью Nano 168.  Модель работает на частоте 87,974 гц.

Прилагаю скрин, программа написана для проверки модели в Proteuse не на FLProg.
1153649.jpg
Сейчас я приложу еще один скрин, генератора с частотой 87кгц (11.494мкс ) выведу эту длительность.
Но уже в программе FLProg.
Последний раз редактировалось Alex54 18.09.2015{, 12:38}, всего редактировалось 1 раз.
С Уважением Alex

Аватара пользователя
Alex54
Сержант
Сообщения: 281
Зарегистрирован: 06.09.2015{, 09:06}
Репутация: 1
Откуда: Москва

ГЕНЕРАТОР В FLProg

#2

Сообщение Alex54 » 29.10.2015{, 09:20}

Сергей Добрый День ! ! !

У меня сообщение было предыдущее. В нем ответов 0. Оно естественно отскочило что я его еле нашел.

Как стоит 50мкс, все мертво. Думал в последней версии исправлено. НЕТ.
Вложения
8317212.jpg
С Уважением Alex

Аватара пользователя
DerAlex
Лейтенант
Сообщения: 437
Зарегистрирован: 06.09.2015{, 08:39}
Репутация: 11
Откуда: Новосибирск

ГЕНЕРАТОР В FLProg

#3

Сообщение DerAlex » 29.10.2015{, 09:22}

А если одновременно использовать два генератора? Изменится период?
аврора

Аватара пользователя
Max
Лейтенант
Сообщения: 691
Зарегистрирован: 06.09.2015{, 13:12}
Репутация: 5
Откуда: Тюмень-Баку
Имя: Максим

ГЕНЕРАТОР В FLProg

#4

Сообщение Max » 29.10.2015{, 09:42}

Вопрос важный и интересный! Ждем ответа, или решения.

P.S. Может подправить размер изображений, уважаемый Alex54? А то, при входе в Вашу тему крышу сносит...

Аватара пользователя
Alex54
Сержант
Сообщения: 281
Зарегистрирован: 06.09.2015{, 09:06}
Репутация: 1
Откуда: Москва

ГЕНЕРАТОР В FLProg

#5

Сообщение Alex54 » 29.10.2015{, 10:27}

DerAlex писал(а):А если одновременно использовать два генератора? Изменится период?
Не понял, как два генератора ? Да тут еще указывается не период, а пол периода. Даже если ставить
несимметричный мульт. То при любой полож. длительности меньше 50мкс, он все равно выдает 50мкс.

Тут видимо в самих моделях надо просто убирать внутренние задержки. Или принцип построения
делать другой.

Max

В диташитах ( виртуальный ардуино) я дал ссылку на интересную прогу. Вы смотрели ее. Там есть в ней для вас модули.
Посмотрите. Я сам эту прогу установил. Устанавливается также как портативная FLProg. Только в ней
еще и легко печать сделать для периферии к нашим ардуинкам.
Последний раз редактировалось Alex54 29.10.2015{, 12:16}, всего редактировалось 1 раз.
С Уважением Alex

Аватара пользователя
DerAlex
Лейтенант
Сообщения: 437
Зарегистрирован: 06.09.2015{, 08:39}
Репутация: 11
Откуда: Новосибирск

ГЕНЕРАТОР В FLProg

#6

Сообщение DerAlex » 29.10.2015{, 12:30}

Использовать два генератора и выход каждого подать на свой пин ардуино.Какое влияние это окажет на увеличение периода .
аврора

Аватара пользователя
Alex54
Сержант
Сообщения: 281
Зарегистрирован: 06.09.2015{, 09:06}
Репутация: 1
Откуда: Москва

ГЕНЕРАТОР В FLProg

#7

Сообщение Alex54 » 29.10.2015{, 17:57}

DerAlex писал(а):Использовать два генератора и выход каждого подать на свой пин ардуино.Какое влияние это окажет на увеличение периода .
Попробую что вы предлагаете. Можно еще исключающим или сделать умножение на 2. Тут надо
смотреть а сколько сама логика пропустит.
Тут мне прислали ардуинку в Протэусе. Программа генератора. Программисту конечно не в FLProg
удалось получить 80кгц с хвостиком на ней. Пишет при желании можно и больше выжить.
С Уважением Alex

oren
Рядовой
Сообщения: 38
Зарегистрирован: 07.09.2015{, 21:02}
Репутация: 0

ГЕНЕРАТОР В FLProg

#8

Сообщение oren » 03.11.2015{, 11:06}

здравствуте  Alex
"Попробую что вы предлагаете. Можно еще исключающим или сделать умножение на 2"
но существует ли способ умножения частоты генератора, в FLProg есть только аналоговые умножители

Аватара пользователя
Alex54
Сержант
Сообщения: 281
Зарегистрирован: 06.09.2015{, 09:06}
Репутация: 1
Откуда: Москва

ГЕНЕРАТОР В FLProg

#9

Сообщение Alex54 » 03.11.2015{, 14:03}

oren

Cсуществуют конечно умножители частоты. В FLProg, не знаю. Ну даже если сделать удвоитель на
исключающим ИЛИ в программе, это не выход. Будет 50кгц. Полож. полупериоды будут короткие. Схемы ФАПЧ нет здесь. Типа CD4046. Так что пока думаю между делами как это реализовать в программе.
В задумке нужно сделать с 200кгц. Получить нужную линейку частот. Внутри ардуинки. Пока на дискретных элементах работает.
С Уважением Alex

gore-40
Рядовой
Сообщения: 29
Зарегистрирован: 04.10.2015{, 18:02}
Репутация: 0

ГЕНЕРАТОР В FLProg

#10

Сообщение gore-40 » 03.11.2015{, 21:06}

Alex54
Накидай в  FLProg  умножение частоты на 2, спасибо.

Аватара пользователя
Alex54
Сержант
Сообщения: 281
Зарегистрирован: 06.09.2015{, 09:06}
Репутация: 1
Откуда: Москва

ГЕНЕРАТОР В FLProg

#11

Сообщение Alex54 » 04.11.2015{, 08:33}

qore-40

ЗДЕСЬ все прописано :

http://nauchebe.net/2010/06/obrabotka-d ... elementov/

Проверял вчера. Этот удвоитель в FLProg. Не получается. Логика тоже как и генератор не работает
с сигналами ниже 50мкс. Ставил искл. или. Просто по двум входам через цифровые входы подавал
от внешних генераторов различные частоты. Различные и по частотам и длительности. С вых. через
цифровой выход. Наблюдал все это. Как только сигнал был меньше 50мкс (например 50кгц 20мкс) Вых
работал на 24кгц с хвостом. И все. На низких рабочих частотах не смотрел. Работать думаю будет.
Ну мне надобности в этом не было. А вообще так и должно быть. У нас в котроллере цифровые
входа это не перемычки просто также как и выходы. Они делают обработку сигнала. По аналоговым
входам еще сложнее.
Последний раз редактировалось Alex54 04.11.2015{, 09:03}, всего редактировалось 1 раз.
С Уважением Alex

gore-40
Рядовой
Сообщения: 29
Зарегистрирован: 04.10.2015{, 18:02}
Репутация: 0

ГЕНЕРАТОР В FLProg

#12

Сообщение gore-40 » 04.11.2015{, 20:37}

а попробуй частоту мк поднять, по ссылке  Конструктор Bootloader`а для Arduino
http://homes-smart.ru/index.php/oborudo ... zagruzchik
делал 20MHz нормально работает, и где то на форумах читал - что и на 24MHz работает
Последний раз редактировалось gore-40 04.11.2015{, 20:40}, всего редактировалось 1 раз.

oren
Рядовой
Сообщения: 38
Зарегистрирован: 07.09.2015{, 21:02}
Репутация: 0

ГЕНЕРАТОР В FLProg

#13

Сообщение oren » 04.11.2015{, 22:12}

Дело не в Аrduino,а в генерации кода зашитого в ГЕНЕРАТОРЕ FLProg.
при написании кода так: 
void loop() {
  digitalWrite(13, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(0.001);              // wait for a second
  digitalWrite(13, LOW);    // turn the LED off by making the voltage LOW
  delay(0.001);

можно получить 100KHz .зависит от переменной    delay

Аватара пользователя
Alex54
Сержант
Сообщения: 281
Зарегистрирован: 06.09.2015{, 09:06}
Репутация: 1
Откуда: Москва

ГЕНЕРАТОР В FLProg

#14

Сообщение Alex54 » 05.11.2015{, 08:24}

oren

Cпасибо. Но откровенно сам нечего не понимаю в этих кодах. Подскажите что где изменять.

Тут советовался с программистом. Интересовался как вообще сделаны эти блоки. Общее понятие он
разъяснил.

Давайте вместе, может что выйдет.
С Уважением Alex

oren
Рядовой
Сообщения: 38
Зарегистрирован: 07.09.2015{, 21:02}
Репутация: 0

ГЕНЕРАТОР В FLProg

#15

Сообщение oren » 05.11.2015{, 23:06}

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

С уважением Орен

Аватара пользователя
Kocтик
Рядовой
Сообщения: 75
Зарегистрирован: 07.09.2015{, 23:51}
Репутация: 0

ГЕНЕРАТОР В FLProg

#16

Сообщение Kocтик » 06.11.2015{, 01:28}

oren писал(а):надо еще раз попробовать обратиться к модератору ,возможно он найдет время исправить код
Не надо никуда обращаться. Это расплата за универсальность кода.

Другими словами:
 digitalWrite(13, HIGH);   // Включаем вывод 13
  delay(0.001);              // Пауза секунд
  digitalWrite(13, LOW);  // Выключаем вывод 13
  delay(0.001);              // Пауза секунд

Теперь попробуйте скомпелировать генератор и посмотрите какой код выдаст Ида. И не забывайте что программа ходит по кругу (если нет прерываний). Потому чем длинее программа (больше круг) тем меньшую частоту выдаст генератор. МК просто не успевает отработать эту частоту.
Если очень нужно. Ищите в дополнительных блоках Бузер. Там генератор получше, и меандр почище. Думаю это максимум что можно выжать из Ардуино.

Аватара пользователя
Alex54
Сержант
Сообщения: 281
Зарегистрирован: 06.09.2015{, 09:06}
Репутация: 1
Откуда: Москва

ГЕНЕРАТОР В FLProg

#17

Сообщение Alex54 » 06.11.2015{, 08:05}

Kocтик, вы про это :

Сам задал вопрос, сам отвечаю. Да 30кгц получаю и очень чистенькие. И выставление по частоте
очень точное. Не на пол периода как в генераторе ( таймере) а как положено.
Вложения
5603649.jpg
Последний раз редактировалось Alex54 06.11.2015{, 08:55}, всего редактировалось 1 раз.
С Уважением Alex

oren
Рядовой
Сообщения: 38
Зарегистрирован: 07.09.2015{, 21:02}
Репутация: 0

ГЕНЕРАТОР В FLProg

#18

Сообщение oren » 06.11.2015{, 09:04}

Спасибо за помощь,но buzzer не имеет выхода для продолжения логической схемы,полезен лишь для использования платы в качестве генератора при нагрузке на один из внешних портов.
Сам же МК мне выдает любую(из нужных мне) частоту при написании кода :

digitalWrite(4, HIGH);   // Включаем вывод4
  delay(0.001);              // Пауза секунд
  digitalWrite(4, LOW);  // Выключаем вывод 4
  delay(0.001);              // Пауза секунд

А вот "голый" ГЕНЕРАТОР FLProg дает такой код:

pinMode(4, OUTPUT);
}
void loop()
{
if (1) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = micros(); } } else { _gen1I = 0 ; _gen1O= 0;}
 if (_gen1I) {  if ( _isTimerMicros ( _gen1P , 10 )) { _gen1P = micros(); _gen1O = ! _gen1O;}}
digitalWrite(4, _gen1O);
}
bool _isTimerMicros(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = micros();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
  }
А результат разный- вот в этом я и пытаюсь разобраться,если Вам не затруднительно,помогите разобраться.

Аватара пользователя
support
Супермодератор
Сообщения: 1900
Зарегистрирован: 03.01.2018{, 11:45}
Репутация: 790
Откуда: Астрахань
Имя: Сергей
Контактная информация:

ГЕНЕРАТОР В FLProg

#19

Сообщение support » 06.11.2015{, 09:53}

Давайте я объясню. Разберём по строкам.

if (1) { if (! _gen1I) { _gen1I = 1; _gen1O = 1; _gen1P = micros(); } } else { _gen1I = 0 ; _gen1O= 0;}
  
Определение состояния входа EN (if (1) - у Вас константа). Запоминание текущего момента (_gen1P = micros()). перевод генератора в рабочее состояние (_gen1I = 1) Установка выхода в 1 (_gen1O = 1)

if (_gen1I) {  if ( _isTimerMicros ( _gen1P , 10 )) { _gen1P = micros(); _gen1O = ! _gen1O;}}

Если генератор в рабочем состоянии (if (_gen1I)) проверяем с помощью функции не настало ли время переключения (if ( _isTimerMicros ( _gen1P , 10 ) - у Вас период переключения 10 мс). Если время наступило, то  запоминаем текущее время ( _gen1P = micros(); - необходима для минимализации влияния временицикла прграммы, но такое влияние всё равно есть), и инвертируем выход (; _gen1O = ! _gen1O;)

bool _isTimerMicros(unsigned long startTime, unsigned long period )
  {
  unsigned long currentTime;
currentTime = micros();
if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return (currentTime >=(4294967295-startTime+period));}
 }


Функция определения конца периода времени с учётом переполнения аппаратного счётчика (аппаратный счётчик микросекунд считает до 4294967295 а потом сбрасывается в 0).
Автор программы FLProg.

Аватара пользователя
Alex54
Сержант
Сообщения: 281
Зарегистрирован: 06.09.2015{, 09:06}
Репутация: 1
Откуда: Москва

ГЕНЕРАТОР В FLProg

#20

Сообщение Alex54 » 06.11.2015{, 10:38}

oren

Так все правильно, пьезо динамик выдает частоту на внешний пин. Даже если сделать просто перемычкой
внешней,(с цифровым входом на вашу схему) если хотите работать от него. То вся логика не потянет свыше 24кгц. А так можно применять
его или несколько в зависимости от вашей программы. Делать допустим линейку частот кратную 10
здесь имеет смысл.

Сергей спасибо большое. Объяснили.

Гоню частоту в протэусе. 35кгц работает. Даже по нулям уход. Посмотрю где предел.
Этот пьезо динамик на 40кгц работает. Но уже частотка немного меньше. Далее гнать по частоте нет смысла. Но все равно это уже не 24кгц.
Я еще вот что хочу сказать. В Протэусе все модели контроллеров сделаны идеальными по всем параметрам. Это относиться только для котроллеров чисто итальянского производства.
Китайское железо имеет отличие.
Вложения
5004077.jpg
8242183.jpg
Последний раз редактировалось Alex54 06.11.2015{, 11:59}, всего редактировалось 1 раз.
С Уважением Alex

Ответить

Вернуться в «Таймеры»