Технический форум по робототехнике.
Vooon » 10 мар 2010, 20:29
Не верно! S 40 0d 00 S 41 01 P
Байт выделенный жирно указывает канал с которого начинается чтение.
В принципе его не обязательно посылать каждый раз, но предпочтительно.
- Вложения
-
manual.pdf
- (256.82 КиБ) Скачиваний: 5
kbnn » 11 мар 2010, 22:25
Есть вопрос.
Вот у меня OR-AVR-M128-S, я пробую читать уровень на входе цифрового порта.
пишу:
<S40 06 00 S40 02 S41 01 P
получаю ответ
SWAASWASR10P
На PORTA у меня ни чего не подцеплено.
Вопрос 1: что значит последня 01 в запросе? В инструкции написано читаемая маска, это что значит? Что мы читаем с вывода PORTA0? Тогда что значит 10 в ответе? Ведь должны быть 00.
=DeaD= » 11 мар 2010, 22:48
У меня выдаёт SWAASWASR00P
Добавлено спустя 57 секунд:
Какая прошивка? Которая уже была в контроллере или новая залита с вики?
kbnn » 11 мар 2010, 22:52
Новую не заливал. Та что была.
Добавлено спустя 40 секунд:
А зачем в запросе писать s40 02?
Vooon » 11 мар 2010, 22:53
Посмотри таблицу 3.1 из прошлого моего сообщения.
Тут нужно только пояснить что такое <adr+w> и <adr+r>.
adr — старшие 7 бит адреса (I2C адрес), а w/r — младший бит 0/1
А что в порту не по нулям вполне понятно, у тебя же входы в воздухе болтаются.
kbnn » 11 мар 2010, 23:25
Что бы не болтались мне нужно на "сигнал" (дальний от края) подавать или землю или питание. Разомкнутый сигнал "не предсказуем". Правильно?
Добавлено спустя 22 минуты 20 секунд:
Получилось! Огромное спасибо.
Вот только что же значит S41 01? Если написать 02 то увеличивается количество байт в ответе.
Vooon » 11 мар 2010, 23:30
Разомкнутый непредсказуем. Можно включить встроенные подтягивающие резисторы.
Для этого нужно DDRxy = 0, PORTxy = 1 (где x — порт, y — бит)
Т.е. для этого примера: в регистр 0x02 нужно записать 0xFF, в регистр 0x06 — 0x00.
Тогда неиспользуемые биты будут установлены (1).
П.С.: т.к. не приводилась таблица адаптеров возможно номера регистров не верны...
Добавлено спустя 2 минуты 58 секунд:
<count> я думал будет и так понятно...
Это количество запрашиваемых байт.
kbnn » 11 мар 2010, 23:32
Точно! Все работает. Спасибо большое.
Vooon » 11 мар 2010, 23:52
Попробуй еще программу в архиве использовать.
Из консоли
lsorfa.exe COMn (для комов 1-9, дальше
\\.\COMn)
Это собранная с помощью MinGW
liborfa и lsorfa
- Вложения
-
liborfa.zip
- (44.36 КиБ) Скачиваний: 3
kbnn » 12 мар 2010, 09:27
Спасибо. Дома попробую.
Но на самом деле с цифровыми входами и выходами я уже разобрался. Там все понятно.
В большей части благодаря помощи форума.
Vooon » 12 мар 2010, 10:12
Не за что! Наоборот мы нашли и исправили ошибки в документации.
kbnn » 18 мар 2010, 21:23
Добрый вечер.
Я дошел до сервоприводов...
В описании Руководство пользователя M128M128 -S сказано:
Пример * установки положения 2-го сервопривода в 1200мкс а 3-го сервопривода в положение 1700
<S40 0F 02 04B0 03 06 A4 P
>SWAAAP
Но это не работает, работает только:
<S40 0D 02 04B0 03 06 A4 P
И еще вопрос. У меня сервы модифицированные под длительное вращение (я планирую ставить на них колеса).
Вот по приведенному выше примеру они начинают крутиться, а как их:
1. остановить
2. вращать с заданной скоростью
3. Вращать в другую сторону.
Формула, если честно, не добавляет ясности.
Крутить в другую сторону получается но как то "НАУГАД"
kbnn » 18 мар 2010, 21:32
УРА! Получилось "Подбором" 1500мс это СТОП.
=DeaD= » 18 мар 2010, 21:57
Так вроде 1500
мкс это всегда было средним положением?

=DeaD= » 21 мар 2010, 19:24
Продолжим на тему развития парсера ORFA в сторону более человеческих команд по работе с периферией.
Надо приземлить форматы команд для работы с портами и движками.
Для движков предлагаю следующую команду:
- Код: Выделить всё • Развернуть
M <speed1=(-100..100|*)> <speed2=(-100..100|*)>
Т.е. если не хотим менять скорость какого-то мотора - пишем в неё "*"
Для портов ввода-вывода:
- Код: Выделить всё • Развернуть
@<port><pin>=(H|L|P|D|A)
H - выставить выход в логическую "1" (уровень напряжения питания);
L - выставить выход в логический "0" (уровень напряжения земли);
P - перевести порт в режим входа и включить подтягивающий резистор;
I - перевести порт в режим входа и выключить подтягивающий резистор;
D - прочитать цифровое значение порта;
A - прочитать аналоговое значение порта;
У кого какие идеи?