PIC16F876A и АЦП
|
|
Klim |
Дата: Вт, 10.01.2012, 11:11 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
Ест ПИК, есть источник сигналов прямоугольной формы. Импульсы от 1,5 до 3 вольт. Импульсы чередуются в произвольной форме, но длительность импульса по верхнему фронту или 120 микросекунд, или 60 микросекунд. Требуется преобразовать данную последовательность, ну скажем так из 100 импульсов, в логический вариант. 120 микросекунд - 0, 60 микросекунд - 1. Длительность между импульсами тоже приблизительно от 60 до 120 микросекунд по нижнему фронту. К пику прицепил кварц 20 Mhz. Уже долбался и с прерываниями и так. Читает ахинею. (в качестве источника используется домофонный ключ Цыфрал.) Делается все для проэкта Читальщика, Копировщика и Эмулятора Цыфралов и Метакомов. По окончании работ данный проэкт будет выложен здесь. Есть такой же приблизительно проэкт на Радиокоте, но там применен АТМЕГА. Хозяин проэкта поделился алгоритмом. В теории все просто. Подключаем через резюк 1к питание на ключ и считываем его через АЦП. Вычисляем среднее значение и принимаем его за переход через 0. Потом начинаем читать и оцифровывать данные. В этот вся и проблема. Никак не могу добиться стабильного чтения в данных промежутках. Вкладываю тестовый пример. Даже в нем идет несоответствие, а при чтении ключа совсем ахинея (плата уже собрана в железе).
Сообщение отредактировал
Klim - Вт, 10.01.2012, 12:48
|
|
|
|
brown |
Дата: Вт, 10.01.2012, 14:57 | Сообщение # 2 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Смотрю на ТЗ и реализацию и не понимаю связь между длительностью импульса и АЦП? На схеме не вижу преобразователя Ти в напряжение? Дайте хотя бы ссылку на Коте.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
Klim |
Дата: Вт, 10.01.2012, 15:09 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
http://radiokot.ru/forum....2648478
|
|
|
|
brown |
Дата: Вт, 10.01.2012, 15:45 | Сообщение # 4 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Посмотрел, но принцип работы так и не понял - так что помочь не смогу.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
|
|
|
|
Klim |
Дата: Вт, 10.01.2012, 20:20 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
Опишу подробнее. Ключ работает в токовом режиме. При подаче на него напряжения он начинает его просаживать. Вот эту просадку мы и должны отслеживать АЦП. И потом ее оцифровать. Вот на всякий случай даташит к микросхеме ключа.
Вот слова человека, который реализовал это все на Меге.
"Я вроде выше уже писал про оцифровку с помощью АЦП. Вроде ничего сложного. Оцифровываете сигнал с токосъемного резистора. На основании полученных данных вычисляете среднее значение. Снова оцифровываете сигнал. Переход через среднее значение - смена логического состояния. Длительность состояния - по таймеру. Для анализа полученных данных смотрим прикрепленный даташит. Все расписано до бита. Указаны все времена."
Добавлено (10.01.2012, 19.22.12) --------------------------------------------- Может быть лучше попытаться обработать АЦП внутри прерывания?
Добавлено (10.01.2012, 20.20.59) --------------------------------------------- И снова я... Поставим вопрос проще. Как можно измерить длину импульса амплитудой 3 вольта входящий на АЦП (именно АЦП, компаратор не предлагать). Длина импульса 120 микросекунд и 60 микросекунд. (вот их-то последовательность и нужно записать причем в цыфровом виде.). Для облегчения задачи предыдущую схему во внимание не берем, считаем, что на АЦП приходит просто последовательность импульсов в произвольном порядке двух заведомо известных длительностей. Будем считать, что необходимо записать продолжительность 100 импульсов.
Сообщение отредактировал
Klim - Вт, 10.01.2012, 20:38
|
|
|
|
retas |
Дата: Ср, 11.01.2012, 16:50 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
ПМ, грубо говоря, АЦП применяется там где нужно действительно что то измерять, а вам т.с. достаточно определить разницу между "да" и "нет". На одно измерение с АЦП требуется время а вам придётся измерять и измерять чтоб засечь изменение. Т.к. длительности отличается в два раза, можбыть и удастся - посмотрите сколько надо время на одно измерение, какая у вас скорость и прикиньте.
|
|
|
|
ADMIN |
Дата: Ср, 11.01.2012, 17:36 | Сообщение # 7 |
Администратор
Группа:
Администраторы
Ранг:
Специалист
Сообщений:
1086
Замечания:
±
На сайте с 20.08.2007
Статус:
Offline
|
Посмотри в сторону компаратора + таймер
|
|
|
|
Klim |
Дата: Ср, 11.01.2012, 19:23 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
Про компаратор я уже писал. Он меня не устраивает. У меня в руках лежал готовый девайс на меге, где все чтение происходило через АЦП, при чем автор убеждал, что у него получилось чтение через АЦП гораздо проще и надежнее. Там есть свои технические тонкости. Но он писал на асме и для меги. Алгоритм он мне дал, я его описал выше. Девайс работал без збоев и читал обсолютно все типы ключей. С компаратором такого не сделаешь, т.к. разброс параметров у ключей реально огромен, может быть 1-3 вольта, а может и 0,5 - 1,5 вольта, поэтому делалось через АЦП. И задача стоит всего-то прочитать и оцифровать около 100 импульсов. Я уже писал, что длительность импульса от 60 до 120 микросекунд. Какие будут мысли?
Сообщение отредактировал
Klim - Ср, 11.01.2012, 19:24
|
|
|
|
brown |
Дата: Чт, 12.01.2012, 01:03 | Сообщение # 9 |
Группа:
Пользователи
Ранг:
Помогаю всем
Сообщений:
333
Замечания:
±
На сайте с 18.09.2007
Статус:
Offline
|
Мысли и замечания: Судя по даташиту период следования импульсов 80...200 мксек, для примера пусть будет 180 мксек. Может я ошибаюсь, для опознания 1 бита нужно сделать 3 отсчета АЦП т.е. время для получения результата преобразования - 60 мксек. Quote (retas) На одно измерение с АЦП требуется время а вам придётся измерять и измерять чтоб засечь изменение. Т.к. длительности отличается в два раза, можбыть и удастся - посмотрите сколько надо время на одно измерение, какая у вас скорость и прикиньте. Прикидаем: ~ 50 (посмотреть даташит на ПИК в раздел АЦП и уточнить)(Declare Adin_Tad FRC ' Источник тактирования АЦП) + 200 (Declare Adin_Stime 200 ' Время на подготовку АЦП к новому измерению) = 250 мксек >> 60. Т.е. по скорости оцифровки уже пролетаем!
Можно попробывать установить тактирование АЦП Т/32 и Время на подготовку АЦП к новому измерению =20 , итого ~40 мксек, а это уже ближе к истине. Чтобы еще работало быстрее включить АЦП на 8 разрядов.
Да еще зачем Dim Napruga As Float ? Там Word обычно ставят.
Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Сообщение отредактировал
brown - Чт, 12.01.2012, 01:42
|
|
|
|
Klim |
Дата: Чт, 12.01.2012, 09:29 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
Упростил задачу до минимума. Попробуем просто читать АЦП с максимальной скоростью, чтоб засечь 10 значений АЦП. Разрядность 8. Подал на вход АЦП 5 вольт и получилась ахинея, где-то что-то недопонимаю... Читает с АЦП вместо 255 - 3. При чем, если переключить на 10 разрядов - то все становится нормально.
Сообщение отредактировал
Klim - Чт, 12.01.2012, 13:38
|
|
|
|
retas |
Дата: Чт, 12.01.2012, 15:24 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
Извини, Klim, но погляди ещё раз на компаратор. Ты говориш что может быть 1-3 вольта, а может и 0,5 - 1,5 вольта, тогда сначала можно компаратором определить максимум импульса и от него плясать. Например, если нашли что мах=1,5В, то задали, что если напруга будет меньше 1В, считать её нулём, а если выше, то единицей.
|
|
|
|
Klim |
Дата: Чт, 12.01.2012, 16:38 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
Проблема в том, что никогда не работал с внутреним компаратором. Начал читать и запутался совсем. Случайно нет примера на протоне? Зато докопался почему у меня не неправильно работал АЦП в 8-ми битном режиме. Надо было просто включить левое выравнивание.
Сообщение отредактировал
Klim - Чт, 12.01.2012, 17:40
|
|
|
|
retas |
Дата: Сб, 14.01.2012, 01:48 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
С компарами придётся ручками. 1. Выбери с которым (1-ым или 2-ым) хочешь работать. 2. ВелИ менятся Vref в нужных пределах при появлении импульсов. 3. Фиксируй тот Vref при котором компар сработал. 4. Задай величину Vref на треть или в половину меньшей чем найденное и меряй длительности. Быть может тебе не попалась таблица с Vref шагом - она есть у меня на руках а в компе не нахожу. Без неё неудобно а с ней, вопросов быть как бы не должно.
|
|
|
|
Klim |
Дата: Пн, 16.01.2012, 12:41 | Сообщение # 14 |
Группа:
Проверенные
Ранг:
Понимаю
Сообщений:
79
Замечания:
±
На сайте с 21.12.2009
Статус:
Offline
|
Если несложно, можно небольшой пример с напряжением точки перехода 2 вольта. Т.е. меньше 1,5 - 0, больше 2 - 1. Конктретно интересует, как настроить компаратор, чтоб вход был на PORTA.0, а напряжения срабатывания указанные выше.
Сообщение отредактировал
Klim - Пн, 16.01.2012, 12:53
|
|
|
|
retas |
Дата: Пн, 16.01.2012, 13:59 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
445
Замечания:
±
На сайте с 10.09.2007
Статус:
Offline
|
Klim, смотри прицепы, надеюсь сообразиш.
Твоя схема будет 4-ая либо 5-ая (нижние).
Сообщение отредактировал
retas - Пн, 16.01.2012, 14:01
|
|
|
|