добрый день товарищи программисты. Помогите пожалуйста разобрать кусок кода. Не совсем понимаю что он делает.
есть 3 массива типа char, в них закидывается значение с 16 битного ацп. А что именно делает и для чего эта функция, по пунктам,не могу разобраться.
вот что возвращает функция чтения ацп
просто как я понимаю
это фильтр бегущего среднего для первого канала, но зачем их используется 3 друг за другом,не совсем понятно.
есть 3 массива типа char, в них закидывается значение с 16 битного ацп. А что именно делает и для чего эта функция, по пунктам,не могу разобраться.
C++:
#define BUFFER_SIZE 17 // размер буфера передачи
#define MAXPACKETS 6 // число пакетов
char OutBuffer[BUFFER_SIZE] = {0}; // выходной буфер
unsigned long Signal[2] = {0}; //
unsigned long Sig1[2] = {0}; //
unsigned long Sig2[2] = {0}; //
char PacketCount = 0; // счетчик пакетов
unsigned long ReadData = {0}; // переменная 4 байта на отправку
unsigned int ReadAdcDataReg(void);
void INT1_vect_interrupt(void)
{
char Channel;
if (PacketCount < (MAXPACKETS >> 1)) Channel = 0; else Channel = 1;
WriteToAdcRegister(0x38+Channel,0,0,0,1); //+Channel
ReadData = ((unsigned long)(ReadAdcDataReg()) << 8); //(Work need)
PacketCount++;
if (PacketCount == (MAXPACKETS >> 1)) //5
{
Sig1[0] = (3*Sig1[0] + ReadData) >> 2;
Sig1[1] = (3*Sig1[1] + Sig1[0]) >> 2;
Signal[Channel] = (3*Signal[Channel] + Sig1[1]) >> 2;
}
if (PacketCount == MAXPACKETS) //10
{
Sig2[0] = (3*Sig2[0] + ReadData) >> 2;
Sig2[1] = (3*Sig2[1] + Sig2[0]) >> 2;
Signal[Channel] = (3*Signal[Channel] + Sig2[1]) >> 2;
PacketCount = 0;
SendPacketByRs();
}
}
C++:
unsigned int ReadAdcDataReg(void)
{
char Index;
unsigned int Out = 0;
for(Index=0;Index<16;Index++)
{
Out <<= 1;
CLEAR_SCLK;
SET_SCLK;
Out |= READ_DATA_IO;
}
return Out;
}
C++:
Sig1[0] = (3*Sig1[0] + ReadData) >> 2;