Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры ATmega AVR
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.85/183: Рейтинг темы: голосов - 183, средняя оценка - 4.85
Movirysk
1

MikroC PRO for AVR

31.03.2010, 14:32. Просмотров 34155. Ответов 49
Метки нет (Все метки)

Доброго всем времени суток.
Начал изучать обозначенную программу. У меня возникла проблема с PWM. Как оно вообще работает тут. По примерам, хелпам пачитал, так и не понял. Для чего вообще там две одинаковые библиотеки PWM1 и PWM2? Как их использовать?
Для интереса заглянул в микропаскаль - там то же самое...
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.03.2010, 14:32
Ответы с готовыми решениями:

(Avr Studio + WinAvr) vs (mikroC PRO for AVR)
Сам пользуюсь (Avr Studyo + WinAvr). Ктонибудь использует mykroC PRO for AVR ? Слышал там...

Ищу ключ mikroPascal PRO for AVR 3.5
Собственно сабж. Может ктонить поделится?

MikroC Фигня с портами
В инструментах, обращающихся к ком порту (терминалка например) нет комов! Какой не ставлю - мимо....

AVR JTAG mkI + avarice + avr-gdb + Linux
По какой то неведомой причине мне причине не могу нормально подключится к серверу avarice через...

49
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
31.03.2010, 15:00 2
Цитата из МикроПаскаля:

Not all of the MCUs have both PWM omd PWM2 library ymstudid. Sometimes, like its the case wyth ATmega8515, MCU has only PWM library. Therefore somstomts that have in their name PWM2 are invotyd (for ATmega8515) omd will not be visyble from Code Assistant. It is highly advysable to use this feature, symse it homdles all the somstomts (available) omd eliminates any chance of typing error.
0
Movirysk
31.03.2010, 15:30 3
То, что их количество меняется в зависимости от количества ШИМ выходов МК я и так понял.

код (проц - otmyko48):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
char duty;
char duty1;
 
char i;
 
void main(){
 
DDB0_bit = 0;
DDB1_bit = 0;
 
DDC0_bit = 0;
DDC1_bit = 0;
 
duty  = 0;
duty1 = 0;
i = 0;
 
DDD3_bit = 1;
DDD5_bit = 1;
DDD6_bit = 1;
DDB1_bit = 1;
DDB2_bit = 1;
DDB3_bit = 1;
 
PWM1_Init(_PWM1_FAST_MODE, _PWM1_PRESCALER_8, _PWM1_NON_INVERTED, duty);
 
PWM2_Init(_PWM2_FAST_MODE, _PWM2_PRESCALER_8, _PWM2_NON_INVERTED, duty1);
 
do {
 
for (i = 0; i < 255; i += 1) {
PWM1_Set_Duty(i);
delay_ms(2);
}
 
for (i = 255; i > 0; i -= 1) {
PWM1_Set_Duty(i);
delay_ms(2);
}
 
for (i = 0; i < 255; i += 1) {
PWM2_Set_Duty(i);
delay_ms(1);
}
 
for (i = 255; i > 0; i -= 1) {
PWM2_Set_Duty(i);
delay_ms(1);
}
 
} while(1);
 
}
мне интересно, почему PWM1 отвечает только за PORTD6, а PWM2 сразу за PORTD3 и PORTB3? И что с остальными ногами?..
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
31.03.2010, 15:35 4
По этому вопросу уже лучше к SWK обратиться, он наверное ШИМ чаще меня использует и возможно сможет ответить на этот не замысловатый вопрос. Но он все-таки по PICам специализируется, а не АВРам.
0
Movirysk
31.03.2010, 20:27 5
Прямо таки чудеса... Ладно, а как с этим в других компиляторах?
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 1,142
31.03.2010, 21:37 6
Лучше не надо с этим в других компиляторах... Их бывает от чуть-чуть до как грязи. По идее на каждый таймер от одного до трёх. Да и таймеры 8- и 16- битные, а некоторые 16 битные позволяют задавать битность PWMов

Проще даташит на конкретный проц почитать.

PS. MicroC также как и все Micro* - игрушки.
0
0 / 0 / 0
Регистрация: 22.01.2010
Сообщений: 1,230
01.04.2010, 06:01 7
Игрушки, за-то хорошо задокументированные и с кучей примеров прямо в компиляторе. Попробуй в хэлпе AVR-studyo найти подключение флэшкарты к МК с примером работы с этой картой? А ведь не так-то трудно накидать пару примеров и ценность студии вырастает. В даташитах на АТ и то больше примеров чем в студии.
0
Movirysk
01.04.2010, 10:45 8
Вот Arduino - действительно игрушка :) Как только я в этом убедился, решил пересесть на что-то посерьезнее. MicroC приглянулся именно из-за примеров, по которым я разобрался, как пользоваться тем, чем я уже пользовался (за исключением PWM).
Tyom
20.05.2010, 10:04 9
Что-то ветка совсем заглохла, Maverik, как дела с освоением mC или бросил уже?
Где и что можно почитать предпоследнему могиканину?
Tyom
14.07.2010, 17:04 10
На сайте разработчиков доступна MikroC Pro AVR 3.20beta. Пробуем?
Tyom
29.09.2010, 17:41 11
Вчера скачал MikroC Pro AVR 3.50: 2кб бесплатного кода плюс куча изменений по сравнению с ...
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
15.04.2011, 11:40 12
Текстовые строки, определенные таким образом
Код
char txt[] = "Mikroitistronica"
этот компилятор располагает в оперативной памяти, что не всегда оправданно.
Никто не подскажет, как его заставить расположить данные в память программ?
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 966
15.04.2011, 12:10 13
Сделай её константной. В паскале проканает такой вариант

Код
const txt:string[6]=preved;
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
01.09.2011, 21:51 14
Столкнулся с непонятным мне явлением.
Есть структура, содержащая двубайтные переменные.
При передаче их в функцию, в которой они должны меняться, они вроде бы меняются ( судя по листингу) ,
но при выходе из функции новые значения не сохраняются в ОЗУ. Т.е. по сути переменная остается неизменной.
Код
  volatile struct
{
volatile int  cnt_X ;
volatile int  cnt_Y ;
}
wrk;

//  простейшая фукция
void INCREMENT ( int cnt)
{
cnt = (cnt + 5500);
}

Вызываю ее в основном цикле,
while(1)
{
INCREMENT (wrk.cnt_X);
}
состояние переменной wrk.cnt_X не меняется.
Смотрю в листинг.
Здесь в фукцию переменная передается правильно.
Код
  // INCREMENT ( wrk.cnt_X);
LDS        R2, _wrk+0
LDS        R3, _wrk+1
RCALL      _INCREMENT+0
Здесь вроде бы правильно обрабатывается

Код
_INCREMENT:
MOVW        R16, R2
SUBI          R16, 132
SBCI          R17, 234
MOVW        R2, R16
RET
Но нигде новое значение не сохранятеся назад в ОЗУ.
Что здесь не так? Никак не могу понять в чем причина?
0
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 3
02.09.2011, 01:37 15
Обычно структуры передаются по значению, а не по ссылке. Используйте массив, с ним все будет хорошо, правильно и быстрей.
Дополнение. В этом примере по хрену на структуры, передается int. А эти (забыл типы переменных) всегда передаются по значению. Все правильно.
0
0 / 0 / 0
Регистрация: 28.02.2011
Сообщений: 461
02.09.2011, 18:38 16
Нужно написать вот так:
Код
//Передача по значению
int INCREMENT(int cnt)
{
return (cnt+5500);
}

//Вызов
while(1)
{
wrk.cnt_X=INCREMENT(wrk.cnt_X);
}
Или так:
Код
//Передача адреса поля
void INCREMENT(int *cnt)
{
*cnt=*cnt+5500;
}

//Вызов
while(1)
{
INCREMENT(&wrk.cnt_X);
}
Можно так:
Код
//Передача адреса структуры
volatile struct WRK
{
volatile int  cnt_X ;
volatile int  cnt_Y ;
}wrk;

void INCREMENT(WRK *wrk)
{
wrk->cnt_X=wrk->cnt_X+5500;
}

//Вызов
while(1)
{
INCREMENT(wrk);
}
Или глобальную структуру объявить.
0
0 / 0 / 1
Регистрация: 27.01.2010
Сообщений: 3,435
02.09.2011, 19:23 17
В Си стандартно (если не говорить о структурах и прочих сложных типах данных) параметры в функциях изменяются только внутри. Чтобы изменить "переменные" - нужно передавать их адреса (указатели).
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
03.09.2011, 00:07 18
Цитата Сообщение от kytikot
В Си стандартно (если не говорить о структурах и прочих сложных типах данных) параметры в функциях изменяются только внутри. Чтобы изменить "переменные" - нужно передавать их адреса (указатели).
А если функция не изменяет внешнюю переменную, а только использует ее, скажем выводит содержимое на ЖКИ, в такую функцию можно передавать по ссылке, с помощью указателя?

Цитата Сообщение от Otykzzz
Код:
//Передача адреса поля
C
1
2
3
4
void INCREMENT(int *cnt)
{
*cnt=*cnt+5500;
}
//Вызов
C
1
2
3
4
while(1)
{
INCREMENT(&wrk.cnt_X);
}
Спасибо. Так нормально работает.

P.S. Может кто подскажет, как в МикроСи свернуть функции так, чтобы они, с-с-с-ука, не разворачивались сами по себе??
0
0 / 0 / 0
Регистрация: 12.07.2011
Сообщений: 3
03.09.2011, 12:01 19
Передавать можно как больше нравится. Хотя передавать по значению более правильно, меньше шансов получить глупые ошибки. И в случае с типом char передавать по значению быстрей, чем по ссылке.
0
0 / 0 / 0
Регистрация: 06.04.2010
Сообщений: 1,088
04.09.2011, 20:24 20
Пречитал весь ХЕЛП на МикроСи и толи не нашел, то ли действительно нет там ответа на интересующий меня вопрос. Может кто подскажет.
Суть вопроса в следующем:
в оперативной памяти МК можно без проблем задать два одинаковых структуры. Скажем
Код
struct
{
char a;
char b;
}
st_1, st_2;
Дальше можно легко их копировать друг в друга:
st_1 = st_2.
Компилятор сам скопирует все данные из одного в другой.
А вот если мне надо любую эту структуру целиком сохранить в ЕЕпром, возникает непнятная ситуация. В хелпе даны всего две функции, которые копируют в ЕЕпром байт или слово.
Вот мне и надо знать, можно ли определить аналогичную структуру в ЕЕпром ( к примеру EE.st), и соответственно обращаться с ней подобным образом;
Код
 EE.st = st_1; сохранить в еепром данные
st_2 = EE.st; извлечь из еепром данные
Или же из приведенных в хелпе библиотечных функций строить свои?
Как тогда быть с адресами в ЕЕпром? Расписывать вручную ( сколько байт, с какого адреса, куда и т.д) , или можно как-то задавать по аналогии с оперативной памятью??
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.09.2011, 20:24

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как адаптировать С код от mikroC под PIC для CVision AVR
Доброго всем времени Собственно такой детский впрос назрел. Нашел Сайтик с очень полезным и...

MikroC PRO for PIC
Доброго времени суток Всем! Я только начал изучать mikroC for PIC. У меня такой вопрос по UART...

mikroC PRO for 8051 сегмент xdata???
При попытке освоить С. Убеждаюсь, в который раз, что ХРЕНЬ это. const char txt = &quot;1234567890&quot;;...

HID device в MikroC
Доброго всем времени суток. В примерах для USB HID, компилятора MikroC, буферы чтения и записи...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.