Регистрация | Вход

[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Модератор форума: demanik, ivan_fd  
Форум Picbasic.ru » Программирование МК » Proton PicBasic » PIC16F876A и АЦП (как оцифровать микросекундные импульсы?)
PIC16F876A и АЦП
Klim Дата: Вт, 10.01.2012, 11:11  |                                                                                                                Сообщение # 1
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Ест ПИК, есть источник сигналов прямоугольной формы. Импульсы от 1,5 до 3 вольт. Импульсы чередуются в произвольной форме, но длительность импульса по верхнему фронту или 120 микросекунд, или 60 микросекунд. Требуется преобразовать данную последовательность, ну скажем так из 100 импульсов, в логический вариант. 120 микросекунд - 0, 60 микросекунд - 1. Длительность между импульсами тоже приблизительно от 60 до 120 микросекунд по нижнему фронту. К пику прицепил кварц 20 Mhz. Уже долбался и с прерываниями и так. Читает ахинею. (в качестве источника используется домофонный ключ Цыфрал.) Делается все для проэкта Читальщика, Копировщика и Эмулятора Цыфралов и Метакомов. По окончании работ данный проэкт будет выложен здесь.
Есть такой же приблизительно проэкт на Радиокоте, но там применен АТМЕГА. Хозяин проэкта поделился алгоритмом. В теории все просто. Подключаем через резюк 1к питание на ключ и считываем его через АЦП. Вычисляем среднее значение и принимаем его за переход через 0. Потом начинаем читать и оцифровывать данные. В этот вся и проблема. Никак не могу добиться стабильного чтения в данных промежутках. Вкладываю тестовый пример. Даже в нем идет несоответствие, а при чтении ключа совсем ахинея (плата уже собрана в железе).
Прикрепления: ReadCyfral.dsn (99.3 Kb) · ReadCyfral.bas (7.5 Kb) · READCYFRAL.hex (3.4 Kb)

Сообщение отредактировал Klim - Вт, 10.01.2012, 12:48
ЯНДЕКС Дата: 10.01.2012
brown Дата: Вт, 10.01.2012, 14:57  |                                                                                                                Сообщение # 2
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Смотрю на ТЗ и реализацию и не понимаю связь между длительностью импульса и АЦП? На схеме не вижу преобразователя Ти в напряжение? Дайте хотя бы ссылку на Коте.

Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Klim Дата: Вт, 10.01.2012, 15:09  |                                                                                                                Сообщение # 3
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

http://radiokot.ru/forum....2648478
brown Дата: Вт, 10.01.2012, 15:45  |                                                                                                                Сообщение # 4
Группа: Пользователи
Ранг:  Помогаю всем
Сообщений: 333
Репутация: 12   ±
Замечания:   ±
На сайте с 18.09.2007

Статус: Offline

Посмотрел, но принцип работы так и не понял - так что помочь не смогу.

Век живи - век учись! К концу жизни поймешь, что ничего не знаешь...
Klim Дата: Вт, 10.01.2012, 20:20  |                                                                                                                Сообщение # 5
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Опишу подробнее. Ключ работает в токовом режиме. При подаче на него напряжения он начинает его просаживать. Вот эту просадку мы и должны отслеживать АЦП. И потом ее оцифровать. Вот на всякий случай даташит к микросхеме ключа.

Вот слова человека, который реализовал это все на Меге.

"Я вроде выше уже писал про оцифровку с помощью АЦП. Вроде ничего сложного. Оцифровываете сигнал с токосъемного резистора. На основании полученных данных вычисляете среднее значение. Снова оцифровываете сигнал. Переход через среднее значение - смена логического состояния. Длительность состояния - по таймеру. Для анализа полученных данных смотрим прикрепленный даташит. Все расписано до бита. Указаны все времена."

Добавлено (10.01.2012, 19.22.12)
---------------------------------------------
Может быть лучше попытаться обработать АЦП внутри прерывания?

Добавлено (10.01.2012, 20.20.59)
---------------------------------------------
И снова я... Поставим вопрос проще. Как можно измерить длину импульса амплитудой 3 вольта входящий на АЦП (именно АЦП, компаратор не предлагать). Длина импульса 120 микросекунд и 60 микросекунд. (вот их-то последовательность и нужно записать причем в цыфровом виде.). Для облегчения задачи предыдущую схему во внимание не берем, считаем, что на АЦП приходит просто последовательность импульсов в произвольном порядке двух заведомо известных длительностей. Будем считать, что необходимо записать продолжительность 100 импульсов.
Прикрепления: K1233KT1.zip (193.7 Kb)

Сообщение отредактировал Klim - Вт, 10.01.2012, 20:38
retas Дата: Ср, 11.01.2012, 16:50  |                                                                                                                Сообщение # 6
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

ПМ, грубо говоря, АЦП применяется там где нужно действительно что то измерять, а вам т.с. достаточно
определить разницу между "да" и "нет".
На одно измерение с АЦП требуется время а вам придётся измерять и измерять чтоб засечь изменение. Т.к.
длительности отличается в два раза, можбыть и удастся - посмотрите сколько надо время на одно измерение,
какая у вас скорость и прикиньте.
ADMIN Дата: Ср, 11.01.2012, 17:36  |                                                                                                                Сообщение # 7
Администратор
Группа: Администраторы
Ранг:  Специалист
Сообщений: 1087
Репутация: 32   ±
Замечания:   ±
На сайте с 20.08.2007

Статус: Offline

Посмотри в сторону компаратора + таймер
Klim Дата: Ср, 11.01.2012, 19:23  |                                                                                                                Сообщение # 8
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Репутация: 12   ±
Замечания:   ±
На сайте с 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
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Упростил задачу до минимума. Попробуем просто читать АЦП с максимальной скоростью, чтоб засечь 10 значений АЦП. Разрядность 8. Подал на вход АЦП 5 вольт и получилась ахинея, где-то что-то недопонимаю... Читает с АЦП вместо 255 - 3. При чем, если переключить на 10 разрядов - то все становится нормально.
Прикрепления: Read.dsn (88.0 Kb) · READ.hex (2.1 Kb) · Read.bas (4.2 Kb)

Сообщение отредактировал Klim - Чт, 12.01.2012, 13:38
retas Дата: Чт, 12.01.2012, 15:24  |                                                                                                                Сообщение # 11
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Извини, Klim, но погляди ещё раз на компаратор.
Ты говориш что может быть 1-3 вольта, а может и 0,5 - 1,5 вольта, тогда сначала можно
компаратором определить максимум импульса и от него плясать. Например, если нашли что мах=1,5В,
то задали, что если напруга будет меньше 1В, считать её нулём, а если выше, то единицей.
ЯНДЕКС Дата: 12.01.2012
Klim Дата: Чт, 12.01.2012, 16:38  |                                                                                                                Сообщение # 12
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 21.12.2009

Статус: Offline

Проблема в том, что никогда не работал с внутреним компаратором. Начал читать и запутался совсем. Случайно нет примера на протоне?
Зато докопался почему у меня не неправильно работал АЦП в 8-ми битном режиме. Надо было просто включить левое выравнивание.

Сообщение отредактировал Klim - Чт, 12.01.2012, 17:40
retas Дата: Сб, 14.01.2012, 01:48  |                                                                                                                Сообщение # 13
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

С компарами придётся ручками.
1. Выбери с которым (1-ым или 2-ым) хочешь работать.
2. ВелИ менятся Vref в нужных пределах при появлении импульсов.
3. Фиксируй тот Vref при котором компар сработал.
4. Задай величину Vref на треть или в половину меньшей чем найденное и меряй длительности.
Быть может тебе не попалась таблица с Vref шагом - она есть у меня на руках а в компе не нахожу. Без неё
неудобно а с ней, вопросов быть как бы не должно.
Klim Дата: Пн, 16.01.2012, 12:41  |                                                                                                                Сообщение # 14
Группа: Проверенные
Ранг:  Понимаю
Сообщений: 79
Репутация: 0   ±
Замечания:   ±
На сайте с 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
Группа: Проверенные
Ранг:  Помогаю всем
Сообщений: 447
Репутация: 11   ±
Замечания:   ±
На сайте с 10.09.2007

Статус: Offline

Klim, смотри прицепы, надеюсь сообразиш.

Твоя схема будет 4-ая либо 5-ая (нижние).
Прикрепления: 9802054.jpg (39.3 Kb) · 1371619.jpg (128.2 Kb)

Сообщение отредактировал retas - Пн, 16.01.2012, 14:01
Форум Picbasic.ru » Программирование МК » Proton PicBasic » PIC16F876A и АЦП (как оцифровать микросекундные импульсы?)
  • Страница 1 из 3
  • 1
  • 2
  • 3
  • »
Поиск: