Форум РадиоКот http://radiokot.ru/forum/ |
|
Программная обработка Энкодера на AVR http://radiokot.ru/forum/viewtopic.php?f=57&t=77569 |
Страница 2 из 5 |
Автор: | Artos [ Вт сен 04, 2012 14:40:49 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
Я знаю что МК "тупорылее" от логики. 595 может до 100мгц работать. Меня интересует какая тактовая будет от МК если тактовый генератор на 4мгц. Если память не изменяет мне то AVR изменяет состояние порта за 2такта и еще ~ 2такта теряется на циклы. по подсчетам F SPI = ~1мгц. |
Автор: | ploop [ Вт сен 04, 2012 14:57:54 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
Могу измерить дома от 20. Код на асме. Вот: |
Автор: | Artos [ Вт сен 04, 2012 15:02:55 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
Даааа , тем кто "волочит" в АСМе надо памятник поставить ![]() Ничего к сожалению в нем не понимаю... Начал программить не давно (несколько лет) и то сразу на Си. Оооочень трудно далось мне. Мозги видать в другую сторону заточены. Знаю что АСМ на порядок быстрее от Си. Поэтому сравнение не совсем корректное, но все равно ооочень интересно на какой частоте у Вас работает SPI. Думаю не выше F/4 |
Автор: | ploop [ Вт сен 04, 2012 15:11:15 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
Да простые циклы он так же обработает. |
Автор: | ketrosi [ Вт сен 04, 2012 15:16:34 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
У меня так сделано (CVAVR) Код: #define Enc PINC.3 // ВХОД енкодера // INT1 interrupt [EXT_INT1 void ext_int1_isr(void) // прерывание от ЭНКОДЕРА { if (Enc==0) { if (Enc==0) { ваш код (у меня if(OCR0<235) {OCR0+=1;} ) } } if (Enc==1) { if (Enc==1) { ваш код ( у меня if(OCR0>2) {OCR0-=1;}) } } } энкодер подключеный одним выводом на INT1, другой вывод Enc (пин необходимого вам порта настроенный на ввод) защита от дребезга имеется в виде конденсаторов на 0,1 и еще програмная. INT0 можно задействовать на кнопку энкодера или подключить еще один энкодер при необходимости. |
Автор: | ploop [ Вт сен 04, 2012 19:10:51 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
Измерил. Идут посылки по 8 бит с небольшими паузами (пауза из-за условий для инверсии, смотрите код). Между группами, после того, как передадутся 112 бит, паузы довольно большие (10-20 мс). Выглядит так (ch1 - такт, ch2 - данные): Вот тактовый импульс подробно, довольно длительный: Измерим: Импульс ровно 150нс. Это вас интересовало? Реализовано так: Код: sbi sh_cp_port,sh_cp_bit #Выставили бит на порт
nop #Пропустили такт cbi sh_cp_port,sh_cp_bit #Сняли бит |
Автор: | shads [ Ср сен 05, 2012 00:46:37 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
Ооооо..... Не думал что столько вариантов обработки енкодера. А я тут на днях тоже замутил процедурку, робе нормально..... |
Автор: | Аlex [ Ср сен 05, 2012 01:56:02 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
Вариант, который я юзаю: |
Автор: | ketrosi [ Ср сен 05, 2012 02:24:20 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
ketrosi писал(а): У меня так сделано (CVAVR) Код: #define Enc PINC.3 // ВХОД енкодера // INT1 interrupt [EXT_INT1 void ext_int1_isr(void) // прерывание от ЭНКОДЕРА { if (Enc==0) { if (Enc==0) { ваш код (у меня if(OCR0<235) {OCR0+=1;} ) } } if (Enc==1) { if (Enc==1) { ваш код ( у меня if(OCR0>2) {OCR0-=1;}) } } } энкодер подключеный одним выводом на INT1, другой вывод Enc (пин необходимого вам порта настроенный на ввод) защита от дребезга имеется в виде конденсаторов на 0,1 и еще програмная. INT0 можно задействовать на кнопку энкодера или подключить еще один энкодер при необходимости. также можно обрабатывать прерыванием INT1 еще и кнопку подключив ее через диод ко входу INT1 и прямым подключением ко входу нужного порта. Таким образом одно прерывание обрабатывает один энкодер (кнопку и крутилку), и упрощается сама программа. Много чего можно обслуживать по одному прерыванию используя диоды по схеме монтажное или. срабатывает прерывание , в нем проверяются пины портов, определяется по какому произошла сработка, далее выполняются нужные действия. |
Автор: | Artos [ Ср сен 05, 2012 08:17:01 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
Код: if (enc && flags_enc) // ловим импульс { if(enc1) // вправо { right(); } else // влево { left(); } flags_enc=0; } if(!(enc)) flags_enc=1; // сбрасываем флаг Этот код полная имитация работы энкодера с внешним прерыванием. Но вместо внешнего прерывания используется флаг. Код не тестировал , но должен работать. |
Автор: | Artos [ Ср сен 05, 2012 08:20:21 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
ploop писал(а): Измерил. Идут посылки по 8 бит с небольшими паузами (пауза из-за условий для инверсии, смотрите код). Между группами, после того, как передадутся 112 бит, паузы довольно большие (10-20 мс). Выглядит так (ch1 - такт, ch2 - данные): Реализовано так: Код: sbi sh_cp_port,sh_cp_bit #Выставили бит на порт nop #Пропустили такт cbi sh_cp_port,sh_cp_bit #Сняли бит Спасибо Вам большое за измерения! 160нс - это получается где то ~3.3мГц (импульс и пауза) |
Автор: | ploop [ Ср сен 05, 2012 08:30:43 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
150 нс. Там всё как в аптеке: частота 20МГц, 50нс - один такт, импульс подаётся за три такта - установить порт, nop, сбросить порт. Пауза там гораздо длиннее, т.к. идёт обработка в этот момент. И она не имеет значения, хоть час будет, регистры будут ждать. |
Автор: | ketrosi [ Пт апр 18, 2014 21:57:30 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
ketrosi писал(а): ketrosi писал(а): У меня так сделано (CVAVR) Код: #define Enc PINC.3 // ВХОД енкодера // INT1 interrupt [EXT_INT1 void ext_int1_isr(void) // прерывание от ЭНКОДЕРА { if (Enc==0) { if (Enc==0) { ваш код (у меня if(OCR0<235) {OCR0+=1;} ) } } if (Enc==1) { if (Enc==1) { ваш код ( у меня if(OCR0>2) {OCR0-=1;}) } } } энкодер подключеный одним выводом на INT1, другой вывод Enc (пин необходимого вам порта настроенный на ввод) защита от дребезга имеется в виде конденсаторов на 0,1 и еще програмная. INT0 можно задействовать на кнопку энкодера или подключить еще один энкодер при необходимости. также можно обрабатывать прерыванием INT1 еще и кнопку подключив ее через диод ко входу INT1 и прямым подключением ко входу нужного порта. Таким образом одно прерывание обрабатывает один энкодер (кнопку и крутилку), и упрощается сама программа. Много чего можно обслуживать по одному прерыванию используя диоды по схеме монтажное или. срабатывает прерывание , в нем проверяются пины портов, определяется по какому произошла сработка, далее выполняются нужные действия. использую такой метод постоянно |
Автор: | ИС-пытатель [ Пт апр 18, 2014 22:26:30 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
ГГ ![]() Чувак, ты о чем? )) Там последнее сообщение два года назад было. ) Рад за тебя, что ты это используешь постоянно! ![]() |
Автор: | Gerik_PP [ Сб май 07, 2016 14:09:32 ] | ||
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR | ||
Всем привет! Чтоб зря не мучится на макеткой, спрошу - если подавить дребезг энкодера аппаратно с помощью логики (схема в прицепе), имеет место быть такое решение?
|
Автор: | Demiurg [ Сб май 07, 2016 18:29:11 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
Автор: | Gerik_PP [ Вс май 08, 2016 01:58:05 ] | |||
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR | |||
Demiurg писал(а): Спасибо! ![]() Не сочтите за труд, гляньте пжлста схему. ножки выхода триггеров правильно подключил? (в прицепе)
|
Автор: | Demiurg [ Вс май 08, 2016 07:37:17 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
Gerik_PP писал(а): ... Входы подтяните резисторами на минус питания. Так как КМОП микросхемы. Полевые транзисторы управляются электрическим полем, потому ловят малейшую статику. Такое включение триггеров я назвал "идеальным триггером". История такова: когда я начал изучать цифровую технику (примерно лет 13-15 мне было, точно не помню, больше 20 лет назад), дошло дело до триггеров. RS-триггеры известны запрещенным состоянием, когда на обоих входах активный уровень. И я не поверил, что нельзя сделать идеальный триггер. Я ломал, ломал голову, включал так и сяк логические элементы, так и не придумал. И забросил это дело. До то момента, когда я начал работать на предприятии. Нужно было сделать блок управления для станка. МК тогда я не знал. Вопрос стоял просто. Сделаю блок управления, остаюсь работать. Нет - нет. И тут проблема "идеальный триггер" встала передо мной спустя 10 лет во всей красе. Я все мозги наизнанку вывернул, не выходит и все тут. И я отложил эту проблему, решил разобраться с другой задачей. Реле времени. На руках были реле времени советских времен. На К561ИЕ8. Разбирался с этой микросхемой, баловался, пробовал разные включения. Как-то раз я сидел, пробовал очередное включение. И тут меня осенило. Суть такова. Счетный вход - считаем "S" входом. R - так и остается сбросом. Соединяем выход 1 со входом запрета. Выход 0 - инверсный выход триггера. 1 - прямой выход триггера. То есть, совершенно случайно решил свою проблему "Идеальный триггер"! Позже я анализировал все известные триггеры. Получается, что мои триггеры можно сделать на D-триггерах и JK-триггерах. Станок в итоге я сделал. И он успешно отработал в тяжелом, круглосуточном режиме несколько лет. И я в то время очень удивился, что никто не применял такое включение D-триггеров. Многие схемы можно было многократно сократить. В итоге кол-во плат гораздо меньше выходило бы. Еще позже, когда я познакомился с конечными автоматами, понял, что по сути, мои схема на этих триггерах - конечные автоматы. С жестко заданной логикой. Без промежуточных состояний, как если бы схема была собрана на обычной логике. Такая вот история... |
Автор: | Gerik_PP [ Вт май 10, 2016 19:52:29 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
в дополнение темы http://radiokot.ru/forum/viewtopic.php?f=61&hilit=%D0%BD%D0%B5%20%D0%BE%D1%87%D0%B5%D0%BD%D1%8C%20%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%8B%D0%B5&t=115308 |
Автор: | Gerik_PP [ Пт июл 22, 2016 23:21:20 ] |
Заголовок сообщения: | Re: Программная обработка Энкодера на AVR |
ploop писал(а): Да дребезг программно нормально отсекается. Если сами не придумаете, вот алгоритм Леонида Ивановича, раскомментирован до нельзя... Браво!!! Особенно радует то, что решение без временных задержек. Спасибо, Леонид Иванович! |
Страница 2 из 5 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |