Страница 70 из 421

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт мар 25, 2010 00:02:11
Александр 071
Объясните пожалуйста, как в CodeVision нужно правильно установить галочки для фьюзов&?чтобы использовать встроенный тактовый генератор на 8МГц для ATmega16!

Re: CodeVision AVR в вопросах и ответах

Добавлено: Чт мар 25, 2010 03:50:30
evgeniy66
Александр 071 писал(а):Объясните пожалуйста, как в CodeVision нужно правильно установить галочки для фьюзов&?чтобы использовать встроенный тактовый генератор на 8МГц для ATmega16!
Смотрите в теме о фьюзах.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Пт мар 26, 2010 17:11:55
sachok
Если объявить глобальную переменную так:

Код: Выделить всё

unsigned long int distance = 0;
то она хранится в flash?
С чем может быть связана проблема самообнуления так объявленной переменной? Она просто в процесе работы сама обнуляется и не могу понять почему. Если например хранить ее в еерrom :

Код: Выделить всё

eeprom unsigned long int distance = 0;
то всё работает нормально.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Пт мар 26, 2010 17:34:06
Saadov
sachok писал(а): С чем может быть связана проблема самообнуления так объявленной переменной? Она просто в процесе работы сама обнуляется и не могу понять почему..
А вы её изменяете где нибудь в программе?

Возможно стоит объявить её как static, прочитайте об этом в хелпе компилятора в разделе Variables

Re: CodeVision AVR в вопросах и ответах

Добавлено: Пт мар 26, 2010 18:03:08
sachok
static не помогло.
Метод в котором происходит изменение переменной

Код: Выделить всё

void set_distance (int dist)
{
    distance=distance+dist;  
    sprintf(str, "DIST: %u km",distance);
    lcd_gotoxy(0,2);
    lcd_putstr(str);
    all_distance (dist); 
}
set_distance(200); //вызов метода

Re: CodeVision AVR в вопросах и ответах

Добавлено: Пт мар 26, 2010 20:08:28
Lavra
volatile

Re: CodeVision AVR в вопросах и ответах

Добавлено: Сб мар 27, 2010 23:49:41
Несип
Привет, решил помучиться с микроконтроллерами - вот какая беда:
нажимаю кнопку Run the chip programmer и вываливается окошко настройки программатора. Но в нем нет закладки Chip Clock. :shock:
Изображение
вот как это должно выглядить. Программатор stk200 выбран (на деле - 5 проводков).
В чем может быть загвоздка? При попытке зашить он вываливает окошко примерно такого содержания:
Ошибка соединения, проверьте следующие вещи:
_Питание программатора включено
_Тип программатора в настройках выбран верно
_Адрес порта принтера выбран верно
_AVR чип не поврежден
адрес порта я в XP, честно, не знаю как узнать, AVR вроде целая, тип программатора тоже, Питание - ну насколько я знаю, достаточно просто воткнуть батарейку в схему.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс мар 28, 2010 01:36:51
Mr.Denis
Народ помогите пожалуйста!
Посмотрите правильно я настроил USART по этой спецификации.
Изображение

Моя настройка

Код: Выделить всё

// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART Mode: Asynchronous
// USART Baud Rate: 9600
UCSRA=0x00;
UCSRB=0x18;
UCSRC=0x86;
UBRRH=0x00;
UBRRL=0x33;

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вс мар 28, 2010 19:06:14
sachok
Lavra писал(а):volatile
не помогло(

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт мар 30, 2010 17:44:01
Александр 071
Несип писал(а):Привет, решил помучиться с микроконтроллерами - вот какая беда:
нажимаю кнопку Run the chip programmer и вываливается окошко настройки программатора. Но в нем нет закладки Chip Clock. :shock:
Изображение
вот как это должно выглядить. Программатор stk200 выбран (на деле - 5 проводков).
В чем может быть загвоздка? При попытке зашить он вываливает окошко примерно такого содержания:
Ошибка соединения, проверьте следующие вещи:
_Питание программатора включено
_Тип программатора в настройках выбран верно
_Адрес порта принтера выбран верно
_AVR чип не поврежден
адрес порта я в XP, честно, не знаю как узнать, AVR вроде целая, тип программатора тоже, Питание - ну насколько я знаю, достаточно просто воткнуть батарейку в схему.
Была такая же проблемма. Зайдите в диспетчер устройств. Выберите порты и щёлкните "обновить конфигурацию оборудования". Это глюк винды.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт мар 30, 2010 17:46:07
Александр 071
Подскажите, пожалуйста, что сделать чтобы удавалось задержку устанавливать в микросекунды?
Я писал вот так:
while(1)
{
for (i=0;i<=63;i++)
{
if (PIND.2==0)
{
n=n+0,001;
delay_ms(200);
}

if (PIND.3==0)
{
n=n-0,001;
delay_ms(200);
}

if(n<=0)
{
n=0,01;
}

PORTD.7=M;
delay_ms(n);


}
}
Если писать n целое в миллисекундах то всё хорошо работает. Если так как в коде то ничего не работает.
Если писать delay_us(n), то он ругается.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт мар 30, 2010 18:08:00
sema
только что попробовал, компилит без вопросов. как ругается то?

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт мар 30, 2010 18:16:29
Александр 071
sema писал(а):только что попробовал, компилит без вопросов. как ругается то?
Дело не в ошибке. Всё компилит нормально. он не компилит если ввместо delay_ms(n) поставить delay_us(n), мне нужны задержки в микросекундах. :(

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт мар 30, 2010 19:06:21
ValBag
Александр 071 писал(а):Если писать n целое в миллисекундах то всё хорошо работает. Если так как в коде то ничего не работает. Если писать delay_us(n), то он ругается.
Функция задержки по определению предназначена для работы с целыми числами: void delay_ms(unsigned int n); А вы пытаетесь ей подсунуть значение переменной float. По поводу ругани на delay_us, посмотрите частоту тактового генератора. Она должна быть согласована с той задержкой в микросекундах, которую хотите получить. Числа, определяющие задержку тоже должны быть целыми. Еще один момент: если в программе используются прерывания, то до вызова задержки они должны быть запрещены (после окончания разрешены).

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт мар 30, 2010 19:27:47
Александр 071
Спасибо. Я это только что понял, кода справку прочитал.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Вт мар 30, 2010 21:59:11
Несип
Спасибо, заработало.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср апр 07, 2010 18:44:26
Corporal
Всем привет, не могу понять, как мне несколько интовских значений записать в строку? То есть имеется int a,b,c; соответственно равно 5,2,0. И есть char str; В результате мне нужно str="str=5,2,0";
Пробовал так

Код: Выделить всё

str=((char)a+(char)b+(char)c);
lcd_putchar (str);
не помогло.
Мне важно именно строка а не вывод на экран...

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср апр 07, 2010 19:48:02
ARV
Corporal писал(а):Всем привет, не могу понять, как мне несколько интовских значений записать в строку? То есть имеется int a,b,c; соответственно равно 5,2,0. И есть char str; В результате мне нужно str="str=5,2,0";
Пробовал так

Код: Выделить всё

str=((char)a+(char)b+(char)c);
lcd_putchar (str);
не помогло.
Мне важно именно строка а не вывод на экран...

Код: Выделить всё

char str[25];
sprintf(str,"str=%d,%d,%d",a,b,c);

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср апр 07, 2010 20:34:38
Corporal
Хорошо, я, наверное, не правильно задал вопрос.
есть:

Код: Выделить всё

eeprom char str ;
int dsec,    //десятые секунды
     edsec,//единицы секунды 
     dmin,// десятки минуты
     edmin;// еденицы минуты

допустим это все тикает и мне надо ( по нажатии на кнопку) фиксировать время и занести его в память одной строкой. Так у меня должно быть (сколько позволяет память) N значений времени.
ну, а дальше (еще не знаю как) должно определиться есть ли передача по ком порту? если есть то слить все данные.

Re: CodeVision AVR в вопросах и ответах

Добавлено: Ср апр 07, 2010 22:36:56
ARV
Corporal писал(а):Хорошо, я, наверное, не правильно задал вопрос.
есть:

Код: Выделить всё

eeprom char str ;
int dsec,    //десятые секунды
     edsec,//единицы секунды 
     dmin,// десятки минуты
     edmin;// еденицы минуты

допустим это все тикает и мне надо ( по нажатии на кнопку) фиксировать время и занести его в память одной строкой. Так у меня должно быть (сколько позволяет память) N значений времени.
ну, а дальше (еще не знаю как) должно определиться есть ли передача по ком порту? если есть то слить все данные.
уважаемый, во-первых, eeprom char str обозначает всего-навсего один разъединственный байт, а вовсе не строку. и напихать туда кучу инфы никак не выйдет.
во вторых, из ваших слов следует, что речь идет не о строке, а массиве строк - это так же меняет все дело, хоть и непринципиально.
в третьих, хранить строки в eeprom может оказаться весьма невыгодно: ее ресурс весьма ограничен и пишется туда довольно долго.

так что обдумайте сперва все, а потом задавайте конкретные вопросы.