Задача: подсчет кол-ва оборотов в минуту некоего вращающегося девайса. Диапазон измерений от 15 до 199 об/мин т.е. всего 184 значения отобразить на индикаторе. Датчик - геркон. Мерить желатьельно быстро, за 1-2 оборота поскольку обороты меняются часто. Первое и единственное что приходит на ум - прерывание по изменению уровня и выгрузка значения из таймера с дальнейшим преобразованием. Вот тут и проблема. Периоды импульсов в пределах 0.302 - 4 сек. Контроллер PIC16F631 со встроеным кварцем на 31кГц. Получается машинный цикл 0.000126 cек. Если использовать 16-битный таймер без предделителя, то этого достаточно чтобы покрыть весь диапазон измерений. НО это будет 16 бит причем всего 184 уникальных значений, а нужно уместить это в 8 бит причем последовательно, т.е. примерно так:
Код: Выделить всё
15 об/мин = FF
16 об/мин = FE
17 об/мин = FD
и т.д.Нужно это для табличной конвертации и вывода на дисплей. Памяти у этого контроллера мало и гигантские таблицы с конвертированием 2-байтных чисел не лезут, к тому же нет абсолютной уверенности что 0x11E2 соответствующий по расчетам 104 об/мин будет именно таким значением, а не 0x11E3 и т.д. из-за погрешности (в расчетах, отклик на прерывание и т.д.) что усложняет работу с таблицами. График период-обороты нелинейный, поэтому просто подгоняя частоту таймеров, предделители или програмные постделители ничего не выйдет. Гляжу в алгоритмы тахометров, но там принцип чуток другой и никак не соображу как же это реализовать в моём случае. В голову лезут только безумные и ошибочные мысли, даже не скажу какие - самому жутко что вроде простая задача, а сообразить не получается
Заранее спасибо
