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

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

Добавлено: Чт авг 21, 2014 11:19:25
ARV
jazz393 писал(а):Хотелось бы ещё узнать как это 100 переменных инициилизировать только 1 раз
хоть и не совсем в тему :oops: , но: а вот WinAVR позволяет одним махом инициализировать одинаковым значением массивы любой размерности...

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

int arr[1000] = {[0 ... 999] = 15}; // все элементы массива равны 15
ну и неодинаковыми тоже можно

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

int arr[1000] = {[0 ... 999] = 15, [500] = 10}; // все элементы массива равны 15, кроме 500-го, который равен 10

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

Добавлено: Пт авг 22, 2014 02:26:38
Goodefine
ARV писал(а):

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

int arr[1000] = {[0 ... 999] = 15}; // все элементы массива равны 15...
Да и так всегда работало:

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

int arr[1000] = {15}; // все элементы массива равны 15...

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

Добавлено: Пт авг 22, 2014 08:25:03
ARV
Goodefine писал(а):Да и так всегда работало:

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

int arr[1000] = {15}; // все элементы массива равны 15...
да так и работает, только инициализируется ПЕРВЫЙ элемент, а остальные равны нулю...

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

Добавлено: Пт авг 22, 2014 12:47:47
Goodefine
Ну да, кроме нуля обычно более ничего и не надо при инициализации массива.

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

Добавлено: Пт авг 22, 2014 13:38:41
ARV
Goodefine писал(а):Ну да, кроме нуля обычно более ничего и не надо при инициализации массива.
все началось с того, что jazz393-у потребовалось инициализировать большой массив ненулевыми значениями...

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

Добавлено: Вт авг 26, 2014 14:18:36
Сериг
Добрый день! Прошу помощи в следующем:
Есть 24 бита, хранятся в переменной pack
pack = 0b000000000000000000001111; ( как пример)
В итоге надо получить запись, в зеркальном отражении:
pack = 0b111100000000000000000000;
Каким образом это осуществить?
Спасибо!

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

Добавлено: Вт авг 26, 2014 14:32:30
Pink-Pank
побитовым сдвигом с сохранением вытесненного бита в новой переменной и дальнейшим сдвигом ее в обратном направлении.

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

Добавлено: Вт авг 26, 2014 14:53:58
Сериг
Это хорошо, сдвигом, все понятно, как сохранять в новую переменную? 1>>I?

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

Добавлено: Вт авг 26, 2014 15:07:26
ARV
самый простой для понимания, но не самый оптимальный, вариант:

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

unsigned long revers(unsigned long pack){
   unsigned long result = 0;
   unsigned char i;

   for(i=0; i<32;i++){
      result <<=1;
      result |= pack & 1;
      pack >>= 1;
   }
   return result;
}

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

Добавлено: Вт авг 26, 2014 15:12:56
Pink-Pank

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

 union 
{
   unsigned long full : 24;
   unsigned char low : 8;
} result;

unsigned long pack = 0b1010101010110111011010110101;

usigned char i = 0;

.....

result.low |= (char) pack & 1;
pack >>= 1;

   for(i=1; i<=23;i++){
      result.full <<= 1;
      result.low |= (char) pack & 1;
      pack >>= 1;
   }
   pack = result.full;
}

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

Добавлено: Вт авг 26, 2014 15:18:34
Сериг
Спасибо большое! Пойду пробовать :)

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

Добавлено: Вт авг 26, 2014 23:02:28
Upgrader
Мудрые люди! Помогите усыпить ATmega8 и пробудить по INT1, пожалуйста. В этой теме последний пост с исходником: http://radiokot.ru/forum/viewtopic.php? ... 0#p2110030

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

Добавлено: Ср авг 27, 2014 07:22:19
Pink-Pank

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

MCUCR = 0; // все прерывания по нижнему уровню.
GICR |= (1<<INT1); // включаем прерывание 1.
GIFR = 0xFF; // сбрасываем флаги.
#asm
   sei
#endasm

// Засыпаем
MCUCR |= (1<<SE); // Idle + разрешить засыпание
#asm
   sleep
#endasm
MCUCR &=~(1<<SE); // Убираем разрешающий бит.

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

Добавлено: Чт авг 28, 2014 21:11:12
Upgrader
Pink-Pank,
Проблема в том что он тут-же просыпается самостоятельно. С чем это может быть связано, нужно еще какой-нибудь таймер отключить, а при пробуждении включить?
Up
Отключал всё! Не спит зараза. Блин, что делать... :?

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

Добавлено: Пт авг 29, 2014 00:30:39
Rtmip
он у Вас тут же просыпается из-за асинхронного таймера...

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

Добавлено: Пт авг 29, 2014 07:10:04
Pink-Pank
отключать нужно все таймеры, если не хотите, чтобы он просыпался. Проснутся он также может по прерыванию от АЦП и по внешнему прерыванию. Еще SPI по моему будит его.. В общем, курите даташит! ;)

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

Добавлено: Пт сен 05, 2014 23:43:16
eduardo
Здрасьте.Кто-нибудь знает почему при написании:
PORTF.7=1 или PORTG.3=1
компилятор(CV AVR) выдаёт ошибку? При побитовом обращении к другим портам ошибки нету.МК АТмега 64.Подскажите,в чём причина?
Спасибо...

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

Добавлено: Сб сен 06, 2014 10:23:09
oleg110592
из хэлпа кодевижена:
The bit level access to the I/O registers can be also accomplished by using bit selectors appended after the name of the I/O register.
Because bit level access to I/O registers is done using the CBI, SBI, SBIC and SBIS instructions, the register address must be in the 0 to 1Fh range for sfrb and in the 0 to 1Eh range for sfrw.
Т.е. на портах, которые находятся в адресах 0 to 1Fh, например PORTB.1=1; будет работать.
Порты, адрес который находится в RAM, например PORTF.1=1; не будет работать.
Note: Bit selector access to I/O registers located in internal RAM above address 5Fh (like PORTF for the ATmega128 for example) will not work, because the CBI, SBI, SBIC and SBIS instructions can't be used for RAM access.
Есть в CV хидер iobits.h там макросы для работы с битами:
SETBIT(port,b) - sets bit b of port to logic 1 state, CLRBIT(port,b) - sets bit b of port to logic 0 state и т.д.
Или же писать стандартно:
PORTF |= 1<<1; //установить бит 1 в порту F
PORTF &= ~(1<<1); //сбросить бит 1 в порту F

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

Добавлено: Пт сен 12, 2014 00:24:41
levaclaus
есть напряжение "a", которое меняется в диапазоне 0 - -79db
есть число "б", которое прямо пропорционально зависит от "а"

задача - как рассчитать коэффициент, чтобы "б" не было зависимо от "а"

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

Добавлено: Пт сен 12, 2014 00:28:47
Аlex
levaclaus писал(а):есть число "б", которое прямо пропорционально зависит от "а"
levaclaus писал(а): чтобы "б" не было зависимо от "а"
Это как ? Одно противоречит другому :))