Обработка Массива Pic18F4550

18-06-2014, 13:23 От: admin Посмотрели: 350
Здравствуйте. Имею следующую задачу. На мк pic18f4550 сформировать массив данных с АЦП, отфильтровать его и отправить на мк. Но мне немножко непонятен сам процесс. Ниже привел фрагмент кода.


WORD_VAL ReadPOT(void)
{
WORD_VAL w;

w.Val = 0;

ADCON0bits.GO = 1; // начинаем АЦП
while(ADCON0bits.GO); // ждем, пока не закончилось
w.v[0] = ADRESL; // записываем в переменные
w.v[1] = ADRESH;
//---Здесь начинается формирование массива данных для фильтрования---//
using namespace std;
double massiv1[];
for (i = 1; i <= 1000; i++);// задаем начальное значение 1 и конечное значение 1000 с шагом 1
{
massiv1[i]= (w.v[1] << 8) + w.v[0];
}
//---Здесь заканчивается формирование массива данных для фильтрования---//
//---Фильтр---//
int i,j,z,k1,k2,hw,n,window;
double tmp,input,output;
window = 5;
if(fmod(window,2)==0) window++;
hw=(window-1)/2;
output[0]=massiv1[0];

for (i=1;i<n;i++){
tmp=0;
if(i<hw){
k1=0;
k2=2*i;
z=k2+1;
}
else if((i+hw)>(n-1)){
k1=i-n+i+1;
k2=n-1;
z=k2-k1+1;
}
else{
k1=i-hw;
k2=i+hw;
z=window;
}

for (j=k1;j<=k2;j++){
tmp=tmp+massiv1[j];
}
output[i]=tmp/z;
}
//---end фильтр---//
w = output[];
return w;
}//end ReadPOT


После фильтра уже нет старшего и младшего байта,непонятно,как сделать обратное преобразование,поскольку по USB передача идет именно так.

Нужно ли вообще это преобразование?

Как передаются данные на мк, можно ли отправить весь отфильтрованный массив?


void ProcessIO(void)
{
// если еще не настроено или в режиме сна, то не делать ничего
if((USBDeviceState < CONFIGURED_STATE)||(USBSuspendControl==1)) return;

//Проверить, если мы получили исходящий пакет
if(!HIDRxHandleBusy(USBOutHandle))
{
//Мы только что получили исходящий пакет. Проверим первый байт, чтобы понять что за команда
switch(ReceivedDataBuffer[0])
{
case 0x80: //вкл/выкл светодиод
mLED_1_Toggle();
break;
case 0x81: //проверить статус переключателя sw
// проверяем, свободен ли буфер записи, перед тем, как записать туда
if(!HIDTxHandleBusy(USBInHandle))
{
ToSendDataBuffer[0] = 0x81; //создаем сообщение с информацией о переключателе sw
if(sw3 == 1)
{
ToSendDataBuffer[1] = 0x01;
}
else
{
ToSendDataBuffer[1] = 0x00;
}
//готовим USB модуль для отправки данных хосту
USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64);
}
break;

case 0x37: //проверить напряжение на АЦП
{
WORD_VAL w;

// проверяем, свободен ли буфер записи, перед тем, как записать туда
if(!HIDTxHandleBusy(USBInHandle))
{
w = ReadPOT(); //считываем напряжение. функция определена ниже.
ToSendDataBuffer[0] = 0x37; //делаем сообщение - напряжение на АЦП
ToSendDataBuffer[1] = w.v[0]; //Передаем младший байт
ToSendDataBuffer[2] = w.v[1]; //старший байт

//готовим USB модуль для отправки данных хосту
USBInHandle = HIDTxPacket(HID_EP,(BYTE*)&ToSendDataBuffer[0],64);
}
}
break;
}
//готовим выходную конечную точку, чтобы хост смог отправить нам еще пакет ифнормации
USBOutHandle = HIDRxPacket(HID_EP, (BYTE*)&ReceivedDataBuffer, 64);
}


}//end ProcessIO




Без фильтра и формирования массива все прекрасно работает. Это код из исходников microchip для hid устройств, смысл таков, я получаю с датчика напряжение, эти напряжения нужно отправить на ПК,чтобы увидеть результат,например, в виде графика,чтобы график был плавным необходимо отфильтровать массив напряжений, а более глубокий смысл таков: эмуляция контроллера для обработки сигнала с датчика давления. Поэтому хотелось бы разобраться с фильтрованием непосредственно на контроллере.

Прикрепленные файлы:





  • Прикрепленный файл
     main.rar   10,48 Кб
      2 раз скачано




Раздел: Начинающим

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться, либо войти на сайт под своим именем.

Обсудить на форуме


На момент добавления Обработка Массива Pic18F4550 все ссылки были рабочие.
Все публикации статей, книг и журналов, представлены на этом сайте, исключительно для ознакомления,
авторские права на эти публикации принадлежат авторам статей, книг и издательствам журналов!
Подробно тут | Жалоба
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.


Опрос

Ваши предпочтения в TRX


Одинарное преобразование
Двойное преобразование
Прямое преобразование
SDR
Другое
Мне всё равно

Популярные новости
Календарь новостей
«    Май 2024    »
ПнВтСрЧтПтСбВс
 12345
6789101112
13141516171819
20212223242526
2728293031