Свежие обсуждения
Источники питания

"Импульсный блок питания на базе БП ПК"

1 139 184

Такого точно нет, прерывания никак не блокируются. В общем, надо Линка трясти сильнее.

 

GM: В общем, надо Линка трясти сильнее

А что я? Я сам не знаю как оно там сейчас работает. Когда я у себя поменял "хитрый" энкодер на нормальный, то получил ту ситуацию которую вы описываете, т.е. не было никакой реакции на вращение вала. Я взял и отредактировал подпрограмму обработки энкодера т.е. сделал её работоспособной на нормальном энкодере. По одному прерыванию проверяется состояние двух портов и принимается решение о прибавлении или вычитании единицы.

 

Link: По одному прерыванию проверяется состояние двух портов и принимается решение о прибавлении или вычитании единицы.

О! А это не оно?
На момент прерывания состояния портов равны либо 01, либо 10 в зависимости от направления вращения. Если состояния портов фиксировать сразу по прерыванию, а потом проверять, то вот он и ответ.

 

тоесть если я вас правилно понял в текущей версии работают кнопки и лищь хитрые энкодеры старого типа?
если взять новый класический он может незаработать?

 

DWD: то вот он и ответ.

Ответ на что?

musor: если взять новый класический он может незаработать?

Ага.

 

Разве этот энкодер старый - инкрементный, 2-х битный с кодом Грея, 24 импульса на оборот?

Если он старый, значит в двух интернет магазинах Днепра и Киева продаются только старые энкодеры...

musor: если взять новый класический он может незаработать?

А что значит "новый класический"? Какой у него алгоритм работы? Чем отличается от того, ссылку на который я привёл?

 

Link: Ответ на что?

Предположение о Вашем алгоритме отработки энкодера.
Вы же говорите, что:
Link: Я сам не знаю как оно там сейчас работает.

 

DWD: Предположение о Вашем алгоритме отработки энкодера.
Вы же говорите, что:

Всё уже запуталось для вас как я понимаю.
У вас сейчас программа которая по идее не должна работать с энкодером т.к. программно обработка энкодера производится неправильно. По этому у GM и возник вполне резонный вопрос - как оно может работать? Я рассказал откуда ноги растут у такой программной реализации, но это абсолютно не объясняет почему неправильная программа работает с "правильным" энкодером.

 

Link: Всё уже запуталось для вас как я понимаю.

Нет, для меня как раз всё понятно - работает и я доволен. Что мне ещё нужно?..

А вот у GM и Вас - сплошные непонятки: один не может понять, как программа умудряется работать, а второй - как он умудрился такое сочинить.

 

DWD: На момент прерывания состояния портов равны либо 01, либо 10 в зависимости от направления вращения. Если состояния портов фиксировать сразу по прерыванию, а потом проверять, то вот он и ответ.

Кстати там всё прозаичней делается, к примеру прерывание настроено по спаду напряжения т.е. на порту на котором возникает прерывание всегда будет нуль, а вот на втором порту в момент прерывания будет либо 0 либо 1 и исходя из стояния второго порта уже и делается операция прибавления или уменьшения. Подпрограмма становится короче и нужно всего одно прерывание в место двух. Но вся эта красота может работать только на нормальном энкодере, в вашей программе используется два прерывания, и почему она работает у вас это действительно большой вопрос.