Страница 243 из 421
Re: CodeVision AVR в вопросах и ответах
Добавлено: Ср фев 27, 2013 15:51:32
vitalik_1984

нифига себе, проглядел.
Ладно сам дурак.
значит все норм.
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 не инициализирован. Что может быть?

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.
можно примерчик?