Господа, есть вопрос. Захотелось посканировать с помощью CC2500 диапазон частот.
Нашел пример cпектроанализатора, выдрал кусок кода.
Код
for (i=0; i<=85; i++)
{
cc2500Write(0x0a, i+i+i); //
cc2500Write(0x25, cal[i+i+i]); // calibration value
waitUS(300); // settling time
max = 0;
for (j=0; j<=25*2; j++) { // oversample - save maximum
waitUS(10);
cc2500Read(0xf4, &data); // read RSSI
data -= rssiOfs; // apply offset
if (data > max) // oversample and keep maximum
max = data;
}
//ВСЕ ЧТО ВЫШЕ - ЧТЕНИЕ RSSI ИЗ РЕГИСТРА
// А ДАЛЬШЕ ИДЕТ ОБРАБОТКА
int16_t rssi = max+rssiOfs; //rssiofs по умолчанию 190
if (rssi>=128)
rssi = (rssi-256)/2-70;
else
rssi = (rssi)/2-70;
if (rssi>rssimax)
{
rssimax = rssi;
fqmax = i;
}
if (rssi<-90)
rssi = -90;
else
if (rssi>-30)
rssi = -30;
DrawYLine(i+10, (-rssi-30)/2,30); // ОТОБРАЖЕНИЕ В ВИДЕ ЛИНИИ
}
Результат получился довольно странный. Очень много линий, имеющих совершенно одинаковую длину - около 30.
Как будто пики срезаны.
Кто-нибудь может объяснить что означает RSSI непосредственно читаемый из регистра и в чем смысл математической обрработки начиная со стороки int16_t rssi = max+rssiOfs; //rssiofs по умолчанию 190