|
|
  |
На пути к робототехнике, Подскажите как управлять сервомашинкой |
|
|
|
Jul 5 2008, 18:43
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507

|
Будьте добры помогите разобраться с управлением сервомашинки . Использую сервомашинку ( ACE RC C1016 ) Питаю от USB управляющий сигнал беру прямо с ножки PORTA.0 МК ATmega16 тактовая частота 1 mHz Информацию брал с http://vtpablos.narod.ru/robots/servotester/Задача кода ШИМ на PORTA.0 ( скважность 0.9 мс . частота 20 мс ) .include"m16def.inc" .list .cseg .org 0 ldi r16, high(RAMEND) out SPH, r16 ldi r16, low(RAMEND) out SPL, r16 ldi r16, 255 out DDRA, r16 out DDRB, r16 rj0: ldi r16, 224 sbi PORTA, 0 rj1: dec r16 breq rj2 rjmp j1 rj2: cbi PORTA, 0 ldi r16, 20 rj3: dec r16 breq rj0 ldi r17, 250 rj4: dec r17 breq rj3 rjmp rj4 Забыл сказать что на выше изложенные действия машинка не реагирует...
Сообщение отредактировал Costia - Jul 5 2008, 18:46
|
|
|
|
|
Jul 5 2008, 23:51
|

Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317

|
Если момент, на который указал VDG, является опечаткой, и это даже компилится... Кто Вас учил так управлять сервой, что мешает использовать таймеры? Представьте, что будет, если посреди какого-нибудь цикла возникнет прерывание? И напоследок, не забывайте использовать теги [code][/code] и писать комментарии к коду - чемы быстрее мы сможем понять, что Вы написали, тем быстрее Вы получите ответ.
|
|
|
|
|
Jul 6 2008, 07:27
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507

|
да это опечатка . Что касается кто меня так учил то это не законченный девайс а просто способ пошевелить сервомашинкой. И даже с моей бурной фантазией мне ложно представить что будет ( учитывая что прерывания отключены = ) Код ldi r16, 255 out DDRA, r16 out DDRB, r16 rj0: ldi r16, 224 sbi PORTB, 0 //устанавливаю лог 1 на ножке = )
rj1: dec r16 // задежка 0.9 мс breq rj2 rjmp rj1
rj2: cbi PORTB, 0 //лог 0 на ножке
ldi r16, 20 //задержка 19.1 мс rj3: dec r16 breq rj0 ldi r17, 250 rj4: dec r17 breq rj3 rjmp rj4
Сообщение отредактировал Costia - Jul 6 2008, 07:37
|
|
|
|
|
Jul 6 2008, 10:03
|

Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317

|
2 CostiaНу для начала могу посоветовать пощупать осцилографом - генерится ли что-нибудь на ножке. Если верить отладчику, то должно (но не надо верить отладчику  )... К тому же, попробуйте увеличить ширину импульса - не все сервы воспринимают значение в 0,9мс, поставьте что-нибудь около 1,5мс. Я думаю, не надо лишний раз напоминать, что не мешает перепроверить подключение сервомашинки
|
|
|
|
|
Jul 6 2008, 12:00
|

Знающий
   
Группа: Участник
Сообщений: 845
Регистрация: 10-02-06
Пользователь №: 14 193

|
Цитата(Costia @ Jul 6 2008, 11:27)  да это опечатка . Что касается кто меня так учил то это не законченный девайс а просто способ пошевелить сервомашинкой. Вам же сказали уже - не хватает loop-а. Код loop: ;... ; ваш код ;... rjmp loop
--------------------
|
|
|
|
|
Jul 6 2008, 12:48
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507

|
Цитата(Aesthete Animus @ Jul 6 2008, 14:03)  2 CostiaНу для начала могу посоветовать пощупать осцилографом - генерится ли что-нибудь на ножке. Если верить отладчику, то должно (но не надо верить отладчику  )... К тому же, попробуйте увеличить ширину импульса - не все сервы воспринимают значение в 0,9мс, поставьте что-нибудь около 1,5мс. Я думаю, не надо лишний раз напоминать, что не мешает перепроверить подключение сервомашинки  Спасиб да в этом дело попробовал на 1.5 и все заработало как надо ( до упоро против часовой ) вот код если кому понадобится Код ldi r16, 255 out DDRA, r16 out DDRB, r16 j0: ldi r16, 15 sbi PORTB, 0 //==================
j1: breq j3 dec r16 ldi r17, 19
j2: breq j1 dec r17 ldi r20, 0 rjmp j2 j3: cbi PORTB, 0 //==================
ldi r16, 185
j4: breq j0 dec r16 ldi r17, 19
j5: breq j4 dec r17 ldi r20, 0 rjmp j5 А если у меня не стандатные уоманды сервы то как мне узнать остальные . Логично предположит что надо искать даташит но не получается найт ...
|
|
|
|
|
Jul 6 2008, 14:44
|

Местный
  
Группа: Свой
Сообщений: 222
Регистрация: 9-06-07
Пользователь №: 28 317

|
Цитата(Costia @ Jul 6 2008, 16:48)  Спасиб да в этом дело попробовал на 1.5 и все заработало как надо ( до упоро против часовой ) Теперь я бы посоветовал постепенно увеличивать ширину импульса, чтобы узнать второе крайнее положение  Цитата(Costia @ Jul 6 2008, 16:48)  А если у меня не стандатные уоманды сервы то как мне узнать остальные Что значит, нестандартные? Какие команды? Цитата(VDG @ Jul 6 2008, 16:00)  Вам же сказали уже - не хватает loop-а. Есть там loop: "breq rj0". Другое дело, его стоит сделать явно, а то, он как-то слишком незаметен
|
|
|
|
|
Jul 6 2008, 14:47
|
Участник

Группа: Новичок
Сообщений: 24
Регистрация: 23-06-08
Пользователь №: 38 507

|
Цитата(Aesthete Animus @ Jul 6 2008, 18:44)  Теперь я бы посоветовал постепенно увеличивать ширину импульса, чтобы узнать второе крайнее положение  Что значит, нестандартные? Какие команды? Есть там loop: "breq rj0". Другое дело, его стоит сделать явно, а то, он как-то слишком незаметен  да лана прикапыватся . Код не большой и не сложный все прекрасно видно
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|