roboforum.ru

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


Управление сервами

Программирование микроконтроллеров AVR, PIC, ARM.
Разработка и изготовление печатных плат для модулей.

Re: Управление сервами

Сообщение Korbofos » 09 окт 2011, 19:06

Что с такое с кодевиженом? Засунул этот код в avr studio! Всё идеально :shock:
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Управление сервами

Сообщение Korbofos » 11 окт 2011, 15:23

Как заставить работать эту программу в кодевижене? Есть у кого какие нибудь мысли??? :O:
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Управление сервами

Сообщение Korbofos » 18 окт 2011, 16:31

Код: Выделить всёРазвернуть
interrupt [TIM3_COMPC] void timer3_compc_isr(void)
{
static unsigned char current_servo=0;
static unsigned int OCR33=2000;   
ocr+=servo_position;
OCR3C=OCR33;
if (current_servo==8)
        {
         current_servo=0;
         TCCR3C|=(1<<FOC3C);
         TCCR3C|=(1<<FOC3C);
        }
        else
        {
         current_servo++;
        }
TCCR3C|=(1<<FOC3C);
}

Нашёл косяк в переменной OCR33 досчитав до 64250. В седующих прерываниях её значение остаются прежним.
Что придумать?
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Re: Управление сервами

Сообщение Korbofos » 19 окт 2011, 01:50

зло крылось в
Код: Выделить всёРазвернуть
#define OCR3C (*(unsigned int *) 0x82)

В кодевижене нет 16 битной переменной OCR3C, есть OCR3CH, OCR3CL. Хотя в винавр есть есть 16 битная переменная OCR3C...
Вот так всё пошло)))
Код:
Код: Выделить всёРазвернуть
interrupt [TIM3_COMPC] void timer3_compc_isr(void)
{
static unsigned char current_servo=0;
static unsigned int ocr=2000;   
static unsigned int pause = 18432;
if (current_servo==9)
        {
         current_servo=0;
         ocr += pause;
         OCR3CH=(unsigned char)(ocr>>8);
         OCR3CL=(unsigned char)ocr;
         pause = 18432;
        }
        else
        {
         ocr+=servo_position[current_servo];
         OCR3CH=(unsigned char)(ocr>>8);
         OCR3CL=(unsigned char)ocr;
         pause -= servo_position[current_servo];
         current_servo++;
        }
TCCR3C|=(1<<FOC3C);


Добавлено спустя 3 минуты 54 секунды:
avr123.nm.ru писал(а):По методу отладки программы через UART в задаче 4 курса по AVR - http://www.proavr.narod.ru/z4.htm вы можете вставить после этой строки вывод этого регистра в UART

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

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

Avr123 спасибо вам большое! Благодаря этому нащёл проблему.
РАБОТА, РАБОТА перейди на Федота, с Федота на его брата, а ко мне их зарплата.
Аватара пользователя
Korbofos
 
Сообщения: 317
Зарегистрирован: 15 янв 2011, 11:27
Откуда: Челябинск
прог. языки: C/C++
ФИО: Александр

Пред.

Вернуться в Микроконтроллеры

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

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