Технический форум по робототехнике.
creatur » 09 мар 2006, 16:31
Всем здрасте!
Для меня MK = Си = Asm = Китайский
( утрировано, но правдиво)
Сижу разбираюсь с AT90S2313 и CodeVisionAVR и есть
успехи:
Уже получилось менять ШИМ по Таймеру (1Гц),
для примера: за 255 сек изменить сважность от 0% до100%
А в реальной задаче временные интервалы есс-но
другие - скажем надо изменять ШИМ на +1 каждые 7 сек.
за определенный период(T)
А теперь вопрос : как на Си(CodeVisionAVR) сделать
if (T/7 есть целое число/или кратное 7 )?
заранее спасибо
avr123.nm.ru » 09 мар 2006, 17:13
avr123.nm.ru » 09 мар 2006, 17:16
кстати, а почему б вам не задать вопрос в существующую тему - для начинающих по МК ???
creatur » 09 мар 2006, 18:38
Как это сделать - смотри там:
-> Упражнения - задачи по курсу AVR
с этого я и начинал - спасибо автору...
Извиняюсь, что не там вопрос задал, мне теперь туда или
можно здесь продолжать?
avr123.nm.ru » 09 мар 2006, 18:58
я указывать не полномочен. Просто совет, мнение.
creatur » 09 мар 2006, 19:39
Тогда продолжу здесь...
"Прямее" то не всегда "дешевле"...
У AT90S2313 всего то (2К + 128) памяти...
в реальной задаче используются 7-8 различных периодов
времени, каждый выражен в секундах, т.е
для примера:
Т1 = 1800 сек / 255 (100% нагрузка) =~7
T2 = 28800 сек / 255 /_/_/_/_/_/_/_/ =~122
..............................
и т.д.
у меня получается слишком много констант, как следствие hex-file =~ 2k - в VMLAB неработает совсем,
в реале - соотвественно тоже нет ( вернее не совсем по
зададанному алгоритму ...)
Вот и был вопросик про си ( "а в дельфях я гораздо длинее" - if T1/7 is integer...что то вроде этого )...
есть ли у кого время и настроение глянуть на мое "безобразие" на си ?
ASin » 09 мар 2006, 20:17
Есть такая команда: деление по модулю; возвращает остаток от деления.
в С это %, т.е. для проверки делимости на 7 надо написать
- Код: Выделить всё • Развернуть
if (x % 7 == 0)
или, эстетично
- Код: Выделить всё • Развернуть
if ( !(x % 7) )
Только вот в AT90S2313 нет аппаратного деления. А значит, компилятор включит в проект библиотеку деления и код ещё больше распухнет. Проще уж написать цикл с вычитаниями.
wolf » 09 мар 2006, 20:40
creatur писал(а):в реальной задаче используются 7-8 различных периодов
времени, каждый выражен в секундах, т.е
для примера:
Т1 = 1800 сек / 255 (100% нагрузка) =~7
T2 = 28800 сек / 255 /_/_/_/_/_/_/_/ =~122
..............................
и т.д.
у меня получается слишком много констант, как следствие hex-file =~ 2k - в VMLAB неработает совсем,
7-8 периодов - это 7-8 констант, так? не то, чтобы слишком много.
wolf » 09 мар 2006, 20:44
ASin писал(а):Только вот в AT90S2313 нет аппаратного деления. А значит, компилятор включит в проект библиотеку деления и код ещё больше распухнет. Проще уж написать цикл с вычитаниями.
Ничего не распухнет, п/п деления в CV всего-то 14 слов.
avr123.nm.ru » 09 мар 2006, 21:14
creatur писал(а):у меня получается слишком много констант, как следствие hex-file =~ 2k - в VMLAB неработает совсем,
в реале - соотвественно тоже нет ( вернее не совсем по
зададанному алгоритму ...)
если hex получился то он НЕ МОЖЕТ не влезать в МК - хоть в реале хоть в VMLAB.
creatur писал(а): Вот и был вопросик про си
страница 5 краткого курса avr123.nm.ru
creatur » 09 мар 2006, 21:49
avr123.nm.ru писал(а):страница 5 краткого курса avr123.nm.ru
и правда есть... :oops: ослеп сапсем однако!
avr123.nm.ru писал(а):если hex получился то он НЕ МОЖЕТ не влезать в МК - хоть в реале хоть в VMLAB.
avr123.nm.ru
влезать то влезает, просто VMLAB и PonyProg ошибок не
выдавали, вот я и подумал...
я правильно понял, что 4К hex можно прошить в 2к MK ?
и ни чего не случится? в смысле должно "фунциклировать"?
спасибо всем ёщё раз
avr123.nm.ru » 10 мар 2006, 01:41
creatur писал(а):я правильно понял, что
4К hex можно прошить в 2к MK ? и ни чего не случится?
в смысле должно "фунциклировать"?
Компилятор знает каков размер памяти используемого МК и выдает после компиляции размер программы относительно размера памяти.
Если прога будет больше то будет ОШИБКА ! не будет HEX'а вообЧе !