Страница 345 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 14, 2015 15:42:00
amd9800
Есть такой макрос
#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 параметрами по необходимости
с функциями такой трюк проходит - компилятор сам выбирает необходимую.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 14, 2015 16:20:06
WiseLord
Думаю, что-то удобоваримое можно сделать только как-то так:
Код: Выделить всё
#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 в вопросах и ответах
Добавлено: Пн сен 14, 2015 16:41:35
amd9800
Спасибо.
Я кстати тоже сам к такой идеи пришел.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт сен 25, 2015 08:09:26
Vanes
Дима_Медвед писал(а):Всем привет! Есть вопрос: как запустить симулятор в CVAVR??
При попытку запуска с AVR studio 4.19 пишет, что не может открыть студию, а с версией 6.1+ ничего не происходит.
Что делать?
Попробуй проверить настройки симулятора в CVAVR, прописан ли там путь к AVRStudio(номер версии).exe. Попробуй просто запустить саму AVR Студию напрямую через её экзешник.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт сен 29, 2015 14:29:50
AVK
А вот скажите мне, побитные логические операции работают только на char?
На int у меня не вышло.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт сен 29, 2015 14:50:03
WiseLord
Работают на любых целочисленных типах, не только на char.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вт сен 29, 2015 18:19:05
AVK
WiseLord писал(а):Работают на любых целочисленных типах, не только на char.
Ага, я понял где затупил, спс.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт окт 16, 2015 05:27:59
kk042fjv
Добрый день!
Пишу программу для барометра на atmega8 с датчиком bmp180. Скачал библиотеку для барометра, но выдает ошибку.
included from: atmega_bmp180_lib.c, L11:can't open #include file: util/twi.h
Пишу в CodeVisionAVR, что эта за ошибка и как её исправить?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт окт 16, 2015 06:45:57
WiseLord
util/twi.h - это часть библиотеки I²C для avr-gcc/avr-libc. Так что либо пишите свой код в WinAVR, либо переделывайте I²C функции под CodeVision.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн окт 19, 2015 17:58:03
tolyan_2006
Доброго времени суток!
Изучаю апноут 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 в вопросах и ответах
Добавлено: Пн окт 19, 2015 22:03:23
V32301
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 в вопросах и ответах
Добавлено: Вс ноя 01, 2015 00:13:16
Mon
Доброй ночи всем котам!
Прошу подсказки - куда рыть:
"изобретаю велосипед", есть микросхема часов реального времени 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);
но сие чудо работать не хочет, мои "сравнения" не проходят.
Плюс пробовал вывести значение секунд на дисплей при помощи:
при задержке 200 мс после каждого вывода значения на дисплей - получаем то,что на картинке:
Вопрос в следующим - как правильно оперировать данными, считанными с микросхемы DS1307? Эта задача возникла из необходимости выводить время при помощи символов(т.е. большие часы).
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс ноя 01, 2015 07:38:23
WiseLord
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);
...
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс ноя 01, 2015 08:14:17
uk8amk
tolyan_2006 писал(а):Codevision упорно ругается на элементы массива конфигураций порта управления ключами.
Вот это
Код: Выделить всё
#define UL PINB.1
#define PDP1_CCW ((1<<UL)|(0<<VL)|(0<<WL)|(0<<UH)|(1<<VH)|(0<<WH))
разворачивается следующим образом:
и т.д.
Это набор инструкций чтения, а не какие не переменные. Массив - это таблица данных, туда нельзя явно помещать машинные инструкции и исполняемый код.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс ноя 01, 2015 09:54:28
Mon
WiseLord писал(а):Mon писал(а): sprintf(hour2,"%d",hour&10);
а это что за фигня?
А вообще, sprintf для такой мелочи использовать - плохая затея.Да и вообще, sprintf и прочее подобное на МК лучше не применять, слишком уж тяжёлые функции.
P.S. Почему бы не написать код гораздо проще:
Я понимаю, что sprintf тяжелая, пока не вижу другого решения,а то - что предлагаете Вы, мне не совсем подходит. Мне необходимо провести операции сравнения - непосредственно с самими данными, которые считаны с ДС1307, а не выводить их сразу.
А этого я не могу сделать, т.к. CVAVR ругается на то , что у меня переменная modified .
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс ноя 01, 2015 09:58:22
Аlex
Mon писал(а):Мне необходимо провести операции сравнения - непосредственно с самими данными, которые считаны с ДС1307, а не выводить их сразу.
А для чего Вам тогда
sprintf, если нужны числа ?
sprintf на выходе имеет форматированную строку, а не чиселки...
Просто раскладывайте принятые значения на десятки и единицы.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс ноя 01, 2015 09:59:38
WiseLord
Говоря "фигня", я имел в виду не сам 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 вообще никак не нужен.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс ноя 01, 2015 11:13:52
Mon
[quote="WiseLord"]Говоря "фигня", я имел в виду не сам sprintf, а то, что мне непонятно, зачем умножать побитно hour2 и прочее на 10 (hour2 & 10). Тут нужно деление с остатком, а не умножение.
И потом, что мешает сравнивать числа без всякого sprintf?/quote]
За первый момент, спасибо, пропустил, исправил.
А вот за второй большое спасибо! Получается - сам для себя лишних действий добавил.
Теперь на выходе имею то, что нужно:

Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн ноя 02, 2015 10:03:20
kk042fjv
Добрый день!
Подскажите, как правильно сделать в этом коде:
Код: Выделить всё
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 град
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн ноя 02, 2015 10:09:45
ARV
в этом коде даже температура более 100 градусов не будет отрабатывать - у вас в самом начале стоит "если V < 3.7", а вы про больше 3.9 говорите.