roboforum.ru

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

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

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

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

Сообщение 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

так вот, где грабли??? это, что задержка может быть только цифрой задана????
краткая биография: родился в роддоме - учился на учебе - служил на службе - работал на работе.....
Аватара пользователя
denissyslo
 
Сообщения: 191
Зарегистрирован: 17 дек 2007, 15:39
Откуда: г. Комсмольск-на-Амуре / п.Светлая
ФИО: Денис Сусло

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

Сообщение Master » 16 апр 2008, 15:34

Нет, я задавал переменной странно. А ты библиотеку delay.h подключал.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

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

Сообщение denissyslo » 16 апр 2008, 15:43

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

да. Выше кусок из кода. просто заменял S0 на любую цифру, нажимаю F9 - отлично...странно
краткая биография: родился в роддоме - учился на учебе - служил на службе - работал на работе.....
Аватара пользователя
denissyslo
 
Сообщения: 191
Зарегистрирован: 17 дек 2007, 15:39
Откуда: г. Комсмольск-на-Амуре / п.Светлая
ФИО: Денис Сусло

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

Сообщение Master » 16 апр 2008, 15:47

Юзай delay_ms();
просто вместо 14000 пиши 14 и все
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

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

Сообщение Myp » 16 апр 2008, 15:48

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


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

если так то понятно почему не работает...
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

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

Сообщение denissyslo » 16 апр 2008, 15:55

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


Ага...тогда серва не рулиться. Странно, но тогда 14.5 = 15....пофиг, т.е. тогда серву ожно повернуть в 4 крайних положения - меня это не утравиает. Может таки не должно быть, но напрактике так.
работает мкросекунд
краткая биография: родился в роддоме - учился на учебе - служил на службе - работал на работе.....
Аватара пользователя
denissyslo
 
Сообщения: 191
Зарегистрирован: 17 дек 2007, 15:39
Откуда: г. Комсмольск-на-Амуре / п.Светлая
ФИО: Денис Сусло

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

Сообщение Master » 16 апр 2008, 15:56

Да дробные значения округляются.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

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

Сообщение denissyslo » 16 апр 2008, 15:58

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


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

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


АГА....а мне вообще стало ве непоняно нопы какие-то...:)
Лучше бы если было поятно, может и мне растолковали....
краткая биография: родился в роддоме - учился на учебе - служил на службе - работал на работе.....
Аватара пользователя
denissyslo
 
Сообщения: 191
Зарегистрирован: 17 дек 2007, 15:39
Откуда: г. Комсмольск-на-Амуре / п.Светлая
ФИО: Денис Сусло

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

Сообщение Master » 16 апр 2008, 16:13

NOP - not operation - команда асемблера которая говорит МК ничего не делать за этот такт.
Аватара пользователя
Master
 
Сообщения: 4468
Зарегистрирован: 21 дек 2006, 19:56
Откуда: Украина, г.Одесса
прог. языки: Delphi и С

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

Сообщение Myp » 16 апр 2008, 17:42

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

код деда не работает тажа ошибка...
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

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

Сообщение Aesthete Animus » 16 апр 2008, 20:32

Не надо использовать задержки для управления сервами! Это делается на таймерах.
Aesthete Animus
 
Сообщения: 23
Зарегистрирован: 22 мар 2008, 21:01
Откуда: Белгород
Skype: dackinevitch_yan
прог. языки: C/C++

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;
         }
      };
}
Аватара пользователя
RoboTok
 
Сообщения: 1060
Зарегистрирован: 04 фев 2008, 13:18
Откуда: Москва
прог. языки: PHP

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

Сообщение Duhas » 17 апр 2008, 00:34

Пишите на асме господа )
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

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

Сообщение denissyslo » 17 апр 2008, 05:42

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

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

Сообщение Duhas » 17 апр 2008, 10:30

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

но читать чей то код и правда хуже чем кодить по сравнению с си, хотя и в сях умудряются такого нагородить что за голову хватаешься
«Как сердцу выразить себя? … Мысль изреченная есть ложь!»
В этом мире меня подводит доброта и порядочность...
"двое смотрят в лужу, один видит лужу, другой отраженные в ней звезды"
Аватара пользователя
Duhas
 
Сообщения: 6338
Зарегистрирован: 15 сен 2007, 13:03
Откуда: Красноярск
прог. языки: ASM(МК), C(PC)
ФИО: Гагарский Андрей Александрович

След.

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

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

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