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

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

Добавлено: Ср фев 27, 2013 15:51:32
vitalik_1984
:facepalm: нифига себе, проглядел.
Ладно сам дурак.
значит все норм.

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

Добавлено: Ср фев 27, 2013 16:26:13
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;
}
то как задать частоту дискретизации ? Она же будет плавать то больше то меньше.
А если через прерывания, то не как не могу представить, что там написать =)

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

Добавлено: Ср фев 27, 2013 17:15:47
unalex
pokk писал(а):это что такое ?
это называется тернарная условная операция

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

(проверка условия) ? (если условие выполняется) : (если условие не выполняется)
кстати у Лебедева это есть на странице 214
pokk писал(а):Что из себя представляет функция read_ADC()
это я так абстрактно обозвал процедуры чтения, а что там будет стоять у вас вы сами решите, и обратите внимание, этой функции в качестве аргумента передается номер канала АЦП

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

Добавлено: Ср фев 27, 2013 17:22:09
pokk
Понятно, благодарю за помощь.

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

Добавлено: Чт фев 28, 2013 11:40:40
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:

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

Добавлено: Чт фев 28, 2013 14:46:54
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;
}
}

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

Добавлено: Чт фев 28, 2013 16:41:15
ELcat
Код не мой. Я его пытался редактировать, но эти скобки пока не убрал. Они не влияют на компилируемый код.

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

Добавлено: Чт фев 28, 2013 16:48:38
vitalik_1984
ELcat А собачий таймер точно отключен? Помнится вы спрашивали как сделать так, чтобы постоянно срабатывал сторожевой таймер, даже при уходе в цикл делэй.
Ничего в связи с этим с библиотекой не делали?

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

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

P.S.: Библиотеки тогда не трогал. Да и сама CV AVR на днях переустанавливалась (на версию 2.05).

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

Добавлено: Пт мар 01, 2013 12:41:57
dimka86
при создании приемного и передающего буффера генератором кода, вызывая фусцию getchar() получается символ из этого буфера?
программа не остановится и не будет ждать получения данных по USART и что с этим буфером происходит надоли обнулять его значения
и вот еще вызывая gets(buf,3) в buf будет три символа из буффера приема?

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

Добавлено: Пт мар 01, 2013 14:47:50
unalex
dimka86 писал(а):получается символ из этого буфера?
да
dimka86 писал(а):программа не остановится и не будет ждать получения данных по USART
программа будет опрашивать буфер, пока в него не попадут данные
dimka86 писал(а):что с этим буфером происходит надоли обнулять его значения
при получении символа он записывается в буфер
после считывания данных из буфера, он очищается автоматически

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

Добавлено: Пт мар 01, 2013 14:51:01
dimka86
Спасибо понял

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

Добавлено: Пт мар 01, 2013 17:05:23
ELcat
Мужики, не поверите! Победил таки. Причина оказалась в самом компиляторе. Что именно, я конкретно и сам не понял. Зашёл в свойства проекта, выставил "кучу" 512байт (изначально было 0), выставил самый низкий уровень оптимизаций, кроме того после описанных действий CV сама ругнулась, что в МК не корректно выставлен фуз "M103" и предложила его изменить (изначальные заводские фузы не менял) и всё заработало. :)

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

Добавлено: Пт мар 01, 2013 20:53:54
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=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);





};




}

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

Добавлено: Пт мар 01, 2013 22:47:00
servo
не подскажите как из функции которая находится в библиотеке вытащить массив

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

а в основном коде хочу получить к нему доступ, но пока не получается.

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

Добавлено: Сб мар 02, 2013 09:43:44
Аlex
как из функции вытащить массив
Возвратить на него указатель.

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

Добавлено: Сб мар 02, 2013 10:01:06
Valek3306
Помогите пожалуйста! У меня есть две функции с непрерывным циклом внутри. Мне нужно по прерыванию от нажатия кнопки перейти от одной функции к другой. Подскажите алгоритм? Я сделал так, и не работает, по тому что после прерывания он возвращается к той функции с которой остановился и, само собой, не выходит с нее.

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

Добавлено: Сб мар 02, 2013 10:31:50
Аlex
Устанавливать в прерывании флаг и по нему выходить из цикла через break.

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

Добавлено: Сб мар 02, 2013 13:50:32
servo
Аlex писал(а):
как из функции вытащить массив
Возвратить на него указатель.
Спасибо !

Как правильно это сделать не могли бы Вы примерчик накидать :)

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

Добавлено: Сб мар 02, 2013 14:16:37
Valek3306
Аlex писал(а):Устанавливать в прерывании флаг и по нему выходить из цикла через break.
можно примерчик?