Страница 1 из 2

ГЕНЕРАТОР В FLProg

Добавлено: 18.09.2015{, 11:38}
Alex54
2300328.jpg
3978264.jpg
3978264.jpg
3978264.jpg
3978264.jpg
Почему генератор в программе FLProg не выдает частоту больше 24кгц.

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

Прилагаю скрин, программа написана для проверки модели в Proteuse не на FLProg.
1153649.jpg
Сейчас я приложу еще один скрин, генератора с частотой 87кгц (11.494мкс ) выведу эту длительность.
Но уже в программе FLProg.

ГЕНЕРАТОР В FLProg

Добавлено: 29.10.2015{, 09:20}
Alex54
Сергей Добрый День ! ! !

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

Как стоит 50мкс, все мертво. Думал в последней версии исправлено. НЕТ.

ГЕНЕРАТОР В FLProg

Добавлено: 29.10.2015{, 09:22}
DerAlex
А если одновременно использовать два генератора? Изменится период?

ГЕНЕРАТОР В FLProg

Добавлено: 29.10.2015{, 09:42}
Max
Вопрос важный и интересный! Ждем ответа, или решения.

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

ГЕНЕРАТОР В FLProg

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

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

Max

В диташитах ( виртуальный ардуино) я дал ссылку на интересную прогу. Вы смотрели ее. Там есть в ней для вас модули.
Посмотрите. Я сам эту прогу установил. Устанавливается также как портативная FLProg. Только в ней
еще и легко печать сделать для периферии к нашим ардуинкам.

ГЕНЕРАТОР В FLProg

Добавлено: 29.10.2015{, 12:30}
DerAlex
Использовать два генератора и выход каждого подать на свой пин ардуино.Какое влияние это окажет на увеличение периода .

ГЕНЕРАТОР В FLProg

Добавлено: 29.10.2015{, 17:57}
Alex54
DerAlex писал(а):Использовать два генератора и выход каждого подать на свой пин ардуино.Какое влияние это окажет на увеличение периода .
Попробую что вы предлагаете. Можно еще исключающим или сделать умножение на 2. Тут надо
смотреть а сколько сама логика пропустит.
Тут мне прислали ардуинку в Протэусе. Программа генератора. Программисту конечно не в FLProg
удалось получить 80кгц с хвостиком на ней. Пишет при желании можно и больше выжить.

ГЕНЕРАТОР В FLProg

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

ГЕНЕРАТОР В FLProg

Добавлено: 03.11.2015{, 14:03}
Alex54
oren

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

ГЕНЕРАТОР В FLProg

Добавлено: 03.11.2015{, 21:06}
gore-40
Alex54
Накидай в  FLProg  умножение частоты на 2, спасибо.

ГЕНЕРАТОР В FLProg

Добавлено: 04.11.2015{, 08:33}
Alex54
qore-40

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

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

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

ГЕНЕРАТОР В FLProg

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

ГЕНЕРАТОР В FLProg

Добавлено: 04.11.2015{, 22:12}
oren
Дело не в А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

ГЕНЕРАТОР В FLProg

Добавлено: 05.11.2015{, 08:24}
Alex54
oren

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

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

Давайте вместе, может что выйдет.

ГЕНЕРАТОР В FLProg

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

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

ГЕНЕРАТОР В FLProg

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

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

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

ГЕНЕРАТОР В FLProg

Добавлено: 06.11.2015{, 08:05}
Alex54
Kocтик, вы про это :

Сам задал вопрос, сам отвечаю. Да 30кгц получаю и очень чистенькие. И выставление по частоте
очень точное. Не на пол периода как в генераторе ( таймере) а как положено.

ГЕНЕРАТОР В FLProg

Добавлено: 06.11.2015{, 09:04}
oren
Спасибо за помощь,но 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));}
  }
А результат разный- вот в этом я и пытаюсь разобраться,если Вам не затруднительно,помогите разобраться.

ГЕНЕРАТОР В FLProg

Добавлено: 06.11.2015{, 09:53}
support
Давайте я объясню. Разберём по строкам.

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

Добавлено: 06.11.2015{, 10:38}
Alex54
oren

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

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

Гоню частоту в протэусе. 35кгц работает. Даже по нулям уход. Посмотрю где предел.
Этот пьезо динамик на 40кгц работает. Но уже частотка немного меньше. Далее гнать по частоте нет смысла. Но все равно это уже не 24кгц.
Я еще вот что хочу сказать. В Протэусе все модели контроллеров сделаны идеальными по всем параметрам. Это относиться только для котроллеров чисто итальянского производства.
Китайское железо имеет отличие.