Например TDA7294

Форум РадиоКот • Просмотр темы - ATmega8/16: шим, управляемый энкодером
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Пт июл 04, 2025 23:29:09

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 63 ]    , , 3,  
Автор Сообщение
Не в сети
 Заголовок сообщения: 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;


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
СообщениеДобавлено: Пн май 31, 2021 18:30:15 
Мудрый кот

Карма: 11
Рейтинг сообщений: 114
Зарегистрирован: Пт июн 01, 2018 07:28:45
Сообщений: 1759
Рейтинг сообщения: 0
Цитата:
Конденсаторы на контактах не панацея. Потому что идёт обгорание контактов из за замыкания заряженного конденсатора.

Ток через контакты так или иначе должен проходить, чтобы удалять оксидную плёнку. Минимальное значение коммутируемого тока указывается в даташите.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
СообщениеДобавлено: Вт июн 01, 2021 03:58:20 
Это не хвост, это антенна

Карма: 4
Рейтинг сообщений: 139
Зарегистрирован: Ср июн 25, 2008 15:19:44
Сообщений: 1478
Рейтинг сообщения: 0
Это не значит, что конденсаторы обязательно нужно ставить.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
СообщениеДобавлено: Ср июн 02, 2021 08:49:52 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
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


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: 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)
?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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 раз(а).

Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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)?
Давайте целиком код, что бы потестить что было, а то мне лень думать, а ТСу и подавно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
СообщениеДобавлено: Ср июн 02, 2021 18:24:58 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Так кондерчики то нужны или как?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
СообщениеДобавлено: Ср июн 02, 2021 18:30:06 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
яб вставил беспроблем

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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, только подтяжка, кондерчиков то нема.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
СообщениеДобавлено: Ср июн 02, 2021 19:31:22 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
шо? ДВД? гуляйте лесом

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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.
Так что не так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
СообщениеДобавлено: Чт июн 03, 2021 06:08:22 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
две глины конечно дороже силикона

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
СообщениеДобавлено: Чт июн 03, 2021 10:09:54 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: 0
Ваш ответ мне не понятен..?
Вот следующая схема VELAS VC-M874, сразу на 1 странице, энкодер VR901 подключен к чипу IC501, кондерчиков то нет.

Я то же ищу "середину", и ни как найти ее не могу.
Да же с аппаратной поддержкой STM32 не так как надо работает, если кондерчики добавить - будет, наверное, идеально. А может все дело в дешевых энкодерах?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: ATmega8/16: шим, управляемый энкодером
СообщениеДобавлено: Чт июн 03, 2021 10:56:26 
Опытный кот
Аватар пользователя

Карма: -14
Рейтинг сообщений: -98
Зарегистрирован: Ср дек 01, 2010 00:38:15
Сообщений: 882
Откуда: Харьков
Рейтинг сообщения: 0
код вылизан
дальше только конденсаторы (глина)

_________________
ohmycode!
primuss3.com


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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
з.ы. там программный антидребезг


Вернуться наверх
 
Не в сети
 Заголовок сообщения: 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


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 63 ]    , , 3,  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y