А вот я и не врубаюсь, используется или нет? Похоже, что это спрятано внутрях ардуины. В коде есть только установка частоты ШИМ - 31250 Гц, путём установки делителя равного 1:
Код:
void set_motor_pwm_frequency(int frequency) { switch (frequency) { case PWM_31250_HZ: // Divide by 1. frequency = 31.25 kHz; bitClear(TCCR1B, CS11); bitSet(TCCR1B, CS10); break;
И analogWrite принимает аргумент от 0 до 255. Получается, что счетчик считает только до 255? Т.е. тактовая 8Мгц (хотя мне казалось, что кварц 16 МГц), делим на 256 - получаем частоту ШИМ 31250. Или всё же 16Мгц, а TOP установлен как 1FF, а analogWrite записывает со сдвигом? Т.е. замерить интервал невозможно, так как счетчик уже 10 раз переполнится между импульсами? А менять частоту ШИМ двигателей я не могу - мне нужно снять характеристики именно в таком режиме.
В вашем случае измерение периода не должно быть очень точной функцией. (Однако это напр. не частотомер с разрешением 1 Hz на напр. 50 MHz). Почему бы не использовать готовые функции Arduino? Напр. pin change interruption ISR и micros()? Изменение вверх: начало измерения время, изменение вниз: остановка, разница: время.
Т.е. замерить интервал невозможно, так как счетчик уже 10 раз переполнится между импульсами? А менять частоту ШИМ двигателей я не могу - мне нужно снять характеристики именно в таком режиме.
У меня есть тахометр на tiny2313, у которого таймер 1 имеет такой же функционал как и у mega328. Спойлер Программа считает длительность входного сигнала с периодом p_pwm=8192 такта для работы ШД. Не вижу никаких противопоказаний для задания p_pwm=256 тактов и 2-х байтном накопительном счетчике.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Starichok51, зачем!? kote52, Добавьте в прерывании доп.счетчик байтовый. что б изменение светодиодов и сдвиг маски выполнялись каждый 125й тик таймера.
Привет. Понадобилось мне на AtTiny13 генерировать секунду. На внутреннем генераторе. Никак не могу посчитать как настроить таймер. Всё получается какие то дробные числа. 9,6МГц. Свободных регистров есть. Помогите пж настроить таймер. Для меги 8 всегда брал RC на 8 МГц и получал 1 мкС.
akl, счетчик миллисекунд до секунды в любом случае программный. а вот 37500 уже нацело на 1000 не делится, поэтому не будет сработки каждую миллисекунду. Если стоит задача считать секунду - то да, можно. Если стоит задача иметь миллисекундный таймер - то нет.
Just_Fluffy, не обязательно делить на 256, у таймера можно применить режим СТС. для получения 1мс нужно разделить на 9600. 9600 = 128 * 75. таймером делим на 128, потом программным счетчиком делим на 75 и получаем 1 мс.
_________________ Мудрость приходит вместе с импотенцией... Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Starichok51, тут речь о прескалере. И о том, что б получить период счета 1мс аппаратно, без досчитывания программным счетчиком. Тиня мелкая, там всего 512 команд влазит. И если аппаратно можно что то сделать, то лучше аппаратно, нежели программно.
Прескалер может быть 1, 8, 64, 256, 1024 таймер 8 бит. Делитель на 9600 можно сделать так: Fcpu/1 -> таймером разделить на 9600 - не подходит, таймер может максимум на 256 делить Fcpu/8 -> таймером разделить на 1200 - не подходит, таймер может максимум на 256 делить Fcpu/64 -> таймером разделить на 150 - подходит Fcpu/256 -> таймером разделить на 37,5 - не подходит, таймер не может делить на дробное число. Но если достаточен период счета 2 мс - то подходит Fcpu/1024 -> таймером разделить на 9,375 - не подходит, таймер не может делить на дробное число. Но если достаточен период счета 8 мс - то подходит
Резюмируя: Получить 1 мс без программных счетчиков можно, разделив тактовую 9,6Мгц прескалером на 64 и установив коэффициент 150 пересчета счетчика (СТС).
Кстати, если нужно считать секундные импульсы, то есть смысл взять прескалер 1024, коэфф. пересчета счетчика 75 - тогда получим период счета 8 мс. Или 125 тиков таймера в секунду, т.е. можно обойтись однобайтовым счетчиком. Если же нужны интервалы по 1 мс - то счетчик миллисекунд уже будет двухбайтовый, что бы насчитать от 0 до 999.
Хотя тут все зависит от постановки задачи - что из временнЫх интервалов нужно ciaas.
Кстати, в тиньке есть еще один "таймер" - прерывание АЦП - В непрерывном режиме АЦП будет дергать прерывание каждые 13 тактов. Тактирование АЦП идет через делитель 2, 4, 8, 16 32, 64 или 128. Соответственно, имеем 7 фиксированных делителей - от 2*13 до 128*13 9600 / (2*13) = 369,2 кГц 9600 / (128*13) = 5,77 кГц
OKF, в то м то и дело, что мало. максимум на 1024 можно поделить тактовую. Оскалом тактовую можно занизить в 2 раза (в теории). Но даже 4800000 Гц / (1024*256) - это 18.3 Гц
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 16
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения