Задача читать с АЦП ads1255 результаты преобразования. Что бы не уходить в сторону спрошу кратко
вот пример кода в котором ATМеga16 работающая на 16 Мгц читает в цикле 8 бит (т.к. ацп 24 битное читаю 3 раза далее свожу в переменную типа unsigned long т.к. если читать сразу в unsigned long все биты исполнение в4-5 раз длиннее см.ниже)
cod_1 типа unsigned char for (Col_Bit=0;Col_Bit<8;Col_Bit++) // { PORTB SET_B(0);#asm("NOP"); //ставим клок if(PINB.2 == 1) //если пришла 1 ка то { cod_1=cod_1<<1;//сдвинет cod_1 |= 1<<0; //запишет 1 в 0 бит } //if else { cod_1=cod_1<<1; cod_1 &= ~(1<<0);//запишет 0 в 0 бит }; //else
так вот при таком алгоритме на формирование 1ки "клока" уходит приблизительно 500 нс. Мне нужно ровно в два раза меньше. Контроллеров серии AVR работающих на частоте более 16 МГц я не нашел. Подскажите как быть(как я понял все время ест IF)? Переходить на другой контроллер или можно как то оптимизировать код?
Сообщение отредактировал messenger - Aug 15 2009, 11:46
|