130/10=13 не такой уж и большой размах - ставь небошьшую частоту таймера и всё будет ок. (а какая точность, до единиц или до 0,1 об/мин).
Добавлено after 3 minutes 24 seconds: есть у меня код для тахометра от 120 до 7200 об/мин с фильтрами, но довольно быстрый, (останется коэффициенты подправить) вечером поищу.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Можно пойти даже дальше и виртуально расширить разрядность таймера. Считать число переполнений счётчика и прибавлять остаток из счётного регистра. Примерно так very_long_interval = ovf_cnt*65536 + TCNT1;
Ну вот, что обещал, код мой написан в кодевижне, но выдран из проекта (могут быть небольшие нестыковки) Спойлерчастотомер работает на Т1 в нормальном режиме + прерывание по совпадению, время переполнения не меньше макс времени между импульсами настройка тахометра и обработчик прерывания
Код:
//тахометр #define ContRegen 32 //max количество импульсов #define TimUsr 0x10000 //max время усреднения 0x10000=0,5c (для данной частоты таймера) #define T1St TCCR1B=0x83 #define T1Sp TCCR1B=0x80
volatile unsigned long int Speed; volatile unsigned int LastMeas[ContRegen]; //показание счетчика в начале замера (ну и в конце прошлого замера) volatile unsigned char ContVriten; //количество достоверных замеров
{ Speed=0; i=0; while (i+2<ContVriten) //2-количество пропускаемых импульсов в начале измерения { unsigned int t=LastMeas[((ContRegen+MeasN-i)%ContRegen)]; if (Speed+t>TimUsr) break; Speed+=t; i++; }; if (i) Speed=((unsigned long int)i*125000*60)/Speed;//125000 - частота Т1 в герцах };
количество замеров для усреднения ограничивается ContRegen и TimUsr (смотря что наступит раньше)
Добавлено after 2 minutes 50 seconds: частотомер работает на входе захвата таймера Т1
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Пока проблема вот в чем. Делаю так. 2313 работает на 8 МГц от встроенного генератора. На Таймере0 крутится динамическая индикация и опрос одной кнопки.
Таймер1 настраиваем на 7,813 кГц, прерывание по переполнению (8,38 сек).
В процедуре обработки внешнего прерывания (срабатывания щелевой оптопары) unsigned long int freq=TCNT1; // сохраняем в переменную текущее значение счетчика Таймера1 TCNT1=0; // обнуляем счетчик
//вычисляем значение периода Т, сек. freq = 15748 для 30 об/мин к примеру.
Т = (7813 / freq); // Т = 7813 / 15748 получаем дробное число 0,496 сек. (Тут Я и застрял!, Все что меньше нуля и после запятой отваливается)
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Т = (7813 / freq); // Т = 7813 / 15748 получаем дробное число 0,496 сек. (Тут Я и застрял!, Все что меньше нуля и после запятой отваливается) // находим N, об/мин.
конечно, сначала умножать, а потом делить, чтобы в дроби не уйти и не быть там съеденным можно даже скобками выделирь очерёдность.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Заголовок сообщения: Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн июл 31, 2017 15:34:56
Первый раз сказал Мяу!
Зарегистрирован: Пн мар 29, 2010 12:19:06 Сообщений: 38
Рейтинг сообщения:0
Подскажите, а в CVAVR возможна работа с данными EEPROM напрямую? Т.е. я могу, скажем, проинициализировать две переменные как-то так: eeprom unsigned char epp1=10; eeprom unsigned char epp2=20;
а потом в коде оперировать ими без переприсваивания другим переменным? Например : if (epp1<epp2) операция1,операция2....; if (epp1>0) операция1,операция2....;
Добавлено after 52 seconds: только запись в них долгая, а так всё норм
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Здравствуйте! А вот кто подскажет,зачем например считают до скольки например досчитает регистр TCNT, если это может быть назначенная какая-нибудь переменная? В чем тут смысл подсчета именно таймера,а не переменной?Кто разъяснит?
Добавлено after 2 minutes 52 seconds: Собственно спросил ,ттак как нужно для работы вот этого пульта https://ru.aliexpress.com/item/Hot-Sell ... 0.0.naVpHu заодно,кто подскажет какой в нем протокол и на какой несущей частоте?
просто пока считает таймер - процессор может что нибудь другое делать.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
таймер настраивать проще на нужную частоту, вход захвата имеет аппаратный антидребезг, да и аппетит приходит во время еды: сейчас проц свободен, а потом придумаешь чем занять...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
А как прокомментируете вот такой способ получения преырывистого звонка для обычного буззера со встроенным генератором?
Муть какая-то. Диапазоны 0..4 и 5..9 вложены в 0..49 и 50..99. Лучше в двоичной системе это делать:
Код:
uint8_t ring; цикл (аппаратное прерывание или обычный while - неважно) { if (++ring & (0b00001001) // поднимаем ножку else // опускаем ножку }
Естественно, биты можно сдвигать левее, чтобы получить нужную частоту включения (0b00000001) на фоне флага разрешено/запрещено (0b00001000). Как это работает - понять очень просто. Переменная ring крутится с переполнением от 0 до 255, бипер включается при соответствующих установленных битах ring: Спойлер
А как прокомментируете вот такой способ получения преырывистого звонка для обычного буззера со встроенным генератором?
Муть какая-то. Диапазоны 0..4 и 5..9 вложены в 0..49 и 50..99. Лучше в двоичной системе это делать:
Код:
uint8_t ring; цикл (аппаратное прерывание или обычный while - неважно) { if (++ring & (0b00001001) // поднимаем ножку else // опускаем ножку }
Естественно, биты можно сдвигать левее, чтобы получить нужную частоту включения (0b00000001) на фоне флага разрешено/запрещено (0b00001000). Как это работает - понять очень просто. Переменная ring крутится с переполнением от 0 до 255, бипер включается при соответствующих установленных битах ring: Спойлер
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 43
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения