SFHSS fix?

This commit is contained in:
pascallanger 2016-08-16 11:06:24 +02:00
parent 7438545a16
commit 181a70cb1f

View File

@ -27,11 +27,11 @@
uint8_t fhss_code; // 0-27 uint8_t fhss_code; // 0-27
enum { enum {
SFHSS_START = 0x101, SFHSS_START = 0x00,
SFHSS_CAL = 0x102, SFHSS_CAL = 0x01,
SFHSS_TUNE = 0x103, SFHSS_DATA1 = 0x02, // do not change
SFHSS_DATA1 = 0x02, SFHSS_DATA2 = 0x0B, // do not change
SFHSS_DATA2 = 0x0b SFHSS_TUNE = 0x0F
}; };
#define SFHSS_FREQ0_VAL 0xC4 #define SFHSS_FREQ0_VAL 0xC4
@ -82,7 +82,7 @@ static void __attribute__((unused)) SFHSS_rf_init()
for (uint8_t i = 0; i < 39; ++i) for (uint8_t i = 0; i < 39; ++i)
CC2500_WriteReg(i, pgm_read_byte_near(&SFHSS_init_values[i])); CC2500_WriteReg(i, pgm_read_byte_near(&SFHSS_init_values[i]));
prev_option = option+1; prev_option = 0;
//CC2500_WriteReg(CC2500_0C_FSCTRL0, option); //CC2500_WriteReg(CC2500_0C_FSCTRL0, option);
CC2500_SetTxRxMode(TX_EN); CC2500_SetTxRxMode(TX_EN);
@ -101,7 +101,7 @@ static void __attribute__((unused)) SFHSS_tune_chan_fast()
CC2500_Strobe(CC2500_SIDLE); CC2500_Strobe(CC2500_SIDLE);
CC2500_WriteReg(CC2500_0A_CHANNR, rf_ch_num*6+16); CC2500_WriteReg(CC2500_0A_CHANNR, rf_ch_num*6+16);
CC2500_WriteRegisterMulti(CC2500_23_FSCAL3, calData[rf_ch_num], 3); CC2500_WriteRegisterMulti(CC2500_23_FSCAL3, calData[rf_ch_num], 3);
delayMicroseconds(6); delayMicroseconds(100); //6);
} }
#ifdef SFHSS_USE_TUNE_FREQ #ifdef SFHSS_USE_TUNE_FREQ
@ -139,7 +139,7 @@ static void __attribute__((unused)) SFHSS_build_data_packet()
{ {
#define spacer1 0x02 //0b10 #define spacer1 0x02 //0b10
#define spacer2 (spacer1 << 4) #define spacer2 (spacer1 << 4)
uint8_t ch_offset = state == SFHSS_DATA1 ? 0 : 4; uint8_t ch_offset = phase == SFHSS_DATA1 ? 0 : 4;
uint16_t ch1 = SFHSS_convert_channel(CH_AETR[ch_offset+0]); uint16_t ch1 = SFHSS_convert_channel(CH_AETR[ch_offset+0]);
uint16_t ch2 = SFHSS_convert_channel(CH_AETR[ch_offset+1]); uint16_t ch2 = SFHSS_convert_channel(CH_AETR[ch_offset+1]);
uint16_t ch3 = SFHSS_convert_channel(CH_AETR[ch_offset+2]); uint16_t ch3 = SFHSS_convert_channel(CH_AETR[ch_offset+2]);
@ -157,7 +157,7 @@ static void __attribute__((unused)) SFHSS_build_data_packet()
packet[9] = (ch3 >> 1); packet[9] = (ch3 >> 1);
packet[10] = (ch3 << 7) | spacer2 | ((ch4 >> 5) & 0x1F /*0b11111*/); packet[10] = (ch3 << 7) | spacer2 | ((ch4 >> 5) & 0x1F /*0b11111*/);
packet[11] = (ch4 << 3) | ((fhss_code >> 2) & 0x07 /*0b111 */); packet[11] = (ch4 << 3) | ((fhss_code >> 2) & 0x07 /*0b111 */);
packet[12] = (fhss_code << 6) | state; packet[12] = (fhss_code << 6) | phase;
} }
static void __attribute__((unused)) SFHSS_send_packet() static void __attribute__((unused)) SFHSS_send_packet()
@ -168,12 +168,12 @@ static void __attribute__((unused)) SFHSS_send_packet()
uint16_t ReadSFHSS() uint16_t ReadSFHSS()
{ {
switch(state) switch(phase)
{ {
case SFHSS_START: case SFHSS_START:
rf_ch_num = 0; rf_ch_num = 0;
SFHSS_tune_chan(); SFHSS_tune_chan();
state = SFHSS_CAL; phase = SFHSS_CAL;
return 2000; return 2000;
case SFHSS_CAL: case SFHSS_CAL:
CC2500_ReadRegisterMulti(CC2500_23_FSCAL3, calData[rf_ch_num], 3); CC2500_ReadRegisterMulti(CC2500_23_FSCAL3, calData[rf_ch_num], 3);
@ -182,7 +182,7 @@ uint16_t ReadSFHSS()
else else
{ {
rf_ch_num = 0; rf_ch_num = 0;
state = SFHSS_DATA1; phase = SFHSS_DATA1;
} }
return 2000; return 2000;
@ -190,38 +190,38 @@ uint16_t ReadSFHSS()
case SFHSS_DATA1: case SFHSS_DATA1:
SFHSS_build_data_packet(); SFHSS_build_data_packet();
SFHSS_send_packet(); SFHSS_send_packet();
state = SFHSS_DATA2; phase = SFHSS_DATA2;
return 1650; return 1650;
case SFHSS_DATA2: case SFHSS_DATA2:
SFHSS_build_data_packet(); SFHSS_build_data_packet();
SFHSS_send_packet(); SFHSS_send_packet();
SFHSS_calc_next_chan(); SFHSS_calc_next_chan();
state = SFHSS_TUNE; phase = SFHSS_TUNE;
return 2000; return 2000;
case SFHSS_TUNE: case SFHSS_TUNE:
#ifdef SFHSS_USE_TUNE_FREQ #ifdef SFHSS_USE_TUNE_FREQ
SFHSS_tune_freq(); SFHSS_tune_freq();
#endif #endif
CC2500_SetPower(); CC2500_SetPower();
state = SFHSS_DATA1; phase = SFHSS_DATA1;
return 3150; return 3150;
/* /*
case SFHSS_DATA1: case SFHSS_DATA1:
SFHSS_build_data_packet(); SFHSS_build_data_packet();
SFHSS_send_packet(); SFHSS_send_packet();
state = SFHSS_DATA2; phase = SFHSS_DATA2;
return 1650; return 1650;
case SFHSS_DATA2: case SFHSS_DATA2:
SFHSS_build_data_packet(); SFHSS_build_data_packet();
SFHSS_send_packet(); SFHSS_send_packet();
state = SFHSS_CAL2; phase = SFHSS_CAL2;
return 500; return 500;
case SFHSS_CAL2: case SFHSS_CAL2:
SFHSS_tune_freq(); SFHSS_tune_freq();
// CC2500_SetPower(); // CC2500_SetPower();
SFHSS_calc_next_chan(); SFHSS_calc_next_chan();
SFHSS_tune_chan(); SFHSS_tune_chan();
state = SFHSS_DATA1; phase = SFHSS_DATA1;
return 4650; return 4650;
*/ */
} }
@ -266,7 +266,7 @@ uint16_t initSFHSS()
fhss_code=rx_tx_addr[2]%28; // Initialize it to random 0-27 inclusive fhss_code=rx_tx_addr[2]%28; // Initialize it to random 0-27 inclusive
SFHSS_rf_init(); SFHSS_rf_init();
state = SFHSS_START; phase = SFHSS_START;
return 10000; return 10000;
} }