применение МК в зерносортировке

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 195
Зарегистрирован: Вт ноя 18, 2008 22:38:13
Откуда: Я просто странник...

Сообщение otmyavrozok »

Уважаеые обитатели сайта! Имеются 8 датчиков,в нормальном режиме на выходе датчика импульсы отрицательной полярности ок 1 мс с частотой 2-45 Гц.Появление высокого или низкого уровня в любом канале(каналах),более чем на1.2с-аварийный режим.Я применил мега48 и алгоритм-последовательный опрос 8 портов с ожиданием перепада уровня в течении 0.5с,но время опроса 8 датчиков больше допустимого для реагирования!Подскажите,как можно решить эту проблему?
Реклама
Опытный кот
Сообщения: 804
Зарегистрирован: Чт мар 12, 2009 16:31:05

Сообщение Vov123 »

Как вариант-каждый датчик на свой контроллер,типа tiny.
И сязать по I2C,с тем что у вас есть.
Или просто напрямую на вход порта.
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Ср мар 25, 2009 15:57:59
Откуда: Тула

Сообщение Александр777 »

Еще как вариант связать с каждым датчиком счетчик, который будет сбрасываться при перепаде напряжения на выводе МК. Содержимое счетчика автоматически увеличивается на 1, например каждые 0.1 с. Переполнение счетчика говорит об аварийном состоянии.
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

Не корректно по полсекунды опрашивать ноги. Вам нужно алгоритм переделать.
Например так: Необходимы 8 переменных как счетчики опросов и переменная предыдущего состояние датчиков. Опрашивать датчики каждые 100мс. Считывая с портов состояние сравнивать его с предыдущим. Если какой бит изменился то сбрасывать соответствующий счётчик в ноль. Нет, счётчик + 1. До 120 досчитали - авария.
Реклама
Эиком - электронные компоненты и радиодетали
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

Александр777
Один в один и одновременно :)
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Ага, а еще лучше посоветовать, на каждый датчик поставить свою мегу48... :))
Если серьезно, посмотрите на камень, который у вас в руках. Мега48 имеет целых три порта, на каждую лапу которых, можно навешать по внешнему прерыванию (по любому изменению уровня) - то что доктор прописал. Берете один из таймеров и задача почти решена - потребуется буквально пара строчек кода, а именно: заводим переменные-счетчики для каждого датчика. В прерывании таймера по переполнению эти переменные просто инкрементируем. В обработчиках прерываний по каждому входу (их восемь будет), соответствующая переменная-счетчик обнуляется. В основном цикле тупо проверяем, достигла ли какая-либо переменная порога, соответствующего 1.2с (надо только правильно рассчитать предел, узнав, сколько раз за 1.2с переполнится таймер и проследить, чтобы типа данных (char, int) переменных-счетчиков хватило). Превысили - аларма... Точность по интервалу в доли процента по каждому датчику, вполне достижима.
P.S. Применяйте возможности камня, по назначению. Для этой задачи мега48 самое то...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Реклама
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

Goodefine писал(а):...
Мега48 имеет целых три порта, на каждую лапу которых, можно навешать по внешнему прерыванию
...
Не на каждую лапу, а на каждый порт. Их всего 3.
С таймером и с PCINT-ами код получается больше, чем если в основном цикле тупо проверять пины.
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

asteroid7 писал(а): Не на каждую лапу, а на каждый порт. Их всего 3.
И правда, запамятовал :)
Но сути это не меняет. Достаточно легко в обработчике узнать какой датчик вызвал прерывание и обнулить соответствующий счетчик.
asteroid7 писал(а):
С таймером и с PCINT-ами код получается больше, чем если в основном цикле тупо проверять пины.
Чего это больше? Или вы название обработчика учитываете? Зато это будет РАБОЧИЙ вариант. От опроса это отличается кардинальным образом: ибо мы действуем по СОБЫТИЮ, что гарантирует их обработку. В случае опроса, есть большая вероятность пропустить изменение состояния. Например, автор в первом же топике указывает, что длительность отрицательного импульса около 1мс. А частота следования может быть от 2-х герц... Выше Вы предлагаете опрашивать входы один раз в 100мс. Теперь подсчитайте, какова вероятность поймать этот импульс (скважность которого близка к нулю), если он может встретится только один раз за 500мс, с длительностью 1мс. Причем у Вас имеется только ДВЕ попытки, а дальше тревога... Чтобы гарантированно отловить все изменения состояния опросом, нужен его период сделать как минимум 1/8мс (длительность импульсов/число входов), что практически нецелесообразно, ибо если и успеете, больше времени ни на что не останется. Поэтому здесь, альтернативы прерываниям практически нет...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Опытный кот
Аватара пользователя
Сообщения: 703
Зарегистрирован: Вс янв 18, 2009 21:12:49

Сообщение asteroid7 »

Goodefine писал(а):...
В случае опроса, есть большая вероятность пропустить изменение состояния. Например, автор в первом же топике указывает, что длительность отрицательного импульса около 1мс.
...
Точно. Невнимательно прочитал. На меандре зациклился. :)

Соглашусь, что лучший вариант на PCINT-ах делать. Изменение на любой ноге - прерывание, где считываются сразу все PIN-ы порта. Пробежаться циклом по ним. Изменился - сброс соответствующего счётчика. А дальше, как Goodefine советовал. Запустить таймер с тиками, например, 100мс. В прерывании таймера все счётчики + 1.
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 195
Зарегистрирован: Вт ноя 18, 2008 22:38:13
Откуда: Я просто странник...

Сообщение otmyavrozok »

Корректно обрабатывает сигнал только с ноги по которой сработало прерывание,с остальных,на минимальной частоте пропускает импульсы.К датчикам я добраться не могу,может сигнал чуть растянуть одновибратором?
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Сообщение Goodefine »

Если не слишком большой секрет, программу покажите...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 195
Зарегистрирован: Вт ноя 18, 2008 22:38:13
Откуда: Я просто странник...

Сообщение otmyavrozok »

Получилось,я неправильно входа настроил.Спасибо всем!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»