Форум РадиоКот • Просмотр темы - ATmega8/16: шим, управляемый энкодером
Сообщения без ответов | Активные темы
Страница 3 из 4
[ Сообщений: 63 ]
, , ,
Автор
Сообщение
Dimon456
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Пн май 31, 2021 18:23:19
Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54Сообщений: 1849
Рейтинг сообщения: 0
charchyard , вам было сказано
Цитата:
Прерывание таймера 0,5mc много, 1ms желательно, в том коде прерывание таймера что-то около 16мс при частоте 16МГц
потрудитесь сами пересчитать таймер
Код:
TCCR2B=(0<<WGM22) | (1<<CS22) | (1<<CS21) | (1<<CS20); OCR2A=0xF9;
Вернуться наверх
Реклама
parovoZZ
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Пн май 31, 2021 18:30:15
Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45Сообщений: 1759
Рейтинг сообщения: 0
Цитата:
Конденсаторы на контактах не панацея. Потому что идёт обгорание контактов из за замыкания заряженного конденсатора.
Ток через контакты так или иначе должен проходить, чтобы удалять оксидную плёнку. Минимальное значение коммутируемого тока указывается в даташите.
Вернуться наверх
Реклама
Demiurg
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Вт июн 01, 2021 03:58:20
Это не хвост, это антенна
Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44Сообщений: 1478
Рейтинг сообщения: 0
Это не значит, что конденсаторы обязательно нужно ставить.
Вернуться наверх
slav0n
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Вт июн 01, 2021 18:10:55
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
проблема в дятлах
_________________ ohmycode! primuss3.com
Вернуться наверх
Реклама
Выбираем индустриальные и медицинские источники питания MEAN WELL в открытом исполнении
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
Подробнее>>
Dimon456
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 08:49:52
Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54Сообщений: 1849
Рейтинг сообщения: 0
slav0n писал(а):
проблема в дятлах
ваше решение
Вернуться наверх
Реклама
slav0n
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 09:05:26
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
пожалуйста
Код:
if(PINC & (1<< PC2)) return;//if buttons and not encoder if(FLAGS.btn_enc_active) return; if((PINC & (B_OK)) == 0) return; //my code static u8 oldclk, flg; u8 clk = PINC & (1<< 5); if(flg == 0 and clk == 0){// ловим задний фронт flg = 1; FLAGS.btn_enc_active = 1; u8 dir = PINC & (1<< 4);// смотрим - туда или сюда encod_or_button_LeftRight_param_update (Enc.pt_var, Enc.lim, dir ? Enc.stp : -Enc.stp, &Enc.accelerator); } else if(oldclk and clk) flg = 0; oldclk = clk;
_________________ ohmycode! primuss3.com
Вернуться наверх
Реклама
Dimon456
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 13:34:15
Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54Сообщений: 1849
Рейтинг сообщения: 0
что-то у вас все в кучу
Код:
PINC & (1<< PC2) PINC & (B_OK) PINC & (1<< 5) PINC & (1<< 4)
?
Вернуться наверх
slav0n
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 14:19:20
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
лень - движитель прогресса
Добавлено after 8 minutes 9 seconds: репит
Код:
//my code static u8 oldclk, flg;//збиваем двэ стрелка на вчира u8 clk = PINC & (1<< 5);//биром ногу шоб знат насичас if(flg == 0 and clk == 0){// ловим задний фронт flg = 1; u8 dir = PINC & (1<< 4);// смотрым тудэ-судэ... какя разница encod_or_button_LeftRight_param_update (Enc.pt_var, Enc.lim, dir ? Enc.stp : -Enc.stp, &Enc.accelerator); } else if(oldclk and clk) flg = 0;//зидес нэ важнэ (шюткэ таков) oldclk = clk;//зидес тожэ нэважнэ (шюткэ №2) //checkаю
_________________ ohmycode! primuss3.com
Последний раз редактировалось slav0n Ср июн 02, 2021 19:08:47, всего редактировалось 4 раз(а).
Вернуться наверх
Dimon456
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 16:09:49
Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54Сообщений: 1849
Рейтинг сообщения: 0
Ну а как на счет encod_or_button_LeftRight_param_update(Enc.pt_var, Enc.lim, dir ? Enc.stp : -Enc.stp, &Enc.accelerator)? Давайте целиком код, что бы потестить что было, а то мне лень думать, а ТСу и подавно.
Вернуться наверх
Реклама
slav0n
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 16:24:23
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
целиком... а зачем? весь смысл ясен в нескольких выложенных мною строках
для программиста этого должно быть достаточно
Добавлено after 5 minutes 56 seconds: ну, а если вам так хочется, пожалуйста -
http://primuss3.com/forum/index.php?top ... 7#msg20637
_________________ ohmycode! primuss3.com
Вернуться наверх
Dimon456
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 18:24:58
Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54Сообщений: 1849
Рейтинг сообщения: 0
Так кондерчики то нужны или как?
Вернуться наверх
slav0n
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 18:30:06
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
яб вставил беспроблем
_________________ ohmycode! primuss3.com
Вернуться наверх
Dimon456
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 19:27:49
Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54Сообщений: 1849
Рейтинг сообщения: 0
Как же тогда без кондерчиков обходятся в DVD-плеерах, MP3-магнитолах, к примеру
DVD DKS-6000 , страница 24, стоят два энкодера ECHO_VOL и MIC_VOL, только подтяжка, кондерчиков то нема.
Вернуться наверх
slav0n
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 19:31:22
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
шо? ДВД? гуляйте лесом
_________________ ohmycode! primuss3.com
Вернуться наверх
Dimon456
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Ср июн 02, 2021 19:58:25
Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54Сообщений: 1849
Рейтинг сообщения: 0
А что не так?
Процессор 81С2332 система команд процессора 81С31.
Ладно бы специализированные чипы использовались, а то такой же ногодрыг.
Энкодеры подключены к портам Р50-Р53
Цитата:
Port5P-ch open-drain 8-bit high-voltage output port.Can be set in input or output mode in 1-bit units.When it is used as input port, set the output latch to “0”, and read port level read(P50 through P57).
Ладно бы была аппаратная поддержка энкодера, как в STM.
Так что не так?
Вернуться наверх
slav0n
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Чт июн 03, 2021 06:08:22
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
две глины конечно дороже силикона
_________________ ohmycode! primuss3.com
Вернуться наверх
Dimon456
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Чт июн 03, 2021 10:09:54
Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54Сообщений: 1849
Рейтинг сообщения: 0
Ваш ответ мне не понятен..?
Вот следующая схема
VELAS VC-M874 , сразу на 1 странице, энкодер VR901 подключен к чипу IC501, кондерчиков то нет.
Я то же ищу "середину", и ни как найти ее не могу.
Да же с аппаратной поддержкой STM32 не так как надо работает, если кондерчики добавить - будет, наверное, идеально. А может все дело в дешевых энкодерах?
Вернуться наверх
slav0n
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Чт июн 03, 2021 10:56:26
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
код вылизан дальше только конденсаторы (глина)
_________________ ohmycode! primuss3.com
Вернуться наверх
oleg110592
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Чт июн 03, 2021 10:58:42
Друг Кота
Карма: 32
Рейтинг сообщений: 482
Зарегистрирован: Сб сен 10, 2011 17:46:25Сообщений: 3832
Рейтинг сообщения: 0
В STM32 аппаратный энкодер хорошо работает без конденсаторов - там есть аппаратный антидребезг. Для авр использовал код от ЛИ - тоже хорошо без конденсаторов работал на самых дешевых китайских энкодерах:
http://530.ru/wwwboards/mcontrol/2142/m ... 0381.shtml з.ы. там программный антидребезг
Вернуться наверх
slav0n
Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
Добавлено: Чт июн 03, 2021 11:34:53
Опытный кот
Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15Сообщений: 882Откуда: Харьков
Рейтинг сообщения: 0
ок, все проверено, но оставлено свое
Код:
//my code static u8 oldclk, flg; u8 clk = PINC & (1<< 5); if(flg == 0 and clk == 0){// ловим задний фронт flg = 1; FLAGS.btn_enc_active = 1; u8 dir = PINC & (1<< 4);// смотрим - туда или сюда encod_or_button_LeftRight_param_update (Enc.pt_var, Enc.lim, dir ? Enc.stp : -Enc.stp, &Enc.accelerator); } else if(oldclk and clk) flg = 0; oldclk = clk; /* static u8 i; i = (i << 2) + (PINC & ((1<< 4)+(1<< 5))); s8 stp = 0; if(i == 0x70) stp = -Enc.stp; else if(i == 0xD0) stp = Enc.stp; if(stp){ encod_or_button_LeftRight_param_update (Enc.pt_var, Enc.lim, stp, &Enc.accelerator); FLAGS.btn_enc_active = 1; } */ /* //very stable, Ярослав Курус static u8 prevstate, flg; u8 curstate = PINC & 0b110000;//clk = PINC & (1 << 5), dir = PINC & (1 << 4) if(flg and curstate == 0){ flg = 0; if(prevstate != 0 and prevstate != 0b110000){ s8 step = Enc.stp; //туда if(prevstate == 0b100000) step = -Enc.stp; //сюда FLAGS.btn_enc_active = 1; encoder_parameter_update(Enc.pt_var, Enc.lim, step, &enc_accelerator); } } prevstate = curstate; if(curstate == 0b110000) flg = 1; */ /* static u8 oldclk, flg, oldd; u8 clk = PINC & (1 << 5); u8 dir = PINC & (1 << 4); if(flg and not clk){// ловим задний фронт flg = 0; if(oldd == dir){ FLAGS.btn_enc_active = 1; encoder_parameter_update(Enc.pt_var, Enc.lim, dir ? Enc.stp : -Enc.stp, &enc_accelerator); } } if(oldclk and clk) flg = 1; oldclk = clk; oldd = dir; static u8 oldclk, flg; u8 clk = PINC & (1 << 5); if(flg and clk != flg){// ловим фронт flg = 0; FLAGS.btn_enc_active = 1; u8 dt = PINC & (1 << 4); u8 dir = (dt and clk) or (!dt and !clk) ? 1 : 0;// смотрим - туда или сюда encoder_parameter_update(Enc.pt_var, Enc.lim, dir ? Enc.stp : -Enc.stp, &enc_accelerator); } if(oldclk and clk) flg = 1; oldclk = clk; */ /* static u8 old; u8 cur = 0; if(PINC & (1<<4)) cur |= 2; if(PINC & (1<<5)) cur |= 1; if(cur == (old & 0b00000011)) return; old <<= 2; old |= cur; s8 stp; if(old == 0b11100001) stp = Enc.stp; else if(old == 0b11010010) stp =-Enc.stp; else return; FLAGS.btn_enc_active = 1; encoder_parameter_update(Enc.pt_var, Enc.lim, stp, &enc_accelerator); */ /* //full speed ~~~~~~~~~~~~~~~~~~~~~~~~~ static u8 oldclk; const u8 clk = PINC & (1<<4); if(oldclk != clk){// catch the front pulse clk ловим фронт oldclk = clk; u8 p = PINC & 0b110000; u8 dir = (p == 0b110000 or p == 0) ? 1 : 0; FLAGS.btn_enc_active = 1; encoder_parameter_update(Enc.pt_var, Enc.lim, dir ? Enc.stp : -Enc.stp, &enc_accelerator); } //full speed accurate ~~~~~~~~~~~~~~~~~~ // s8 pos = 0; static u8 prevState = 0; const int8_t increment[16] = {0, -1, 1, 0, 1, 0, 0, -1, -1, 0, 0, 1, 0, 1, -1, 0}; u8 curState = 0; if(PINC & (1<<4)) curState |= 2; if(PINC & (1<<5)) curState |= 1; if(curState != prevState){ s8 pos = increment[curState | (prevState << 2)]; prevState = curState; s8 stp = 0; if(pos == -1) stp = Enc.stp; else if(pos == 1) stp =-Enc.stp; else return; FLAGS.btn_enc_active = 1; encoder_parameter_update(Enc.pt_var, Enc.lim, stp, &enc_accelerator); } */
_________________ ohmycode! primuss3.com
Вернуться наверх
Страница 3 из 4
[ Сообщений: 63 ]
, , ,
Кто сейчас на форуме
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения