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, прописан ли там путь к AVRStudio(номер версии).exe. Попробуй просто запустить саму AVR Студию напрямую через её экзешник.Дима_Медвед писал(а):Всем привет! Есть вопрос: как запустить симулятор в CVAVR??
При попытку запуска с AVR studio 4.19 пишет, что не может открыть студию, а с версией 6.1+ ничего не происходит.
Что делать?
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. Скачал библиотеку для барометра, но выдает ошибку.
Пишу программу для барометра на atmega8 с датчиком bmp180. Скачал библиотеку для барометра, но выдает ошибку.
Пишу в CodeVisionAVR, что эта за ошибка и как её исправить?included from: atmega_bmp180_lib.c, L11:can't open #include file: util/twi.h
- 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"
Изучаю апноут AVR443 для управления бесколлекторным дпт. Codevision упорно ругается на элементы массива конфигураций порта управления ключами. Пишет "must be constant expression"
Сами переменные массива описываются в h-файле таким образом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
};
Подскажите пожалуйста как мне можно обмануть сего товарища?#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);В основном коде это выглядит так:
Код: Выделить всё
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);Вопрос в следующим - как правильно оперировать данными, считанными с микросхемы DS1307? Эта задача возникла из необходимости выводить время при помощи символов(т.е. большие часы).
- Вложения
-
- 1234.JPG
- (32.52 КБ) 292 скачивания
выше головы не прыгнешь - ниже зад**цы не сядешь.
- 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 в вопросах и ответах
Я понимаю, что sprintf тяжелая, пока не вижу другого решения,а то - что предлагаете Вы, мне не совсем подходит. Мне необходимо провести операции сравнения - непосредственно с самими данными, которые считаны с ДС1307, а не выводить их сразу.WiseLord писал(а):а это что за фигня?Mon писал(а): sprintf(hour2,"%d",hour&10);
А вообще, sprintf для такой мелочи использовать - плохая затея.Да и вообще, sprintf и прочее подобное на МК лучше не применять, слишком уж тяжёлые функции.
P.S. Почему бы не написать код гораздо проще:
А этого я не могу сделать, т.к. 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;
}
} - ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18610
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
в этом коде даже температура более 100 градусов не будет отрабатывать - у вас в самом начале стоит "если V < 3.7", а вы про больше 3.9 говорите.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


