CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
Есть такой макрос
#define LED_ON(A,B,C) PORTB=PORTB|((1<<A)|(1<<B)|(1<<C))
#define LED_ON(A,B) PORTB=PORTB|((1<<A)|(1<<B))
#define LED_ON(A) PORTB=PORTB|(1<<A)
как его можно использовать с 1 с 2 или с 3 параметрами по необходимости
с функциями такой трюк проходит - компилятор сам выбирает необходимую.
#define LED_ON(A,B,C) PORTB=PORTB|((1<<A)|(1<<B)|(1<<C))
#define LED_ON(A,B) PORTB=PORTB|((1<<A)|(1<<B))
#define LED_ON(A) PORTB=PORTB|(1<<A)
как его можно использовать с 1 с 2 или с 3 параметрами по необходимости
с функциями такой трюк проходит - компилятор сам выбирает необходимую.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Думаю, что-то удобоваримое можно сделать только как-то так:
Код: Выделить всё
#define LED_RED (1<<1)
#define LED_BLUE (1<<3)
#define LED_GREEN (1<<4)
#define LED_ON(x) PORTB |= (x)
LED_ON(LED_RED | LED_GREEN | LED_BLUE)Re: CodeVision AVR в вопросах и ответах
Спасибо.
Я кстати тоже сам к такой идеи пришел.
Я кстати тоже сам к такой идеи пришел.
- Vanes
- Первый раз сказал Мяу!
- Сообщения: 27
- Зарегистрирован: Вт июл 08, 2014 14:27:38
- Откуда: Славянск-на-Кубани
Re: CodeVision AVR в вопросах и ответах
Дима_Медвед писал(а):Всем привет! Есть вопрос: как запустить симулятор в CVAVR??
При попытку запуска с AVR studio 4.19 пишет, что не может открыть студию, а с версией 6.1+ ничего не происходит.
Что делать?
Попробуй проверить настройки симулятора в CVAVR, прописан ли там путь к AVRStudio(номер версии).exe. Попробуй просто запустить саму AVR Студию напрямую через её экзешник.
Re: CodeVision AVR в вопросах и ответах
А вот скажите мне, побитные логические операции работают только на char?
На int у меня не вышло.
На int у меня не вышло.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Работают на любых целочисленных типах, не только на char.
Re: CodeVision AVR в вопросах и ответах
WiseLord писал(а):Работают на любых целочисленных типах, не только на char.
Ага, я понял где затупил, спс.
Re: CodeVision AVR в вопросах и ответах
Добрый день!
Пишу программу для барометра на atmega8 с датчиком bmp180. Скачал библиотеку для барометра, но выдает ошибку.
Пишу в CodeVisionAVR, что эта за ошибка и как её исправить?
Пишу программу для барометра на atmega8 с датчиком bmp180. Скачал библиотеку для барометра, но выдает ошибку.
included from: atmega_bmp180_lib.c, L11:can't open #include file: util/twi.h
Пишу в CodeVisionAVR, что эта за ошибка и как её исправить?
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
util/twi.h - это часть библиотеки I²C для avr-gcc/avr-libc. Так что либо пишите свой код в WinAVR, либо переделывайте I²C функции под CodeVision.
-
tolyan_2006
- Родился
- Сообщения: 1
- Зарегистрирован: Пн окт 19, 2015 17:48:09
Re: CodeVision AVR в вопросах и ответах
Доброго времени суток!
Изучаю апноут AVR443 для управления бесколлекторным дпт. Codevision упорно ругается на элементы массива конфигураций порта управления ключами. Пишет "must be constant expression"
Сами переменные массива описываются в h-файле таким образом
Подскажите пожалуйста как мне можно обмануть сего товарища?
Изучаю апноут AVR443 для управления бесколлекторным дпт. Codevision упорно ругается на элементы массива конфигураций порта управления ключами. Пишет "must be constant expression"
unsigned char drvPatternsCCW[] = {
0, //Stop
// MC_PORT drive config
PDP2_CCW, //Phase2
PDP4_CCW, //Phase4
PDP3_CCW, //Phase3
PDP6_CCW, //Phase6
PDP1_CCW, //Phase1
PDP5_CCW, //Phase5
// Configuration of Output Compare operation for timer 0
COM0P2_CCW, //Phase2
COM0P4_CCW, //Phase4
COM0P3_CCW, //Phase3
COM0P6_CCW, //Phase6
COM0P1_CCW, //Phase1
COM0P5_CCW, //Phase5
// Configuration of Output Compare operation for timer 2
COM2P2_CCW, //Phase2
COM2P4_CCW, //Phase4
COM2P3_CCW, //Phase3
COM2P6_CCW, //Phase6
COM2P1_CCW, //Phase1
COM2P5_CCW //Phase5
};
Сами переменные массива описываются в h-файле таким образом
#define UL PINB.1
#define VL PINB.4
#define WL PINB.6
#define UH PINB.0
#define VH PINB.3
#define WH PINB.5
#define PDP1_CCW ((1<<UL)|(0<<VL)|(0<<WL)|(0<<UH)|(1<<VH)|(0<<WH))
#define PDP2_CCW ((1<<UL)|(0<<VL)|(0<<WL)|(0<<UH)|(0<<VH)|(1<<WH))
#define PDP3_CCW ((0<<UL)|(1<<VL)|(0<<WL)|(0<<UH)|(0<<VH)|(1<<WH))
#define PDP4_CCW ((0<<UL)|(1<<VL)|(0<<WL)|(1<<UH)|(0<<VH)|(0<<WH))
#define PDP5_CCW ((0<<UL)|(0<<VL)|(1<<WL)|(1<<UH)|(0<<VH)|(0<<WH))
#define PDP6_CCW ((0<<UL)|(0<<VL)|(1<<WL)|(0<<UH)|(1<<VH)|(0<<WH))
Подскажите пожалуйста как мне можно обмануть сего товарища?
Re: CodeVision AVR в вопросах и ответах
Dr.Seldom писал(а):Всем мяв!
вопрос созрел.... перезрел.... и начал пахнуть....
протеус+модель LCD ILI9325+Mega64+CV
в СВ с помощью визарда определил куда и чего подключать, повторил все подключения в протеусе, но что-то на экранчике ничего не отображается (модель LCD рабочая, есть пример с андурило )..
пытаюсь вывести хоть строчку из примера с Хмега128Код: Выделить всё
// glcd_clear(); //при закомментированной строчке на ногах МК серые квадратики, хотя они сконфигурированы как выходы
//если убрать комментарий то синие и красные и мигают ;)
glcd_setfont(font5x7);
glcd_setcolor(GLCD_CL_YELLOW);
glcd_outtextf("Ilitek ILI9325 Graphics Demo");
чего-то не хватает, а вот чего именно не понятно
сразу железе не могу пока попробовать, пока нету в наличии
Я столкнулся с такой же проблемой, я новичок, подскажите пожалуста как вы решили эту проблему.
Re: CodeVision AVR в вопросах и ответах
Доброй ночи всем котам!
Прошу подсказки - куда рыть:
"изобретаю велосипед", есть микросхема часов реального времени DS1307, с которой считывается, собственно, время ( используя стандартную библиотеку в CVAVR) при помощи функции:
Есть необходимость выделить именно цифры из чисел "часы", "минуты", "секунды" и привести их к типу int ( чтобы иметь возможность проводить операцию сравнения).
В основном коде это выглядит так:
но сие чудо работать не хочет, мои "сравнения" не проходят.
Плюс пробовал вывести значение секунд на дисплей при помощи:
при задержке 200 мс после каждого вывода значения на дисплей - получаем то,что на картинке:
Вопрос в следующим - как правильно оперировать данными, считанными с микросхемы DS1307? Эта задача возникла из необходимости выводить время при помощи символов(т.е. большие часы).
Прошу подсказки - куда рыть:
"изобретаю велосипед", есть микросхема часов реального времени DS1307, с которой считывается, собственно, время ( используя стандартную библиотеку в CVAVR) при помощи функции:
Код: Выделить всё
void rtc_get_time(unsigned char *hour,unsigned char *min,unsigned char *sec);Есть необходимость выделить именно цифры из чисел "часы", "минуты", "секунды" и привести их к типу int ( чтобы иметь возможность проводить операцию сравнения).
В основном коде это выглядит так:
Код: Выделить всё
rtc_get_time(&hour,&min,&sec); //считать время
sprintf(hour1,"%d",hour/10); //выделяем цифры времени чч\\мм\\сс
sprintf(hour2,"%d",hour&10);
sprintf(minute1,"%d",min/10);
sprintf(minute2,"%d",min&10);
sprintf(second1,"%d",sec/10);
sprintf(second2,"%d",sec&10);но сие чудо работать не хочет, мои "сравнения" не проходят.
Плюс пробовал вывести значение секунд на дисплей при помощи:
Код: Выделить всё
lcd_puts(second2);при задержке 200 мс после каждого вывода значения на дисплей - получаем то,что на картинке:
Вопрос в следующим - как правильно оперировать данными, считанными с микросхемы DS1307? Эта задача возникла из необходимости выводить время при помощи символов(т.е. большие часы).
- Вложения
-
- 1234.JPG
- (32.52 КБ) 291 скачивание
выше головы не прыгнешь - ниже зад**цы не сядешь.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
а это что за фигня?Mon писал(а): sprintf(hour2,"%d",hour&10);
А вообще, sprintf для такой мелочи использовать - плохая затея.Да и вообще, sprintf и прочее подобное на МК лучше не применять, слишком уж тяжёлые функции.
P.S. Почему бы не написать код гораздо проще:
Код: Выделить всё
void lcd_time(unsigned char value) {
lcd_putc(value / 10 + 0x30);
lcd_putc(value % 10 + 0x30);
}
...
rtc_get_time(&hour,&min,&sec);
lcd_time(hour);
lcd_putc(':');
lcd_time(min);
lcd_putc(':');
lcd_time(sec);
...-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: CodeVision AVR в вопросах и ответах
tolyan_2006 писал(а):Codevision упорно ругается на элементы массива конфигураций порта управления ключами.
Вот это
Код: Выделить всё
#define UL PINB.1
#define PDP1_CCW ((1<<UL)|(0<<VL)|(0<<WL)|(0<<UH)|(1<<VH)|(0<<WH))разворачивается следующим образом:
Код: Выделить всё
1<<PINB.1|0<<PINB.4|0<<WL Это набор инструкций чтения, а не какие не переменные. Массив - это таблица данных, туда нельзя явно помещать машинные инструкции и исполняемый код.
Re: CodeVision AVR в вопросах и ответах
WiseLord писал(а):а это что за фигня?Mon писал(а): sprintf(hour2,"%d",hour&10);
А вообще, sprintf для такой мелочи использовать - плохая затея.Да и вообще, sprintf и прочее подобное на МК лучше не применять, слишком уж тяжёлые функции.
P.S. Почему бы не написать код гораздо проще:
Я понимаю, что sprintf тяжелая, пока не вижу другого решения,а то - что предлагаете Вы, мне не совсем подходит. Мне необходимо провести операции сравнения - непосредственно с самими данными, которые считаны с ДС1307, а не выводить их сразу.
А этого я не могу сделать, т.к. CVAVR ругается на то , что у меня переменная modified .
выше головы не прыгнешь - ниже зад**цы не сядешь.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
А для чего Вам тогда sprintf, если нужны числа ? sprintf на выходе имеет форматированную строку, а не чиселки...Mon писал(а):Мне необходимо провести операции сравнения - непосредственно с самими данными, которые считаны с ДС1307, а не выводить их сразу.
Просто раскладывайте принятые значения на десятки и единицы.
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Говоря "фигня", я имел в виду не сам sprintf, а то, что мне непонятно, зачем умножать побитно hour2 и прочее на 10 (hour2 & 10). Тут нужно деление с остатком, а не умножение.
И потом, что мешает сравнивать числа без всякого sprintf?
А если rtc_get_time(&hour,&min,&sec) возвращает результат в "нетронутом виде", то и деление на 10 не нужно. Под этим я понимаю результат в том виде, как он хранится в микросхеме RTC, т.е. двоично-десятичном.
Например, сейчас 11:01:48. Если функция возвращает результат hour = 0x11, min = 0x01, sec = 0x48, то никаких делений не нужно, и сравнивать вообще просто. Деление (обычное и с остатком, а не побитовое умножение на 10) нужно будет только если результат hour = 11, min = 1, sec = 48. Но и тут sprintf вообще никак не нужен.
И потом, что мешает сравнивать числа без всякого sprintf?
А если rtc_get_time(&hour,&min,&sec) возвращает результат в "нетронутом виде", то и деление на 10 не нужно. Под этим я понимаю результат в том виде, как он хранится в микросхеме RTC, т.е. двоично-десятичном.
Например, сейчас 11:01:48. Если функция возвращает результат hour = 0x11, min = 0x01, sec = 0x48, то никаких делений не нужно, и сравнивать вообще просто. Деление (обычное и с остатком, а не побитовое умножение на 10) нужно будет только если результат hour = 11, min = 1, sec = 48. Но и тут sprintf вообще никак не нужен.
Re: CodeVision AVR в вопросах и ответах
[quote="WiseLord"]Говоря "фигня", я имел в виду не сам sprintf, а то, что мне непонятно, зачем умножать побитно hour2 и прочее на 10 (hour2 & 10). Тут нужно деление с остатком, а не умножение.
И потом, что мешает сравнивать числа без всякого sprintf?/quote]
За первый момент, спасибо, пропустил, исправил.
А вот за второй большое спасибо! Получается - сам для себя лишних действий добавил.
Теперь на выходе имею то, что нужно:
И потом, что мешает сравнивать числа без всякого sprintf?/quote]
За первый момент, спасибо, пропустил, исправил.
А вот за второй большое спасибо! Получается - сам для себя лишних действий добавил.
Теперь на выходе имею то, что нужно:
выше головы не прыгнешь - ниже зад**цы не сядешь.
Re: CodeVision AVR в вопросах и ответах
Добрый день!
Подскажите, как правильно сделать в этом коде:
Нужно сделать, чтоб после того как температура станет более 125 град т.е. (V>3.95), ШИМ работал в режиме TCCR2=0x6F; пока температура не упадет менее 25 град
Подскажите, как правильно сделать в этом коде:
Код: Выделить всё
if (V<3.7)
{
if (V<2.95) // температура менее 25 градусов
{
TCCR1B=0x0C;
TCCR2=0x6B;
}
if (V>2.95) //температура более 25 градусов
{
TCCR1B=0x00;
TCCR2=0x6E;
}
}
if (V>3.7)
{
if (V<3.8) //температура более 100 градусов
{
TCCR2=0x6B;
}
if (V>3.95) //температура более 125 град.
{
TCCR2=0x6F;
}
} Нужно сделать, чтоб после того как температура станет более 125 град т.е. (V>3.95), ШИМ работал в режиме TCCR2=0x6F; пока температура не упадет менее 25 град
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
в этом коде даже температура более 100 градусов не будет отрабатывать - у вас в самом начале стоит "если V < 3.7", а вы про больше 3.9 говорите.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!