roboforum.ru

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

Нужна помощь по СИ.

Нужна помощь по СИ.

denissyslo » 16 апр 2008, 15:11

Читать: "Си для микроконтроллеров" и он-лайн книга "Язык Си" Кергниган Ричи < avr123.nm.ru >

Извиняюсь за абсолютно глупый вопрос для некоторых, но тем не менее для меня важный.
рулю сервой по следующему алгоритму:
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

так вот, где грабли??? это, что задержка может быть только цифрой задана????

Re: Нужна помощь по СИ.

Master » 16 апр 2008, 15:34

Нет, я задавал переменной странно. А ты библиотеку delay.h подключал.

Re: Нужна помощь по СИ.

denissyslo » 16 апр 2008, 15:43

#include <mega16.h>
#include <delay.h>

да. Выше кусок из кода. просто заменял S0 на любую цифру, нажимаю F9 - отлично...странно

Re: Нужна помощь по СИ.

Master » 16 апр 2008, 15:47

Юзай delay_ms();
просто вместо 14000 пиши 14 и все

Re: Нужна помощь по СИ.

Myp » 16 апр 2008, 15:48

эмм
господа
а компилятор дэлэй вычисляет nop'ами чтоли?


тоесть в асмовый листинг вбивается нужное количество нопов вместо дэлэя???

если так то понятно почему не работает...

Re: Нужна помощь по СИ.

denissyslo » 16 апр 2008, 15:55

Юзай delay_ms();
просто вместо 14000 пиши 14 и все


Ага...тогда серва не рулиться. Странно, но тогда 14.5 = 15....пофиг, т.е. тогда серву ожно повернуть в 4 крайних положения - меня это не утравиает. Может таки не должно быть, но напрактике так.
работает мкросекунд

Re: Нужна помощь по СИ.

Master » 16 апр 2008, 15:56

Да дробные значения округляются.

Re: Нужна помощь по СИ.

denissyslo » 16 апр 2008, 15:58

эмм
господа
а компилятор дэлэй вычисляет nop'ами чтоли?


тоесть в асмовый листинг вбивается нужное количество нопов вместо дэлэя???

если так то понятно почему не работает...


АГА....а мне вообще стало ве непоняно нопы какие-то...:)
Лучше бы если было поятно, может и мне растолковали....

Re: Нужна помощь по СИ.

Master » 16 апр 2008, 16:13

NOP - not operation - команда асемблера которая говорит МК ничего не делать за этот такт.

Re: Нужна помощь по СИ.

Myp » 16 апр 2008, 17:42

Master писал(а):Вот к примеру здеся
http://roboforum.ru/viewtopic.php?f=35& ... %82#p51997
Там Дед писал код и использовал, переменные как и ты в Delay_us, но у него правда в куске кода не указан тип переменных.

код деда не работает тажа ошибка...

Re: Нужна помощь по СИ.

Aesthete Animus » 16 апр 2008, 20:32

Не надо использовать задержки для управления сервами! Это делается на таймерах.

Re: Нужна помощь по СИ.

RoboTok » 16 апр 2008, 23:18

Во я то же хотел сказать, разберитесь с таймерами и сможете обрабатывать задачи паралельно и выстовлять нужные задежки.
В CodeVisionAVR переферия настраивается через помошник элементарно.

Вот например:
Код: Выделить всёРазвернуть
#include <mega8.h>
//4МГц

char sim1 = 0;//пример семафора

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
// Place your code here
//Пишем сюда короткий код.
//Например установка семафора.

sim1 = 1;

}

void initmain(void)
{
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 3,906 kHz//частота генерации прерываний
TCCR0=0x05;
TCNT0=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x01;

// Global enable interrupts
#asm("sei")
}

void main(void)
{
initmain();//активация таймера 0
while (1)
      {
      // Place your code here
      if(sim1)// семафора сработал
          {
          sim1 = 0;
         }
      };
}

Re: Нужна помощь по СИ.

Duhas » 17 апр 2008, 00:34

Пишите на асме господа )

Re: Нужна помощь по СИ.

denissyslo » 17 апр 2008, 05:42

Добавлено спустя 6 минут 14 секунд:
А вообще не понимаю: Сервы очень распространены, многие их используют. А нигде нет инструкции как рулить ей с МК. Вот как тов.123АВР сделал - замутил сайт. Его спрашивают, а он - пошел туд-то (я не шучу, грамотно сделано).
вопросов этих куча как я посмотрю - новичок спрашивает - а как рулить - управление Серво SERVO - подробнейше рассказано с примеами для симуляции
http://avr123.nm.ru/z13.htm

Re: Нужна помощь по СИ.

Duhas » 17 апр 2008, 10:30

в асме ничего страшного нету, все ясно.. прозрачно.. как вода ключевая ...
http://asm-avr.narod.ru/ Ассемблер для AVR на русском

но читать чей то код и правда хуже чем кодить по сравнению с си, хотя и в сях умудряются такого нагородить что за голову хватаешься


Rambler\'s Top100 Mail.ru counter