Мой ход на эту тему.
Для сбора информации с датчиков сделаем так. Модуль BM9308 (PIC18F2523) будет логгером.
Его схема:
http://www.masterkit.ru/main/scheme.php?num=1322Работаем так:
все порты на вход,
а затем по кругу все свободные линии: дискретный вход -> счетчик -> аналоговый вход
В итоге. Кроме 16(шестнадцати) дискретных линий в нашем распоряжении (16)шестнадцать счетчиков и 10(десять) 12-битных АЦП.
В RAM, данные с линий, раскладываются так:
Состояние дискретных входов это два байта в 0х00 и 0х01. Наблюдаем все линии по битам.
Счетчики накапливают подсчитанные импульсы в 32 ячейках начиная с 0x10. По два байта на счетную линию начиная с младшего.
Данные с аналоговых входов обновляются в двадцати ячейках начиная с 0x30. По два байта на каждую аналоговою линию начиная с младшего.
Очень полезные адреса с 0х02 по 0х09 (см. комментарий). Например, ADR RAM=0x08 это ячейка оперативного хранения времени накопления в аппаратных таймерах. Можете налету её менять для изменения времени накопления таймеров. После инициализации в нее заносится значение PER_TMR =100 мс, при этом максимальная входная частота = 655 360 Гц. Для работы с большими частотами надо выбирать меньшее время накопления так, например, для PER_TMR =10 (мс) Fmax=6 553 600 Гц
Вот. Теперь модуль универсальный.
К любой линии, не задумываясь что она такая, подключаем любой датчик. Но данные с этой линии забираем в той области RAM к которой принадлежит подключенный датчик. Если он аналоговый, то начиная с 0x30, если это импульсы, то считаем их в 0x10, если дискретный датчик то в 0х00 или 0х01.
Данные с этих адресов снимаем/записываем по активированному при инициализации каналу I2C. В терминал эти данные можно забрать по USB порту модуля BM9300/L/H подключенному к тому же I2C.
Учу технику жить.