Найдите исполнителя для вашего проекта прямо сейчас!
Разместите заказ на фриланс-бирже и предложения поступят уже через несколько минут.

Разработка приложений для ПК.

Доработка существующего продукта.

Имеется устройство на базе Arduino Nano в связке с приемником CC2500. Приемник подключен к Ардуино через интерфейс SPI. Данное устройство принимает сигнал на частоте 2,4 Ггц. Имеется код на Arduino IDE взаимодействия ардуино и примника СС2500, код сканирует диапазон сигналов и показывает самый сильный сигнал.

Необходимо переработать данный код для подключения 4 приемников к ардуино по интерфейсу SPI. Программа должна считывать сигнал с 4-х приемников по очереди во всем диапазоне частот 2,4ГГц. Находить самый сильный сигнал на 4- х приемников, а потом сравнивать эти сигналы между собой.

Далее необходимо написать GUI ( графический интерфейс пользователя) чтобы выводить сравнение сигналов на ПК по COM порту (UART). Данные выводить ввиде : Номер приемника- уровень сигнала, Номер приемника- Самый сильный сигнал.

Ниже приведен код который необходимо править.

// Hardware-specific library

#include

//#include

#include "cc2500_REG.h"

#define TFT_CS 9 // display Select

#define SCAN_CS 10 // scanner Select

#define TFT_RST 7 // display Reset (0 if use Arduino reset)

#define TFT_DC 8 // display Data/Command control line

#define RSSI_TRESHOLD 100 // treshold of RSSI alarm level

#define RSSI_OFFSET 95 // offset for displayed data

#define RSSI_OVERSAMPLE 50 // number of measures for each channel to found a max RSSI value

#define MAX_CHAN_QTY 205 // max number of channel for spacing 405.456543MHz

#define MAX_DISP_LINE 159 // max horizontal display resolution

#define MAX_SAMPLING 10 // qty of samples in each iteration (1...100)

byte cal[MAX_CHAN_QTY], rssi_data[MAX_DISP_LINE], data;

byte RSSI_data;

int RSSI_dbm, RSSI_max;

void setup(void) {

Serial.begin(9600);

pinMode(TFT_CS, OUTPUT);

pinMode(SCAN_CS,OUTPUT);

SPI.begin();

SPI.setClockDivider(SPI_CLOCK_DIV2); // max SPI speed, 1/2 F_CLOCK

digitalWrite(TFT_CS,HIGH);

digitalWrite(SCAN_CS,HIGH);

init_CC2500(); // initialise CC2500 registers

for (int i=0; i

{

WriteReg(CHANNR, i); // set channel

WriteReg(SIDLE, 0x3D); // idle mode

WriteReg(SCAL, 0x3D); // start manual calibration

delayMicroseconds(800); // wait for calibration

data = ReadReg(FSCAL1); // read calibration value

cal = data; // and store it

}

WriteReg(CHANNR, 0x00); // set channel

WriteReg(SFSTXON, 0x3D); // calibrate and wait

delayMicroseconds(800); // settling time, refer to datasheet

WriteReg(SRX, 0x3D);

}

void loop() {

for (int i=0; i

{

WriteReg(CHANNR, i); // set channel

WriteReg(FSCAL1, cal); // restore calibration value for this channel

delayMicroseconds(300); // settling time, refer to datasheet

RSSI_max = -120;

for (int j=0; j

digitalWrite(SCAN_CS,LOW); // select the scanner chip

SPI.transfer(REG_RSSI); // read RSSI register

RSSI_data = SPI.transfer(0);

digitalWrite(SCAN_CS,HIGH);

// convert RSSI data from 2's complement to signed decimal

if(RSSI_data >= 128) {

RSSI_dbm = (RSSI_data-256)/2-70;

}

else {

RSSI_dbm = RSSI_data/2-70;

}

if (RSSI_dbm > RSSI_max) RSSI_max = RSSI_dbm; // keep maximum

}

RSSI_max += RSSI_OFFSET;

if(RSSI_max > 110) RSSI_max = 110;

if(RSSI_max

rssi_data = RSSI_max;

//tft.drawFastVLine(i, 17, 110-RSSI_max, ST7735_BLACK);

//tft.drawFastVLine(i, 127-RSSI_max, RSSI_max, ST7735_GREEN);

}

//DrawScreen();

Serial.print(CHANNR);

Serial.print(rssi_data[CHANNR]);

}

void init_CC2500(){

WriteReg(SRES,0x3D); // software reset for CC2500

WriteReg(FSCTRL1,0x0F); // Frequency Synthesizer Control

WriteReg(PKTCTRL0,0x12); // Packet Automation Control

WriteReg(FREQ2,0x5C); // Frequency control word, high byte

WriteReg(FREQ1,0x4E); // Frequency control word, middle byte

WriteReg(FREQ0,0xDE); // Frequency control word, low byte

WriteReg(MDMCFG4,0x0D); // Modem Configuration

WriteReg(MDMCFG3,0x3B); // Modem Configuration

WriteReg(MDMCFG2,0x00); // Modem Configuration 0x30 - OOK modulation, 0x00 - FSK modulation (better sensitivity)

WriteReg(MDMCFG1,0x23); // Modem Configuration

WriteReg(MDMCFG0,0xFF); // Modem Configuration

WriteReg(MCSM1,0x0F); // Always stay in RX mode

WriteReg(MCSM0,0x04); // Main Radio Control State Machine Configuration

WriteReg(FOCCFG,0x15); // Frequency Offset Compensation configuration

WriteReg(AGCCTRL2,0x83); // AGC Control

WriteReg(AGCCTRL1,0x00); // AGC Control

WriteReg(AGCCTRL0,0x91); // AGC Control

WriteReg(FSCAL3,0xEA); // Frequency Synthesizer Calibration

WriteReg(FSCAL2,0x0A); // Frequency Synthesizer Calibration

WriteReg(FSCAL1,0x00); // Frequency Synthesizer Calibration

WriteReg(FSCAL0,0x11); // Frequency Synthesizer Calibration

}

void WriteReg(char addr, char value){

digitalWrite(SCAN_CS,LOW);

while (digitalRead(MISO) == HIGH) {

};

SPI.transfer(addr);

SPI.transfer(value);

digitalWrite(SCAN_CS,HIGH);

}

char ReadReg(char addr){

addr = addr + 0x80;

digitalWrite(SCAN_CS,LOW);

while (digitalRead(MISO) == HIGH) {

};

SPI.transfer(addr);

char y = SPI.transfer(0);

digitalWrite(SCAN_CS,HIGH);

return y;

}.

год назад
guest_16815540100996
год в сервисе
Был
год назад