roboforum.ru

Технический форум по робототехнике.

Проблема с WinAVR - Создание проги для серв

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

Сообщение Сергей » 12 авг 2006, 13:09

Без проблем!
ЗЫ
Файл SvS - это проект для WinAVR. А файл main для VMLab. Ну там и все остальные файлы.
Вложения
SvS WinAVR.rar
(63.13 КиБ) Скачиваний: 89
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение Сергей » 12 авг 2006, 13:23

avr123.nm.ru писал(а):Трудно поправить тот код, ведь там комментов практически нет и я не знаю что должна делать ваша прога.

Код собран по частям из какойто программы для серв, я сам в ней толком не разобрался, но поидее все должнобыть норм. Вот эта прога в оригинале.
ЗЫ
Выкладываю еще Даташит на этого робота.
Вложения
Inchworm%20ROBOT%20User%20Manual(Eng,mega8).pdf
(487.41 КиБ) Скачиваний: 100
Inchworm(mega).rar
(10.23 КиБ) Скачиваний: 87
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение Lirzman » 12 авг 2006, 22:26

Какой редактор вы используете?
Зачем СТОЛЬКО кода для управления 7-ю сервами???? :shock:
Я решил аналогичную задачу (правда без использования таймеров) НАМНОГО проще, размер исходника в 2,5 раза меньше, а размер HEX файла в !!!7!!!.

Еще у вас был кривой makefile.
Выкладываю нормальный.
Вложения
Makefile.txt
(631 байт) Скачиваний: 361
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение Сергей » 12 авг 2006, 22:34

Я и сам могу написать прогу управления сервой без таймера. Но фишка в том что тогда нельзя будет управлять несколькими сервами одновременно, чтобы они сохраняли позицию во время того как движутся другие сервы. А эта прога как раз решает эти проблемы.. ну и создает новые )) Вот только не удается мне понять в чем ошибка, почему не подает сигналов  когда я вызываю нужную функцию..
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение Lirzman » 12 авг 2006, 22:43

Тогда можешь подкинуть матерьяла по работе с таймерами?

Ps: А под какой контроллер ты всё это пишешь?
Последний раз редактировалось Lirzman 12 авг 2006, 22:47, всего редактировалось 1 раз.
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение Сергей » 12 авг 2006, 22:46

Ну можно почитать курс, там про таймер вродебы понятно написано. Можно посмотреть всякие примеры с работой таймеров. А так на руках ничего нет.
Сергей
 
Сообщения: 3744
Зарегистрирован: 29 дек 2004, 23:15
Откуда: Санкт-Петербург
прог. языки: C, C++, C#, Asm
ФИО: Кашликов Сергей

Сообщение avr123.nm.ru » 13 авг 2006, 01:37

Lirzman писал(а):Еще у вас был кривой makefile.
Выкладываю нормальный.


я тоже поставил новый WinAVR - проверил из VMLAB демо проект работает.  А проект в рицепе - билд неудачный и куча ошибок.

Уперся мол на строке 56 ИНТ возвращает или ждет ...

надо в исправленым мэйком попробовать.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение avr123.nm.ru » 13 авг 2006, 01:38

Lirzman писал(а):Тогда можешь подкинуть матерьяла по работе с таймерами?


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

Сообщение Lirzman » 13 авг 2006, 15:14

У меня вопрос касательно таймеров:
В файле Winavr/avr/include/utils/delay.h есть четыре функции задержки
Код: Выделить всёРазвернуть
static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
static inline void _delay_us(double __us) __attribute__((always_inline));
static inline void _delay_ms(double __ms) __attribute__((always_inline));


Как видно 3-я и 4-я для мкс и мс задержек соответственно.
Причем они высчитывают количество тиков процессора исходя из константы F_CPU и передают полученное значение в void _delay_loop_1
и void _delay_loop_2 соответственно.

Самое интересное что в пояснении к этим функциям написано следующее:
Для первой:
Delay loop using an 8-bit counter \c __count, so up to 256
   iterations are possible.  (The value 256 would have to be passed
   as 0.)  The loop executes three CPU cycles per iteration, not
   including the overhead the compiler needs to setup the counter
   register.
   Thus, at a CPU speed of 1 MHz, delays of up to 768 microseconds
   can be achieved.


Для второй:
Delay loop using a 16-bit counter \c __count, so up to 65536
   iterations are possible.  (The value 65536 would have to be
   passed as 0.)  The loop executes four CPU cycles per iteration,
   not including the overhead the compiler requires to setup the
   counter register pair.

   Thus, at a CPU speed of 1 MHz, delays of up to about 262.1
   milliseconds can be achieved.


Если я прав но это функции задержек по таймера, но тогда зачем упоминается CPU SPEED :?:  :?:  :?:
Аватара пользователя
Lirzman
 
Сообщения: 257
Зарегистрирован: 22 мар 2005, 03:59
Откуда: Питер

Сообщение avr123.nm.ru » 13 авг 2006, 15:57

Друзья ! Еще раз ОЧЕНЬ прошу.

делайте как  написано в курсе  avr123.nm.ru/04.htm  и все будет работать !

Поставиви WinAVR  больше НИКОГДА в него не лазайте !

Работайте из VMLAB !!  Он сам генерит ПРАВИЛЬНЫЙ мэйк-файл, которые вы затем при желании можете исправить !

Редактор WinAVR можно подключитьк VMLAB

Из VMLAB ведется редактирование исходника и его перекомпиляция по "ребилд олл".

в проекте VMLAB  у вас должно быть то что в примере VMLAB из папки WinAVR

.MICRO "какой"
.TOOLCHAIN "GCC"
.GCCPATH   "c:\WinAVR"

.GCCMAKE AUTO  ; приказ сделать мэйк фал самому

.SOURCE "main.c"
.TARGET "main.hex"


в исходник на Си  НЕОБХОДИМО включить библиотеки (хидеры .h) из исходника из папки WinAVR

==============

Уанс мо:  

делайте как написано в курсе - и у вас будет работать быстро и правильно.

Вот файлы - попробуйте.
Вложения
SvS_by_avr123.nm.ru _.rar
(3.55 КиБ) Скачиваний: 84
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение avr123.nm.ru » 14 авг 2006, 05:20

В разделе форума "Микроконтроллеры" я сделал тему
"WinAVR - библиотека исходников"

Там и управление 8-ю сервами есть.
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение aesok » 14 авг 2006, 20:18

Lirzman писал(а):У меня вопрос касательно таймеров:
В файле Winavr/avr/include/utils/delay.h есть четыре функции задержки
Код: Выделить всёРазвернуть
static inline void _delay_loop_1(uint8_t __count) __attribute__((always_inline));
static inline void _delay_loop_2(uint16_t __count) __attribute__((always_inline));
static inline void _delay_us(double __us) __attribute__((always_inline));
static inline void _delay_ms(double __ms) __attribute__((always_inline));


Если я прав но это функции задержек по таймера, но тогда зачем упоминается CPU SPEED :?:  :?:  :?:


Нет эти функции не используют таймеры, они крутяться в циклах. Для разных частот задающего генератора генератора нужно выполнить раное количества инструкций чтобы прошло одно и тоже время. Частота генератора задается с помощю определения макроса F_CPU

Анатолий.
aesok
 
Сообщения: 69
Зарегистрирован: 11 авг 2006, 01:02
Откуда: ----

Сообщение aesok » 14 авг 2006, 20:23

Lirzman писал(а):
Еще у вас был кривой makefile.
Выкладываю нормальный.


CFLAGS= -O -g -Wall -ffreestanding -mmcu=$(MCU)

Используйте оптимизацию CFLAGS=  -Os.

Но как я уже писал от вашего варианта задежки останиться 0, в прямом смысле.

Анатолий.
aesok
 
Сообщения: 69
Зарегистрирован: 11 авг 2006, 01:02
Откуда: ----

Сообщение avr123.nm.ru » 14 авг 2006, 20:55

aesok писал(а):Используйте оптимизацию CFLAGS=  -Os.


вы не могли бы подробней сказать об уровне - s

я не использую WinAVR и судить не могу, но на electronix.ru/forum всегда рекомендуют -O2
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Сообщение aesok » 14 авг 2006, 21:10

avr123.nm.ru писал(а):
aesok писал(а):Используйте оптимизацию CFLAGS=  -Os.


вы не могли бы подробней сказать об уровне - s

я не использую WinAVR и судить не могу, но на electronix.ru/forum всегда рекомендуют -O2


-О0 - без оптимизации.
-01 -02 -03 - включаються включаеться все большее количество проходов оптимизации по скорости кода. -0s - это -O2 плюс оптимизации по размеру кода. Для AVR обычно чем меньше код тем быстрее. avr-libc скомпилирована с -Os.

Анатолий.
aesok
 
Сообщения: 69
Зарегистрирован: 11 авг 2006, 01:02
Откуда: ----

Пред.След.

Вернуться в Новичкам или основы основ роботостроения.

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

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