Здравствуйте! Я полнейший лохопэт в мк и в Си. Есть Атмел Студио и Протеус на пц. Отладочных плат и места , чтоб это всё запустить пока нет. Необходимо в симуляторе как-то выполнить такую задачку: два инкрементальных энкодера с кнопками должны управлять двумя каналами таймеров-счётчиков Т0 и Т1 в режиме шим. Диапазон заполнения шим сигнала должен плавно меняться от 0 до 100% вращением энкодера по часовой и обратно от 100% до 0 с шагом 0.25...1%. Блокировка и разблокировка энкодеров кнопками на оси. Запомнить заполнение при отключении питания и вернуться к установкам при включении... я уверен, многие делали подобное, ткните в подобные темы, пожалуйста...
_________________ душа человеческая темна и с легкостью обращается ко злу
нашёл в сети схему аппаратного разделения сигналов направления вращения вала энкодера и подавления дребезга. при вращении в одну сторону, импульсы появляются на одном выходе (верхний 2and), при вращении в противоположную - на нижнем 2and. т.е. кусман кода дешифровки направления и подавления можно скомкать и пульнуть в корзиночку... а вот что дальше делать? как инкрементировать/декрементировать ширину шим импульсов по сигналам А и В? Спойлер если импульсы в канале А опережают импульсы в канале В, то сигнал появляется на нижнем выходе, а на верхнем 0 Спойлер если наоборот, то Спойлер т.е. как двумя кнопками + и - сделать шим 0...100% с шагом 0.5...1% по каждому щелчку энкодера?
_________________ душа человеческая темна и с легкостью обращается ко злу
Необходимо в симуляторе как-то выполнить такую задачку: два инкрементальных энкодера с кнопками должны управлять двумя каналами таймеров-счётчиков Т0 и Т1 в режиме шим. Диапазон заполнения шим сигнала должен плавно меняться от 0 до 100% вращением энкодера по часовой и обратно от 100% до 0 с шагом 0.25...1%. Блокировка и разблокировка энкодеров кнопками на оси. Запомнить заполнение при отключении питания и вернуться к установкам при включении...
Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
когда создаю проект в Атмел, то прописываю в нём ATmega168P и вставляю код из блокнота заместо начальной надписи int main (void) на пищет вот что Спойлер
_________________ душа человеческая темна и с легкостью обращается ко злу
Для начала разделить все ТЗ на логические блоки. Запись чтение EEPROM, энкодер. Это примеры. Плевать что. Проектирование сверху вниз. Задумывается все устройство или концепция, потом мы начинаем есть мамонта кусочками. Мамонта как сожрать. Только кусочками. Иначе как в том анекдоте. Мне б такое хлебало, медок наворачивать. Модульное программирование. Весь проект дробится. Декомпозиция, анализ, синтез. Когда раздербанили весь проект на кусочки и отладили каждый кусочек отдельно, начинаем продумывать взаимодействие между кусочками. Дальше сами. Уж простите, крайне занят. Как делать, удочку дал.
А я думал, ну как бы удочку кинуть. А то все мимо и мимо этой темы проходите. Вам что 30 минут времени своего жалко? У меня на этот код ушло 30 минут. Покажите вариант из цикла статей Татарчевского, SWITCH технологии или еще чего-то, декомпозиция, анализ, синтез.
накарябал в протеусе и залил код в мк Спойлер ... вместо реальных энкодеров поставил четыре генератора со сдвигом в 1/4 периода. на выходы шимов воткнул по вольтметру. нажал на кнопку. отжал кнопку. вольтметры по нулям... Спойлер библиотеку eeprom подключил... интересно, на отладочной заработало бы?
_________________ душа человеческая темна и с легкостью обращается ко злу
Последний раз редактировалось charchyard Вт янв 26, 2021 18:16:46, всего редактировалось 1 раз.
Demiurg, а я на блоки не делил, мне это не интересно было. Моя задача была в один лист уместить, я уместил, а на блоки пусть сам дробит, это просто черновой набросок. Тем более эти два канала можно было бы сделать на 1 таймере, регистр ICR1 позволил бы выжать максимум частоты, но это пусть ТС изучает. А еще мне код опроса энкодера не нравится, ну да ладно, на китайской х работает как-то, завтра осциллографом гляну еще, для интереса. Минус отсутствие индикации блокировки энкодера, в слепую.
Я на форуме выкладывал схему на логике, чтобы логикой а не программно различать направление вращения энкодера. Кстати, надо будет как нибудь сесть, попробовать реализовать программную модель этой схемы.
если есть прерывание по одной из ног енкодера, то в момент прихода прерывания сравнивай состояние выходов енкоденра: одинаковые - вращение в одну сторону, разные - в другую... если прерывания нет, то просто регулярно опрашивай выходы енкодера (50-200 Гц) и сравнивай с предыдущим - по этой разнице можно определить вращение енкодера.
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
Demiurg, таким образом можно и до специализированных микросхем дойти.
В моем коде направление вращения определяет функция enc_relative, на выходе этой функции всего три значения, <0 0 >0. Этого достаточно для принятия решения, -1 0 +1. Если этого вам мало, можете использовать параметр enc_diff который возвращает функция enc_relative. А опрос энкодера, специально даже указал, Timer Period: 0,5 ms.
Проверил на осциллографе ширину импульса, даже прибором DM90A посмотрел, все ОК, а то по светодиоду как-то не очень видно было.
Ivanoff-iv, главная задача, которая не была выполнена мной, борьба с дребезгом. Ну не нравятся вам по чему-то конденсаторы, все боитесь за контакты энкодера.
А опрос энкодера, специально даже указал, Timer Period: 0,5 ms.
и ему мешает дребезг? странно...
_________________ Просто не учи физику в школе, и вся твоя жизнь будет наполнена чудесами и волшебством Безграмотно вопрошающим про силовую или высоковольтную электронику я не отвечаю, а то ещё посадят за участие в (само)убиении оболтуса...
if ((PIN_Enc & (1<<Pin1_Enc))!= 0) {SetBit(currentState,0);} if ((PIN_Enc & (1<<Pin2_Enc))!= 0) {SetBit(currentState,1);}
tmp = stateEnc; if (currentState == (tmp & b00000011)) return;
tmp = (tmp<<2)|currentState; stateEnc = tmp;
if (tmp == b11100001) data_enc--; if (tmp == b11010010) data_enc++; return;
Но и период опроса то же влияет
оптимальным оказался 1мс, проверено на реальном железе с китайским энкодеромcharchyard, я ваши картинки моделей энкодеров не смотрел, но если они крутятся в обратную сторону то естественно нули будут, а у вас судя по настройкам генераторов они оба в какую-то одну сторону крутятся, надо было один так другой эдак настроить. Вот вам модели энкодеров найденные на просторах инета, один из библиотек самого протеуса, один с симуляцией дребезга на Атмега8.
Сейчас этот форум просматривают: Starichok51 и гости: 12
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения