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

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

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

Сообщение vitalik_1984 »

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

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

Сообщение pokk »

Что-то я совсем запутался. это что такое ? в книге "Лебедев М.Б. - CodeVisionAVR. Пособие для начинающих" не нашёл.
unalex писал(а):

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

      (ADC0_INDEX < 30) ? (ADC0_INDEX++) : (ADC0_INDEX = 0)


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

      buffer[channel][ADC0_INDEX] = read_ADC(channel);

Что из себя представляет функция read_ADC() ?
Если как-то так

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

unsigned int read_ADC(void) 
{
   while((ADCSRA & (1 << ADIF)) == 0);   //wait for Flag ADIF(conversion complete)
   ADCSRA |= (1 << ADIF);            //Reset conversion complete flag (ADIF = 1)
   return ADCW;
}

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

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

Сообщение unalex »

pokk писал(а):это что такое ?

это называется тернарная условная операция

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

(проверка условия) ? (если условие выполняется) : (если условие не выполняется)


кстати у Лебедева это есть на странице 214

pokk писал(а):Что из себя представляет функция read_ADC()

это я так абстрактно обозвал процедуры чтения, а что там будет стоять у вас вы сами решите, и обратите внимание, этой функции в качестве аргумента передается номер канала АЦП
Последний раз редактировалось unalex Ср фев 27, 2013 17:23:23, всего редактировалось 1 раз.
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
pokk
Вымогатель припоя
Сообщения: 574
Зарегистрирован: Вт ноя 02, 2010 17:46:37

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

Сообщение pokk »

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

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

Сообщение ELcat »

Здравствуйте! Столкнулся с чем-то необычным, загадочным и труднообъяснимым. Сколько работал в CVAVR (Mega16, Mega8, Tiny3213, Tiny13, Tiny24) ничего подобного не встречал. При написании кода для Mega128 не работает функция delay_ms() - мк просто "виснет". (delay_us() работает без проблем)
Сижу уже пол дня туплю над кодом:
Спойлер

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

void lcd_write(char cd,unsigned char register_name)
{
  LCD_CE=0;
  if (cd) SDATA=1; imps;
  {
  unsigned char mask = 0x80;
 
  for( ; mask; mask >>= 1)
  {
       SDATA = register_name & mask;
       CLK=1; delay_us(1);
       CLK=0;
       SDATA=0;
   }
  }
  LCD_CE= 1;
}

void lcd_write16(unsigned int dat)
{
  lcd_write(DATA,dat>>8);
  lcd_write(DATA,dat);
}
 
void lcd_init_rgb(void)
{
   unsigned char i;   
   LCD_CE= 0;
   LCD_RESET=0;
   delay_us(5000);
    LCD_RESET=1;
   delay_us(5000);
   LCD_CE= 1;
     
     lcd_write(CMD,0x01); //delay_us(50000);       //reset 
   
    lcd_write(CMD,0x11);
  lcd_write(CMD,0x13);
//  lcd_write(CMD,0x26); lcd_write(DATA,0b00001000);//Gamma Set 1,2,4,8
//  lcd_write(CMD,0x36); lcd_write(DATA,0b00000000);// <>,  BGR,               
  lcd_write(CMD,0x3A); lcd_write(DATA,0b00000101);//16bit
   
// lcd_write(CMD,0x2D); lcd_write(DATA,0b00001111);
 
  lcd_write(CMD,0x29);
 //lcd_write(CMD,0x39);
 // lcd_write(CMD,0x13);
               
 
 }

При выходе из функции lcd_write() уходит в ресет, выполняет программу до указанного места, снова в ресет и так постоянно. Прерывание не разрешены, WDT не инициализирован. Что может быть? :dont_know:
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

непонятно назначение открывающейся фигурной скобки после иф

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

if (cd) SDATA=1; imps;
{ //вот этой, какую функцию она выполняет?
unsigned char mask = 0x80;

for( ; mask; mask >>= 1)
{
SDATA = register_name & mask;
CLK=1; delay_us(1);
CLK=0;
SDATA=0;
}
}
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

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

Сообщение ELcat »

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

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

Сообщение vitalik_1984 »

ELcat А собачий таймер точно отключен? Помнится вы спрашивали как сделать так, чтобы постоянно срабатывал сторожевой таймер, даже при уходе в цикл делэй.
Ничего в связи с этим с библиотекой не делали?
Аватара пользователя
ELcat
Друг Кота
Сообщения: 3258
Зарегистрирован: Вт май 19, 2009 09:27:30
Откуда: Украина

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

Сообщение ELcat »

С собакой это было пару месяцев тому в другом проекте на Тиньке24. С ним я уже разобрался. Сейчас я сделал платку-отладку на Меге 128-й и Нокиевском цветном ЖК дисплее. Там суть такова, что дисплей имеет протокол обмена SPI 9бит, что AVR-ками не поддерживается. Потому организована программная эмуляция 9b SPI. У человека, который со мной этим кодом поделился, он якобы работает на Тини26-й.

P.S.: Библиотеки тогда не трогал. Да и сама CV AVR на днях переустанавливалась (на версию 2.05).
Вложения
28022013149.jpg
(165.33 КБ) 310 скачиваний
dimka86
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт фев 21, 2012 15:05:12

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

Сообщение dimka86 »

при создании приемного и передающего буффера генератором кода, вызывая фусцию getchar() получается символ из этого буфера?
программа не остановится и не будет ждать получения данных по USART и что с этим буфером происходит надоли обнулять его значения
и вот еще вызывая gets(buf,3) в buf будет три символа из буффера приема?
Аватара пользователя
unalex
Мучитель микросхем
Сообщения: 424
Зарегистрирован: Сб авг 25, 2007 22:02:05
Откуда: Германия, Viernheim

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

Сообщение unalex »

dimka86 писал(а):получается символ из этого буфера?

да
dimka86 писал(а):программа не остановится и не будет ждать получения данных по USART

программа будет опрашивать буфер, пока в него не попадут данные
dimka86 писал(а):что с этим буфером происходит надоли обнулять его значения

при получении символа он записывается в буфер
после считывания данных из буфера, он очищается автоматически
Коктейль "Рекурсивный": 20% спирта, 30% воды, 50% коктейля "Рекурсивный"...
dimka86
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт фев 21, 2012 15:05:12

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

Сообщение dimka86 »

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

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

Сообщение ELcat »

Мужики, не поверите! Победил таки. Причина оказалась в самом компиляторе. Что именно, я конкретно и сам не понял. Зашёл в свойства проекта, выставил "кучу" 512байт (изначально было 0), выставил самый низкий уровень оптимизаций, кроме того после описанных действий CV сама ругнулась, что в МК не корректно выставлен фуз "M103" и предложила его изменить (изначальные заводские фузы не менял) и всё заработало. :)
dimka86
Первый раз сказал Мяу!
Сообщения: 32
Зарегистрирован: Вт фев 21, 2012 15:05:12

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

Сообщение dimka86 »

повскажите что не так по Usartu принимаю kxxxe или dxxxxe пробую вывести на дисплей но когда вывожу последующее значение то на дисплее отображаются остаток от прошлого , уточню было 123 следующее значение 35 в итоге на дисплее 353 что не так?
Спойлерwhile (1)
{ i=0;
j=0;
dan_bit=0;
com_bit=0;

while((tmp=getchar())!='e')
{ //начало while

if (com_bit==1)// читаем комманлу
{
com_str[i]=tmp; //считываем символ комманды
i=i+1;
}

if (dan_bit==1)//читаем данные
{
dan_str[j]=tmp;
j=j+1;
}
if (tmp=='k') {com_bit=1; }//пришла комманда
if (tmp=='d') {dan_bit=1; }//пришли даныу
tmp=0;
} //конец while


lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("Kom");
sprintf(buf, "=%s\1", com_str);
lcd_gotoxy(4,0);
lcd_puts(buf);
lcd_gotoxy(0,1);
lcd_putsf("Dan");
sprintf(bufe, "=%s\1", dan_str);
lcd_gotoxy(4,1);
lcd_puts(bufe);





};




}
Аватара пользователя
servo
Встал на лапы
Сообщения: 88
Зарегистрирован: Вс окт 30, 2011 22:52:51

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

Сообщение servo »

не подскажите как из функции которая находится в библиотеке вытащить массив

в функции я в него записываю все имена
for (i=0;i<11;i++) names_buffer[f][i]=name[i];

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

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

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

как из функции вытащить массив
Возвратить на него указатель.
Аватара пользователя
Valek3306
Встал на лапы
Сообщения: 95
Зарегистрирован: Вт авг 03, 2010 22:51:57
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Valek3306 »

Помогите пожалуйста! У меня есть две функции с непрерывным циклом внутри. Мне нужно по прерыванию от нажатия кнопки перейти от одной функции к другой. Подскажите алгоритм? Я сделал так, и не работает, по тому что после прерывания он возвращается к той функции с которой остановился и, само собой, не выходит с нее.
Вложения
1.c
Исходник программы
(6.45 КБ) 292 скачивания
Маленький хакер в подстанцию влез
Перенаправил поток он с АЭС
Клевая мощность два мегаватта,
Быстро горит материнская плата!
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Устанавливать в прерывании флаг и по нему выходить из цикла через break.
Аватара пользователя
servo
Встал на лапы
Сообщения: 88
Зарегистрирован: Вс окт 30, 2011 22:52:51

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

Сообщение servo »

Аlex писал(а):
как из функции вытащить массив
Возвратить на него указатель.

Спасибо !

Как правильно это сделать не могли бы Вы примерчик накидать :)
Аватара пользователя
Valek3306
Встал на лапы
Сообщения: 95
Зарегистрирован: Вт авг 03, 2010 22:51:57
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение Valek3306 »

Аlex писал(а):Устанавливать в прерывании флаг и по нему выходить из цикла через break.

можно примерчик?
Маленький хакер в подстанцию влез
Перенаправил поток он с АЭС
Клевая мощность два мегаватта,
Быстро горит материнская плата!
Ответить

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