Работа с Энкодером

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Работа с Энкодером

Сообщение dccharacter » 17 мар 2011, 17:04

Michael_K писал(а):Не нужно заниматься шапкозакидательством. Представьте, что в проце есть еще пара прерывний и задач, помимо чтения энкодеров, и радужные картинки тут же исчезнут.

Я стараюсь этим не заниматься.\
Вот одно доказательство: forum60/topic9456-15.html. Пока народ искал стоногие МК и сдвиговые регистры, я разработал и запрототипировал устройство, полностью удовлетворяющее запросам заказчика, на макетной плате, которая оказалась под рукой.
Вот еще одно доказательство: раз forum16/topic8784-30.html#p192459 и два forum16/topic8784-30.html#p192564, при этом тема жила несколько месяцев.
Вот еще: раз forum10/topic9534-240.html#p199504 и два forum10/topic9534-255.html#p199722

Я могу ошибаться и, к сожалению, часто это случается, но я стараюсь думать башкой, когда я что-то делаю. И вот пока в том, чтобы этот энкодер завести на любом пике в рамках условий, обозначенных ТС в этой теме, я не вижу никаких проблем.

Что-то я сегодня обидчивый какой-то.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Работа с Энкодером

Сообщение Michael_K » 17 мар 2011, 17:18

dccharacter писал(а):чтобы этот энкодер завести на любом пике в рамках условий, обозначенных ТС в этой теме, я не вижу никаких проблем.

Пожалуйста, скомпилируйте приведенный вами пример кода дла энкодера под "любой" ПИК и оцените, за какое время выполняется обработчик прерывания (в симуляторе например) от момента возникновения события, до выхода из обработчика. Если не лень, конечно. Просто интересно.
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Работа с Энкодером

Сообщение dccharacter » 17 мар 2011, 17:32

Сначала i2c. Потом - обязательно. Самому интересно.

Добавлено спустя 1 минуту 5 секунд:
Хотя если знаете и подскажете как сделать в MPLab эту оценку, то, вероятно, сегодня вечером сделаю.

Добавлено спустя 2 минуты 29 секунд:
Ну что, попробуем :-)
Simulator Stopwatch

The Stopwatch dialog can time a section of code as it run in the simulator. The Stopwatch calculations are based upon the instructions executed and the setting entered for the Processor Frequency. The processor frequency is set to 20 Mhz in this example. From the number of instruction cycles executed, the total time is calculated. This is the time it would take to run on a real chip.

The stopwatch has two pairs of readouts, one displays the total simulated clock cycles and the corresponding execution time, and the other can be zeroed out, to make a measurement from one breakpoint to the next. The stopwatch is one way to measure time in the simulator, but there is another:

Добавлено спустя 8 минут 40 секунд:
Такое пойдет???

Код: Выделить всё
#define inputA RB1
#define inputB RB2

unsigned char QEM [16] = {0,-1,1,2,1,0,2,-1,-1,2,0,1,2,1,-1,0};               // Quadrature Encoder Matrix
unsigned char Old, New, Out;

void interrupt isr (void)
{
if (IOCBF1 && IOCIE) //прерывание включаем по inputA, BREAKPOINT1
{
Old = New;
New = inputA * 2 + inputB;
Out = QEM [Old * 4 + New];
NOP; //BREAKPOINT2
}
}
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Работа с Энкодером

Сообщение =DeaD= » 17 мар 2011, 17:36

"*2" => "<<1"
"*4" => "<<2"
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Работа с Энкодером

Сообщение dccharacter » 17 мар 2011, 17:39

компилятор сам это сделает, но вообще да
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Работа с Энкодером

Сообщение NorthStar » 17 мар 2011, 17:41

Ну вообще на моторе всего 5000 об максимум (мотор китайский, так что ссылки на него нет). Я пока еще управление не разработал. Те мотор запитан напрямую и крутится на максимум. Сделал вывод положения через последовательный порт - вообще перестало работать. Попробовал хотя бы несколько операций добавить - то же фигня выходит. Т.е. контроллер вообще ничего кроме подсчета с энкодера считать не может. Так что я даже и не знаю - как проверить успевает или нет )
Код вот от сюда брал http://www.arduino.cc/playground/Main/RotaryEncoders.
Если самому вал мотора крутить, то всё ОК ))
Спасибо за XMEGA вот примерно то, о чем я спрашивал. Подключил и прочитал.
Только вот интересно - на STM32 такое есть? Нельзя же все контроллеры выучить. Я пока только PIC16 и Arduino умею. Хотел вот еще STM32 изучить. Впечатлила его цена и некоторые примеры.
NorthStar
 
Сообщения: 317
Зарегистрирован: 13 сен 2010, 12:47

Re: Работа с Энкодером

Сообщение dccharacter » 17 мар 2011, 17:46

че-то я не понял, где в приведенном коде прерывания. А вот сериал на 9600 я там вижу. И отправку по сериалу две телеги с отчетами вижу. Конечно оно только при вращении рукой работает...

Добавлено спустя 1 минуту 1 секунду:
а, туплю, ниже еще есть код

Добавлено спустя 47 секунд:
И, кстати, спасибо, хоть посмотрю как интеррапты на ардуине прикручиваются :-)))
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Работа с Энкодером

Сообщение =DeaD= » 17 мар 2011, 18:01

NorthStar писал(а):Код вот от сюда брал http://www.arduino.cc/playground/Main/RotaryEncoders.
Если самому вал мотора крутить, то всё ОК ))

Что-нибудь в районе
Serial.print (encoder0Pos);
Serial.print ("/");

не пробовали убирать?

Добавлено спустя 35 секунд:
И там нету прерываний.

Короче код совершенно игрушечный.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Работа с Энкодером

Сообщение dccharacter » 17 мар 2011, 18:13

http://www.microchip.su/showthread.php? ... post129451

33 такта. * 4 = 132.
* 1024 = 135 168
* 5000 = 675 840 000
/ 60 ~ 10МГц.

Че-то крутовато. Один pic16f1827 придется полностью выделить под три энкодера без возможности считать с него эти данные. Или я чего опять не так насчитал?

Добавлено спустя 2 минуты 59 секунд:
Да нет, все, похоже, правильно... И это при частоте 32МГц...

Добавлено спустя 33 секунды:
Michael_K, спасибо за науку
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Работа с Энкодером

Сообщение =DeaD= » 17 мар 2011, 18:15

Что за *4 ?

Дергайте прерывание только если поменялся один бит, подозреваю, что точность в 4000 кликов на оборот нафиг не нужна при скорости 100 оборотов в секунду.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Работа с Энкодером

Сообщение dccharacter » 17 мар 2011, 18:17

=DeaD= писал(а):Что за *4 ?

Дергайте прерывание только если поменялся один бит, подозреваю, что точность в 4000 кликов на оборот нафиг не нужна при скорости 100 оборотов в секунду.

ну цикл - это 4 такта же?
а мы и дергаем 1024 раза за оборот.

АААААААААААА, я запутался. Такт - это 4 цикла!!!! Тьфу, все, я выбываю.
Последний раз редактировалось dccharacter 17 мар 2011, 18:18, всего редактировалось 1 раз.
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Работа с Энкодером

Сообщение NorthStar » 17 мар 2011, 18:17

Смотрите ниже - будут и прерывания. Если Serial.print (encoder0Pos); убрать, то оно может и работает, только как это понять? У меня индикатора на Arduino нет. Делал скорость COM-порта выше - не помогло.
Пробовал, чтоб вместе с прерыванием выполнялся другой код - выполняется, но очень медленно. прерывание большую часть времени активно.
Нашел в STM32 поддержку энкодера. Я искал по слову encoder, а в документации эта функция как decoder описана.
Осталось теперь примерчик добыть. Может есть у кого?
NorthStar
 
Сообщения: 317
Зарегистрирован: 13 сен 2010, 12:47

Re: Работа с Энкодером

Сообщение dccharacter » 17 мар 2011, 18:20

NorthStar писал(а):Нашел в STM32 поддержку энкодера. Я искал по слову encoder, а в документации эта функция как decoder описана.

Это вряд ли работа с энкодерами, скорее всего шифрование какое-нибудь.

Добавлено спустя 56 секунд:
Так, ну все правильно же я посчитал! Я привожу к той частоте, на которой работает осциллятор, поэтому и *4
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.
Аватара пользователя
dccharacter
 
Сообщения: 4995
Зарегистрирован: 10 дек 2010, 13:16
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей

Re: Работа с Энкодером

Сообщение Michael_K » 17 мар 2011, 18:25

Да все правильно. Пик выполняет один машинный цикл за 4 такта кварца.
Это Dead просто на АВРках расслабился :)
Аватара пользователя
Michael_K
 
Сообщения: 6028
Зарегистрирован: 07 окт 2009, 00:29
Откуда: СПб

Re: Работа с Энкодером

Сообщение Duhas » 17 мар 2011, 18:27

по Хмеге могу найти асм код... если нада ...
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

Пред.След.

Вернуться в Микроконтроллеры

Кто сейчас на конференции

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