Возникла проблема при вводе данных в АЦП в многоканальном режиме с синхронизацией от таймера.
Ввожу 5 каналов с частотой 10 кГц в 3 массива по 32000 значений, т.е 19200 значений на канал.
После этого преобразую полученные значения и записываю по-канально в отдельные файлы.
В данных файлах время от времени наблюдается такая картина: на каком-то произвольном кадре
происходит сдвиг отсчетов по каналам, т.е сигнал 1-го канала оказывается во 2-ом,
2-го - в 3-ем,..., 5-го - в 1-ом. Может происходить несколько таких сдвигов...
При начале следующего массива - данные такие как надо (с нужных каналов на нужных местах), но
может опять же произойти сдвиг.
Данный сдвиг может и не происходить...
Текст данного куска программы:
int k = 32000;
int NPoint = k/5, NCh = 5, Rate = 100;
unsigned short Data1[32000], Data2[32000], Data3[32000];
signed short Data1_[32000], Data2_[32000], Data3_[32000];
float Data11[32000], Data22[32000], Data33[32000];
unsigned short Chan[16] = {0,1,2,3,4};
// Ввод данных с АЦП
SOFT(Data1, NPoint, Chan, NCh, Rate);
SOFT(Data2, NPoint, Chan, NCh, Rate);
SOFT(Data3, NPoint, Chan, NCh, Rate);
// Преобразование в формат (-5,12...+5,12)В
for(int n = 0; n < k; n++)
{
if(Data1[n]>32678)
Data1_[n] = Data1[n]-65536;
else Data1_[n] = Data1[n];
Data11[n] = Data1_[n]*5.12/2048;
if(Data2[n]>32678)
Data2_[n] = Data2[n]-65536;
else Data2_[n] = Data2[n];
Data22[n] = Data2_[n]*5.12/2048;
if(Data3[n]>32678)
Data3_[n] = Data3[n]-65536;
else Data3_[n] = Data3[n];
Data33[n] = Data3_[n]*5.12/2048;
}
FILE *stream;
stream = fopen("Data1.___", "a");
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data11[5*n];
fprintf(stream, "//n%s", Str.c_str());
}
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data22[5*n];
fprintf(stream, "//n%s", Str.c_str());
}
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data33[5*n];
fprintf(stream, "//n%s", Str.c_str());
}
fclose(stream);
FILE *stream2;
stream2 = fopen("Data2.___", "a");
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data11[5*n+1];
fprintf(stream2, "//n%s", Str.c_str());
}
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data22[5*n+1];
fprintf(stream2, "//n%s", Str.c_str());
}
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data33[5*n+1];
fprintf(stream2, "//n%s", Str.c_str());
}
fclose(stream2);
FILE *stream3;
stream3 = fopen("Data3.___", "a");
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data11[5*n+2];
fprintf(stream3, "//n%s", Str.c_str());
}
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data22[5*n+2];
fprintf(stream3, "//n%s", Str.c_str());
}
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data33[5*n+2];
fprintf(stream3, "//n%s", Str.c_str());
}
fclose(stream3);
FILE *stream4;
stream4 = fopen("Data4.___", "a");
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data11[5*n+3];
fprintf(stream4, "//n%s", Str.c_str());
}
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data22[5*n+3];
fprintf(stream4, "//n%s", Str.c_str());
}
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data33[5*n+3];
fprintf(stream4, "//n%s", Str.c_str());
}
fclose(stream4);
FILE *stream5;
stream5 = fopen("Data5.___", "a");
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data11[5*n+4];
fprintf(stream5, "//n%s", Str.c_str());
}
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data22[5*n+4];
fprintf(stream5, "//n%s", Str.c_str());
}
for(int n = 0; n < k/5; n++)
{
AnsiString Str = Data33[5*n+4];
fprintf(stream5, "//n%s", Str.c_str());
}
fclose(stream5);