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

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

Добавлено: Вт фев 19, 2013 20:34:13
maxim___71rus
Помагите!! При программировании Atmega8 прогроматором AVR ISP MKII(клон на at90usb162) появляется вот такая ошибка!Сигнатуру он определяет нормально, но когда нажимаешь отчистить чип или записать флеш, то вылетает эта ошибка.
Изображение

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

Добавлено: Вт фев 19, 2013 21:40:20
unalex
maxim___71rus
ПомОгу перевести
проверьте не является ли тактовая частота(SLK Frequency)слишком высокой
Некоторые чипы AVR поставляются с завода с фьюзами CLKSEL, установленными на внутренний 1МГц генератор

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

Добавлено: Вт фев 19, 2013 21:40:43
pyzhman
сеттингс/программер чуток увеличить задержку

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

Добавлено: Вт фев 19, 2013 23:42:47
ELcat
Появился и у меня вопросик.
Так ли страшен чорт, как его малюют?
ATxmega.jpg
(185.67 КБ) 346 скачиваний
Кто-нибудь уже кодил эти камушки из-под CV AVR? Wizard генерит для них код? Есть ли какое-то серьёзное отличие работы с ними от работы с обычными ATmega в CV AVR (кроме разрядности ядра и регистров разумеется)? Если на РадиоКоте уже есть тема или статья по ним, дайте ссылку.

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

Добавлено: Ср фев 20, 2013 01:19:40
vitalik_1984
Конечно генеририт код, это должно было стать для пользователя заметным начиная с недавних версий, так как визард стал постоянно спрашивать мега или иксмега
И само представление визарда поменялось.

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

Добавлено: Ср фев 20, 2013 10:51:03
ELcat
Виталий, а вы с ними уже работали?

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

Добавлено: Вс фев 24, 2013 16:32:04
fiksx
Добрый день! Подскажите ктото втречал бибилиотеку USB для codevision? Пол дня сегодня убил в поиске но ничего так и не нашел. Интересует программный usb(например для atmega8).

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

Добавлено: Пн фев 25, 2013 21:21:15
vitalik_1984
Нет особого смысла искать только для CVAVR, это такой же компилятор для си как и некоторые другие.
Вот тут можно почитать про USB.

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

Добавлено: Ср фев 27, 2013 14:07:23
pokk
Подскажите, как разделить два сигнала с АЦП.
к примеру один сигнал подаётся на вход меги128 ADC0 а другой на ADC6, так вот как их записать каждый в свой массив.
с одним сигналом понятно АЦП завершило преобразование прерывание сработало и там записал в массив. А вот когда сигналов несколько то тут не совсем понятно с какого канала сработало прерывания.

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

Добавлено: Ср фев 27, 2013 14:10:59
Аlex
не совсем понятно с какого канала сработало прерывания
C выбранного Вами :)
Непонятно, если честно, в чём проблема... Выбираете канал, запускаете преобразование, считываете. И так для двух каналов по очереди.

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

Добавлено: Ср фев 27, 2013 14:25:02
pokk
Так оно может проскочить. Я забыл написать что я таймером запускаю АЦП (задаю частоту дискретизации)

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

interrupt [ADC_INT] void adc_isr(void)
{
#asm("cli")
buffer[ADC_INDEX]=ADCW;
    if(ADC_INDEX>=30){ADC_INDEX=0;}
ADC_INDEX++;
#asm("sei")
}

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
ADCSRA|=(1<<ADSC); // включения  АЦП  частота дискретизации 4КГц
}

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

Добавлено: Ср фев 27, 2013 14:32:03
Аlex
Так оно может проскочить
Что проскочить ? И куда ?
buffer[ADC_INDEX]=ADCW;
if(ADC_INDEX>=30){ADC_INDEX=0;}
ADC_INDEX++;
Сразу видна ошибка невооруженным глазом :)

И это

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

#asm("cli")
...
#asm("sei")
Никчему писать. При входе в обработчик итак идёт запрет, с восстановлением перед выходом.

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

Добавлено: Ср фев 27, 2013 14:47:12
pokk
Сразу видна ошибка невооруженным глазом :)
То что обнуляю INDEX_ADC а потом сразу инкрементирую ?


Как-то так ? Не нравится мне только, то что в прерывании много нагородил.

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

flag_ACD=0;

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
ADCSRA|=(1<<ADSC); // включения  АЦП  частота дискретизации 4КГц
}

interrupt [ADC_INT] void adc_isr(void)
{
#asm("cli")
switch (flag_ACD){
				case 0:{
						buffer[ADC_INDEX]=ADCW;
                                        ADC_INDEX++;
						break;
				}
				case 1:{
						buffer1[ADC_INDEX1]=ADCW;
                                  ADC_INDEX1++;
						break;
				}
#asm("sei")
}

while(1){
	ADC_1();		// выбрали  первый канал 
	flag_ACD=0;
	
	ADC_6();		// выбрали  шестой канал 
	flag_ACD=1;

}

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

Добавлено: Ср фев 27, 2013 14:48:22
Аlex
То что обнуляю INDEX_ADC а потом сразу инкрементирую ?
Конечно. Нужно сначала инкрементировать, потом проверять на переполнение. Иначе логика непонятна...

У Вас получилось выбор канала и преобразование - два асинхронных процесса. Каша будет.
Выбирать следующий канал нужно по завершению преобразования и небольшой выдержки.

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

Добавлено: Ср фев 27, 2013 15:09:59
pokk
Аlex писал(а):Выбирать следующий канал нужно по завершению преобразования и небольшой выдержки.
Что-то не могу понять "по завершению преобразования" это как сделать? проверять как-нибудь флаг ?

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

Добавлено: Ср фев 27, 2013 15:14:55
Gudd-Head
pokk писал(а):это как сделать? проверять как-нибудь флаг ?
Лол. А для одного канала вы как делаете? :)

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

Добавлено: Ср фев 27, 2013 15:16:59
unalex

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

void wait_ADC()
{
	while((ADCSRA & (1 << ADIF)) == 0);	//wait for Flag ADIF(conversion complete)
	ADCSRA |= (1 << ADIF);				//Reset conversion complete flag (ADIF = 1)
}

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

switch(channel)
{
	case 0:
		buffer[channel][ADC0_INDEX] = read_ADC(channel);
		(ADC0_INDEX < 30) ? (ADC0_INDEX++) : (ADC0_INDEX = 0)
		channel = 6
		select_ADC(channel);
		break;
	case 6:
		buffer[channel][ADC6_INDEX] = read_ADC(channel);
		(ADC6_INDEX < 30) ? (ADC6_INDEX++) : (ADC6_INDEX = 0)
		channel = 0
		select_ADC(channel);
		break;
}

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

Добавлено: Ср фев 27, 2013 15:22:44
pokk
Gudd-Head писал(а):Лол. А для одного канала вы как делаете? :)

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

interrupt [ADC_INT] void adc_isr(void)
{
buffer[ADC_INDEX]=ADCW;
ADC_INDEX++;
    if(ADC_INDEX>=30){ADC_INDEX=0;}
}

interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
ADCSRA|=(1<<ADSC); // включения  АЦП  частота дискретизации 4КГц
}


while(1){
// основной код  подсчёт среднеквадратичного значений и вывод на дисплей. 
} 

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

void wait_ADC()
{
   while((ADCSRA & (1 << ADIF)) == 0);   //wait for Flag ADIF(conversion complete)
   ADCSRA |= (1 << ADIF);            //Reset conversion complete flag (ADIF = 1)
}
Примерно так и думал. Только не могу понять зачем ?Ведь во время прерывания нечего случится не может как выйдет из него так и закончилось преобразование =)

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

Добавлено: Ср фев 27, 2013 15:43:03
vitalik_1984
Удалил свой недосмотр :)))

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

Добавлено: Ср фев 27, 2013 15:47:04
unalex
удалил свой комментарий о недосмотре пользователя vitalik_1984 :))