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