Доброго времени суток! Уже сломал голову решая проблему. Суть задачи: К контроллеру подключена микросхема АЦП MCP3204 по SPI. Примерно раз в 4 с считываю значение трех каналов АЦП и передаю через USB на компьютер. На компьютере эти значения используются для дальнейшей математической обработки. Проблема в том, что когда с компьютера посылаю команду считать АЦП мне каждый раз приходят разные значение, даже если считываю чаще чем происходит опрос MCP3204. Может кто знает в чем может быть проблема?
Функция считывает значение каналов АЦП
Код:
unsigned int getADC(unsigned short channel)
{
// Returns 0..4095
unsigned int tmp;
Chip_Select = 0; // Select MCP3204
SPI1_Write(0x06); // SPI communication using 8-bit segments
channel = channel << 6; // Bits 7 & 6 define ADC input
tmp = SPI1_Read(channel) & 0x0F;
tmp = tmp << 8; // Get ADC value
tmp |= SPI1_Read(0);
Chip_Select = 1;
return tmp;
}
Этот код выполняется раз в 4 с. Проверяем переполнение канала и разделяем на байты для отправки на компьютер.
Код:
if (Cs >= 4090)
{
ChanelCDiod = 1;
}
else
{
ChanelCDiod = 0;
}
AdcChanel = getADC(2);
Cs = AdcChanel;
Ch = Cs;
Cl = Cs >> 4;
Здесь собираем посылку для отправки в порт USB.
Код:
if (ChanelCDiod == 1)
{
writebuff[21] = 1;
}
else
{
writebuff[21] = 2;
}
writebuff[5] = Ch;
writebuff[6] = Cl;
Пробовал Cs присваивать константу, на компьютер приходит все правильно, ничего не изменяется. Всем заранее спасибо!