Перейти к содержанию
    

Нехитрая прошивка для PIC

Есть плата, на которой сидит PIC16F1459 и мультиплексор. У платы несколько десятков входов, на которых подается напряжение от 0 до VCC. PIC управляет мультиплексором, так что входы платы один за другим подключаются к АЦП-входу PIC-а.

 

Кроме того, на плате есть USB-разъем, разведенный, естественно, на PIC. Устройство, будучи подключенным к Windows PC, должно определяться как стандартный USB COM Port.

 

Требуется с некоторой частотой опрашивать входы платы и выдавать на USB текст в формате "#канала - уровень_на_АЦП\n".

 

Мультиплексор понимает сигналы "подключить вход 0", "подключить следующий вход", которые синхронизируются тактовым импульсом. Сигналы и тактовый импульс приходят просто с GPIO-выводов PIC.

 

 

Присылайте ваши предложения (цена, срок) на [email protected]. Отвечу со своего основного ящика и пришлю схему платы. Пожалуйста, в письме сразу ответьте на контрольный вопрос: с какой частотой получится опрашивать входы платы и почему?

 

Вопросы по задаче пишите прямо сюда или на почту.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так как

нужно выдавать на USB текст в формате "#канала - уровень_на_АЦП\n".
, то ответ
на контрольный вопрос: с какой частотой получится опрашивать входы платы и почему?
будет не более 4кГц, по-моему.

 

Имею 1455й контроллер, но нет мультиплексора.

Могу попробовать помочь с организацией USB<->COM, но с отладкой мультиплексирования придется самим разбираться.

 

Если интересно, пишите на lendlav(собака)mail(точка)ru

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуйста, в письме сразу ответьте на контрольный вопрос: с какой частотой получится опрашивать входы платы и почему?

На этот вопрос ответить невозможно, так как непонятно что за мультиплексор Вы используете, каково выходное сопротивление коммутируемых каналов измерения, какую фильтрацию нужно проводить и нет схемы платы.

 

 

Так как , то ответ будет не более 4кГц, по-моему.

Если мультиплексор - электромеханический, то ни о каких килогерцах речь не идет. А в случае электронного тоже много чего нужно знать для ответа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пожалуйста, в письме сразу ответьте на контрольный вопрос: с какой частотой получится опрашивать входы платы и почему?

 

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

А скорость передачи данных через COM порт(виртуальный)?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

И третье - время установления сигнала после переключения АЦП. Оно зависит от емкости и сопротивления цепи, а так же от требуемой погрешности..

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А скорость передачи данных через COM порт(виртуальный)?!

 

Вот именно!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А скорость передачи данных через COM порт(виртуальный)?!

Вот именно!

Не является ограничением - скорость через USB-COM будет заведомо выше скорости сбора данных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не является ограничением - скорость через USB-COM будет заведомо выше скорости сбора данных.

 

Это точно!

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это точно!

Не факт

С какой скоростью вы собираетесь передовать через COM порт?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не факт

С какой скоростью вы собираетесь передовать через COM порт?

Скорость COM-порта тут ни при чем, так как передача пойдет не через внешний мост USB-COM (типа FTDI), а через свою реализацию виртуального порта (VCP device). Поэтому скорость передачи будет определяться шиной USB, а поскольку имеется в виду Full Speed USB, то верхняя граница скорости будет 12 Мбит/с. Реальная скорость, конечно, будет ниже, но всё равно она существенно выше скоростей "обычных" COM-портов.

Мне удавалось достигать примерно 500 кБайт/c, при этом установленая в системе скорость виртуального порта может быть любой, например, 9600 бит/с. Это существенно выше скорости съёма данных с АЦП.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Скорость COM-порта тут ни при чем, так как передача пойдет не через внешний мост USB-COM (типа FTDI), а через свою реализацию виртуального порта (VCP device). Поэтому скорость передачи будет определяться шиной USB, а поскольку имеется в виду Full Speed USB, то верхняя граница скорости будет 12 Мбит/с. Реальная скорость, конечно, будет ниже, но всё равно она существенно выше скоростей "обычных" COM-портов.

Мне удавалось достигать примерно 500 кБайт/c, при этом установленая в системе скорость виртуального порта может быть любой, например, 9600 бит/с. Это существенно выше скорости съёма данных с АЦП.

Так как подразумевается класс USB CDC, то с одного устройства мы можем передавать информацию только на одну End point, размер которой не должен превышать 64 байта. Временная сетка USB равна 1 мс. Т.е. теоретически с одного устройства по USB-CDC мы можем передавать 64 байта в 1 мс. При формате #ХХYYY$R, где #ХХ - номер канала, YYY-данные имеем 7 байт на канал, т.е. 9 каналов в кадре.

Время оцифровки 1-го разряда составляет 2 микросекунды, т.е. на оцифровку одного канала потратим 24 микросекунды. Так как каналов за 1 мс успеем передать всего 9, то имеем 111 мкс на обработку канала. Из которых 24 мкс - оцифровка, оставшееся время на обработку прерывания АЦП, переключения мультиплексора, укладку информации в TX-буфер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так как подразумевается класс USB CDC, то с одного устройства мы можем передавать информацию только на одну End point, размер которой не должен превышать 64 байта. Временная сетка USB равна 1 мс. Т.е. теоретически с одного устройства по USB-CDC мы можем передавать 64 байта в 1 мс. При формате #ХХYYY$R, где #ХХ - номер канала, YYY-данные имеем 7 байт на канал, т.е. 9 каналов в кадре.

Время оцифровки 1-го разряда составляет 2 микросекунды, т.е. на оцифровку одного канала потратим 24 микросекунды. Так как каналов за 1 мс успеем передать всего 9, то имеем 111 мкс на обработку канала. Из которых 24 мкс - оцифровка, оставшееся время на обработку прерывания АЦП, переключения мультиплексора, укладку информации в TX-буфер.

Ацп 10 бит, еще один байт это номер канала зачем 7 байт на канал? Если каналов не больше 64 то информация укладывается в 2 байта

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так как подразумевается класс USB CDC, то с одного устройства мы можем передавать информацию только на одну End point, размер которой не должен превышать 64 байта. Временная сетка USB равна 1 мс. Т.е. теоретически с одного устройства по USB-CDC мы можем передавать 64 байта в 1 мс.

Это HID-устройства имеют такое ограничение (64 кБайта в секунду для Full Speed), для CDC можно передавать много Bulk-пакетов за 1 мс кадр, в пределах пропускной способности шины.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ацп 10 бит, еще один байт это номер канала зачем 7 байт на канал? Если каналов не больше 64 то информация укладывается в 2 байта

Потому что топик-стартер потребовал символ конца строки в конце отправлять. Очевидно подразумевается ASCII формат.

 

Это HID-устройства имеют такое ограничение (64 кБайта в секунду для Full Speed), для CDC можно передавать много Bulk-пакетов за 1 мс кадр, в пределах пропускной способности шины.

Я просто не разобрался как это сделать в указанном PIC-контроллере.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...