CodeVisionAVR ругается на команду - sw_delay_ms(500);

Обсуждаем контроллеры компании Atmel.
Ответить
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

CodeVisionAVR ругается на команду - sw_delay_ms(500);

Сообщение Marchello »

Кто сможет подсказать в чем ошибка? Что делаю не так?! При отладки программы CodeVisionAVR ругается вот на эту команду - sw_delay_ms(500);

Код: Выделить всё

#include <mega8.h>

void bipolar_init(void)
{
    DDRB |= 0x0F;
    PORTB &= 0xF0;
}
 
//
// Передвижение биполярного шагового двигателя полушагами
//
void bipolar_halfstep(signed char dir,
    unsigned short num_steps, unsigned char speed)
{
    unsigned short i;
    unsigned char pattern, state1 = 0, state2 = 1;
 
    // Утверждение направления +- 1
    dir = ((dir < 0) ? -1 : +1);
 
    // Осуществление полушагов
    for (i = 0; i < num_steps; i++)
    {       
        state1 += dir;
        state2 += dir;
 
        // Создание шаблона
        pattern = (1 << ((state1 % 8) >> 1)) |
                  (1 << ((state2 % 8) >> 1));
 
        // Обозначение выхода
        PORTB = (PORTB & 0xF0) | (pattern & 0x0F);
 
      // Создание паузы для ожидания выполнения шага
        sw_delay_ms(500);
    }
 
    // Остановка двигателя
   PORTB &= 0xF0;
}
Аватара пользователя
blackx
Говорящий с текстолитом
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Re: Почему ругаемся? В чем ошибка?

Сообщение blackx »

А что это за функция? Юзайте sw_delay().

И delay.h тоже нужно бы заинклудить.
Изображение only pure true norwegian blackx Изображение
Marchello
Встал на лапы
Сообщения: 114
Зарегистрирован: Чт ноя 24, 2011 12:39:13

Re: Почему ругаемся? В чем ошибка?

Сообщение Marchello »

Ой горе моей голове! Запутался напрочь! Давайте вместе попробуем разобраться! Вот ссылка на сайт где описана программа управления шаговым двигателем - http://home.roboticlab.eu/ru/examples/motor/stepper. Но скопировав ее в CodevisionAVR у меня ничего не получается, не проходит отладка!
Аватара пользователя
Rinon Ninqueon
Говорящий с текстолитом
Сообщения: 1562
Зарегистрирован: Ср июн 30, 2010 18:54:47
Откуда: NO14MU
Контактная информация:

Re: Почему ругаемся? В чем ошибка?

Сообщение Rinon Ninqueon »

не, в CVAVR есть delay_ms и delay_us
только #include <delay.h> надо прикошачить
Изображение
Изображение
Изображение
Сам себе Гилмор
EmDmAl
Открыл глаза
Сообщения: 51
Зарегистрирован: Чт мар 22, 2012 09:14:18
Откуда: Липецк

Re: CodeVisionAVR ругается на команду - sw_delay_ms(500);

Сообщение EmDmAl »

Для нормальной работы этого кода необходимо делать задержку вида:

Код: Выделить всё

void MyPause(int ms)
{
   while(ms--)
      { _delay_ms(1); }
}

иначе компилятор (AVR Studio) может ругаться на _delay_ms, из-за неопределенности передачи в нее.
Ребят, а что означает такая запись

Код: Выделить всё

(1 << ((state % 8) >> 1)
?
Как я понял число делится на 8 и получаем остаток. Если число больше 8, то получаем число больше 0. Затем делится на 2 (сдвигается бит влево), потом наоборот. Честно сказать запись непонятна.
Может есть способ по другому написать для непонятливых:)?
Ответить

Вернуться в «AVR»