CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
Прошу прощения, а откуда можно поиметь сей чудный int64_t из библиотеки inttypes?
Re: CodeVision AVR в вопросах и ответах
master_74 из AVR-GCC (Winavr), и вместе с ним. Без переделки в CVAVR работать не будет, и с переделкой всё упрётся в тот-же long long int. К сожалению, нет ни одной новой, нормальноломанной версии CVAVR (мне по крайней мере не попадалось).
-
demiurg301
- Опытный кот
- Сообщения: 812
- Зарегистрирован: Ср мар 18, 2009 21:14:33
Re: CodeVision AVR в вопросах и ответах
Так стоит вообще переходить с 1.25.5 , 1.25.9 на 2.05 ? В чём могут быть трудности?
Re: CodeVision AVR в вопросах и ответах
demiurg301
Если старая версия работает стабильно, и если не собираетесь применять более новые МК- ИМХО смысла нет.
Ничто не мешает конечно и обе установить. У меня так и сделано.
Если старая версия работает стабильно, и если не собираетесь применять более новые МК- ИМХО смысла нет.
Ничто не мешает конечно и обе установить. У меня так и сделано.
-
demiurg301
- Опытный кот
- Сообщения: 812
- Зарегистрирован: Ср мар 18, 2009 21:14:33
Re: CodeVision AVR в вопросах и ответах
Volly писал(а):demiurg301
Если старая версия работает стабильно, и если не собираетесь применять более новые МК- ИМХО смысла нет.
Ничто не мешает конечно и обе установить. У меня так и сделано.
Новые МК не применяю. Но 1.25.5 малёха задолбала своей глюкавостью. Особенно когда много вложеных циклов и условий.
Сейчас например парюсь с непонятным обнулением счётчика. ЗАметил ЛАГ , который вылазит очень часто.
Вот такая конструкция:
unsigned char *PtS1,*PtS;
unsigned char conflict=0;
unsigned char atc_retry_number=3;
unsigned char srn;
unsigned char step;
unsigned char temp;
unsigned char temp_str[3];
Приводит к тому, что изменение переменной step влияет на переменную srn. При этом если менять местами переменные может быть задета другая. Оптимизатор прикалывается?
- Cricket2107
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Вт авг 19, 2008 14:48:19
- Откуда: Харьков
Re: CodeVision AVR в вопросах и ответах
Доброго времени суток! Подскажите такой вопрос что дает слово flash ? Если я например пишу flash int имя переменной , а потом пытаюсь ее изменить компилятор сильно ругает мол нельзя так делать. Выходит это переменная только для чтения? Тогда в чем отличие от const int? Простите за тупой вопрос (просто читать 141 страницу по теме codevision влом да и в программировании я еще не очень а точнее чайник )
Муррр.
-
vlad145
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пт мар 06, 2009 22:54:37
- Откуда: Курган
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Приветствую многоуважаемые коты. У меня нарисовалась такая проблема. Есть заготовка проекта на ATMega32 и LCD S65(LPH8836). Дак вот, я застопорился с выводом 16 битного цвета. Конкретно, я не могу нормально закрасить область, тоесть заполняется не полностью (часть кода прилагаю). Обшарил кучу форумов, пересмотрел кучу проектов, но в которых был использован данный алгоритм, написаны в основном на IAR. А вот как его адаптировать его под CVAVR. Написать свой - ума не хватит. Может есть у кого наработки по данной проблеме, помогите.
- Вложения
-
- cod.txt
- (8.36 КБ) 208 скачиваний
Владимир
Re: CodeVision AVR в вопросах и ответах
Cricket2107
Конечно не получится изменить. Вобщем flash- и есть константа, размещённая во FLASH- памяти, и может быть только глобальной.
const- может быть и локальной- размещённой в RAM- памяти, и глобальной- размещённой как в RAM, так и во FLASH (зависит от галочки "Store Global Constants in FLASH Memory" в свойствах компилятора). Некоторые функции в CVAVR заточены работать с константами объявленными только через flash (sprintf например).
Конечно не получится изменить. Вобщем flash- и есть константа, размещённая во FLASH- памяти, и может быть только глобальной.
const- может быть и локальной- размещённой в RAM- памяти, и глобальной- размещённой как в RAM, так и во FLASH (зависит от галочки "Store Global Constants in FLASH Memory" в свойствах компилятора). Некоторые функции в CVAVR заточены работать с константами объявленными только через flash (sprintf например).
- Cricket2107
- Встал на лапы
- Сообщения: 86
- Зарегистрирован: Вт авг 19, 2008 14:48:19
- Откуда: Харьков
-
vlad145
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пт мар 06, 2009 22:54:37
- Откуда: Курган
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Экспериментальным путём мне удалось определить максимальный размер закрашиваемой области, это 14х14. Если размеры области увеличивать, то закрашивание наоборот уменьшается. На фото есть две колонки. В левой закрашиваю 14х14, в правой 14х16. Получается как бы обратный эффект. Прикрепляю мой проект(если его можно так назвать), может кто посмотрит и подскажет, в каком направлении копать.
- Вложения
-
- 01.RAR
- (179.21 КБ) 151 скачивание
-
- Изображение 003-2.jpg
- (35.92 КБ) 279 скачиваний
Владимир
-
vlad145
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пт мар 06, 2009 22:54:37
- Откуда: Курган
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Ура! Победил я данную проблему. Конечно большое спасибо Dadigor-у с форума KAZUS, он меня навел на мысль, что ...int обычно и так 16-битное число. Был бы опыт в программировании, может и сам бы это знал, но увы. Короче, пересмотрев ещё раз свой проект, решил поправить данный код:
void fill_area( int x1, int x2, int y1, int y2,int color)
{
int i;
char w,h;
на
void fill_area( int x1, int x2, int y1, int y2,int color)
{
int i;
int w,h;
что само по себе логично. В результате всё получилось.
void fill_area( int x1, int x2, int y1, int y2,int color)
{
int i;
char w,h;
на
void fill_area( int x1, int x2, int y1, int y2,int color)
{
int i;
int w,h;
что само по себе логично. В результате всё получилось.
Владимир
-
vlad145
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пт мар 06, 2009 22:54:37
- Откуда: Курган
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Есть ещё один вопрос. Допустим есть массив, состоящий из 9 кодов цвета для LCD. Как сделать перебор данных кодов от 0 до 8 например циклом For?
И ещё, как сделать градиентную заливку в определенно области?
И ещё, как сделать градиентную заливку в определенно области?
Владимир
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
может, стоило бы почитать букварь Си, а не стонать по форумам "помогите"? азы надо знать.vlad145 писал(а):Есть ещё один вопрос. Допустим есть массив, состоящий из 9 кодов цвета для LCD. Как сделать перебор данных кодов от 0 до 8 например циклом For?
битва с дураками проиграна, победители торжествуют. слава победителям!
-
vlad145
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пт мар 06, 2009 22:54:37
- Откуда: Курган
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Мастер Ломастер писал(а):может, стоило бы почитать букварь Си, а не стонать по форумам "помогите"? азы надо знать.vlad145 писал(а):Есть ещё один вопрос. Допустим есть массив, состоящий из 9 кодов цвета для LCD. Как сделать перебор данных кодов от 0 до 8 например циклом For?
Во первых, если бы в учебниках описывалась точно такая ситуация, я бы не спрашивал. Во вторых я не кричу помогите, а спрашиваю Вашего совета. Если не для этого, то для чего тогда форумы нужны - для обмена опытом. А так получается чтобы гнобить новичков.
Короче, всего наилучшего, до свидания!
Владимир
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
в учебниках не описан цикл for? или в учебниках цикл рассматривается на примере перебора массива фамилий, а у вас массив цветов - значит, это не то? если бы в учебниках рассматривали ВСЕ варианты использования цикла for, то этот учебник выходил бы в виде многотомника и по сей день.vlad145 писал(а):если бы в учебниках описывалась точно такая ситуация, я бы не спрашивал.
и в каком же месте вы спрашивали совета? цитирую:vlad145 писал(а):Во вторых я не кричу помогите, а спрашиваю Вашего совета.
vlad145 писал(а):Есть ещё один вопрос. Допустим есть массив, состоящий из 9 кодов цвета для LCD. Как сделать перебор данных кодов от 0 до 8 например циклом For?
vlad145 писал(а):как сделать градиентную заливку в определенно области?
в какой из цитат есть вопрос о СОВЕТЕ? всюду - помогите, дайте, покажите, посмотрите... а СОВЕТ я вам дал - читать учебник и думать.vlad145 писал(а):Обшарил кучу форумов, пересмотрел кучу проектов, но в которых был использован данный алгоритм, написаны в основном на IAR. А вот как его адаптировать его под CVAVR. Написать свой - ума не хватит. Может есть у кого наработки по данной проблеме, помогите.
и каким опытом поделились вы? опытом лени и незнания?vlad145 писал(а):Если не для этого, то для чего тогда форумы нужны - для обмена опытом.
нет. но если вы хотите сесть на шею опытных товарищей и ехать - вас скинут. разобраться с циклом for - это вы должны сделать самостоятельно. как, собственно, и с int (ранее).vlad145 писал(а):А так получается чтобы гнобить новичков.
битва с дураками проиграна, победители торжествуют. слава победителям!
- Paladiy
- Открыл глаза
- Сообщения: 43
- Зарегистрирован: Чт июл 22, 2010 20:01:14
- Откуда: Нижний Новгород
Re: CodeVision AVR в вопросах и ответах
Добрый день многоуважаемые коты. Не хотел бы что бы мой вопрос посчитали оффтопом, но конкретной проблемы я что то не нашел на форуме, хотя некоторые идеи были...
Вот в чем проблема: Решил сделать часики себе, нет ничего особенного, схема типовая по даташиту, но никак не могу вывести считанную с часиков информацию на LCD (16х2). На индикаторе появляется все что угодно, но только не то что я ожидаю. Исходник привожу ниже что бы не быть голословным. Я подразумеваю что как то не так использую функцию sprintf. Если не трудно, подскажите пожалуйста, где и что или как нужно поменять, что бы показания стали нормальными. Заранее прошу меня простить, я тока учусь работе с AVR-ами.
Вот в чем проблема: Решил сделать часики себе, нет ничего особенного, схема типовая по даташиту, но никак не могу вывести считанную с часиков информацию на LCD (16х2). На индикаторе появляется все что угодно, но только не то что я ожидаю. Исходник привожу ниже что бы не быть голословным. Я подразумеваю что как то не так использую функцию sprintf. Если не трудно, подскажите пожалуйста, где и что или как нужно поменять, что бы показания стали нормальными. Заранее прошу меня простить, я тока учусь работе с AVR-ами.
Код: Выделить всё
#include <mega8515.h>
// I2C Bus functions
#asm
.equ __i2c_port=0x12 ;PORTD
.equ __sda_bit=6
.equ __scl_bit=5
#endasm
#include <i2c.h>
#include <ds1307.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>
#include <delay.h>
#include <stdio.h>
#include <bcd.h>
char buff[33];
void main(void){
unsigned char h,m,s,s1;
// I2C Bus initialization
i2c_init();
rtc_init(3,0,1);
lcd_init(16);
lcd_putsf("start");
rtc_get_time(&h,&m,&s);
delay_ms(3000);
rtc_get_time(&h,&m,&s1);
if (s==s1){lcd_clear();
lcd_putsf("rtc_time error");}
else {lcd_clear();
lcd_putsf("rtc_time NORM");}
delay_ms(2000);
// Global enable interrupts
#asm("sei")
while (1)
{
rtc_get_time(&h,&m,&s);
sprintf(buff,"%u : %u : %u",h,m,s);
lcd_clear();
lcd_puts(buff);
delay_ms(1000);
}
};
Если твое устройство не заработало, то не надо паниковать и нервничать. Отдохни, подумай, успокойся. А вдруг заметишь или догадаешься в чем была загвоздка. Глядишь и вскоре воскликнешь "УРА!!! ЗАРАБОТАЛО!!!" 
Re: CodeVision AVR в вопросах и ответах
Здравствуйте.
Есть очень простая, по своей задумке, программка...
До конца не дописал, но уже есть ошибки при компиляции.
Ошибки вот такие:
Тоесть ругается на точки-запятые, начиная с "led_1=1;"...
Пару часов уже бьюсь над ними - безрезультатно.
На форумах похожее есть, говорят, что нужно настроить компилятор для понимания языка.
Подскажите, куда рыть? Глаза на лог лезут.
Если убрать у led_1=1; точку-запятую, но ругается тем же матом только на неё, остальные не видит...
PS. Есть мысль, что ВинАВР не корректно работает. Его можно как-то настроить?
Есть очень простая, по своей задумке, программка...
До конца не дописал, но уже есть ошибки при компиляции.
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define led_1 PORTC.5
int s = 1;//переменная для задержки
unsigned int x,i;//перечисление переменных
void delay (unsigned int a)
{
unsigned int i;
for (i=a;i>0;i--);
}
SIGNAL(SIG_INTERRUPT0)//обработка прерываний INT0
{
cli();//запрещение прерываний на время обработки прерывания
s = s+1;//увеличиваем переменную s на 1
sei();//разрешение прерываний
}
int main(void)
{
DDRD = 0x00; //все вход
DDRC = 0xFF; //все выход
GICR=0b01000000; //разрешаем прерывание int0 - кнопка
MCUCR=0x03; // int by rising front - для кнопки
sei();//разрешение прерываний
PORTC=0;
while (1)//вечный цикл
{
if (s==1)
{
led_1=1; // зажгли первый светодиод
while (s==1)
{
PORTC.1=1; // подаём сигнал
_delay_ms(5); // и ждём 5 милисек
PORTC.1=0; // прекращаем сигнал
delay(100);
}
led_1=0; // гасим первый светодиод
}
}
}
Ошибки вот такие:
Код: Выделить всё
avr-gcc.exe -mmcu=atmega8 -Wall -gdwarf-2 -Os -fsigned-char -MD -MP -MT E85.o -MF dep/E85.o.d -c ../E85.c
../E85.c: In function 'main':
../E85.c:44: error: expected ';' before numeric constant
../E85.c:48: error: expected ';' before numeric constant
../E85.c:50: error: expected ';' before numeric constant
../E85.c:53: error: expected ';' before numeric constant
make: *** [E85.o] Error 1
Build failed with 4 errors and 0 warnings...
Тоесть ругается на точки-запятые, начиная с "led_1=1;"...
Пару часов уже бьюсь над ними - безрезультатно.
На форумах похожее есть, говорят, что нужно настроить компилятор для понимания языка.
Подскажите, куда рыть? Глаза на лог лезут.
Если убрать у led_1=1; точку-запятую, но ругается тем же матом только на неё, остальные не видит...
PS. Есть мысль, что ВинАВР не корректно работает. Его можно как-то настроить?
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Вы уверены, что в студии поддерживается фича от CVavr?
Тут такое не выйдет.
Нужно ВСЁ менять на
Или просто на
Я делал так
Пробуйте
Код: Выделить всё
#define led_1 PORTC.5 Тут такое не выйдет.
Нужно ВСЁ менять на
Код: Выделить всё
#define _BV(x) (1<<x)
PORTX|=_BV(PORTXY)//- установить бит Y в порту X
PORTX|=~_BV(PORTXY)//-очистить бит Y в порту XИли просто на
Код: Выделить всё
PORTX|=(1<<y)Я делал так
Код: Выделить всё
#define Set(x) PORTC|=(1<<x)
#define Clear(x) PORTC|=~(1<<x)
#define Led1 5
Set(Led1);//Зажигаем светодиод 1
Пробуйте
Код: Выделить всё
#define F_CPU 8000000UL
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>
#define Set(x) PORTC|=(1<<x)
#define Clear(x) PORTC|=~(1<<x)
#define Led1 5
int s = 1;//переменная для задержки
unsigned int x,i;//перечисление переменных
void delay (unsigned int a)
{
unsigned int i;
for (i=a;i>0;i--);
}
SIGNAL(SIG_INTERRUPT0)//обработка прерываний INT0
{
cli();//запрещение прерываний на время обработки прерывания
s = s+1;//увеличиваем переменную s на 1
sei();//разрешение прерываний
}
int main(void)
{
DDRD = 0x00; //все вход
DDRC = 0xFF; //все выход
GICR=0b01000000; //разрешаем прерывание int0 - кнопка
MCUCR=0x03; // int by rising front - для кнопки
sei();//разрешение прерываний
PORTC=0;
while (1)//вечный цикл
{
if (s==1)
{
Set(Led1);; // зажгли первый светодиод
while (s==1)
{
Set(1); // подаём сигнал
_delay_ms(5); // и ждём 5 милисек
Clear(1); // прекращаем сигнал
delay(100);
}
Clear(Led1); // гасим первый светодиод
}
}
}В поисках истины человек развивается.
Re: CodeVision AVR в вопросах и ответах
vitalik_1984, огромное спасибо! Ваш код компилируется!
Правда я уже переделал программу под CVAVR (роднее она мне). Там попроще всё стало...
Но вашу версию обязательно рассмотрю, нужно же всесторонне развиваться)
Правда я уже переделал программу под CVAVR (роднее она мне). Там попроще всё стало...
Но вашу версию обязательно рассмотрю, нужно же всесторонне развиваться)
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.
Re: CodeVision AVR в вопросах и ответах
Снова вопрос у меня.
Программку написал до конца. В плане основновного своего назначения - сигнал определённой частоты и продолжительности на выходе, - работает нормально. Однако светодиоды, которые отвечают за сигнализацию выбраного режима - вообще невпопад работают!
Помогите!
Как должно быть: включаем устройство - горит первый светодиод (led_1). Работает программа на 10 Гц. Нажимаем кнопку - загорается и второй светодиод (led_2). Работает программа на 20 Гц. Второй раз нажали кнопку - горят все три светодиода (загорается led_3). Работает программа на 40 Гц. Если ещё1 раз нажать кнопку программа возвращается в режим 10 Гц.
Пояснения по тексту в файле есть.
А получается (в протеусе, правда) так: (для упрощения я буду писать led1 led2 led3, частоты, и "тыц" когда нажали кнопку)
включили: 20 Hz - led1 led2
тыц - 40 Hz - led3
тыц - 10 Hz - led1
тыц - 20 Hz - led2 led3
тыц - 40 Hz - led1
тыц - 10 Hz - никого...
Как-то очень странно работает... Сегодня соберу всё на соплях, авось нормально будет, но всё же вопрос актуален.
Программку написал до конца. В плане основновного своего назначения - сигнал определённой частоты и продолжительности на выходе, - работает нормально. Однако светодиоды, которые отвечают за сигнализацию выбраного режима - вообще невпопад работают!
Помогите!
Как должно быть: включаем устройство - горит первый светодиод (led_1). Работает программа на 10 Гц. Нажимаем кнопку - загорается и второй светодиод (led_2). Работает программа на 20 Гц. Второй раз нажали кнопку - горят все три светодиода (загорается led_3). Работает программа на 40 Гц. Если ещё1 раз нажать кнопку программа возвращается в режим 10 Гц.
Пояснения по тексту в файле есть.
А получается (в протеусе, правда) так: (для упрощения я буду писать led1 led2 led3, частоты, и "тыц" когда нажали кнопку)
включили: 20 Hz - led1 led2
тыц - 40 Hz - led3
тыц - 10 Hz - led1
тыц - 20 Hz - led2 led3
тыц - 40 Hz - led1
тыц - 10 Hz - никого...
Как-то очень странно работает... Сегодня соберу всё на соплях, авось нормально будет, но всё же вопрос актуален.
- Вложения
-
- 1.c
- Программа на Си
- (2.43 КБ) 366 скачиваний
Только те, кто предпринимают абсурдные попытки, смогут достичь невозможного.