Страница 1 из 1

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

Добавлено: Чт янв 10, 2013 08:16:55
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;
}

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

Добавлено: Чт янв 10, 2013 08:34:32
blackx
А что это за функция? Юзайте sw_delay().

И delay.h тоже нужно бы заинклудить.

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

Добавлено: Чт янв 10, 2013 09:02:56
Marchello
Ой горе моей голове! Запутался напрочь! Давайте вместе попробуем разобраться! Вот ссылка на сайт где описана программа управления шаговым двигателем - http://home.roboticlab.eu/ru/examples/motor/stepper. Но скопировав ее в CodevisionAVR у меня ничего не получается, не проходит отладка!

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

Добавлено: Чт янв 10, 2013 10:26:03
Rinon Ninqueon
не, в CVAVR есть delay_ms и delay_us
только #include <delay.h> надо прикошачить

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

Добавлено: Вс мар 03, 2013 20:10:50
EmDmAl
Для нормальной работы этого кода необходимо делать задержку вида:

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

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

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

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

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