roboforum.ru

Технический форум по робототехнике.
Текущее время: 21 май 2025, 05:27

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




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

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
вот асм, вроде верный. PE5 обнуляется.


Вложения:
code.png
code.png [ 8.46 КиБ | Просмотров: 2163 ]

_________________
Читайте !
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 20 сен 2011, 21:43 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Этот бит сбрасывает ножку в 0 (1<<FOC3C);
Для создания такого сигнала на картинке.
А что за сдвиг в 0х20?


Вложения:
222.JPG
222.JPG [ 11.76 КиБ | Просмотров: 2055 ]

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 20 сен 2011, 21:45 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Korbofos писал(а):
Почему то не срабатывает сброс ножки в 0??????
Код:
TCCR3C|=(1<<FOC3C);


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

По симуляции в PROTEUS изменение ноги PE5 уже происходит в самом начале прерывания.

Если вам надо именно сбрасывать дак так и пишите в нее "0".

_________________
Читайте !


Последний раз редактировалось avr123.nm.ru 20 сен 2011, 21:50, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 20 сен 2011, 21:49 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Да PE5 в ноль.

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 20 сен 2011, 21:55 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Хотя код АСМ есть н ов PROTEUS бит FOC3C не становится "1". Либо ПРОТЕУС не прав ( преверьте в симуляторе AVR studio? можно выкинуть все из проги только этот код проверить).

либо надо читать даташит и возможно этот бит ставится как-то хитрее.

вот что написано в даташите - когда эти биты работают, надо проверить что WGM не в режиме ШИМ


Вложения:
ds.png
ds.png [ 97.26 КиБ | Просмотров: 2064 ]

_________________
Читайте !
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 20 сен 2011, 22:06 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Режим Normal стоит. Полезу в AVR studio.

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 20 сен 2011, 22:11 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Да WGM все нули. В студии посмотрите. Но это симулячция. А CVAVR асм код записи 1 в этот бит скомпилил. В железе должно работать.

По методу отладки программы через UART в задаче 4 курса по AVR - www.proavr.narod.ru/z4.htm вы можете вставить после этой строки вывод этого регистра в UART

псевдокод:
UDR = регистр;
пауза (1 секунда например);

и на терминале на ПК посмотреть что в регистре в реальном AVR получается.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 20 сен 2011, 22:22 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
В Avr студии тоже самое, ножка не сбрасывается.
Есть ещё пару мыслей, (программатора с собой нет)завтра дома попробую.
Спасибо Авр123!

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 20 сен 2011, 22:28 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Я в студии 4.18 посмотрел.

1) бит FOC3C в студии ставится в "1" (т.е. PROTEUS ошибается в симуляции, интересно VMLAB посмотреть)

2) ножка PE5 как и весь порт становятся нулем еще до этой строки, я ставил брэйкпоинт в самом начале прерывания и по приходу на нее весть порт Е уже ноль, в PROTEUS точно так же.

Однако в начале прерывания только переменные и не понятно может он и выполняет уже строку, надо в начале прерывания воткнуть несколько NOP или лишенных смысла действий на время отладки, чтоб было на что брэйкпоинты поставить

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 20 сен 2011, 22:39 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
У меня тоже студия 4.18.
Поставил TCCR3C|=(1<<FOC3C); в конец прерывания.
Но у меня ножка не обнуляется.

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 21 сен 2011, 08:19 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Не понимаю про какую ножку вы пишите, я указал конкретно ПЕ5 и весь порт Е обнуляется еще ДО этого кода и в студии и в потеусе.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 21 сен 2011, 16:06 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Ввёл переменную OCR33 и в железе всё пошло.
Только при старте сервы иногда занимают разную позицию.
Код:
interrupt [TIM3_COMPC] void timer3_compc_isr(void)
{
static char current_servo=1;
static unsigned int pause = 18432;
static unsigned int OCR33;
        if (current_servo == 9)
        {
         current_servo = 0;
         OCR33 += pause;
         OCR3C=OCR33;
         pause = 18432;
        }
        else
        {
         OCR33+=servo_position[current_servo];
         OCR3C=OCR33;
         pause -= servo_position[current_servo];
         current_servo++;
        }

   TCCR3C|=(1<<FOC3C);

}     

Авр123 спасибо вам за помощь!

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 21 сен 2011, 16:48 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Прошу вас выложить проект для народа по окончании отладки.

_________________
Читайте !


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 21 сен 2011, 18:54 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Хорошо обязательно выложу!

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Управление сервами
СообщениеДобавлено: 29 сен 2011, 18:41 
Не в сети
Аватара пользователя

Зарегистрирован: 15 янв 2011, 11:27
Сообщения: 317
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр
Проблема вот в чём по rs-232 отравляю три байтика. 1байт- номер функции мк(серва), 2байт- номер сервы, 3байт позиция.
Например отправляю: 4,1,210 - 1 серву в крайние положение
отправляю: 4,0,0. - отключить управление сервами.
отправляю: 4,1,210 - может начать "шорохоться" другая серва.
Да и вообще при каждом новом включении сервы встают в разные позиции.

Код:
unsigned char rx_buffer[3];
unsigned int servo_position[9]={1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382, 1382};//среднее положение для кварца 7.372800


interrupt [TIM3_COMPC] void timer3_compc_isr(void)
{
static char current_servo=1;
static unsigned int pause = 18432;
static unsigned int OCR33;
       
TCCR3C|=(1<<FOC3C);

if (current_servo == 9)
        {
         current_servo = 0;
         OCR33 += pause;
         OCR3C=OCR33;
         pause = 18432;
        }
        else
        {
         OCR33+=servo_position[current_servo];
         OCR3C=OCR33;
         pause -= servo_position[current_servo];
         current_servo++;
        }

}     



void servo (unsigned char servo, unsigned int pos)//передаю в функцию оба значения char
{
if ((servo&&pos)==0)
{
servo_off();
return;
}
else if(SERV==OFF){servo_on();}
if (servo>8){servo=8;}
if (servo<1){servo=1;}
if (pos<90){pos=90;}
if (pos>210){pos=210;}
servo_position[servo]=((pos*74/8)-6);   //Может здесь что нибудь не так с приведением                                                                                         
}                                       //типов?       


void servo_on (void)
{
DDRE|=((1<<DDE5)|(1<<DDE2));
PORTE&=~((1<<PORTE5)|(1<<PORTE2));
PORTE.2=1;
OCR3C=2000;
TCCR3A=0x04;
TCCR3B=0x02;
ETIMSK|=(1<<OCIE3C);
PORTE.2=0;
}

void servo_off (void)
{
DDRE&=~((1<<DDE5)|(1<<DDE2));
TCCR3A=0x00;
TCCR3B=0x00;
ETIMSK&=~(1<<OCIE3C);
}

void main(void)
{


servo(rx_buf[1],rx_buf[2]);

}


Где здесь подвох?

_________________
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.


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

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


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

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


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

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