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

Обсуждаем контроллеры компании Atmel.
maxim___71rus
Родился
Сообщения: 9
Зарегистрирован: Пт май 04, 2012 17:31:06

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

Сообщение maxim___71rus »

Помагите!! При программировании Atmega8 прогроматором AVR ISP MKII(клон на at90usb162) появляется вот такая ошибка!Сигнатуру он определяет нормально, но когда нажимаешь отчистить чип или записать флеш, то вылетает эта ошибка.
Изображение
Реклама
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

maxim___71rus
ПомОгу перевести
проверьте не является ли тактовая частота(SLK Frequency)слишком высокой
Некоторые чипы AVR поставляются с завода с фьюзами CLKSEL, установленными на внутренний 1МГц генератор
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Реклама
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

сеттингс/программер чуток увеличить задержку
Docendo discimus
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

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

Сообщение ELcat »

Появился и у меня вопросик.
Так ли страшен чорт, как его малюют?
ATxmega.jpg
(185.67 КБ) 343 скачивания

Кто-нибудь уже кодил эти камушки из-под CV AVR? Wizard генерит для них код? Есть ли какое-то серьёзное отличие работы с ними от работы с обычными ATmega в CV AVR (кроме разрядности ядра и регистров разумеется)? Если на РадиоКоте уже есть тема или статья по ним, дайте ссылку.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Конечно генеририт код, это должно было стать для пользователя заметным начиная с недавних версий, так как визард стал постоянно спрашивать мега или иксмега
И само представление визарда поменялось.
Вложения
CVAVR_code_wisard_XMEGA.GIF
(32.49 КБ) 379 скачиваний
Реклама
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

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

Сообщение ELcat »

Виталий, а вы с ними уже работали?
Реклама
fiksx
Встал на лапы
Сообщения: 85
Зарегистрирован: Сб май 01, 2010 23:09:26
Откуда: Одесса

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

Сообщение fiksx »

Добрый день! Подскажите ктото втречал бибилиотеку USB для codevision? Пол дня сегодня убил в поиске но ничего так и не нашел. Интересует программный usb(например для atmega8).
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Нет особого смысла искать только для CVAVR, это такой же компилятор для си как и некоторые другие.
Вот тут можно почитать про USB.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Подскажите, как разделить два сигнала с АЦП.
к примеру один сигнал подаётся на вход меги128 ADC0 а другой на ADC6, так вот как их записать каждый в свой массив.
с одним сигналом понятно АЦП завершило преобразование прерывание сработало и там записал в массив. А вот когда сигналов несколько то тут не совсем понятно с какого канала сработало прерывания.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

не совсем понятно с какого канала сработало прерывания
C выбранного Вами :)
Непонятно, если честно, в чём проблема... Выбираете канал, запускаете преобразование, считываете. И так для двух каналов по очереди.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение 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КГц
}
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Так оно может проскочить
Что проскочить ? И куда ?

buffer[ADC_INDEX]=ADCW;
if(ADC_INDEX>=30){ADC_INDEX=0;}
ADC_INDEX++;
Сразу видна ошибка невооруженным глазом :)

И это

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

#asm("cli")
...
#asm("sei")
Никчему писать. При входе в обработчик итак идёт запрет, с восстановлением перед выходом.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение 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;

}
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

То что обнуляю INDEX_ADC а потом сразу инкрементирую ?
Конечно. Нужно сначала инкрементировать, потом проверять на переполнение. Иначе логика непонятна...

У Вас получилось выбор канала и преобразование - два асинхронных процесса. Каша будет.
Выбирать следующий канал нужно по завершению преобразования и небольшой выдержки.
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

Аlex писал(а):Выбирать следующий канал нужно по завершению преобразования и небольшой выдержки.

Что-то не могу понять "по завершению преобразования" это как сделать? проверять как-нибудь флаг ?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

pokk писал(а):это как сделать? проверять как-нибудь флаг ?

Лол. А для одного канала вы как делаете? :)
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение 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;
}
Последний раз редактировалось unalex Ср фев 27, 2013 15:45:31, всего редактировалось 2 раза.
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение 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)
}


Примерно так и думал. Только не могу понять зачем ?Ведь во время прерывания нечего случится не может как выйдет из него так и закончилось преобразование =)
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

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

Сообщение vitalik_1984 »

Удалил свой недосмотр :)))
Последний раз редактировалось vitalik_1984 Ср фев 27, 2013 15:53:35, всего редактировалось 2 раза.
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

удалил свой комментарий о недосмотре пользователя vitalik_1984 :))
Последний раз редактировалось unalex Ср фев 27, 2013 16:19:02, всего редактировалось 1 раз.
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Ответить

Вернуться в «AVR»