roboforum.ru

Технический форум по робототехнике.
Текущее время: 27 ноя 2024, 06:13

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




Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу Пред.  1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 24 янв 2012, 14:47 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
CiSi писал(а):
Наврал - переменная Encoder типа cardinal (беззнаковый). Прошу прошения.
Так как я получаю значение с аппаратного счетчика, то задать ему какоето значение нельзя, переменной конечно можно но не увидел в этом смысла. Счетчик можно только обнулить. Четкое отслеживание нуля то же не увенчалось успехом, после чего осталось значение счетчика привязать к направлению вращения энкодера. И при каждой смене направления (движение в ту или иную сторону) сначало обнуляю счетчик и он считает от нуля.

Michael_K, если я вас правильно понял, то в таком случае нулевое значение счетчика будет соответствовать -8388607 знаковой 24 битной пременной.

Ну у тебя же знак вынесен в отдельную переменную, ну?
direction - это знак (направление движения).
Если direction = 1, то ты едешь вперед и имеешь (Encoder) тиков с энкодера.
Если direction = 0, то ты едешь назад и имеешь (0xffffff - Encoder) тиков

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 24 янв 2012, 20:53 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Что значит Encoder имеет тип cardinal? Я понял, что датчик внешний, но прога-то твоя :) Сделай integer. На самом деле важно, чтобы тип integer (не cardinal!) имела разность encoder-buffer. Тогда
Код:
((encoder-buffer)shl 8)shr 8
отработает правильно.

И не вижу смысла в программном анализе направления вращения, если можно этого не делать. Сами по себе значения счетчика вообще никого не интересуют, важно перемещение. Так вот перемещение - это encoder-buffer. Оно 24-битное со знаком, знак сидит в 23 бите. Скопировали знак в биты 24-31 - получили ровно то же по значению число, но 32-битное. Дальше делаем с ним что хотим.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 24 янв 2012, 23:42 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
Имеется Dll библиотека которая работает с аппаратным счетчиком, в процедуре котоая опрашивает счетчик, переменная олжна иеть беззнаковый тип cardinal.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 25 янв 2012, 13:42 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
В паскале есть приведение типов ;)

Ты лучше напиши, мой вариант последний
Код:
procedure ReadMoving(K: double; var Moving: double);
begin
       Moving:=Moving+(((Encoder-Bufer)shl 8)shr 8)/K);
       Bufer:= Encoder;
end;
работает или нет? Никаких обнулений или анализа направления не надо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 25 янв 2012, 16:22 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
пробывал уже, в обе стороны прибавляет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 25 янв 2012, 16:35 
Не в сети
Аватара пользователя

Зарегистрирован: 11 авг 2009, 22:39
Сообщения: 185
Откуда: Пермь
Skype: kudrin_anton
прог. языки: assembler
Расскажи по подробнее, что умеет дллка. И какой тебе нужен конечный результат.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 25 янв 2012, 17:11 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
dccharacter писал(а):
direction - это знак (направление движения).
Если direction = 1, то ты едешь вперед и имеешь (Encoder) тиков с энкодера.
Если direction = 0, то ты едешь назад и имеешь (0xffffff - Encoder) тиков

Вот это пробовал?

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 25 янв 2012, 18:00 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
dccharacter писал(а):
dccharacter писал(а):
direction - это знак (направление движения).
Если direction = 1, то ты едешь вперед и имеешь (Encoder) тиков с энкодера.
Если direction = 0, то ты едешь назад и имеешь (0xffffff - Encoder) тиков

Вот это пробовал?

у меня какраз так и реализовано, первое сообщение поста.

Добавлено спустя 5 минут 44 секунды:
coder_perm, есть плата с шиной ввода/вывода PCI, умеет принимать данные с тензодатчиков энкодеров и т.д. собственно длл-ка позволяет писать под эту плату собственное ПО.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 25 янв 2012, 18:08 
Не в сети

Зарегистрирован: 20 сен 2011, 13:34
Сообщения: 79
Откуда: Москва
А не придется ли разделить диапазон значений выдаваемых dll-кой на две половины - положительную и отрицательную? Т.е. 0 - 8000000 - положительные значения, а 8000001 - 16000000 - отрицательные.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 25 янв 2012, 18:37 
Не в сети
Аватара пользователя

Зарегистрирован: 10 дек 2010, 13:16
Сообщения: 4995
Откуда: Красногорск МО
прог. языки: C, Python, wiring/processing
ФИО: Андрей
CiSi писал(а):
у меня какраз так и реализовано, первое сообщение поста.

У тебя в первом сообщении какой-то мудреж. у метя буффер - это 16млн - энкодер. А мувинг - это буфер - (16 млн - буфер). Короче мне кажется, что ты там просто тупо запутался

Добавлено спустя 19 минут 51 секунду:
Код:
Оригинал      K   0,2         
directionTop   1         directionBottom   0   
Encoder   Bufer   Moving      Encoder   Bufer   Moving
0   0   0      0   0   0
100   100   500      100   16777115   -83885575
1000   1000   5000      1000   16776215   -83885575
10000   10000   50000      10000   16767215   -83885575
20000   20000   100000      20000   16757215   -83885575
30000   30000   150000      30000   16747215   -83885575
40000   40000   200000      40000   16737215   -83885575
50000   50000   250000      50000   16727215   -83885575
60000   60000   300000      60000   16717215   -83885575
70000   70000   350000      70000   16707215   -83885575
80000   80000   400000      80000   16697215   -83885575
90000   90000   450000      90000   16687215   -83885575
100000   100000   500000      100000   16677215   -83885575
110000   110000   550000      110000   16667215   -83885575
120000   120000   600000      120000   16657215   -83885575
130000   130000   650000      130000   16647215   -83885575
16777116   16777116   83885580      16777116   99   -83885575
16777215   16777215   83886075      16777215   0   -83885575
0   0   0      0   16777215   -83885575
2   2   10      2   16777213   -83885575
                  
Моя формула                  
                  
directionTop   1         directionBottom   0   
Encoder   Bufer   Moving      Encoder   Bufer   Moving
0      0      0      0
100      500      100      16777115
1000      5000      1000      16776215
10000      50000      10000      16767215
20000      100000      20000      16757215
30000      150000      30000      16747215
40000      200000      40000      16737215
50000      250000      50000      16727215
60000      300000      60000      16717215
70000      350000      70000      16707215
80000      400000      80000      16697215
90000      450000      90000      16687215
100000      500000      100000      16677215
110000      550000      110000      16667215
120000      600000      120000      16657215
130000      650000      130000      16647215
16777116      83885580      16777116      99
16777215      83886075      16777215      0
0      0      0      16777215
2      10      2      16777213


Добавлено спустя 1 минуту 18 секунд:
При этом я сам тоже намудрил. На самом деле у тебя переменная Direction - это знак, а значения Encoder в каждый момент - это твой путь в попугаях, который ты волен перевести в метры. Это если ты при смене направления счетчик обнуляешь.

Добавлено спустя 3 минуты 10 секунд:
Код:
Moving:=Moving+((Bufer-(16777215-Encoder))/K);
               Bufer:= 16777215-Encoder;


Moving2 = Moving1+((Bufer1 - 16... - Encoder2))/K);
Bufer2 = 16... - Encoder2

Moving3 = Moving2+((16... - Encoder2 - 16... - Encoder3))/K

Короче у тебя 16 лямов на каждой итерации съедают друг друга

_________________
Мой волшебник это я сам. Всю архитектуру программы придумал лично, а ребята помогли воплотить её. Я бы и сам мог написать, но лень учить язык и его конструкции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 26 янв 2012, 00:05 
Не в сети
Аватара пользователя

Зарегистрирован: 11 авг 2009, 22:39
Сообщения: 185
Откуда: Пермь
Skype: kudrin_anton
прог. языки: assembler
CiSi писал(а):
coder_perm, есть плата с шиной ввода/вывода PCI, умеет принимать данные с тензодатчиков энкодеров и т.д. собственно длл-ка позволяет писать под эту плату собственное ПО.


Еще раз повторяю вопрос.
Конкретно какие функции(методы) реализованы в ДЛЛ.

И что тебе нужно?
Дельту(изменение) при каждом вызове функции относительно предыдущего запроса
или абсолютное значение энкодера в любой момент?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 26 янв 2012, 17:06 
Не в сети

Зарегистрирован: 27 авг 2008, 10:45
Сообщения: 1981
Откуда: Харьков
прог. языки: С/С++
Вот блин, приношу свои извинения, сам заблуждался и других пытался ввести в заблуждение. Похоже, в паскале shr - это всегда логический сдвиг! Переходи на С замени на
Код:
Moving:=Moving+(((Encoder-Bufer)shl 8)div 256)/K)
, или даже
Код:
Moving:=Moving+((Encoder-Bufer)shl 8)/(256*K)
.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 26 янв 2012, 22:40 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
В длл-ке реализована функция позволяющая принять данные из аппаратного счетчика и присвоить их переменной, в моем случае переменная encoder. Данные с четчика я принемаю, все нормально получаю абсолютное значение энкодера в любой момент, а проблемма собственно в другом.
boez, да ничего страшного, все равно спасибо, а про Си зря зачеркнули, давно пытаюсь да...
ваш вариант завтра попробую отпишу.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 26 янв 2012, 23:08 
Не в сети
Аватара пользователя

Зарегистрирован: 11 авг 2009, 22:39
Сообщения: 185
Откуда: Пермь
Skype: kudrin_anton
прог. языки: assembler
енкодер можно только обнулять или задавать любое начальное значение?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 24 битный счетчик
СообщениеДобавлено: 26 янв 2012, 23:21 
Не в сети
Аватара пользователя

Зарегистрирован: 04 окт 2007, 16:11
Сообщения: 1027
Откуда: иваново
Skype: cybsys1
прог. языки: Delphi
ФИО: Павел
только опрашивать и обнулять.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу Пред.  1, 2, 3  След.

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


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

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


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

Найти:
Перейти:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO