roboforum.ru

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

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




Начать новую тему Ответить на тему  [ Сообщений: 227 ]  На страницу 1, 2, 3, 4, 5 ... 16  След.
Автор Сообщение
 Заголовок сообщения: Управление Сервами в WinAvr
СообщениеДобавлено: 09 авг 2006, 22:03 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Добрый день, у меня возникла маленькая проблемка с WINAVR:

Есть такой код приёма  с USART
Код:
Char a = USART_RECEIVE();
Char b = USART_RECEIVE();
Char с = USART_RECEIVE();
Char d = USART_RECEIVE();
//Допустим принял: a= 1, b= 2 , c= 3, d= 4

//А МНЕ НАДО ЧИСЛО 1234


Проблема в том что функция USART_RECEIVE() за раз может принять
только число от 0 до 9.

Если что простите за ламерский вопрос, но для меня это далеко не самая тривиальная задача.  :shock:


Последний раз редактировалось Lirzman 17 авг 2006, 19:40, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 авг 2006, 22:36 
Не в сети
отсылающий читать курс
Аватара пользователя

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

просто на бумажке решите эту задачу для 3 класса,

а потом полученый алгоритм запрограммируете ...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 09 авг 2006, 23:44 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
avr123.nm.ru писал(а):
ну вы отвлекитесь от программирования,

просто на бумажке решите эту задачу для 3 класса,

а потом полученый алгоритм запрограммируете ...

ЭЭЭЭЭЭЭ,:?: а поподробнее можно?
Я спрашиваю про конкретную функцию на C, а на бумажке каждый сможет решить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 авг 2006, 00:52 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
ну дак решение с бумажки запишите на Си с помощью avr123.nm.ru/05.htm например или любого учебника по Си.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 авг 2006, 02:08 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
АВР, не мучай человека...

x=a*1000+b*100+c*10+d

У всех, как говорится, бывает...  :wink:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 авг 2006, 05:17 
Не в сети
отсылающий читать курс
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 авг 2006, 11:39 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Дааа затупил я немного...
(2 AVR)Не все могут похвастаться ясностью ума в 4 часа утра :D
(2 Александр)Спасибо, и вопрос в догонку:

Код:
#define SET_B(x) |= (1<<x) //Спасибо AVR123 :)
#define CLR_B(x)  &=~(1<<x) //Спасибо AVR123 :)
const int period = 30800; //period = 20 ms
int N=1838;//neutral servo = 1.5 ms


void Pos(int servo,int angle)
{
N=angle;
PORTB SET_B(servo);

delaysa(N);
PORTB CLR_B(servo);

delaysa(period);
}

int main()
{
int s,angle,a,b,c,d;
USART_Init(23);
init_devices();

while(1){

s=USART_Receive();


a=USART_Receive();


b=USART_Receive();


c=USART_Receive();


d=USART_Receive();

//delaysa(500);
angle=a*1000+b*100+c*10+d;
Pos(2,2100);
Pos(1,100);
Pos(s,angle);

}
return(0);
}

Pos - подпрограмма управлением сервами (если кто не догадался :D)
Вопрос такой : почему Pos(1,1000) - работает
а Pos(s,angle) не пашет.
Если-бы я писал этот код в Visual Studio или там Borland C++ builder
я бы поставил watch на "S" и "ANGLE", но так как у меня WINAVR и
PROTEUS,отладка по watch или брякам мне только снится :twisted:

P.S: — Папа, папа, а правда говорят, что от ICQ, чатов и ЖЖ люди тупеют? — Гыы, сына, LOL :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 авг 2006, 12:44 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Lirzman писал(а):
(2 AVR)Не все могут похвастаться ясностью ума в 4 часа утра :D


потому в сказках и пишут: "утро вечера мудренЕе"


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 авг 2006, 12:58 
Не в сети
отсылающий читать курс
Аватара пользователя

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Lirzman писал(а):
так как у меня WINAVR и
PROTEUS,отладка по watch или брякам мне только снится :twisted:


есть же маленький но могучий VMLAB и

avr123.nm.ru/z2.htm
avr123.nm.ru/z3.htm
avr123.nm.ru/z9.htm

и еще "супер-пупер" способ отладки
avr123.nm.ru/z4.htm


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 авг 2006, 13:37 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Спасибо, корень проблемы я нашел но легче мне от этого не стало. :D
Код:
int s,angle,a,b,c,d;

s=USART_Receive();

a=USART_Receive();

b=USART_Receive();

c=USART_Receive();

d=USART_Receive();

angle=a*1000+b*100+c*10+d;
USART_Transmit(angle);//Супер-пупер отладка :)
Pos(s,angle);


Все переменные типа int, но при действии:
angle=a*1000+b*100+c*10+d;
получается char в итоге на виртуальный терминал в протеусе выводится всякая абра-кадабра. :shock:

Функция USART_Transmit() взята из ДШ.


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

Зарегистрирован: 06 ноя 2005, 04:18
Сообщения: 14195
Откуда: Москва
Lirzman писал(а):
Все переменные типа int, но при действии:
angle=a*1000+b*100+c*10+d;
получается char в итоге на виртуальный терминал в протеусе выводится всякая абра-кадабра. :shock:

Функция USART_Transmit() взята из ДШ.


рецепт и адрес прежние - страница 5 курса - называется она "Си для МК" и имеет вторую часть, о чем я уже говорил.

Заходим:

http://avr123.nm.ru/05a.htm

Читаем:

"в Си в переменную можно помещать только тот тип данных который она может хранить !

Так как PORTB это байт, а ADCW - это два байта, то прежде чем выполнить .... "

=======

Чтоб по каждой затыке не ждать ответа в форуме
рекомендую прочитать  http://avr123.nm.ru/05.htm
и весь курс тоже.

Как принято - С НАЧАЛА.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 авг 2006, 16:50 
Не в сети
Мастер Самоделкин
Аватара пользователя

Зарегистрирован: 11 окт 2004, 19:20
Сообщения: 3678
Откуда: Россия, СПб
прог. языки: C/C++, Python, asm
ФИО: Курмис Александр Андреевич
unsigned int angle;

char s,a,b,c,d;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 авг 2006, 17:30 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Чувствую я буду до второго пришествия карячится с этой фигнёй.:(
Карячиться мне не особо хочется, следовательно вопрос:
Есть ли у кого-нибудь исходник на С, для управления сервами  по rs232 с компа.
Понимаю что изобретаю велосипед, но делаю это исключительно для самообразования :D.

Исходники на ASM НЕ ПРЕДЛАГАТЬ, потому что хочу полностью разобратся в алгоритме управления сервами(задержки,USART ),
Смотрел  кучу аналогов на Ассемблере но там сам черт ногу сломит :x.

Что касается настоящего алгоритма то за основу я брал изначально кривой код :?.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 10 авг 2006, 19:17 
Не в сети
отсылающий читать курс
Аватара пользователя

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

доходило аж до 32 серв на АТмеге32.

шукай.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 11 авг 2006, 00:20 
Не в сети
Аватара пользователя

Зарегистрирован: 22 мар 2005, 03:59
Сообщения: 257
Откуда: Питер
Не, 32 - это слишком:shock:, мне и 4 хватит.
Я хочу манипулятор сделать, 3-4 степени свободы + двухпалый захват
плюс OPENCV для отработки алгоритмов.  
Т.к  я всё это дело думаю на mega8 замутить, то еще датчиков понавесить разных чтоб портов свободных не осталось:D .

Но это все потом  :roll:, для начала надо с сервами разобраться.


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

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


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

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


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

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