А зачем умножеие - деление, если достаточно нескольких ступеней вычитания/сложения с константами? А в накопитель сразу двоично-десятичные тетрады укладываются отдельно для 10000, 1000, 100 и табличный преобразователь остатка (10ки и 1цы)..
Я не программист, это взято из журнала Радио. Я подкорректировал только делитель. Теперь при 100Гц показывает ровно 6000. Если можете пожалуйста поправьте asm. Помогите такому же пенсионеру.
Вложения:
Комментарий к файлу: Схема может пригодиться. Схема тахометра.jpg [79.62 KiB]
Скачиваний: 197
Более неудобного варианта схемы (относительно примененного индикатора) найти трудно... Тут проще(быстрее) не править, а заново написать или к автору конструкции обратиться. Что она хоть мерить должна? В смысле диапазона значений и их наименований (герцы, обороты в минуту или еще чего)?
Тахометр измеряет обороты в минуту. Он собран и работает. Мне надо добавить пятый разряд десятков тысяч. Сейчас измеряет от 30 до 9999 оборотов, далее просто не видно десятки тысяч.
Если знаете, в каком номере журнала "Радио" опубликована оригинальная статья? Каковы максимальные обороты реальной машины? На самом деле проще написать новый код (на C). И у этих дисплеев есть проблема с реальным тестом - их уже трудно найти.
пакостная штука, но таки работала. В наличии уже даавно нету. Судя по протоколу надо будет добавлять тетраду как в обработчик данных, так и в протокол пересылки из МК в дисплей.
Если можно сфотографируйте дисплей, чтобымогли получить представление о ориг. показаниях. Получается ---0000--- без ввода? На 10 об. ---0010--- отображается?
Прожка просто чудеса изврата... Это в отношении вычислений длительности входного импульса и формирования опорного сигнала... На основе командных циклов и "волшебной константы" Как в принципе и схемка - "дробный" кварц 3,58 МГц вместо штатного 4 или 20 МГц больше для UART подходит (3.579545 Мгц)... Вывод там кстати сразу во все позиции дисплея сделан - при корректной математике и 16-разрядном счетчике теоретически проблем не должно быть (просто замещаем один из пробелов нужными данными)... ... но алгоритм вычислений (это только автор прожки понять может)... у нас ведь по существу простейший периодометр/частотомер
Max oбороты меньше 65535? (uint16_t при печати дисплея). Кварц не 3,579545 MHz, a 4 MHz? (из-за счетов мне это нужно)
Уже успешно написал "драйвер" для HT1611 , подключен к одним и тем же пинам. Остался тахометр, посмотрим как организовать тестирование, он для меня на данный момент сложнее.
И интересно, почему в оригинал на вход выбран PB2, а не RB0/INT или RA4/T0CKI, RB6/T1CKI, но это мысли в письменной форме ...
Да, конечно меньше. Не более 20000 об/мин. Кварц 4 Мгц. Я завтра на некоторое время исчезну из сети, не обижайтесь если не смогу ответить. Спасибо большое. Входы/выходы можете поменять, для меня это не проблема, я в них не понимаю. Печатку еще не делал.
Последний раз редактировалось ALEX-10 Пт июл 07, 2023 21:10:14, всего редактировалось 1 раз.
Такое впечатление, что в первоисточнике была привязка к UARTу - формирование "счетного окна" за счет TxD (пересылка байта данных в качестве строба). Вывод RB2 на схеме - он же RB2/TX/CK... А вот в приложенной прожке уже "некая импровизация"...
veso74, посмотри в сторону CCP1, CCP2. Режим - захват - Capture. Примерно так: 1. CCP настроен на захват, ожидание пол. фронта. TMR1 - 1uS 1.1 пишем и прерывание по переполнение TMR1 и по захвата
2. Запускаем TMR1 - старт захвата. Момент запуска должен быть по падающим фронтом.. 2.1 если сработало прерывание по захвата (полож.) меняем захват на срабатывание по падающим фронтом. CCPR1H:CCPR1L время отриц. пульса. Сохраняем 3. Если сработало по падающим то в CCPR1H:CCPR1L время пол. пульса - сохраняем и то-же делаем и для отриц. пульса. Автор t628asm.asm так сделал.
Сумируем время положителного и отрицательного и получаем период. Далее арифметика.
2.1 Можно и не меняя захват по падающим. Работать только по нарастающим фронтом - запуск по пол. фронту. Тогда в CCPR1H:CCPR1L будет период сигнала. И арифметика.
diplodok, если можно, на asm с идеей модифицируйте код из задания ALEX-10. Я тестирую (C) использование ext interrupt (PB0), L to H и беру сколько timer0 насчитал. Пока работает.
Для тахометра с оборотами в минуту можно и обычный программный счетчик. Только предпочтение аппаратному антидребезгу датчика. Измерительное окно в 1,875 секунды и считаем пришедшие за это время импульсы. Затем сдвиг результата влево 5 раз (*32) - получаем двоичный результат "обороты в минуту". Остается только привести его к двоично-десятичному виду (потетрадно) и вывести на индикацию. Для разнообразия можно усреднение добавить - но тогда на реакцию потребуется секунд 6 (высокая инерционность). Можно и через периодомер - но тогда надо подбирать длительность тактовых импульсов для T1 так, чтобы упростить математику.
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения