Извиняюсь за абсолютно глупый вопрос для некоторых, но тем не менее для меня важный. рулю сервой по следующему алгоритму: PORTA.1=0; delay_us(1400); PORTA.1=0; delay_us(18600); решил одернизировать что бы было так: PORTA.1=0; delay_us(S0); PORTA.1=0; delay_us(20000-S0); т.е. плавным изменением переменной S0 управлять углом. Почитал 5 страницу нашей "библии", обе для этого объявил переменную unsigned int S0=1400; //Серва поворота
после чего компилятор подчеркивает строку delay_us(S0);
и пишет: must be constant expression
так вот, где грабли??? это, что задержка может быть только цифрой задана????
Юзай delay_ms(); просто вместо 14000 пиши 14 и все
Ага...тогда серва не рулиться. Странно, но тогда 14.5 = 15....пофиг, т.е. тогда серву ожно повернуть в 4 крайних положения - меня это не утравиает. Может таки не должно быть, но напрактике так. работает мкросекунд
Во я то же хотел сказать, разберитесь с таймерами и сможете обрабатывать задачи паралельно и выстовлять нужные задежки. В CodeVisionAVR переферия настраивается через помошник элементарно.
// Timer 0 overflow interrupt service routine interrupt [TIM0_OVF] void timer0_ovf_isr(void) { // Place your code here //Пишем сюда короткий код. //Например установка семафора.
Добавлено спустя 6 минут 14 секунд: А вообще не понимаю: Сервы очень распространены, многие их используют. А нигде нет инструкции как рулить ей с МК. Вот как тов.123АВР сделал - замутил сайт. Его спрашивают, а он - пошел туд-то (я не шучу, грамотно сделано). вопросов этих куча как я посмотрю - новичок спрашивает - а как рулить - управление Серво SERVO - подробнейше рассказано с примеами для симуляции http://avr123.nm.ru/z13.htm