Страница 141 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт сен 01, 2011 20:52:38
master_74
Прошу прощения, а откуда можно поиметь сей чудный int64_t из библиотеки inttypes?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт сен 01, 2011 23:16:38
Volly
master_74 из AVR-GCC (Winavr), и вместе с ним. Без переделки в CVAVR работать не будет, и с переделкой всё упрётся в тот-же long long int. К сожалению, нет ни одной новой, нормальноломанной версии CVAVR (мне по крайней мере не попадалось).
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт сен 02, 2011 00:04:01
demiurg301
Так стоит вообще переходить с 1.25.5 , 1.25.9 на 2.05 ? В чём могут быть трудности?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт сен 02, 2011 10:27:36
Volly
demiurg301
Если старая версия работает стабильно, и если не собираетесь применять более новые МК- ИМХО смысла нет.
Ничто не мешает конечно и обе установить. У меня так и сделано.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт сен 02, 2011 13:40:17
demiurg301
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. При этом если менять местами переменные может быть задета другая. Оптимизатор прикалывается?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб сен 03, 2011 22:11:56
Cricket2107
Доброго времени суток! Подскажите такой вопрос что дает слово flash ? Если я например пишу flash int имя переменной , а потом пытаюсь ее изменить компилятор сильно ругает мол нельзя так делать. Выходит это переменная только для чтения? Тогда в чем отличие от const int? Простите за тупой вопрос (просто читать 141 страницу по теме codevision влом да и в программировании я еще не очень а точнее чайник )
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс сен 04, 2011 18:51:02
vlad145
Приветствую многоуважаемые коты. У меня нарисовалась такая проблема. Есть заготовка проекта на ATMega32 и LCD S65(LPH8836). Дак вот, я застопорился с выводом 16 битного цвета. Конкретно, я не могу нормально закрасить область, тоесть заполняется не полностью (часть кода прилагаю). Обшарил кучу форумов, пересмотрел кучу проектов, но в которых был использован данный алгоритм, написаны в основном на IAR. А вот как его адаптировать его под CVAVR. Написать свой - ума не хватит. Может есть у кого наработки по данной проблеме, помогите.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Вс сен 04, 2011 22:52:22
Volly
Cricket2107
Конечно не получится изменить. Вобщем flash- и есть константа, размещённая во FLASH- памяти, и может быть только глобальной.
const- может быть и локальной- размещённой в RAM- памяти, и глобальной- размещённой как в RAM, так и во FLASH (зависит от галочки "Store Global Constants in FLASH Memory" в свойствах компилятора). Некоторые функции в CVAVR заточены работать с константами объявленными только через flash (sprintf например).
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 05, 2011 03:23:00
Cricket2107
Понял Спасибо.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 05, 2011 09:08:03
vlad145
Экспериментальным путём мне удалось определить максимальный размер закрашиваемой области, это 14х14. Если размеры области увеличивать, то закрашивание наоборот уменьшается. На фото есть две колонки. В левой закрашиваю 14х14, в правой 14х16. Получается как бы обратный эффект. Прикрепляю мой проект(если его можно так назвать), может кто посмотрит и подскажет, в каком направлении копать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 05, 2011 09:26:40
vlad145
Ура! Победил я данную проблему. Конечно большое спасибо 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;
что само по себе логично. В результате всё получилось.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 05, 2011 17:06:50
vlad145
Есть ещё один вопрос. Допустим есть массив, состоящий из 9 кодов цвета для LCD. Как сделать перебор данных кодов от 0 до 8 например циклом For?
И ещё, как сделать градиентную заливку в определенно области?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 05, 2011 17:27:48
Мастер Ломастер
vlad145 писал(а):Есть ещё один вопрос. Допустим есть массив, состоящий из 9 кодов цвета для LCD. Как сделать перебор данных кодов от 0 до 8 например циклом For?
может, стоило бы почитать букварь Си, а не стонать по форумам "помогите"? азы надо знать.
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 05, 2011 17:42:31
vlad145
Мастер Ломастер писал(а):vlad145 писал(а):Есть ещё один вопрос. Допустим есть массив, состоящий из 9 кодов цвета для LCD. Как сделать перебор данных кодов от 0 до 8 например циклом For?
может, стоило бы почитать букварь Си, а не стонать по форумам "помогите"? азы надо знать.
Во первых, если бы в учебниках описывалась точно такая ситуация, я бы не спрашивал. Во вторых я не кричу помогите, а спрашиваю Вашего совета. Если не для этого, то для чего тогда форумы нужны - для обмена опытом. А так получается чтобы гнобить новичков.
Короче, всего наилучшего, до свидания!
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пн сен 05, 2011 19:52:02
Мастер Ломастер
vlad145 писал(а):если бы в учебниках описывалась точно такая ситуация, я бы не спрашивал.
в учебниках не описан цикл
for? или в учебниках цикл рассматривается на примере перебора массива фамилий, а у вас массив цветов - значит, это не то? если бы в учебниках рассматривали ВСЕ варианты использования цикла
for, то этот учебник выходил бы в виде многотомника и по сей день.
vlad145 писал(а):Во вторых я не кричу помогите, а спрашиваю Вашего совета.
и в каком же месте вы спрашивали совета? цитирую:
vlad145 писал(а):Есть ещё один вопрос. Допустим есть массив, состоящий из 9 кодов цвета для LCD. Как сделать перебор данных кодов от 0 до 8 например циклом For?
vlad145 писал(а):как сделать градиентную заливку в определенно области?
vlad145 писал(а):Обшарил кучу форумов, пересмотрел кучу проектов, но в которых был использован данный алгоритм, написаны в основном на IAR. А вот как его адаптировать его под CVAVR. Написать свой - ума не хватит. Может есть у кого наработки по данной проблеме, помогите.
в какой из цитат есть вопрос о СОВЕТЕ? всюду - помогите, дайте, покажите, посмотрите... а СОВЕТ я вам дал - читать учебник и думать.
vlad145 писал(а):Если не для этого, то для чего тогда форумы нужны - для обмена опытом.
и каким опытом поделились вы? опытом лени и незнания?
vlad145 писал(а):А так получается чтобы гнобить новичков.
нет. но если вы хотите сесть на шею опытных товарищей и ехать - вас скинут. разобраться с циклом
for - это вы должны сделать самостоятельно. как, собственно, и с
int (ранее).
Re: CodeVision AVR в вопросах и ответах
Добавлено: Чт сен 08, 2011 23:10:22
Paladiy
Добрый день многоуважаемые коты. Не хотел бы что бы мой вопрос посчитали оффтопом, но конкретной проблемы я что то не нашел на форуме, хотя некоторые идеи были...
Вот в чем проблема: Решил сделать часики себе, нет ничего особенного, схема типовая по даташиту, но никак не могу вывести считанную с часиков информацию на 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 в вопросах и ответах
Добавлено: Пт сен 09, 2011 18:25:52
DataLife
Здравствуйте.
Есть очень простая, по своей задумке, программка...
До конца не дописал, но уже есть ошибки при компиляции.
Код: Выделить всё
#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. Есть мысль, что ВинАВР не корректно работает. Его можно как-то настроить?
Re: CodeVision AVR в вопросах и ответах
Добавлено: Пт сен 09, 2011 20:26:07
vitalik_1984
Вы уверены, что в студии поддерживается фича от CVavr?
Тут такое не выйдет.
Нужно ВСЁ менять на
Код: Выделить всё
#define _BV(x) (1<<x)
PORTX|=_BV(PORTXY)//- установить бит Y в порту X
PORTX|=~_BV(PORTXY)//-очистить бит Y в порту X
Или просто на
Я делал так
Код: Выделить всё
#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 в вопросах и ответах
Добавлено: Пт сен 09, 2011 23:46:26
DataLife
vitalik_1984, огромное спасибо! Ваш код компилируется!
Правда я уже переделал программу под CVAVR (роднее она мне). Там попроще всё стало...
Но вашу версию обязательно рассмотрю, нужно же всесторонне развиваться)
Re: CodeVision AVR в вопросах и ответах
Добавлено: Сб сен 10, 2011 16:12:18
DataLife
Снова вопрос у меня.
Программку написал до конца. В плане основновного своего назначения - сигнал определённой частоты и продолжительности на выходе, - работает нормально. Однако светодиоды, которые отвечают за сигнализацию выбраного режима - вообще невпопад работают!
Помогите!
Как должно быть: включаем устройство - горит первый светодиод (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 - никого...
Как-то очень странно работает... Сегодня соберу всё на соплях, авось нормально будет, но всё же вопрос актуален.