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

Блок пользователя для пьезодатчика

Добавлено: 20.08.2016{, 22:59}
Musada
Уважаемые знатоки здравствуйте! Прошу помогите вот с чем... Требуется в моем проекте на FBD возможность использования встроенного в Atmega 328 аппаратного компаратора для подключения датчика вибрации и работы с ним. К сожалению программный компаратор мне не подходит. Итак, если кому интересно, то вот схема подключения пьезо датчика к аппаратному компаратору (6 и 7 ноги):

Изображение
Переменным резистором настраивается чувствительность срабатывания. В данном варианте при срабатывании датчика пищит динамик подключенный к 9 выводу ардуино (на схеме не указан). Можно заменить на любую другую команду.

Собственно вот пример скетча для работы с ним:



Код: Выделить всё

void setup(){ACSR=(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0);
DIDR1=(1<<AIN1D)|(1<<AIN0D);
}

ISR (ANALOG_COMP_vect) {
tone(9,1000,100);
}

void loop() {  }
АЦП в силу специфики работы трудно захватить пики сигнала, а компаратору легко. Результатом работы является запуск прерывания (6 строка) В нём можно выполнить любую команду. Писк на 9 ногу (7 строка) взят в качестве примера.

А теперь основной вопрос.. Я видел, в новой версии FLprog появилась возможность при добавлении пользовательского блока выбрать "Code". Подразумаваю, что можно добавить туда все необходимое из скетча выше. Но КАК? Я далёк от программирования и ума не приложу, что где указывать... Помогите пожалуйста..

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 04:41}
Слимпер
Для начала посмотрите Пользовательский блок с кодом
Там пример как можно перенести код из примера в такой блок.
Да и хорошо давать ссылку на статью от куда брали код.
Тот код, что приведен, перенести можно без проблем, но что реально вы хотите от блока, вряд ли пищать динамиком.

Добавлено (21.08.2016, 04:41)
---------------------------------------------
Вот пару статей про работу с компаратором atmega
AVR. Учебный курс. Использование аналогового компаратора
Учебный курс AVR. Аналоговый компаратор
Так конечно не про Arduino IDE, но зато расписаны подробно регистры, что были настроены в вашем коде.

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 10:40}
Musada
Слимпер писал(а):хорошо давать ссылку на статью от куда брали код
Пардон. Вот источник - форум Ардуино
Слимпер писал(а):что реально вы хотите от блока, вряд ли пищать динамиком
Я хочу использовать встроенный аналоговый компаратор в проектах FLProg.

Добавлено (21.08.2016, 10:40)
---------------------------------------------
Черт... Ну не могу я это всё осилить..(( FLProg FBD осилил. Нравится. Всего-лишь нужен дополнительный блок аналогового компаратора.. Можете помочь/создать ? Пожалуйста))

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 12:17}
Слимпер
Musada писал(а):Я хочу использовать встроенный аналоговый компаратор в проектах FLProg.
Опешите как вы его хотите использовать.
Почитал маленько про этот компаратор, возможны варианты.
1. Прерывания по имению состояния компаратора:
  • любое изменение на входе.
  • переход с 1 на 0
  • переход с 0 на 1
2. работа с таймером
3. просто считывание значения 
  • Использование напрямую входов AIN0(прямой вход) и AIN1(инверсный вход)
  •  подключение к прямому входу компаратора внутреннего источника опорного напряжения
  • подключение инверсного входа в к АЦП
 
И это я просто посмотрел в паре статей. Наверняка применений куда больше.

Так что если и браться делать, то надо понять что конкретно надо. Опешите подробно для чего вам надо.
Что должно быть на выходе блока?

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 12:22}
Musada
Банально подключив датчик вибрации, мне нужно чтобы на выходе блока был 0 или 1. Тоесть вибрация произошла - тогда 1. И конечно хочу иметь возможность настроить чувствительность. Если это возможно, то программно (тоесть в том же пользовательском блоке). Просто лень внедрять переменный резистор)) Слишком уж неудобно конструкция расположена.. Но если без этого никак, тогда внедрю.

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 12:45}
Слимпер
Регулировка чувствительности программная точна не получится. Это наверное возможно при реализации внешней схемы и использование ШИМ в качестве задатчика порога.
Но там требуется схема преобразования в аналоговый сигнал хотя бы на основе RC фильтра.
Хотя в аналоговой схемотехники я слаб.
Musada писал(а):мне нужно чтобы на выходе блока был 0 или 1. Тоесть вибрация произошла - тогда 1.
Я так понял, что длительность сигнала мала. Так что после сработки датчика он быстро успокаивается.
Значит на выходе должен быть  одиночный импульс после сработки датчика, а потом снова ноль.

Если все так, то попробую вечеров сделать такой блок. Вроде ни чего сложного не вижу.

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 12:57}
Musada
Да, датчик буквально 50-100 миллисекундный импульс выдаёт. Выходной импульс самого блока-то не обязательно строить. Достаточно хоть на милисекунду "1" получить.. А как дальше с этой быстрой единицей быть - это уже таймерами я в проекте поизвращаюсь)) Я просто стремлюсь к минимализму и лишний код нежелателен.. Ну конечно, если сразу сделать импульс в пользовательском блоке - это буквально одна коротенькая строчечка, то почему-бы и нет? ))

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 13:24}
Слимпер
Вот набросал блок на базе кода из первого сообщения. Должен выдавать одиночный импульс (т.е. на один программный цикл ).
Проверить смогу только вечером. Но может и так заработает.

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 13:54}
Musada
Вот спасибыч!)) Правда я только сам вечером доберусь до Ардуинки.... И нужен импульс не на один программный цикл, а чтобы каждый раз импульсил, как вибрирует))

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 16:45}
Слимпер
Проверил срабатывает.
Musada писал(а):И нужен импульс не на один программный цикл, а чтобы каждый раз импульсил, как вибрирует))
Похоже мы говорим на разных языках.
Сейчас блока при каждом замыкании контакта подает одиночный импульс. И следующий импульс появится только когда контакт разомкнется и замкнется снова.
Это соответствует тому как было в приведенном коде из первого  сообщения, там звук тоже издавался один раз.

И для начало проверь как это будет работать с реальным датчиком.

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 22:21}
Musada
Понял. Благодарю ещё раз! Проверю всё - отпишу

Добавлено (21.08.2016, 22:21)
---------------------------------------------
Хныыыыы не добавляется((( Несколько раз пробовал((( FLProg 1.15

Изображение

Блок пользователя для пьезодатчика

Добавлено: 21.08.2016{, 23:37}
rw6cm
все работает и с вибро и с пьезодатчиком.

Блок пользователя для пьезодатчика

Добавлено: 22.08.2016{, 05:50}
Слимпер
Musada писал(а):Хныыыыы не добавляется((( Несколько раз пробовал((( FLProg 1.15
Ну вот еще мини проект с этим блоком. Может копированием сможете перенести. 
Хотя специально проверил, нормально добавляется. Похоже у вас глюк. По пробуйте Портаельную версию

Блок пользователя для пьезодатчика

Добавлено: 22.08.2016{, 11:15}
Musada
О пардон, на другом компе добавился. Скажите, а как чувствительность менять и пин входа? Просто я думал, что в FLProg можно будет от входа соединение кинуть до блока.. А тут он как-будто самостоятельный))

Добавлено (22.08.2016, 11:15)
---------------------------------------------
Как его сцепить-то с "Датчик вибрации PIN 2" ? )))

Изображение

Блок пользователя для пьезодатчика

Добавлено: 22.08.2016{, 13:28}
slavas
Если не ошибаюсь компаратор жестко привязан к пину, а именно к AIN0.

Блок пользователя для пьезодатчика

Добавлено: 22.08.2016{, 14:39}
Musada
Понял, а чувствительность? ))

Блок пользователя для пьезодатчика

Добавлено: 22.08.2016{, 14:54}
Слимпер
Musada писал(а):Скажите, а как чувствительность менять и пин входа?
Нет у компаратора чувствительности.
Он просто сравнивает два напряжения поданных на два разные входа (AIN0 и AIN1). Если на втором входе напряжение больше чем на первом то 1, в противном случаи 0.

Для изменения "чувствительности" надо изменить номинал напряжения поданного на вход  D6 AIN0(прямой вход).

Менять ПИН нельзя. Компаратор на ATMEGA328 один и он привязан в входам AIN0(прямой вход) D6 и AIN1(инверсный вход) D7.
slavas писал(а):Если не ошибаюсь компаратор жестко привязан к пину, а именно к AIN0.
Если судить по статьям то существует возможность оперируя регистрами в подключить AIN0 к внутреннему ИОН, а вход AIN1 также оперируя регистрами можно внутренне подключить к входу АЦП.
Но для меня это пока сложновато. Да и все равно компаратор будет один, просто будет использованы другие входа.

Блок пользователя для пьезодатчика

Добавлено: 22.08.2016{, 21:59}
Musada
Прошу прощения, наверное дико тупую вещь спрошу... А к каким пинам подключать датчик и резистор? к A6 и A7 или D6 и D7 ? )))

Блок пользователя для пьезодатчика

Добавлено: 23.08.2016{, 04:27}
Слимпер
Musada писал(а):А к каким пинам подключать датчик и резистор? к A6 и A7 или D6 и D7 ? )))
D6 и D7

Блок пользователя для пьезодатчика

Добавлено: 27.12.2016{, 17:23}
Musada
Мужики, помогите пожалуйста, наконец дошли руки и собрал всё на встроенном компараторе точно так, как мусолили здесь.. Всё получилось, внешним переменным резистором теперь чувствительность настраиваю.. Но вот беда, ситуация не изменилась. Датчик срабатывает сам по себе иногда. Я подключил светодиодик, дублирующий сигналы пьезо (повесил его на D2). Тоесть если пьезо тронуть, то диод загорается на полсекунды и гаснет. Совершенно случайно, похоже обнаружил кое-чего... В момент наблюдения включился холодильник и диод моргнул. Я начал щёлкать автомат питания электропроводки в квартире. Вот оно - при выключении питания иногда мигает диод, а при подаче питания почти всегда мигает. Ардуинка запитана от сигнализации, которая сама питается через импульсник и имеет резервный аккумулятор - в связи с этим ардуинка питается бесперебойно, но каким-то макаром ловит наводки. Я отключил от ардуинки пьезо - ничего не меняется. Тоесть получается наводка идёт не через нежное пьезо. Подношу палец к D6 и D7 не касаясь - в радиусе примерно 3 мм от контактов, диод моргает. Помогите пожалуйста.. Как быть? Чувствительность грубить не вариант..

Добавлено (25.12.2016, 14:43)
---------------------------------------------
И ещё один вопрос, каким блоком можно в FLProg заставить мигать имеющиеся на плате диоды?

Добавлено (27.12.2016, 17:23)
---------------------------------------------
АПну, пожалуй.. Пути назад нет. Нужно доделать систему... Помогите