This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

CC2500 RSSI

Other Parts Discussed in Thread: CC2500

Hi,

I have a project to do, I have at my disposal two CC2500 CC2500 Development Kit and.

 CC2500 card will be connected to my computer using RF Tx studio mode. My project is to program a microcontroller with my CC2500 and read the RSSI value.

 

At this point I managed to communicate with my pic and my CC2500 to configure all registers as stated in RF studio my question are:

When I send data with RF studio (Tx) how my CC2500 ( this one mange by a pic) know he will receive data ? Because when I read the RSSI register I always get 0x80

I think the problem comes from the fact that I do not understand how to put my CC2500 in receiver mod (Rx) and how he know that he  receive a signal.

Regards 

Arnaud

  • Here's some design notes to get you started:

    DN500 -- Packet Transmission Basics (www.ti.com/lit/swra109)

    DN503 -- SPI Access (www.ti.com/lit/swra112)

  • The spi is ok i can read and write in register the problem is when i send a signal and i want the information. but i still don't understand when i read all how we set up in receive mode, i don't understand the work "Strobe", i have understand their is something to do with the register "srx"

  • A "strobe" is just a command to the chip, using a single byte transfer (thus the name strobe, as it's just a single byte over the SPI interface).

    If you have set the registers correctly, you can set the device in RX by sending the RX command, i.e. the SRX strobe.

  • And here is the problem i don't understand what send in this register, when iread the datasheet of C2500 (http://www.ti.com/lit/ds/symlink/cc2500.pdf) their is nothing about this register or what write in this register to set up in Rx mode

  • It's not a register you're writing, it's a command you're triggering by accessing a specific register on the chip. There's no address phase followed by a value, it's just a single transfer of the "address" of the register you need to access to trigger the command.

    To trigger the SRX command, you need to access the register with address 0x34. This is done by simply transferring one single byte with the value 0x34 over the SPI interface.

  • A ok got it i jsut 0x34  for acces to the register and i send 0x34 in data ? and so my C2500 will be in Rx mod and so here my RSSI value will change right?

  • Just send the one value 0x34. No address followed by data. Just the single byte 0x34. There shall only be one byte transferred over the SPI bus, and that value shall be 0x34.

    So, assuming you have set the configuration registers so that the chip operates in continous RX mode, and that you have sent the SRX command strobe, you can read out the RSSI value from the appropriate status register on the chip. 

  • i have just try, so iahve configure the register exactly the same as smartRF, and the send the data 0x34 by the spi but nothing happen my RSSI is always 0x80 when i send my data with my other C2500 with smartRF studio

  • Can you share the register settings you are using?

  • 5148.CC2500.html
    <html><head>
    <style>
    body {background-color:#dde;}
    caption {font-weight:bold; font-size:16px;margin-left:30px}
    th { text-align:left; background-color:#f00; color:#fff}
    table { background-color: #eec; font-size:9px;margin:10px}
    </style>
    </head>
    <body><table border=1 cellpadding=5 cellspacing=0>
    <caption>CC2500 registers</caption>
    <tr><th>Name</th><th>Address</th><th>Value</th>
    <th>Description</th></tr><tr><td>IOCFG2<td>0x0000</td><td>0x29</td><td>GDO2Output Pin Configuration </td></tr>
    <tr><td>IOCFG1<td>0x0001</td><td>0x2E</td><td>GDO1Output Pin Configuration </td></tr>
    <tr><td>IOCFG0<td>0x0002</td><td>0x06</td><td>GDO0Output Pin Configuration </td></tr>
    <tr><td>FIFOTHR<td>0x0003</td><td>0x07</td><td>RX FIFO and TX FIFO Thresholds</td></tr>
    <tr><td>SYNC1<td>0x0004</td><td>0xD3</td><td>Sync Word, High Byte </td></tr>
    <tr><td>SYNC0<td>0x0005</td><td>0x91</td><td>Sync Word, Low Byte </td></tr>
    <tr><td>PKTLEN<td>0x0006</td><td>0x3D</td><td>Packet Length </td></tr>
    <tr><td>PKTCTRL1<td>0x0007</td><td>0x04</td><td>Packet Automation Control</td></tr>
    <tr><td>PKTCTRL0<td>0x0008</td><td>0x05</td><td>Packet Automation Control</td></tr>
    <tr><td>ADDR<td>0x0009</td><td>0x00</td><td>Device Address </td></tr>
    <tr><td>CHANNR<td>0x000A</td><td>0x03</td><td>Channel Number </td></tr>
    <tr><td>FSCTRL1<td>0x000B</td><td>0x0A</td><td>Frequency Synthesizer Control </td></tr>
    <tr><td>FSCTRL0<td>0x000C</td><td>0x00</td><td>Frequency Synthesizer Control </td></tr>
    <tr><td>FREQ2<td>0x000D</td><td>0x5D</td><td>Frequency Control Word, High Byte </td></tr>
    <tr><td>FREQ1<td>0x000E</td><td>0x44</td><td>Frequency Control Word, Middle Byte </td></tr>
    <tr><td>FREQ0<td>0x000F</td><td>0xEC</td><td>Frequency Control Word, Low Byte </td></tr>
    <tr><td>MDMCFG4<td>0x0010</td><td>0x2D</td><td>Modem Configuration </td></tr>
    <tr><td>MDMCFG3<td>0x0011</td><td>0x3B</td><td>Modem Configuration </td></tr>
    <tr><td>MDMCFG2<td>0x0012</td><td>0x73</td><td>Modem Configuration</td></tr>
    <tr><td>MDMCFG1<td>0x0013</td><td>0x23</td><td>Modem Configuration</td></tr>
    <tr><td>MDMCFG0<td>0x0014</td><td>0x3B</td><td>Modem Configuration </td></tr>
    <tr><td>DEVIATN<td>0x0015</td><td>0x01</td><td>Modem Deviation Setting </td></tr>
    <tr><td>MCSM2<td>0x0016</td><td>0x07</td><td>Main Radio Control State Machine Configuration </td></tr>
    <tr><td>MCSM1<td>0x0017</td><td>0x30</td><td>Main Radio Control State Machine Configuration</td></tr>
    <tr><td>MCSM0<td>0x0018</td><td>0x18</td><td>Main Radio Control State Machine Configuration </td></tr>
    <tr><td>FOCCFG<td>0x0019</td><td>0x1D</td><td>Frequency Offset Compensation Configuration</td></tr>
    <tr><td>BSCFG<td>0x001A</td><td>0x1C</td><td>Bit Synchronization Configuration</td></tr>
    <tr><td>AGCCTRL2<td>0x001B</td><td>0xC7</td><td>AGC Control</td></tr>
    <tr><td>AGCCTRL1<td>0x001C</td><td>0x00</td><td>AGC Control</td></tr>
    <tr><td>AGCCTRL0<td>0x001D</td><td>0xB0</td><td>AGC Control</td></tr>
    <tr><td>WOREVT1<td>0x001E</td><td>0x87</td><td>High Byte Event0 Timeout </td></tr>
    <tr><td>WOREVT0<td>0x001F</td><td>0x6B</td><td>Low Byte Event0 Timeout </td></tr>
    <tr><td>WORCTRL<td>0x0020</td><td>0xF8</td><td>Wake On Radio Control</td></tr>
    <tr><td>FREND1<td>0x0021</td><td>0xB6</td><td>Front End RX Configuration </td></tr>
    <tr><td>FREND0<td>0x0022</td><td>0x10</td><td>Front End TX configuration </td></tr>
    <tr><td>FSCAL3<td>0x0023</td><td>0xEA</td><td>Frequency Synthesizer Calibration </td></tr>
    <tr><td>FSCAL2<td>0x0024</td><td>0x0A</td><td>Frequency Synthesizer Calibration </td></tr>
    <tr><td>FSCAL1<td>0x0025</td><td>0x00</td><td>Frequency Synthesizer Calibration </td></tr>
    <tr><td>FSCAL0<td>0x0026</td><td>0x11</td><td>Frequency Synthesizer Calibration </td></tr>
    <tr><td>RCCTRL1<td>0x0027</td><td>0x41</td><td>RC Oscillator Configuration </td></tr>
    <tr><td>RCCTRL0<td>0x0028</td><td>0x00</td><td>RC Oscillator Configuration </td></tr>
    <tr><td>FSTEST<td>0x0029</td><td>0x59</td><td>Frequency Synthesizer Calibration Control </td></tr>
    <tr><td>PTEST<td>0x002A</td><td>0x7F</td><td>Production Test </td></tr>
    <tr><td>AGCTEST<td>0x002B</td><td>0x3C</td><td>AGC Test </td></tr>
    <tr><td>TEST2<td>0x002C</td><td>0x88</td><td>Various Test Settings </td></tr>
    <tr><td>TEST1<td>0x002D</td><td>0x31</td><td>Various Test Settings </td></tr>
    <tr><td>TEST0<td>0x002E</td><td>0x0B</td><td>Various Test Settings </td></tr>
    <tr><td>PARTNUM<td>0x0030</td><td>0x80</td><td>Chip ID </td></tr>
    <tr><td>VERSION<td>0x0031</td><td>0x03</td><td>Chip ID </td></tr>
    <tr><td>FREQEST<td>0x0032</td><td>0xD5</td><td>Frequency Offset Estimate from Demodulator </td></tr>
    <tr><td>LQI<td>0x0033</td><td>0x00</td><td>Demodulator Estimate for Link Quality </td></tr>
    <tr><td>RSSI<td>0x0034</td><td>0xC7</td><td>Received Signal Strength Indication </td></tr>
    <tr><td>MARCSTATE<td>0x0035</td><td>0x01</td><td>Main Radio Control State Machine State </td></tr>
    <tr><td>WORTIME1<td>0x0036</td><td>0x00</td><td>High Byte of WOR Time </td></tr>
    <tr><td>WORTIME0<td>0x0037</td><td>0x00</td><td>Low Byte of WOR Time </td></tr>
    <tr><td>PKTSTATUS<td>0x0038</td><td>0x20</td><td>Current GDOxStatus and Packet Status </td></tr>
    <tr><td>VCO_VC_DAC<td>0x0039</td><td>0xCC</td><td>Current Setting from PLL Calibration Module </td></tr>
    <tr><td>TXBYTES<td>0x003A</td><td>0x00</td><td>Underflow and Number of Bytes </td></tr>
    <tr><td>RXBYTES<td>0x003B</td><td>0x00</td><td>Underflow and Number of Bytes </td></tr>
    <tr><td>RCCTRL1_STATUS<td>0x003C</td><td>0x00</td><td>Last RC Oscillator Calibration Result </td></tr>
    <tr><td>RCCTRL0_STATUS<td>0x003D</td><td>0x00</td><td>Last RC Oscillator Calibration Result </td></tr>
    </table>
    </body><html>
    (i only write in register who can be write)

  • These settings correspond to normal packet mode operation. The value in the RSSI register is continuously updated until the demodulator detects a sync word. So if you just want to scan the channel, without receiving actual packets, you would need to change two registers:

    PKTCTRL = 0x12 (sync serial mode and infinite packet length)
    MDMCFG2 = 0xF0 (sync mode to no preamble and sync word detection)

    this corresponds to the Continuous RX mode from SmartRF Studio.

    I would also read the MARCSTATE status register to verify that the chip is in RX mode (value 0x0D).

  • Ok thanks and i don't change my CC2500 from RF studio ?

    i will try after my day of work thanks!

  • for PKTCTRL it s PKTCTRL0 right ?

  • Yes, it's PKTCTRL0. Sorry about the typo.

  • when i check my register marc stat i got  0x11, i don't know why because just before i send the strobe ox34

    e/ never mind it's ok i have 0x0D! but when i send in tx mod in smartRF studio nothing move in my RSSI register, the value just always change betwneen 228 and 231 in decimal (more often 229,228)

    Their is a certain order to do the initialisation of teh register, because i start from 0x00 to 0x2F but maybe i should buy other ? have you any example?

  • Good, now at least you're seeing that the chip is alive. The RSSI values you're getting correspond to about -84 dBm. I would have expected to see values closer to -110 dBm when there's no-one else transmitting at the same frequency. The values you get could be valid, though. Can you do the same exercise in SmartRF Studio? Use the continuous RX panel and see what RSSI values you get on the same channel. Also make sure you connect an antenna to your board (assuming you're using the CC2500EM) and move it closer/farther away from the transmitter to see if you get different results.

    You can also change the frequency on the receiver/transmitter to see if you get other results for other frequencies (your results could be influenced by other RF sources).

  • i got always -87 db, with or without  signal that is strange (sorry for late answer), when i do the same with smartrf i m about -50 db i think i will try later!, i have set exactly the same frequency, center frency that is strange.

    edit when i put the antenna or not nothing change, close or far same, do i need to wake up the CC2500 with a strobe command ?

  • Yes i confirm i have always 236 in decimal but sometime i have 16, but don't change if i start a signal or not it s alway the same value 

  • Just a small question: What hardware do you use? Do you use the CC2500EM from the kit, or have you built your own board?  If it's your own - did you try to control the CC2500 on that board with Studio via the eval board?

    Can you try the opposite, i.e. set the CC2500 in continuous TX and see if you get anything in Studio? You could further look at the current consumption to see if the current draw corresponds to the operating modes of the radio.

  • i use the CC2500 from the kit. And yes i ahve try to use directly with the software two board and i got something like -45 dB.

    I will try to set in TX, i jsut send the strobe 0x35 right ?

  • OK, Good. I just wanted to get confirmation that your hardware was functional, so no issues with e.g. the crystal or not being able to set the device in one of the active states. Still, try to put it in TX. The strobe command is 0x35.

    It might be a problem with the code you use for reading the RSSI register. Would you mind sharing?

  • i use graphical programation (flowcode) but i can generate the C code, here is it,

    7140.prog.c
    //************************************************************************************
    //**  
    //**  File name:     E:\projet flow\prog.c
    //**  Title:         
    //**  Description:   
    //**  
    //**  Generated by:  Flowcode v5.4.0.0
    //**  Date:          Friday, March 15, 2013 09:11:29
    //**  Licence:       Professional
    //**  Registered to: arnaudusai
    //**  Licence key:   XYF6NC
    //**  
    //**  
    //**  http://www.matrixmultimedia.com
    //**  
    //************************************************************************************
    
    
    #define MX_PIC
    
    #define MX_USES_UINT8 1
    #define MX_USES_SINT16 1
    #define MX_USES_CHAR 0
    #define MX_USES_FLOAT 0
    #define MX_USES_SINT32 0
    #define MX_USES_BOOL 1
    #define MX_USES_UINT16 0
    #define MX_USES_UINT32 0
    //Defines for microcontroller
    #define P16F88
    #define FC_CAL_PIC
    #define MX_ADC
    #define MX_ADC_TYPE_2
    #define MX_ADC_BITS_10
    #define MX_EE
    #define MX_EE_TYPE2
    #define MX_EE_SIZE 256
    #define MX_SPI_1
    #define MX_SPI_1_MISO_PORT portb
    #define MX_SPI_1_MISO_TRIS trisb
    #define MX_SPI_1_MISO_PIN 1
    #define MX_SPI_1_MOSI_PORT portb
    #define MX_SPI_1_MOSI_TRIS trisb
    #define MX_SPI_1_MOSI_PIN 2
    #define MX_SPI_1_CLK_PORT portb
    #define MX_SPI_1_CLK_TRIS trisb
    #define MX_SPI_1_CLK_PIN 4
    #define MX_SPI_1_SS_PORT portb
    #define MX_SPI_1_SS_TRIS trisb
    #define MX_UART_1
    #define MX_UART_1_TX_PORT portb
    #define MX_UART_1_TX_TRIS trisb
    #define MX_UART_1_TX_PIN 5
    #define MX_UART_1_RX_PORT portb
    #define MX_UART_1_RX_TRIS trisb
    #define MX_UART_1_RX_PIN 2
    #define MX_I2C
    #define MX_I2C_1
    #define MX_I2C_1_SDA_PORT portb
    #define MX_I2C_1_SDA_TRIS trisb
    #define MX_I2C_1_SDA_PIN 1
    #define MX_I2C_1_SCL_PORT portb
    #define MX_I2C_1_SCL_TRIS trisb
    #define MX_I2C_1_SCL_PIN 4
    #define MX_PWM
    #define MX_PWM_CNT 1
    #define MX_PWM_PSCA1
    #define MX_PWM_PSCA4
    #define MX_PWM_PSCA16
    #define MX_PWM_1_PORT portb
    #define MX_PWM_1_TRIS trisb
    #define MX_PWM_1_PIN 0
    #define MX_PWM_1_PORT_A portb
    #define MX_PWM_1_TRIS_A trisb
    #define MX_PWM_1_PIN_A 3
    
    //Functions
    #define MX_CLK_SPEED 19660800
    #ifdef _BOOSTC
    #include <system.h>
    #endif
    #ifdef HI_TECH_C
    #include <pic.h>
    #endif
    
    //Configuration data
    #ifdef _BOOSTC
    #pragma DATA 0x2007, 0x3f62
    #endif
    #ifdef HI_TECH_C
    __CONFIG(0x3f62);
    #endif
    #ifdef _BOOSTC
    #pragma DATA 0x2008, 0x3ffe
    #endif
    #ifdef HI_TECH_C
    __CONFIG(0x3ffe);
    #endif
    
    //Internal functions
    #include "C:\Program Files (x86)\Flowcode\v5\FCD\internals.c"
    
    //Macro function declarations
    void FCM_SPI_READ(MX_UINT8 FCL_ADRESS);
    void FCM_SPI_WRITE(MX_UINT8 FCL_ADRESS, MX_UINT8 FCL_DATA);
    void FCM_Initialisation();
    void FCM_Affichage_READ();
    void FCM_Rx_mode();
    void FCM_TEST();
    
    
    //Variable declarations
    #define FCV_TRUE (1)
    #define FCV_FALSE (0)
    MX_UINT8 FCV_READ = (0x0);
    MX_SINT16 FCV_RSSI = (0);
    
    
    
    
    //SPI_Legacy(0): //Defines:
    
    /**** Macro Substitutions ****
    a = Unique Ref
    b = SPI Channel
    c = MOSI Pin
    d = MOSI Port
    e = MISO Pin
    f = MISO Port
    g = SCK Pin
    h = SCK Port
    i = Clock Polarity + Clock Phase + Data Sample Phase
    j = SPI Prescaler
    k = SPI Postscaler
    l = DAC Enable Pin
    m = DAC Enable Port
    n = FRAM Enable Pin
    o = FRAM Enable Port
    ******************************/
    
    //Bus Mode - Bit0=CKP=CPOL, Bit1=CKE=!CPHA, Bit2=CSMP
    //CKP=CPOL - Clock Polarity - Idle State of the clock 0=0, 1=1
    //CKE=CPHA - Clock Phase - Clock Edge 0=leading edge, 1=trailing edge
    //CSMP - Input Data Bit Sample Phase
    //CRAT - SPI Clock Rate 0=1/4, 1=1/16, 2=1/64
    
    // There are 4 SPI clock modes as follows:
    //
    // SPI Mode | CKP (CPOL) | CKE (CPHA) | BMODE | Explanation
    //----------+------------+--------------------+------------------------------------------------
    //  1 (0,1) |  0   (0)   |  0   (1)   | xx00  | idle low;  data out on falling/trailing edge
    //  3 (1,1) |  1   (1)   |  0   (1)   | xx01  | idle high; data out on rising/trailing edge
    //  0 (0,0) |  0   (0)   |  1   (0)   | xx10  | idle low;  data out on rising/leading edge
    //  2 (1,0) |  1   (1)   |  1   (0)   | xx11  | idle high; data out on falling/leading edge
    //----------+------------+---------------------------------------------------------------------
    //
    // So:
    //     BMODE & 0x01 = CKP =  CPOL
    //     BMODE & 0x02 = CKE = !CPHA
    
    //Definitions for CS control lines
    #define SPI_1_MX_SPI_LEGACY_DAC_PIN		7
    #define SPI_1_MX_SPI_LEGACY_DAC_PORT		porta
    #define SPI_1_MX_SPI_LEGACY_DAC_TRIS		trisa
    #define SPI_1_MX_SPI_LEGACY_FRAM_PIN		6
    #define SPI_1_MX_SPI_LEGACY_FRAM_PORT		porta
    #define SPI_1_MX_SPI_LEGACY_FRAM_TRIS		trisa
    
    // Another Fix for SPI clock mode (component outputs the wrong info, so fixed by xor)
    #define SPI_1_MX_SPI_BMODE					(5 ^ 0x07)
    
    //Definitions for SPI slot allocation
    #ifndef	MX_SPI_REF1
    	#define MX_SPI_REF1
    	#define SPI_1_MX_SPI_UREF			1
    	#define MX_SPI_CHANNEL_1		0
    	#define MX_SPI_MOSI_PIN_1		0
    	#define MX_SPI_MOSI_PORT_1		porta
    	#define MX_SPI_MOSI_TRIS_1		trisa
    	#define MX_SPI_MISO_PIN_1		1
    	#define MX_SPI_MISO_PORT_1		porta
    	#define MX_SPI_MISO_TRIS_1		trisa
    	#define MX_SPI_SCK_PIN_1		2
    	#define MX_SPI_SCK_PORT_1		porta
    	#define MX_SPI_SCK_TRIS_1		trisa
    	#define MX_SPI_CS_PIN_1			0
    	#define MX_SPI_CS_PORT_1		0
    	#define MX_SPI_BMODE_1			SPI_1_MX_SPI_BMODE
    	#define MX_SPI_PR_SCALE_1		4
    	#define MX_SPI_PO_SCALE_1		0
    	#define MX_SPI_INT_1			0
    #else
     #ifndef	MX_SPI_REF2
    	#define MX_SPI_REF2
    	#define SPI_1_MX_SPI_UREF			2
    	#define MX_SPI_CHANNEL_2		0
    	#define MX_SPI_MOSI_PIN_2		0
    	#define MX_SPI_MOSI_PORT_2		porta
    	#define MX_SPI_MOSI_TRIS_2		trisa
    	#define MX_SPI_MISO_PIN_2		1
    	#define MX_SPI_MISO_PORT_2		porta
    	#define MX_SPI_MISO_TRIS_2		trisa
    	#define MX_SPI_SCK_PIN_2		2
    	#define MX_SPI_SCK_PORT_2		porta
    	#define MX_SPI_SCK_TRIS_2		trisa
    	#define MX_SPI_CS_PIN_2			0
    	#define MX_SPI_CS_PORT_2		0
    	#define MX_SPI_BMODE_2			SPI_1_MX_SPI_BMODE
    	#define MX_SPI_PR_SCALE_2		4
    	#define MX_SPI_PO_SCALE_2		0
    	#define MX_SPI_INT_2			0
     #else
      #ifndef	MX_SPI_REF3
    	#define MX_SPI_REF3
    	#define SPI_1_MX_SPI_UREF			3
    	#define MX_SPI_CHANNEL_3		0
    	#define MX_SPI_MOSI_PIN_3		0
    	#define MX_SPI_MOSI_PORT_3		porta
    	#define MX_SPI_MOSI_TRIS_3		trisa
    	#define MX_SPI_MISO_PIN_3		1
    	#define MX_SPI_MISO_PORT_3		porta
    	#define MX_SPI_MISO_TRIS_3		trisa
    	#define MX_SPI_SCK_PIN_3		2
    	#define MX_SPI_SCK_PORT_3		porta
    	#define MX_SPI_SCK_TRIS_3		trisa
    	#define MX_SPI_CS_PIN_3			0
    	#define MX_SPI_CS_PORT_3		0
    	#define MX_SPI_BMODE_3			SPI_1_MX_SPI_BMODE
    	#define MX_SPI_PR_SCALE_3		4
    	#define MX_SPI_PO_SCALE_3		0
    	#define MX_SPI_INT_3			0
      #else
       #ifndef	MX_SPI_REF4
    	#define MX_SPI_REF4
    	#define SPI_1_MX_SPI_UREF			4
    	#define MX_SPI_CHANNEL_4		0
    	#define MX_SPI_MOSI_PIN_4		0
    	#define MX_SPI_MOSI_PORT_4		porta
    	#define MX_SPI_MOSI_TRIS_4		trisa
    	#define MX_SPI_MISO_PIN_4		1
    	#define MX_SPI_MISO_PORT_4		porta
    	#define MX_SPI_MISO_TRIS_4		trisa
    	#define MX_SPI_SCK_PIN_4		2
    	#define MX_SPI_SCK_PORT_4		porta
    	#define MX_SPI_SCK_TRIS_4		trisa
    	#define MX_SPI_CS_PIN_4			0
    	#define MX_SPI_CS_PORT_4		0
    	#define MX_SPI_BMODE_4			SPI_1_MX_SPI_BMODE
    	#define MX_SPI_PR_SCALE_4		4
    	#define MX_SPI_PO_SCALE_4		0
    	#define MX_SPI_INT_4			0
       #endif
      #endif
     #endif
    #endif
    
    #define SPI_1_SPI_Master_Init		CAL_APPEND(FC_CAL_SPI_Master_Init_, SPI_1_MX_SPI_UREF)
    #define SPI_1_SPI_Master_Uninit	CAL_APPEND(FC_CAL_SPI_Master_Uninit_, SPI_1_MX_SPI_UREF)
    #define SPI_1_SPI_Master_Byte		CAL_APPEND(FC_CAL_SPI_Master_Byte_, SPI_1_MX_SPI_UREF)
    
    extern void SPI_1_SPI_Master_Init ();
    extern void SPI_1_SPI_Master_Uninit ();
    extern MX_UINT8 SPI_1_SPI_Master_Byte (MX_UINT8 DataOut);
    
    //FRAM commands
    #define FRAM_WREN  	6
    #define FRAM_WRDI  	4
    #define FRAM_RDSR  	5
    #define FRAM_WRSR  	1
    #define FRAM_READ  	3
    #define FRAM_WRITE 	2
    
    
    
    
    //SPI_Legacy(0): //Macro function declarations
    
    void FCD_SPI_Legacy0_SPI_Init();
    void FCD_SPI_Legacy0_SPI_Uninit();
    void FCD_SPI_Legacy0_SPI_Send_Char(MX_UINT8 Char);
    void FCD_SPI_Legacy0_SPI_Send_String(MX_STRING String, MX_UINT8 MSZ_String);
    MX_UINT8 FCD_SPI_Legacy0_SPI_Get_Char();
    void FCD_SPI_Legacy0_SPI_Get_String(MX_CHAR* FCR_RETVAL, MX_UINT8 FCR_RETVAL_SIZE, MX_UINT8 NumBytes);
    void FCD_SPI_Legacy0_DAC_Send_Char(MX_UINT8 Char);
    void FCD_SPI_Legacy0_NVM_Send_Char(MX_UINT8 hi_addr, MX_UINT8 lo_addr, MX_UINT8 Char);
    MX_UINT8 FCD_SPI_Legacy0_NVM_Get_Char(MX_UINT8 hi_addr, MX_UINT8 lo_addr);
    MX_UINT8 FCD_SPI_Legacy0_FramOutput(MX_UINT8 Char);
    void FCD_SPI_Legacy0_EnableFRAM();
    void FCD_SPI_Legacy0_DisableFRAM();
    
    
    //LCDDisplay(0): //Defines:
    
    /**** Macro Substitutions ****
    a = Unique Component Reference Number
    b = D1 Port Letter
    c = D2 Port Letter
    d = D3 Port Letter
    e = D4 Port Letter
    f = RS Port Letter
    g = E Port Letter
    h = Data 1_Pin
    i = Data 2 Pin
    j = Data 3 Pin
    k = Data 4 Pin
    l = RS Pin
    m = Enable Pin
    n = Row Count
    o = Column Count
    ******************************/
    
    	//component connections
    	//Port pin lat workaround for 8-bit PIC devices running >= 32MHz
    
      #ifdef FC_CAL_PIC
       #if MX_CLK_SPEED >= 32000000
    	#define LCD_2__PORT0    latb
    	#define LCD_2__PORT1    latb
    	#define LCD_2__PORT2    latb
    	#define LCD_2__PORT3    latb
    	#define LCD_2__PORT4    latb
    	#define LCD_2__PORT5    latb
       #else
       	#define LCD_2__PORT0    portb
       	#define LCD_2__PORT1    portb
       	#define LCD_2__PORT2    portb
       	#define LCD_2__PORT3    portb
       	#define LCD_2__PORT4    portb
       	#define LCD_2__PORT5    portb
       #endif
      #else
    	#define LCD_2__PORT0    portb
    	#define LCD_2__PORT1    portb
    	#define LCD_2__PORT2    portb
    	#define LCD_2__PORT3    portb
    	#define LCD_2__PORT4    portb
    	#define LCD_2__PORT5    portb
      #endif
    
    	#define LCD_2__TRIS0    trisb
    	#define LCD_2__TRIS1    trisb
    	#define LCD_2__TRIS2    trisb
    	#define LCD_2__TRIS3    trisb
    	#define LCD_2__TRIS4    trisb
    	#define LCD_2__TRIS5    trisb
    	#define LCD_2__BIT0    	0
    	#define LCD_2__BIT1    	1
    	#define LCD_2__BIT2    	2
    	#define LCD_2__BIT3    	3
    	#define LCD_2__RS      	4
    	#define LCD_2__E       	5
    	#define LCD_2__ROWCNT	2
    	#define LCD_2__COLCNT	16
    
    	#ifdef _BOOSTC
    	  #define LCD_2__DELAY   delay_10us(10)
    	#endif
    	#ifdef _C2C_
    	  #define LCD_2__DELAY   delay_us(100)
    	#endif
    	#ifdef HI_TECH_C
    	  #define LCD_2__DELAY   __delay_us(120)
    	#endif
    	#ifndef LCD_2__DELAY
    	  #define LCD_2__DELAY   delay_us(100)
    	#endif
    
    
    
    
    //LCDDisplay(0): //Macro function declarations
    
    void FCD_LCDDisplay0_RawSend(MX_UINT8 in, MX_UINT8 mask);
    void FCD_LCDDisplay0_Start();
    void FCD_LCDDisplay0_Clear();
    void FCD_LCDDisplay0_PrintASCII(MX_UINT8 Character);
    void FCD_LCDDisplay0_Command(MX_UINT8 in);
    void FCD_LCDDisplay0_Cursor(MX_UINT8 x, MX_UINT8 y);
    void FCD_LCDDisplay0_PrintNumber(MX_SINT16 Number);
    void FCD_LCDDisplay0_PrintString(MX_STRING String, MX_UINT8 MSZ_String);
    void FCD_LCDDisplay0_ScrollDisplay(MX_UINT8 Direction, MX_UINT8 Num_Positions);
    void FCD_LCDDisplay0_ClearLine(MX_UINT8 Line);
    void FCD_LCDDisplay0_RAM_Write(MX_UINT8 nIdx, MX_UINT8 d0, MX_UINT8 d1, MX_UINT8 d2, MX_UINT8 d3, MX_UINT8 d4, MX_UINT8 d5, MX_UINT8 d6, MX_UINT8 d7);
    
    
    
    //SPI_Legacy(0): //Macro implementations
    
    
    void FCD_SPI_Legacy0_SPI_Init()
    {
    	
    		//Disable SPI Devices
    		FC_CAL_Bit_High_DDR(SPI_1_MX_SPI_LEGACY_DAC_PORT, SPI_1_MX_SPI_LEGACY_DAC_TRIS, SPI_1_MX_SPI_LEGACY_DAC_PIN);
    		FC_CAL_Bit_High_DDR(SPI_1_MX_SPI_LEGACY_FRAM_PORT, SPI_1_MX_SPI_LEGACY_FRAM_TRIS, SPI_1_MX_SPI_LEGACY_FRAM_PIN);
    
    		//Init SPI
    		SPI_1_SPI_Master_Init();		//Call initialise function
    
    }
    
    void FCD_SPI_Legacy0_SPI_Uninit()
    {
    	
    		//Convert SPI Device Control Lines To Inputs
    		FC_CAL_Bit_In_DDR(SPI_1_MX_SPI_LEGACY_DAC_PORT, SPI_1_MX_SPI_LEGACY_DAC_TRIS, SPI_1_MX_SPI_LEGACY_DAC_PIN);
    		FC_CAL_Bit_In_DDR(SPI_1_MX_SPI_LEGACY_FRAM_PORT, SPI_1_MX_SPI_LEGACY_FRAM_TRIS, SPI_1_MX_SPI_LEGACY_FRAM_PIN);
    
    		//Uninit SPI
    		SPI_1_SPI_Master_Uninit();		//Call uninitialise function
    
    }
    
    void FCD_SPI_Legacy0_SPI_Send_Char(MX_UINT8 Char)
    {
    	
    		SPI_1_SPI_Master_Byte(Char);
    
    }
    
    void FCD_SPI_Legacy0_SPI_Send_String(MX_STRING String, MX_UINT8 MSZ_String)
    {
    	
    		MX_UINT8 idx;
    		for(idx = 0; idx < MSZ_String; idx++)
    		{
    			if (String[idx] == 0)				//End of string data?
    				break;
    
    			SPI_1_SPI_Master_Byte(String[idx]);
    		}
    
    }
    
    MX_UINT8 FCD_SPI_Legacy0_SPI_Get_Char()
    {
    	
    		MX_UINT8 retVal = 0;
    
    		retVal = SPI_1_SPI_Master_Byte(0xFF);
    
    		return (retVal);
    
    }
    
    void FCD_SPI_Legacy0_SPI_Get_String(MX_CHAR* FCR_RETVAL, MX_UINT8 FCR_RETVAL_SIZE, MX_UINT8 NumBytes)
    {
    		MX_UINT8 idx;
    
    		if (NumBytes > FCR_RETVAL_SIZE)
    			NumBytes = FCR_RETVAL_SIZE;
    
    		for (idx = 0; idx < NumBytes; idx++)
    		{
    			FCR_RETVAL[idx] = SPI_1_SPI_Master_Byte(0xFF);		//Collect incoming data byte
    		}
    
    		if (idx < FCR_RETVAL_SIZE)
    			FCR_RETVAL[idx] = 0;					//Terminate string if string variable is longer then expected data
    
    }
    
    void FCD_SPI_Legacy0_DAC_Send_Char(MX_UINT8 Char)
    {
    	
    		MX_UINT8 dac_val;
    
    		FC_CAL_Bit_Low(SPI_1_MX_SPI_LEGACY_DAC_PORT, SPI_1_MX_SPI_LEGACY_DAC_PIN);		//enable dac
    
    		dac_val = (Char & 0xF0) >> 4;
    		SPI_1_SPI_Master_Byte(dac_val);
    
    		dac_val = (Char & 0x0F) << 4;
    		SPI_1_SPI_Master_Byte(dac_val);
    
    		FC_CAL_Bit_High(SPI_1_MX_SPI_LEGACY_DAC_PORT, SPI_1_MX_SPI_LEGACY_DAC_PIN);		//disable dac
    
    }
    
    void FCD_SPI_Legacy0_NVM_Send_Char(MX_UINT8 hi_addr, MX_UINT8 lo_addr, MX_UINT8 Char)
    {
    	
    		//enable writes
    		FCD_SPI_Legacy0_EnableFRAM();
    		FCD_SPI_Legacy0_FramOutput(FRAM_WREN);
    		FCD_SPI_Legacy0_DisableFRAM();
    
    		//send write-fram command, address and data
    		FCD_SPI_Legacy0_EnableFRAM();
    		FCD_SPI_Legacy0_FramOutput(FRAM_WRITE);
    		FCD_SPI_Legacy0_FramOutput(hi_addr);
    		FCD_SPI_Legacy0_FramOutput(lo_addr);
    		FCD_SPI_Legacy0_FramOutput(Char);
    		FCD_SPI_Legacy0_DisableFRAM();
    
    }
    
    MX_UINT8 FCD_SPI_Legacy0_NVM_Get_Char(MX_UINT8 hi_addr, MX_UINT8 lo_addr)
    {
    	
    		MX_UINT8 retVal;
    
    		FCD_SPI_Legacy0_EnableFRAM();
    
    		//send read-fram command and address
    		FCD_SPI_Legacy0_FramOutput(FRAM_READ);
    		FCD_SPI_Legacy0_FramOutput(hi_addr);
    		FCD_SPI_Legacy0_FramOutput(lo_addr);
    
    		//read the data
    		retVal = FCD_SPI_Legacy0_FramOutput(0x5A);  	//don't care byte of 0x5A
    
    		FCD_SPI_Legacy0_DisableFRAM();
    
    		return(retVal);
    
    }
    
    MX_UINT8 FCD_SPI_Legacy0_FramOutput(MX_UINT8 Char)
    {
    	
    		MX_UINT8 retVal = 0;
    		retVal = SPI_1_SPI_Master_Byte(Char);
    		return (retVal);
    
    }
    
    void FCD_SPI_Legacy0_EnableFRAM()
    {
    	
    		FC_CAL_Bit_Low(SPI_1_MX_SPI_LEGACY_FRAM_PORT, SPI_1_MX_SPI_LEGACY_FRAM_PIN);
    
    }
    
    void FCD_SPI_Legacy0_DisableFRAM()
    {
    	
    		FC_CAL_Bit_High(SPI_1_MX_SPI_LEGACY_FRAM_PORT, SPI_1_MX_SPI_LEGACY_FRAM_PIN);
    
    }
    
    
    
    //LCDDisplay(0): //Macro implementations
    
    
    void FCD_LCDDisplay0_RawSend(MX_UINT8 in, MX_UINT8 mask)
    {
    	
    		MX_UINT8 pt;
    
    		FC_CAL_Bit_Low(LCD_2__PORT0, LCD_2__BIT0);
    		FC_CAL_Bit_Low(LCD_2__PORT1, LCD_2__BIT1);
    		FC_CAL_Bit_Low(LCD_2__PORT2, LCD_2__BIT2);
    		FC_CAL_Bit_Low(LCD_2__PORT3, LCD_2__BIT3);
    		FC_CAL_Bit_Low(LCD_2__PORT4, LCD_2__RS);
    		FC_CAL_Bit_Low(LCD_2__PORT5, LCD_2__E);
    		pt = ((in >> 4) & 0x0f);
    		if (pt & 0x01)
    		    FC_CAL_Bit_High(LCD_2__PORT0, LCD_2__BIT0);
    		if (pt & 0x02)
    		    FC_CAL_Bit_High(LCD_2__PORT1, LCD_2__BIT1);
    		if (pt & 0x04)
    		    FC_CAL_Bit_High(LCD_2__PORT2, LCD_2__BIT2);
    		if (pt & 0x08)
    		    FC_CAL_Bit_High(LCD_2__PORT3, LCD_2__BIT3);
    		if (mask)
    		    FC_CAL_Bit_High(LCD_2__PORT4, LCD_2__RS);
    		LCD_2__DELAY;
    		FC_CAL_Bit_High (LCD_2__PORT5, LCD_2__E);
    		LCD_2__DELAY;
    		FC_CAL_Bit_Low (LCD_2__PORT5, LCD_2__E);
    		pt = (in & 0x0f);
    		LCD_2__DELAY;
    		FC_CAL_Bit_Low(LCD_2__PORT0, LCD_2__BIT0);
    		FC_CAL_Bit_Low(LCD_2__PORT1, LCD_2__BIT1);
    		FC_CAL_Bit_Low(LCD_2__PORT2, LCD_2__BIT2);
    		FC_CAL_Bit_Low(LCD_2__PORT3, LCD_2__BIT3);
    		FC_CAL_Bit_Low(LCD_2__PORT4, LCD_2__RS);
    		FC_CAL_Bit_Low(LCD_2__PORT5, LCD_2__E);
    		if (pt & 0x01)
    		    FC_CAL_Bit_High(LCD_2__PORT0, LCD_2__BIT0);
    		if (pt & 0x02)
    		    FC_CAL_Bit_High(LCD_2__PORT1, LCD_2__BIT1);
    		if (pt & 0x04)
    		    FC_CAL_Bit_High(LCD_2__PORT2, LCD_2__BIT2);
    		if (pt & 0x08)
    		    FC_CAL_Bit_High(LCD_2__PORT3, LCD_2__BIT3);
    		if (mask)
    		    FC_CAL_Bit_High(LCD_2__PORT4, LCD_2__RS);
    		LCD_2__DELAY;
    		FC_CAL_Bit_High (LCD_2__PORT5, LCD_2__E);
    		LCD_2__DELAY;
    		FC_CAL_Bit_Low (LCD_2__PORT5, LCD_2__E);
    		LCD_2__DELAY;
    
    }
    
    void FCD_LCDDisplay0_Start()
    {
    	
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT0, LCD_2__TRIS0, LCD_2__BIT0);
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT1, LCD_2__TRIS1, LCD_2__BIT1);
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT2, LCD_2__TRIS2, LCD_2__BIT2);
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT3, LCD_2__TRIS3, LCD_2__BIT3);
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT4, LCD_2__TRIS4, LCD_2__RS);
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT5, LCD_2__TRIS5, LCD_2__E);
    
    		Wdt_Delay_Ms(12);
    
    		FCD_LCDDisplay0_RawSend(0x33, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x33, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x32, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x2c, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x06, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x0c, 0);
    		Wdt_Delay_Ms(2);
    
    		//clear the display
    		FCD_LCDDisplay0_RawSend(0x01, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x02, 0);
    		Wdt_Delay_Ms(2);
    
    }
    
    void FCD_LCDDisplay0_Clear()
    {
    	
    		FCD_LCDDisplay0_RawSend(0x01, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x02, 0);
    		Wdt_Delay_Ms(2);
    
    }
    
    void FCD_LCDDisplay0_PrintASCII(MX_UINT8 Character)
    {
    	
    		FCD_LCDDisplay0_RawSend(Character, 0x10);
    
    }
    
    void FCD_LCDDisplay0_Command(MX_UINT8 in)
    {
    	
    		FCD_LCDDisplay0_RawSend(in, 0);
    		Wdt_Delay_Ms(2);
    
    }
    
    void FCD_LCDDisplay0_Cursor(MX_UINT8 x, MX_UINT8 y)
    {
    	
    	  #if (LCD_2__ROWCNT == 1)
    	    y=0x80;
    	  #endif
    
    	  #if (LCD_2__ROWCNT == 2)
    		if (y==0)
    			y=0x80;
    		else
    			y=0xc0;
    	  #endif
    
    	  #if (LCD_2__ROWCNT == 4)
    		if (y==0)
    			y=0x80;
    		else if (y==1)
    			y=0xc0;
    
    		#if (LCD_2__COLCNT == 16)
    			else if (y==2)
    				y=0x90;
    			else
    				y=0xd0;
    		#endif
    
    		#if (LCD_2__COLCNT == 20)
    			else if (y==2)
    				y=0x94;
    			else
    				y=0xd4;
    		#endif
    	  #endif
    
    		FCD_LCDDisplay0_RawSend(y+x, 0);
    		Wdt_Delay_Ms(2);
    
    }
    
    void FCD_LCDDisplay0_PrintNumber(MX_SINT16 Number)
    {
    	
    		MX_SINT16 tmp_int;
    		MX_UINT8 tmp_byte;
    
    		if (Number < 0)
    		{
    			FCD_LCDDisplay0_RawSend('-', 0x10);
    			Number = 0 - Number;
    		}
    
    		tmp_int = Number;
    		if (Number >= 10000)
    		{
    			tmp_byte = tmp_int / 10000;
    			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);
    
    			while (tmp_byte > 0)
    			{
    				tmp_int = tmp_int - 10000;
    				tmp_byte--;
    			}
    		}
    		if (Number >= 1000)
    		{
    			tmp_byte = tmp_int / 1000;
    			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);
    
    			while (tmp_byte > 0)
    			{
    				tmp_int = tmp_int - 1000;
    				tmp_byte--;
    			}
    		}
    		if (Number >= 100)
    		{
    			tmp_byte = tmp_int / 100;
    			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);
    
    			while (tmp_byte > 0)
    			{
    				tmp_int = tmp_int - 100;
    				tmp_byte--;
    			}
    		}
    		if (Number >= 10)
    		{
    			tmp_byte = tmp_int / 10;
    			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);
    
    			while (tmp_byte > 0)
    			{
    				tmp_int = tmp_int - 10;
    				tmp_byte--;
    			}
    		}
    		FCD_LCDDisplay0_RawSend('0' + tmp_int, 0x10);
    
    }
    
    void FCD_LCDDisplay0_PrintString(MX_STRING String, MX_UINT8 MSZ_String)
    {
    	
    		MX_UINT8 idx = 0;
    
    		for (idx=0; idx<MSZ_String; idx++)
    		{
    			if (String[idx] == 0)
    			{
    				break;
    			}
    			FCD_LCDDisplay0_RawSend(String[idx], 0x10);
    		}
    
    }
    
    void FCD_LCDDisplay0_ScrollDisplay(MX_UINT8 Direction, MX_UINT8 Num_Positions)
    {
    	
    		MX_UINT8 cmd = 0;
    		MX_UINT8 count;
    
    		//Choose the direction
    		switch (Direction)
    		{
    			case 0:
    			case 'l':
    			case 'L':
    
    				cmd = 0x18;
    				break;
    
    			case 1:
    			case 'r':
    			case 'R':
    
    				cmd = 0x1C;
    				break;
    
    			default:
    				break;
    		}
    
    		//If direction accepted then scroll the specified amount
    		if (cmd)
    		{
    			for (count = 0; count < Num_Positions; count++)
    				FCD_LCDDisplay0_Command(cmd);
    		}
    
    }
    
    void FCD_LCDDisplay0_ClearLine(MX_UINT8 Line)
    {
    	
    		MX_UINT8 count;
    		MX_UINT8 rowcount;
    
    		//Define number of columns per line
    		#if (LCD_2__ROWCNT == 1)
    			rowcount=80;
    		#endif
    
    		#if (LCD_2__ROWCNT == 2)
    			rowcount=40;
    		#endif
    
    		#if (LCD_2__ROWCNT == 4)
    			#if (LCD_2__COLCNT == 16)
    				rowcount=16;
    			#endif
    			#if (LCD_2__COLCNT == 20)
    				rowcount=20;
    			#endif
    		#endif
    
    		//Start at beginning of the line
    		FCD_LCDDisplay0_Cursor (0, Line);
    
    		//Send out spaces to clear line
    		for (count = 0; count < rowcount; count++)
    			FCD_LCDDisplay0_RawSend(' ', 0x10);
    
    		//Move back to the beginning of the line.
    		FCD_LCDDisplay0_Cursor (0, Line);
    
    }
    
    void FCD_LCDDisplay0_RAM_Write(MX_UINT8 nIdx, MX_UINT8 d0, MX_UINT8 d1, MX_UINT8 d2, MX_UINT8 d3, MX_UINT8 d4, MX_UINT8 d5, MX_UINT8 d6, MX_UINT8 d7)
    {
    	   //set CGRAM address
    
    	   FCD_LCDDisplay0_RawSend(64 + (nIdx << 3), 0);
    	   delay_ms(2);
    
    	   //write CGRAM data
    	   FCD_LCDDisplay0_RawSend(d0, 0x10);
    	   FCD_LCDDisplay0_RawSend(d1, 0x10);
    	   FCD_LCDDisplay0_RawSend(d2, 0x10);
    	   FCD_LCDDisplay0_RawSend(d3, 0x10);
    	   FCD_LCDDisplay0_RawSend(d4, 0x10);
    	   FCD_LCDDisplay0_RawSend(d5, 0x10);
    	   FCD_LCDDisplay0_RawSend(d6, 0x10);
    	   FCD_LCDDisplay0_RawSend(d7, 0x10);
    
    	   //Clear the display
    	   FCD_LCDDisplay0_RawSend(0x01, 0);
    	   delay_ms(2);
    	   FCD_LCDDisplay0_RawSend(0x02, 0);
    	   delay_ms(2);
    
    }
    
    #include "C:\Program Files (x86)\Flowcode\v5\CAL\includes.c"
    
    //Macro implementations
    
    
    void FCM_SPI_READ(MX_UINT8 FCL_ADRESS)
    {
    
    	//SS enable
    	//Output: 0 -> A3
    	trisa = trisa & 0xF7;
    	if ((0))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Register
    	//Call Component Macro: SPI_Send_Char(.Adress)
    	FCD_SPI_Legacy0_SPI_Send_Char(FCL_ADRESS);
    
    	//Call Component Macro
    	//Call Component Macro: READ=SPI_Get_Char()
    	FCV_READ = FCD_SPI_Legacy0_SPI_Get_Char();
    
    	//SS disable
    	//Output: 1 -> A3
    	trisa = trisa & 0xF7;
    	if ((1))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Delay
    	//Delay: 100 ms
    	delay_ms(100);
    
    }
    
    
    void FCM_SPI_WRITE(MX_UINT8 FCL_ADRESS, MX_UINT8 FCL_DATA)
    {
    
    	//SS enabled
    	//Output: 0 -> A3
    	trisa = trisa & 0xF7;
    	if ((0))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Register
    	//Call Component Macro: SPI_Send_Char(.adress)
    	FCD_SPI_Legacy0_SPI_Send_Char(FCL_ADRESS);
    
    	//Data
    	//Call Component Macro: SPI_Send_Char(.Data)
    	FCD_SPI_Legacy0_SPI_Send_Char(FCL_DATA);
    
    	//SS disabled
    	//Output: 1 -> A3
    	trisa = trisa & 0xF7;
    	if ((1))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Delay
    	//Delay: 95 ms
    	delay_ms(95);
    
    }
    
    
    void FCM_Initialisation()
    {
    
    	//MCSM0
    	//Call Macro: SPI_WRITE(0x18, 0x18)
    	FCM_SPI_WRITE(0x18, 0x18);
    
    	//MCSM1
    	//Call Macro: SPI_WRITE(0x17, 0x30)
    	FCM_SPI_WRITE(0x17, 0x30);
    
    	//MCSM2
    	//Call Macro: SPI_WRITE(0x16, 0x07)
    	FCM_SPI_WRITE(0x16, 0x07);
    
    	//FSCTRL1
    	//Call Macro: SPI_WRITE(0X0B, 0x0A)
    	FCM_SPI_WRITE(0X0B, 0x0A);
    
    	//FSCTRL0
    	//Call Macro: SPI_WRITE(0x0C, 0x00)
    	FCM_SPI_WRITE(0x0C, 0x00);
    
    	//FREQ2
    	//Call Macro: SPI_WRITE(0x0D, 0x5D)
    	FCM_SPI_WRITE(0x0D, 0x5D);
    
    	//FREQ1
    	//Call Macro: SPI_WRITE(0x0E, 0x44)
    	FCM_SPI_WRITE(0x0E, 0x44);
    
    	//FREQ0
    	//Call Macro: SPI_WRITE(0x0F, 0xEC)
    	FCM_SPI_WRITE(0x0F, 0xEC);
    
    	//MDMCFG4
    	//Call Macro: SPI_WRITE(0x10, 0x2D)
    	FCM_SPI_WRITE(0x10, 0x2D);
    
    	//MDMCFG3
    	//Call Macro: SPI_WRITE(0x11, 0x3B)
    	FCM_SPI_WRITE(0x11, 0x3B);
    
    	//MDMCFG2
    	//Call Macro: SPI_WRITE(0x12, 0xF0)
    	FCM_SPI_WRITE(0x12, 0xF0);
    
    	//MDMCFG1
    	//Call Macro: SPI_WRITE(0x13, 0x23)
    	FCM_SPI_WRITE(0x13, 0x23);
    
    	//MDMCFG0
    	//Call Macro: SPI_WRITE(0x14, 0x3B)
    	FCM_SPI_WRITE(0x14, 0x3B);
    
    	//CHANNR
    	//Call Macro: SPI_WRITE(0x0A, 0x00)
    	FCM_SPI_WRITE(0x0A, 0x00);
    
    	//DEVIATN
    	//Call Macro: SPI_WRITE(0x15, 0x01)
    	FCM_SPI_WRITE(0x15, 0x01);
    
    	//FREND0
    	//Call Macro: SPI_WRITE(0x22, 0X10)
    	FCM_SPI_WRITE(0x22, 0X10);
    
    	//FREND1
    	//Call Macro: SPI_WRITE(0x21, 0xB6)
    	FCM_SPI_WRITE(0x21, 0xB6);
    
    	//FOCCFG
    	//Call Macro: SPI_WRITE(0x19, 0x1D)
    	FCM_SPI_WRITE(0x19, 0x1D);
    
    	//BSCFG
    	//Call Macro: SPI_WRITE(0x1A, 0x1C)
    	FCM_SPI_WRITE(0x1A, 0x1C);
    
    	//AGCCTRL2
    	//Call Macro: SPI_WRITE(0x1B, 0xC7)
    	FCM_SPI_WRITE(0x1B, 0xC7);
    
    	//AGCCTRL1
    	//Call Macro: SPI_WRITE(0x1C, 0x00)
    	FCM_SPI_WRITE(0x1C, 0x00);
    
    	//AGCCTRL0
    	//Call Macro: SPI_WRITE(0x1D, 0xB0)
    	FCM_SPI_WRITE(0x1D, 0xB0);
    
    	//FSCAL3
    	//Call Macro: SPI_WRITE(0x23, 0xEA)
    	FCM_SPI_WRITE(0x23, 0xEA);
    
    	//FSCAL2
    	//Call Macro: SPI_WRITE(0x24, 0x0A)
    	FCM_SPI_WRITE(0x24, 0x0A);
    
    	//FSCAL1
    	//Call Macro: SPI_WRITE(0x25, 0x00)
    	FCM_SPI_WRITE(0x25, 0x00);
    
    	//FSCAL0
    	//Call Macro: SPI_WRITE(0x26, 0x11)
    	FCM_SPI_WRITE(0x26, 0x11);
    
    	//FSTEST
    	//Call Macro: SPI_WRITE(0x29, 0x59)
    	FCM_SPI_WRITE(0x29, 0x59);
    
    	//TEST2
    	//Call Macro: SPI_WRITE(0x2C, 0x88)
    	FCM_SPI_WRITE(0x2C, 0x88);
    
    	//TEST1
    	//Call Macro: SPI_WRITE(0x2D, 0x31)
    	FCM_SPI_WRITE(0x2D, 0x31);
    
    	//TEST0
    	//Call Macro: SPI_WRITE(0x2E, 0x0B)
    	FCM_SPI_WRITE(0x2E, 0x0B);
    
    	//FIFITHR
    	//Call Macro: SPI_WRITE(0x03, 0x07)
    	FCM_SPI_WRITE(0x03, 0x07);
    
    	//IOCFG2
    	//Call Macro: SPI_WRITE(0x00, 0x0B)
    	FCM_SPI_WRITE(0x00, 0x0B);
    
    	//IOCFG1
    	//Call Macro: SPI_WRITE(0x01, 0x2E)
    	FCM_SPI_WRITE(0x01, 0x2E);
    
    	//IOCFG0
    	//Call Macro: SPI_WRITE(0x02, 0x06)
    	FCM_SPI_WRITE(0x02, 0x06);
    
    	//PKTCTRL1
    	//Call Macro: SPI_WRITE(0x07, 0x04)
    	FCM_SPI_WRITE(0x07, 0x04);
    
    	//PKTCTRL0
    	//Call Macro: SPI_WRITE(0x08, 0x12)
    	FCM_SPI_WRITE(0x08, 0x12);
    
    	//ADDR
    	//Call Macro: SPI_WRITE(0x09, 0x00)
    	FCM_SPI_WRITE(0x09, 0x00);
    
    	//PKTLEN
    	//Call Macro: SPI_WRITE(0x06, 0x3D)
    	FCM_SPI_WRITE(0x06, 0x3D);
    
    	//SYNC1
    	//Call Macro: SPI_WRITE(0x04, 0xD3)
    	FCM_SPI_WRITE(0x04, 0xD3);
    
    	//SYNC0
    	//Call Macro: SPI_WRITE(0x05, 0x91)
    	FCM_SPI_WRITE(0x05, 0x91);
    
    	//WOREVTV1
    	//Call Macro: SPI_WRITE(0x1E, 0x87)
    	FCM_SPI_WRITE(0x1E, 0x87);
    
    	//WOREVTV0
    	//Call Macro: SPI_WRITE(0x1F, 0x6B)
    	FCM_SPI_WRITE(0x1F, 0x6B);
    
    	//WORCTRL
    	//Call Macro: SPI_WRITE(0x20, 0xF8)
    	FCM_SPI_WRITE(0x20, 0xF8);
    
    	//RCCTRL1
    	//Call Macro: SPI_WRITE(0x27, 0x41)
    	FCM_SPI_WRITE(0x27, 0x41);
    
    	//RCCTRL0
    	//Call Macro: SPI_WRITE(0x28, 0x00)
    	FCM_SPI_WRITE(0x28, 0x00);
    
    	//PTEST
    	//Call Macro: SPI_WRITE(0x2A, 0x7F)
    	FCM_SPI_WRITE(0x2A, 0x7F);
    
    	//AGCTEST
    	//Call Macro: SPI_WRITE(0x2B, 0x3C)
    	FCM_SPI_WRITE(0x2B, 0x3C);
    
    }
    
    
    void FCM_Affichage_READ()
    {
    
    	//Call Component Macro
    	//Call Component Macro: Cursor(0, 0)
    	FCD_LCDDisplay0_Cursor(0, 0);
    
    	//Call Component Macro
    	//Call Component Macro: PrintString("READ")
    	FCD_LCDDisplay0_PrintString("READ", 4);
    
    	//Call Component Macro
    	//Call Component Macro: Cursor(5, 0)
    	FCD_LCDDisplay0_Cursor(5, 0);
    
    	//Call Component Macro
    	//Call Component Macro: PrintNumber(READ)
    	FCD_LCDDisplay0_PrintNumber(FCV_READ);
    
    	//Call Component Macro
    	//Call Component Macro: Cursor(0, 1)
    	FCD_LCDDisplay0_Cursor(0, 1);
    
    	//Call Component Macro
    	//Call Component Macro: PrintString("RSSI")
    	FCD_LCDDisplay0_PrintString("RSSI", 4);
    
    	//Call Component Macro
    	//Call Component Macro: Cursor(5, 1)
    	FCD_LCDDisplay0_Cursor(5, 1);
    
    	//Call Component Macro
    	//Call Component Macro: PrintNumber(RSSI)
    	FCD_LCDDisplay0_PrintNumber(FCV_RSSI);
    
    	//Call Component Macro
    	//Call Component Macro: Cursor(9, 1)
    	FCD_LCDDisplay0_Cursor(9, 1);
    
    	//Call Component Macro
    	//Call Component Macro: PrintString("dB")
    	FCD_LCDDisplay0_PrintString("dB", 2);
    
    }
    
    
    void FCM_Rx_mode()
    {
    
    	//SS enabled
    	//Output: 0 -> A3
    	trisa = trisa & 0xF7;
    	if ((0))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Register
    	//Call Component Macro: SPI_Send_Char(0x34)
    	FCD_SPI_Legacy0_SPI_Send_Char(0x34);
    
    	//SS disabled
    	//Output: 1 -> A3
    	trisa = trisa & 0xF7;
    	if ((1))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    }
    
    
    void FCM_TEST()
    {
    
    	//SS enabled
    	//Output: 0 -> A3
    	trisa = trisa & 0xF7;
    	if ((0))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Register
    	//Call Component Macro: SPI_Send_Char(0x38)
    	FCD_SPI_Legacy0_SPI_Send_Char(0x38);
    
    	//SS disabled
    	//Output: 1 -> A3
    	trisa = trisa & 0xF7;
    	if ((1))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    }
    
    
    
    void main()
    {
    	//Initialization
    	ansel = 0;
    	cmcon = 0x07;
    
    
    	//Interrupt initialization code
    	option_reg = 0xC0;
    
    
    	//Call Component Macro
    	//Call Component Macro: SPI_Init()
    	FCD_SPI_Legacy0_SPI_Init();
    
    	//Appel de la Routine Composant
    	//Call Component Macro: Start()
    	FCD_LCDDisplay0_Start();
    
    	//Call Macro
    	//Call Macro: Initialisation()
    	FCM_Initialisation();
    
    	//Call Macro
    	//Call Macro: Rx_mode()
    	FCM_Rx_mode();
    
    	//TEST
    	//Call Macro: TEST()
    	FCM_TEST();
    
    	//Loop
    	//Loop: While 1
    	while (1)
    	{
    
    		//Call Macro
    		//Call Macro: SPI_READ(0xF4)
    		FCM_SPI_READ(0xF4);
    
    		//Call Macro
    		//Call Macro: Affichage_READ()
    		FCM_Affichage_READ();
    
    		//Pause
    		//Delay: 1 s
    		delay_s(1);
    
    		//Appel de la Routine Composant
    		//Call Component Macro: Clear()
    		FCD_LCDDisplay0_Clear();
    
    
    	}
    
    	mainendloop: goto mainendloop;
    }
    
    void MX_INTERRUPT_MACRO(void)
    {
    }
    
    
    
    

  • Thanks. I saw some discrepancies between the registers recommended by Studio and the registers you set in the function called FCM_Initialisation();

    Where do you actually verify that the chip is up and running? You should read out one of the status registers (e.g. the chip id or something) to check that it is running before sending all the config registers.

    And why do you call the function FCM_TEST() after sending the RX strobe? I would remove that.

  • Ok so i will try to read on register before, i will do this in 1 week and don't have acces to the lab, but thanks i will keep update, and if i can't read something what i must do ?

    and where is the discrepancies ? 

    1261.CC2500RXALL.html
    <html><head>
    <style>
    body {background-color:#dde;}
    caption {font-weight:bold; font-size:16px;margin-left:30px}
    th { text-align:left; background-color:#f00; color:#fff}
    table { background-color: #eec; font-size:9px;margin:10px}
    </style>
    </head>
    <body><table border=1 cellpadding=5 cellspacing=0>
    <caption>CC2500 registers</caption>
    <tr><th>Name</th><th>Address</th><th>Value</th>
    <th>Description</th></tr><tr><td>IOCFG2<td>0x0000</td><td>0x0B</td><td>GDO2Output Pin Configuration </td></tr>
    <tr><td>IOCFG0<td>0x0002</td><td>0x0C</td><td>GDO0Output Pin Configuration </td></tr>
    <tr><td>PKTCTRL0<td>0x0008</td><td>0x12</td><td>Packet Automation Control</td></tr>
    <tr><td>FSCTRL1<td>0x000B</td><td>0x08</td><td>Frequency Synthesizer Control </td></tr>
    <tr><td>FREQ2<td>0x000D</td><td>0x5D</td><td>Frequency Control Word, High Byte </td></tr>
    <tr><td>FREQ1<td>0x000E</td><td>0x93</td><td>Frequency Control Word, Middle Byte </td></tr>
    <tr><td>FREQ0<td>0x000F</td><td>0xB1</td><td>Frequency Control Word, Low Byte </td></tr>
    <tr><td>MDMCFG4<td>0x0010</td><td>0x86</td><td>Modem Configuration </td></tr>
    <tr><td>MDMCFG3<td>0x0011</td><td>0x83</td><td>Modem Configuration </td></tr>
    <tr><td>MDMCFG2<td>0x0012</td><td>0x00</td><td>Modem Configuration</td></tr>
    <tr><td>DEVIATN<td>0x0015</td><td>0x44</td><td>Modem Deviation Setting </td></tr>
    <tr><td>MCSM0<td>0x0018</td><td>0x18</td><td>Main Radio Control State Machine Configuration </td></tr>
    <tr><td>FOCCFG<td>0x0019</td><td>0x16</td><td>Frequency Offset Compensation Configuration</td></tr>
    <tr><td>FSCAL1<td>0x0025</td><td>0x00</td><td>Frequency Synthesizer Calibration </td></tr>
    <tr><td>FSCAL0<td>0x0026</td><td>0x11</td><td>Frequency Synthesizer Calibration </td></tr>
    <tr><td>AGCTEST<td>0x002B</td><td>0x3B</td><td>AGC Test </td></tr>
    <tr><td>FREQEST<td>0x0032</td><td>0xFB</td><td>Frequency Offset Estimate from Demodulator </td></tr>
    <tr><td>LQI<td>0x0033</td><td>0x80</td><td>Demodulator Estimate for Link Quality </td></tr>
    <tr><td>RSSI<td>0x0034</td><td>0x23</td><td>Received Signal Strength Indication </td></tr>
    <tr><td>MARCSTATE<td>0x0035</td><td>0x01</td><td>Main Radio Control State Machine State </td></tr>
    <tr><td>PKTSTATUS<td>0x0038</td><td>0xA0</td><td>Current GDOxStatus and Packet Status </td></tr>
    <tr><td>VCO_VC_DAC<td>0x0039</td><td>0xCD</td><td>Current Setting from PLL Calibration Module </td></tr>
    </table>
    </body><html>
    i use this maybe i have forget to unsave after few test it s why their is that i will check 

    edit I have forget to say but  i m really thankfull, thanks to take times to help me!

    So next week or in two week, i will check all my register with the value to see if all value is correct, with the html document i send, and in second time i will read the adress of the component to see if its online i hope after ti s will work

  • When i read my the chip id i get 0, so how i can wake up my chip ?

  • The chip is waken up when you start an SPI transaction by asserting the CS signal. Have you checked that you get valid values from the chip when reading other registers?

  • when i read the register i have set up everything is fine, ok and when i read the chip ID it s ok i obtain 0x80

    here my C 

    5140.lecture.c
    //************************************************************************************
    //**  
    //**  File name:     E:\projet flow\lecture.c
    //**  Title:         
    //**  Description:   
    //**  
    //**  Generated by:  Flowcode v5.4.0.0
    //**  Date:          Thursday, April 04, 2013 13:03:11
    //**  Licence:       Professional
    //**  Registered to: arnaudusai
    //**  Licence key:   XYF6NC
    //**  
    //**  
    //**  http://www.matrixmultimedia.com
    //**  
    //************************************************************************************
    
    
    #define MX_PIC
    
    #define MX_USES_UINT8 1
    #define MX_USES_SINT16 1
    #define MX_USES_CHAR 0
    #define MX_USES_FLOAT 0
    #define MX_USES_SINT32 0
    #define MX_USES_BOOL 1
    #define MX_USES_UINT16 0
    #define MX_USES_UINT32 0
    //D�finir pour microcontr�leur
    #define P16F88
    #define FC_CAL_PIC
    #define MX_ADC
    #define MX_ADC_TYPE_2
    #define MX_ADC_BITS_10
    #define MX_EE
    #define MX_EE_TYPE2
    #define MX_EE_SIZE 256
    #define MX_SPI_1
    #define MX_SPI_1_MISO_PORT portb
    #define MX_SPI_1_MISO_TRIS trisb
    #define MX_SPI_1_MISO_PIN 1
    #define MX_SPI_1_MOSI_PORT portb
    #define MX_SPI_1_MOSI_TRIS trisb
    #define MX_SPI_1_MOSI_PIN 2
    #define MX_SPI_1_CLK_PORT portb
    #define MX_SPI_1_CLK_TRIS trisb
    #define MX_SPI_1_CLK_PIN 4
    #define MX_SPI_1_SS_PORT portb
    #define MX_SPI_1_SS_TRIS trisb
    #define MX_UART_1
    #define MX_UART_1_TX_PORT portb
    #define MX_UART_1_TX_TRIS trisb
    #define MX_UART_1_TX_PIN 5
    #define MX_UART_1_RX_PORT portb
    #define MX_UART_1_RX_TRIS trisb
    #define MX_UART_1_RX_PIN 2
    #define MX_I2C
    #define MX_I2C_1
    #define MX_I2C_1_SDA_PORT portb
    #define MX_I2C_1_SDA_TRIS trisb
    #define MX_I2C_1_SDA_PIN 1
    #define MX_I2C_1_SCL_PORT portb
    #define MX_I2C_1_SCL_TRIS trisb
    #define MX_I2C_1_SCL_PIN 4
    #define MX_PWM
    #define MX_PWM_CNT 1
    #define MX_PWM_PSCA1
    #define MX_PWM_PSCA4
    #define MX_PWM_PSCA16
    #define MX_PWM_1_PORT portb
    #define MX_PWM_1_TRIS trisb
    #define MX_PWM_1_PIN 0
    #define MX_PWM_1_PORT_A portb
    #define MX_PWM_1_TRIS_A trisb
    #define MX_PWM_1_PIN_A 3
    
    //Fonctions
    #define MX_CLK_SPEED 19660800
    #ifdef _BOOSTC
    #include <system.h>
    #endif
    #ifdef HI_TECH_C
    #include <pic.h>
    #endif
    
    //Donn�es de Configuration
    #ifdef _BOOSTC
    #pragma DATA 0x2007, 0x3f62
    #endif
    #ifdef HI_TECH_C
    __CONFIG(0x3f62);
    #endif
    #ifdef _BOOSTC
    #pragma DATA 0x2008, 0x3ffe
    #endif
    #ifdef HI_TECH_C
    __CONFIG(0x3ffe);
    #endif
    
    //Fonctions internes
    #include "C:\Program Files (x86)\Flowcode\v5\FCD\internals.c"
    
    //D�clarations de fonction Macro
    void FCM_SPI_READ(MX_UINT8 FCL_ADRESS);
    void FCM_SPI_WRITE(MX_UINT8 FCL_ADRESS, MX_UINT8 FCL_DATA);
    void FCM_Initialisation();
    void FCM_Affichage_READ();
    void FCM_Rx_mode();
    void FCM_TEST();
    void FCM_Chip_ID_display();
    
    
    //D�clarations de Variable
    #define FCV_TRUE (1)
    #define FCV_FALSE (0)
    MX_UINT8 FCV_READ = (0x0);
    MX_SINT16 FCV_RSSI = (0);
    
    
    
    
    //SPI_Legacy(0): //Defines:
    
    /**** Macro Substitutions ****
    a = Unique Ref
    b = SPI Channel
    c = MOSI Pin
    d = MOSI Port
    e = MISO Pin
    f = MISO Port
    g = SCK Pin
    h = SCK Port
    i = Clock Polarity + Clock Phase + Data Sample Phase
    j = SPI Prescaler
    k = SPI Postscaler
    l = DAC Enable Pin
    m = DAC Enable Port
    n = FRAM Enable Pin
    o = FRAM Enable Port
    ******************************/
    
    //Bus Mode - Bit0=CKP=CPOL, Bit1=CKE=!CPHA, Bit2=CSMP
    //CKP=CPOL - Clock Polarity - Idle State of the clock 0=0, 1=1
    //CKE=CPHA - Clock Phase - Clock Edge 0=leading edge, 1=trailing edge
    //CSMP - Input Data Bit Sample Phase
    //CRAT - SPI Clock Rate 0=1/4, 1=1/16, 2=1/64
    
    // There are 4 SPI clock modes as follows:
    //
    // SPI Mode | CKP (CPOL) | CKE (CPHA) | BMODE | Explanation
    //----------+------------+--------------------+------------------------------------------------
    //  1 (0,1) |  0   (0)   |  0   (1)   | xx00  | idle low;  data out on falling/trailing edge
    //  3 (1,1) |  1   (1)   |  0   (1)   | xx01  | idle high; data out on rising/trailing edge
    //  0 (0,0) |  0   (0)   |  1   (0)   | xx10  | idle low;  data out on rising/leading edge
    //  2 (1,0) |  1   (1)   |  1   (0)   | xx11  | idle high; data out on falling/leading edge
    //----------+------------+---------------------------------------------------------------------
    //
    // So:
    //     BMODE & 0x01 = CKP =  CPOL
    //     BMODE & 0x02 = CKE = !CPHA
    
    //Definitions for CS control lines
    #define SPI_1_MX_SPI_LEGACY_DAC_PIN		7
    #define SPI_1_MX_SPI_LEGACY_DAC_PORT		porta
    #define SPI_1_MX_SPI_LEGACY_DAC_TRIS		trisa
    #define SPI_1_MX_SPI_LEGACY_FRAM_PIN		6
    #define SPI_1_MX_SPI_LEGACY_FRAM_PORT		porta
    #define SPI_1_MX_SPI_LEGACY_FRAM_TRIS		trisa
    
    // Another Fix for SPI clock mode (component outputs the wrong info, so fixed by xor)
    #define SPI_1_MX_SPI_BMODE					(5 ^ 0x07)
    
    //Definitions for SPI slot allocation
    #ifndef	MX_SPI_REF1
    	#define MX_SPI_REF1
    	#define SPI_1_MX_SPI_UREF			1
    	#define MX_SPI_CHANNEL_1		0
    	#define MX_SPI_MOSI_PIN_1		0
    	#define MX_SPI_MOSI_PORT_1		porta
    	#define MX_SPI_MOSI_TRIS_1		trisa
    	#define MX_SPI_MISO_PIN_1		1
    	#define MX_SPI_MISO_PORT_1		porta
    	#define MX_SPI_MISO_TRIS_1		trisa
    	#define MX_SPI_SCK_PIN_1		2
    	#define MX_SPI_SCK_PORT_1		porta
    	#define MX_SPI_SCK_TRIS_1		trisa
    	#define MX_SPI_CS_PIN_1			0
    	#define MX_SPI_CS_PORT_1		0
    	#define MX_SPI_BMODE_1			SPI_1_MX_SPI_BMODE
    	#define MX_SPI_PR_SCALE_1		4
    	#define MX_SPI_PO_SCALE_1		0
    	#define MX_SPI_INT_1			0
    #else
     #ifndef	MX_SPI_REF2
    	#define MX_SPI_REF2
    	#define SPI_1_MX_SPI_UREF			2
    	#define MX_SPI_CHANNEL_2		0
    	#define MX_SPI_MOSI_PIN_2		0
    	#define MX_SPI_MOSI_PORT_2		porta
    	#define MX_SPI_MOSI_TRIS_2		trisa
    	#define MX_SPI_MISO_PIN_2		1
    	#define MX_SPI_MISO_PORT_2		porta
    	#define MX_SPI_MISO_TRIS_2		trisa
    	#define MX_SPI_SCK_PIN_2		2
    	#define MX_SPI_SCK_PORT_2		porta
    	#define MX_SPI_SCK_TRIS_2		trisa
    	#define MX_SPI_CS_PIN_2			0
    	#define MX_SPI_CS_PORT_2		0
    	#define MX_SPI_BMODE_2			SPI_1_MX_SPI_BMODE
    	#define MX_SPI_PR_SCALE_2		4
    	#define MX_SPI_PO_SCALE_2		0
    	#define MX_SPI_INT_2			0
     #else
      #ifndef	MX_SPI_REF3
    	#define MX_SPI_REF3
    	#define SPI_1_MX_SPI_UREF			3
    	#define MX_SPI_CHANNEL_3		0
    	#define MX_SPI_MOSI_PIN_3		0
    	#define MX_SPI_MOSI_PORT_3		porta
    	#define MX_SPI_MOSI_TRIS_3		trisa
    	#define MX_SPI_MISO_PIN_3		1
    	#define MX_SPI_MISO_PORT_3		porta
    	#define MX_SPI_MISO_TRIS_3		trisa
    	#define MX_SPI_SCK_PIN_3		2
    	#define MX_SPI_SCK_PORT_3		porta
    	#define MX_SPI_SCK_TRIS_3		trisa
    	#define MX_SPI_CS_PIN_3			0
    	#define MX_SPI_CS_PORT_3		0
    	#define MX_SPI_BMODE_3			SPI_1_MX_SPI_BMODE
    	#define MX_SPI_PR_SCALE_3		4
    	#define MX_SPI_PO_SCALE_3		0
    	#define MX_SPI_INT_3			0
      #else
       #ifndef	MX_SPI_REF4
    	#define MX_SPI_REF4
    	#define SPI_1_MX_SPI_UREF			4
    	#define MX_SPI_CHANNEL_4		0
    	#define MX_SPI_MOSI_PIN_4		0
    	#define MX_SPI_MOSI_PORT_4		porta
    	#define MX_SPI_MOSI_TRIS_4		trisa
    	#define MX_SPI_MISO_PIN_4		1
    	#define MX_SPI_MISO_PORT_4		porta
    	#define MX_SPI_MISO_TRIS_4		trisa
    	#define MX_SPI_SCK_PIN_4		2
    	#define MX_SPI_SCK_PORT_4		porta
    	#define MX_SPI_SCK_TRIS_4		trisa
    	#define MX_SPI_CS_PIN_4			0
    	#define MX_SPI_CS_PORT_4		0
    	#define MX_SPI_BMODE_4			SPI_1_MX_SPI_BMODE
    	#define MX_SPI_PR_SCALE_4		4
    	#define MX_SPI_PO_SCALE_4		0
    	#define MX_SPI_INT_4			0
       #endif
      #endif
     #endif
    #endif
    
    #define SPI_1_SPI_Master_Init		CAL_APPEND(FC_CAL_SPI_Master_Init_, SPI_1_MX_SPI_UREF)
    #define SPI_1_SPI_Master_Uninit	CAL_APPEND(FC_CAL_SPI_Master_Uninit_, SPI_1_MX_SPI_UREF)
    #define SPI_1_SPI_Master_Byte		CAL_APPEND(FC_CAL_SPI_Master_Byte_, SPI_1_MX_SPI_UREF)
    
    extern void SPI_1_SPI_Master_Init ();
    extern void SPI_1_SPI_Master_Uninit ();
    extern MX_UINT8 SPI_1_SPI_Master_Byte (MX_UINT8 DataOut);
    
    //FRAM commands
    #define FRAM_WREN  	6
    #define FRAM_WRDI  	4
    #define FRAM_RDSR  	5
    #define FRAM_WRSR  	1
    #define FRAM_READ  	3
    #define FRAM_WRITE 	2
    
    
    
    
    //SPI_Legacy(0): //D�clarations de fonction Macro
    
    void FCD_SPI_Legacy0_SPI_Init();
    void FCD_SPI_Legacy0_SPI_Uninit();
    void FCD_SPI_Legacy0_SPI_Send_Char(MX_UINT8 Char);
    void FCD_SPI_Legacy0_SPI_Send_String(MX_STRING String, MX_UINT8 MSZ_String);
    MX_UINT8 FCD_SPI_Legacy0_SPI_Get_Char();
    void FCD_SPI_Legacy0_SPI_Get_String(MX_CHAR* FCR_RETVAL, MX_UINT8 FCR_RETVAL_SIZE, MX_UINT8 NumBytes);
    void FCD_SPI_Legacy0_DAC_Send_Char(MX_UINT8 Char);
    void FCD_SPI_Legacy0_NVM_Send_Char(MX_UINT8 hi_addr, MX_UINT8 lo_addr, MX_UINT8 Char);
    MX_UINT8 FCD_SPI_Legacy0_NVM_Get_Char(MX_UINT8 hi_addr, MX_UINT8 lo_addr);
    MX_UINT8 FCD_SPI_Legacy0_FramOutput(MX_UINT8 Char);
    void FCD_SPI_Legacy0_EnableFRAM();
    void FCD_SPI_Legacy0_DisableFRAM();
    
    
    //LCDDisplay(0): //Defines:
    
    /**** Macro Substitutions ****
    a = Unique Component Reference Number
    b = D1 Port Letter
    c = D2 Port Letter
    d = D3 Port Letter
    e = D4 Port Letter
    f = RS Port Letter
    g = E Port Letter
    h = Data 1_Pin
    i = Data 2 Pin
    j = Data 3 Pin
    k = Data 4 Pin
    l = RS Pin
    m = Enable Pin
    n = Row Count
    o = Column Count
    ******************************/
    
    	//component connections
    	//Port pin lat workaround for 8-bit PIC devices running >= 32MHz
    
      #ifdef FC_CAL_PIC
       #if MX_CLK_SPEED >= 32000000
    	#define LCD_2__PORT0    latb
    	#define LCD_2__PORT1    latb
    	#define LCD_2__PORT2    latb
    	#define LCD_2__PORT3    latb
    	#define LCD_2__PORT4    latb
    	#define LCD_2__PORT5    latb
       #else
       	#define LCD_2__PORT0    portb
       	#define LCD_2__PORT1    portb
       	#define LCD_2__PORT2    portb
       	#define LCD_2__PORT3    portb
       	#define LCD_2__PORT4    portb
       	#define LCD_2__PORT5    portb
       #endif
      #else
    	#define LCD_2__PORT0    portb
    	#define LCD_2__PORT1    portb
    	#define LCD_2__PORT2    portb
    	#define LCD_2__PORT3    portb
    	#define LCD_2__PORT4    portb
    	#define LCD_2__PORT5    portb
      #endif
    
    	#define LCD_2__TRIS0    trisb
    	#define LCD_2__TRIS1    trisb
    	#define LCD_2__TRIS2    trisb
    	#define LCD_2__TRIS3    trisb
    	#define LCD_2__TRIS4    trisb
    	#define LCD_2__TRIS5    trisb
    	#define LCD_2__BIT0    	0
    	#define LCD_2__BIT1    	1
    	#define LCD_2__BIT2    	2
    	#define LCD_2__BIT3    	3
    	#define LCD_2__RS      	4
    	#define LCD_2__E       	5
    	#define LCD_2__ROWCNT	2
    	#define LCD_2__COLCNT	16
    
    	#ifdef _BOOSTC
    	  #define LCD_2__DELAY   delay_10us(10)
    	#endif
    	#ifdef _C2C_
    	  #define LCD_2__DELAY   delay_us(100)
    	#endif
    	#ifdef HI_TECH_C
    	  #define LCD_2__DELAY   __delay_us(120)
    	#endif
    	#ifndef LCD_2__DELAY
    	  #define LCD_2__DELAY   delay_us(100)
    	#endif
    
    
    
    
    //LCDDisplay(0): //D�clarations de fonction Macro
    
    void FCD_LCDDisplay0_RawSend(MX_UINT8 in, MX_UINT8 mask);
    void FCD_LCDDisplay0_Start();
    void FCD_LCDDisplay0_Clear();
    void FCD_LCDDisplay0_PrintASCII(MX_UINT8 Character);
    void FCD_LCDDisplay0_Command(MX_UINT8 in);
    void FCD_LCDDisplay0_Cursor(MX_UINT8 x, MX_UINT8 y);
    void FCD_LCDDisplay0_PrintNumber(MX_SINT16 Number);
    void FCD_LCDDisplay0_PrintString(MX_STRING String, MX_UINT8 MSZ_String);
    void FCD_LCDDisplay0_ScrollDisplay(MX_UINT8 Direction, MX_UINT8 Num_Positions);
    void FCD_LCDDisplay0_ClearLine(MX_UINT8 Line);
    void FCD_LCDDisplay0_RAM_Write(MX_UINT8 nIdx, MX_UINT8 d0, MX_UINT8 d1, MX_UINT8 d2, MX_UINT8 d3, MX_UINT8 d4, MX_UINT8 d5, MX_UINT8 d6, MX_UINT8 d7);
    
    
    
    //SPI_Legacy(0): //Impl�mentations Macro
    
    
    void FCD_SPI_Legacy0_SPI_Init()
    {
    	
    		//Disable SPI Devices
    		FC_CAL_Bit_High_DDR(SPI_1_MX_SPI_LEGACY_DAC_PORT, SPI_1_MX_SPI_LEGACY_DAC_TRIS, SPI_1_MX_SPI_LEGACY_DAC_PIN);
    		FC_CAL_Bit_High_DDR(SPI_1_MX_SPI_LEGACY_FRAM_PORT, SPI_1_MX_SPI_LEGACY_FRAM_TRIS, SPI_1_MX_SPI_LEGACY_FRAM_PIN);
    
    		//Init SPI
    		SPI_1_SPI_Master_Init();		//Call initialise function
    
    }
    
    void FCD_SPI_Legacy0_SPI_Uninit()
    {
    	
    		//Convert SPI Device Control Lines To Inputs
    		FC_CAL_Bit_In_DDR(SPI_1_MX_SPI_LEGACY_DAC_PORT, SPI_1_MX_SPI_LEGACY_DAC_TRIS, SPI_1_MX_SPI_LEGACY_DAC_PIN);
    		FC_CAL_Bit_In_DDR(SPI_1_MX_SPI_LEGACY_FRAM_PORT, SPI_1_MX_SPI_LEGACY_FRAM_TRIS, SPI_1_MX_SPI_LEGACY_FRAM_PIN);
    
    		//Uninit SPI
    		SPI_1_SPI_Master_Uninit();		//Call uninitialise function
    
    }
    
    void FCD_SPI_Legacy0_SPI_Send_Char(MX_UINT8 Char)
    {
    	
    		SPI_1_SPI_Master_Byte(Char);
    
    }
    
    void FCD_SPI_Legacy0_SPI_Send_String(MX_STRING String, MX_UINT8 MSZ_String)
    {
    	
    		MX_UINT8 idx;
    		for(idx = 0; idx < MSZ_String; idx++)
    		{
    			if (String[idx] == 0)				//End of string data?
    				break;
    
    			SPI_1_SPI_Master_Byte(String[idx]);
    		}
    
    }
    
    MX_UINT8 FCD_SPI_Legacy0_SPI_Get_Char()
    {
    	
    		MX_UINT8 retVal = 0;
    
    		retVal = SPI_1_SPI_Master_Byte(0xFF);
    
    		return (retVal);
    
    }
    
    void FCD_SPI_Legacy0_SPI_Get_String(MX_CHAR* FCR_RETVAL, MX_UINT8 FCR_RETVAL_SIZE, MX_UINT8 NumBytes)
    {
    		MX_UINT8 idx;
    
    		if (NumBytes > FCR_RETVAL_SIZE)
    			NumBytes = FCR_RETVAL_SIZE;
    
    		for (idx = 0; idx < NumBytes; idx++)
    		{
    			FCR_RETVAL[idx] = SPI_1_SPI_Master_Byte(0xFF);		//Collect incoming data byte
    		}
    
    		if (idx < FCR_RETVAL_SIZE)
    			FCR_RETVAL[idx] = 0;					//Terminate string if string variable is longer then expected data
    
    }
    
    void FCD_SPI_Legacy0_DAC_Send_Char(MX_UINT8 Char)
    {
    	
    		MX_UINT8 dac_val;
    
    		FC_CAL_Bit_Low(SPI_1_MX_SPI_LEGACY_DAC_PORT, SPI_1_MX_SPI_LEGACY_DAC_PIN);		//enable dac
    
    		dac_val = (Char & 0xF0) >> 4;
    		SPI_1_SPI_Master_Byte(dac_val);
    
    		dac_val = (Char & 0x0F) << 4;
    		SPI_1_SPI_Master_Byte(dac_val);
    
    		FC_CAL_Bit_High(SPI_1_MX_SPI_LEGACY_DAC_PORT, SPI_1_MX_SPI_LEGACY_DAC_PIN);		//disable dac
    
    }
    
    void FCD_SPI_Legacy0_NVM_Send_Char(MX_UINT8 hi_addr, MX_UINT8 lo_addr, MX_UINT8 Char)
    {
    	
    		//enable writes
    		FCD_SPI_Legacy0_EnableFRAM();
    		FCD_SPI_Legacy0_FramOutput(FRAM_WREN);
    		FCD_SPI_Legacy0_DisableFRAM();
    
    		//send write-fram command, address and data
    		FCD_SPI_Legacy0_EnableFRAM();
    		FCD_SPI_Legacy0_FramOutput(FRAM_WRITE);
    		FCD_SPI_Legacy0_FramOutput(hi_addr);
    		FCD_SPI_Legacy0_FramOutput(lo_addr);
    		FCD_SPI_Legacy0_FramOutput(Char);
    		FCD_SPI_Legacy0_DisableFRAM();
    
    }
    
    MX_UINT8 FCD_SPI_Legacy0_NVM_Get_Char(MX_UINT8 hi_addr, MX_UINT8 lo_addr)
    {
    	
    		MX_UINT8 retVal;
    
    		FCD_SPI_Legacy0_EnableFRAM();
    
    		//send read-fram command and address
    		FCD_SPI_Legacy0_FramOutput(FRAM_READ);
    		FCD_SPI_Legacy0_FramOutput(hi_addr);
    		FCD_SPI_Legacy0_FramOutput(lo_addr);
    
    		//read the data
    		retVal = FCD_SPI_Legacy0_FramOutput(0x5A);  	//don't care byte of 0x5A
    
    		FCD_SPI_Legacy0_DisableFRAM();
    
    		return(retVal);
    
    }
    
    MX_UINT8 FCD_SPI_Legacy0_FramOutput(MX_UINT8 Char)
    {
    	
    		MX_UINT8 retVal = 0;
    		retVal = SPI_1_SPI_Master_Byte(Char);
    		return (retVal);
    
    }
    
    void FCD_SPI_Legacy0_EnableFRAM()
    {
    	
    		FC_CAL_Bit_Low(SPI_1_MX_SPI_LEGACY_FRAM_PORT, SPI_1_MX_SPI_LEGACY_FRAM_PIN);
    
    }
    
    void FCD_SPI_Legacy0_DisableFRAM()
    {
    	
    		FC_CAL_Bit_High(SPI_1_MX_SPI_LEGACY_FRAM_PORT, SPI_1_MX_SPI_LEGACY_FRAM_PIN);
    
    }
    
    
    
    //LCDDisplay(0): //Impl�mentations Macro
    
    
    void FCD_LCDDisplay0_RawSend(MX_UINT8 in, MX_UINT8 mask)
    {
    	
    		MX_UINT8 pt;
    
    		FC_CAL_Bit_Low(LCD_2__PORT0, LCD_2__BIT0);
    		FC_CAL_Bit_Low(LCD_2__PORT1, LCD_2__BIT1);
    		FC_CAL_Bit_Low(LCD_2__PORT2, LCD_2__BIT2);
    		FC_CAL_Bit_Low(LCD_2__PORT3, LCD_2__BIT3);
    		FC_CAL_Bit_Low(LCD_2__PORT4, LCD_2__RS);
    		FC_CAL_Bit_Low(LCD_2__PORT5, LCD_2__E);
    		pt = ((in >> 4) & 0x0f);
    		if (pt & 0x01)
    		    FC_CAL_Bit_High(LCD_2__PORT0, LCD_2__BIT0);
    		if (pt & 0x02)
    		    FC_CAL_Bit_High(LCD_2__PORT1, LCD_2__BIT1);
    		if (pt & 0x04)
    		    FC_CAL_Bit_High(LCD_2__PORT2, LCD_2__BIT2);
    		if (pt & 0x08)
    		    FC_CAL_Bit_High(LCD_2__PORT3, LCD_2__BIT3);
    		if (mask)
    		    FC_CAL_Bit_High(LCD_2__PORT4, LCD_2__RS);
    		LCD_2__DELAY;
    		FC_CAL_Bit_High (LCD_2__PORT5, LCD_2__E);
    		LCD_2__DELAY;
    		FC_CAL_Bit_Low (LCD_2__PORT5, LCD_2__E);
    		pt = (in & 0x0f);
    		LCD_2__DELAY;
    		FC_CAL_Bit_Low(LCD_2__PORT0, LCD_2__BIT0);
    		FC_CAL_Bit_Low(LCD_2__PORT1, LCD_2__BIT1);
    		FC_CAL_Bit_Low(LCD_2__PORT2, LCD_2__BIT2);
    		FC_CAL_Bit_Low(LCD_2__PORT3, LCD_2__BIT3);
    		FC_CAL_Bit_Low(LCD_2__PORT4, LCD_2__RS);
    		FC_CAL_Bit_Low(LCD_2__PORT5, LCD_2__E);
    		if (pt & 0x01)
    		    FC_CAL_Bit_High(LCD_2__PORT0, LCD_2__BIT0);
    		if (pt & 0x02)
    		    FC_CAL_Bit_High(LCD_2__PORT1, LCD_2__BIT1);
    		if (pt & 0x04)
    		    FC_CAL_Bit_High(LCD_2__PORT2, LCD_2__BIT2);
    		if (pt & 0x08)
    		    FC_CAL_Bit_High(LCD_2__PORT3, LCD_2__BIT3);
    		if (mask)
    		    FC_CAL_Bit_High(LCD_2__PORT4, LCD_2__RS);
    		LCD_2__DELAY;
    		FC_CAL_Bit_High (LCD_2__PORT5, LCD_2__E);
    		LCD_2__DELAY;
    		FC_CAL_Bit_Low (LCD_2__PORT5, LCD_2__E);
    		LCD_2__DELAY;
    
    }
    
    void FCD_LCDDisplay0_Start()
    {
    	
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT0, LCD_2__TRIS0, LCD_2__BIT0);
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT1, LCD_2__TRIS1, LCD_2__BIT1);
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT2, LCD_2__TRIS2, LCD_2__BIT2);
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT3, LCD_2__TRIS3, LCD_2__BIT3);
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT4, LCD_2__TRIS4, LCD_2__RS);
    		FC_CAL_Bit_Low_DDR(LCD_2__PORT5, LCD_2__TRIS5, LCD_2__E);
    
    		Wdt_Delay_Ms(12);
    
    		FCD_LCDDisplay0_RawSend(0x33, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x33, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x32, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x2c, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x06, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x0c, 0);
    		Wdt_Delay_Ms(2);
    
    		//clear the display
    		FCD_LCDDisplay0_RawSend(0x01, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x02, 0);
    		Wdt_Delay_Ms(2);
    
    }
    
    void FCD_LCDDisplay0_Clear()
    {
    	
    		FCD_LCDDisplay0_RawSend(0x01, 0);
    		Wdt_Delay_Ms(2);
    		FCD_LCDDisplay0_RawSend(0x02, 0);
    		Wdt_Delay_Ms(2);
    
    }
    
    void FCD_LCDDisplay0_PrintASCII(MX_UINT8 Character)
    {
    	
    		FCD_LCDDisplay0_RawSend(Character, 0x10);
    
    }
    
    void FCD_LCDDisplay0_Command(MX_UINT8 in)
    {
    	
    		FCD_LCDDisplay0_RawSend(in, 0);
    		Wdt_Delay_Ms(2);
    
    }
    
    void FCD_LCDDisplay0_Cursor(MX_UINT8 x, MX_UINT8 y)
    {
    	
    	  #if (LCD_2__ROWCNT == 1)
    	    y=0x80;
    	  #endif
    
    	  #if (LCD_2__ROWCNT == 2)
    		if (y==0)
    			y=0x80;
    		else
    			y=0xc0;
    	  #endif
    
    	  #if (LCD_2__ROWCNT == 4)
    		if (y==0)
    			y=0x80;
    		else if (y==1)
    			y=0xc0;
    
    		#if (LCD_2__COLCNT == 16)
    			else if (y==2)
    				y=0x90;
    			else
    				y=0xd0;
    		#endif
    
    		#if (LCD_2__COLCNT == 20)
    			else if (y==2)
    				y=0x94;
    			else
    				y=0xd4;
    		#endif
    	  #endif
    
    		FCD_LCDDisplay0_RawSend(y+x, 0);
    		Wdt_Delay_Ms(2);
    
    }
    
    void FCD_LCDDisplay0_PrintNumber(MX_SINT16 Number)
    {
    	
    		MX_SINT16 tmp_int;
    		MX_UINT8 tmp_byte;
    
    		if (Number < 0)
    		{
    			FCD_LCDDisplay0_RawSend('-', 0x10);
    			Number = 0 - Number;
    		}
    
    		tmp_int = Number;
    		if (Number >= 10000)
    		{
    			tmp_byte = tmp_int / 10000;
    			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);
    
    			while (tmp_byte > 0)
    			{
    				tmp_int = tmp_int - 10000;
    				tmp_byte--;
    			}
    		}
    		if (Number >= 1000)
    		{
    			tmp_byte = tmp_int / 1000;
    			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);
    
    			while (tmp_byte > 0)
    			{
    				tmp_int = tmp_int - 1000;
    				tmp_byte--;
    			}
    		}
    		if (Number >= 100)
    		{
    			tmp_byte = tmp_int / 100;
    			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);
    
    			while (tmp_byte > 0)
    			{
    				tmp_int = tmp_int - 100;
    				tmp_byte--;
    			}
    		}
    		if (Number >= 10)
    		{
    			tmp_byte = tmp_int / 10;
    			FCD_LCDDisplay0_RawSend('0' + tmp_byte, 0x10);
    
    			while (tmp_byte > 0)
    			{
    				tmp_int = tmp_int - 10;
    				tmp_byte--;
    			}
    		}
    		FCD_LCDDisplay0_RawSend('0' + tmp_int, 0x10);
    
    }
    
    void FCD_LCDDisplay0_PrintString(MX_STRING String, MX_UINT8 MSZ_String)
    {
    	
    		MX_UINT8 idx = 0;
    
    		for (idx=0; idx<MSZ_String; idx++)
    		{
    			if (String[idx] == 0)
    			{
    				break;
    			}
    			FCD_LCDDisplay0_RawSend(String[idx], 0x10);
    		}
    
    }
    
    void FCD_LCDDisplay0_ScrollDisplay(MX_UINT8 Direction, MX_UINT8 Num_Positions)
    {
    	
    		MX_UINT8 cmd = 0;
    		MX_UINT8 count;
    
    		//Choose the direction
    		switch (Direction)
    		{
    			case 0:
    			case 'l':
    			case 'L':
    
    				cmd = 0x18;
    				break;
    
    			case 1:
    			case 'r':
    			case 'R':
    
    				cmd = 0x1C;
    				break;
    
    			default:
    				break;
    		}
    
    		//If direction accepted then scroll the specified amount
    		if (cmd)
    		{
    			for (count = 0; count < Num_Positions; count++)
    				FCD_LCDDisplay0_Command(cmd);
    		}
    
    }
    
    void FCD_LCDDisplay0_ClearLine(MX_UINT8 Line)
    {
    	
    		MX_UINT8 count;
    		MX_UINT8 rowcount;
    
    		//Define number of columns per line
    		#if (LCD_2__ROWCNT == 1)
    			rowcount=80;
    		#endif
    
    		#if (LCD_2__ROWCNT == 2)
    			rowcount=40;
    		#endif
    
    		#if (LCD_2__ROWCNT == 4)
    			#if (LCD_2__COLCNT == 16)
    				rowcount=16;
    			#endif
    			#if (LCD_2__COLCNT == 20)
    				rowcount=20;
    			#endif
    		#endif
    
    		//Start at beginning of the line
    		FCD_LCDDisplay0_Cursor (0, Line);
    
    		//Send out spaces to clear line
    		for (count = 0; count < rowcount; count++)
    			FCD_LCDDisplay0_RawSend(' ', 0x10);
    
    		//Move back to the beginning of the line.
    		FCD_LCDDisplay0_Cursor (0, Line);
    
    }
    
    void FCD_LCDDisplay0_RAM_Write(MX_UINT8 nIdx, MX_UINT8 d0, MX_UINT8 d1, MX_UINT8 d2, MX_UINT8 d3, MX_UINT8 d4, MX_UINT8 d5, MX_UINT8 d6, MX_UINT8 d7)
    {
    	   //set CGRAM address
    
    	   FCD_LCDDisplay0_RawSend(64 + (nIdx << 3), 0);
    	   delay_ms(2);
    
    	   //write CGRAM data
    	   FCD_LCDDisplay0_RawSend(d0, 0x10);
    	   FCD_LCDDisplay0_RawSend(d1, 0x10);
    	   FCD_LCDDisplay0_RawSend(d2, 0x10);
    	   FCD_LCDDisplay0_RawSend(d3, 0x10);
    	   FCD_LCDDisplay0_RawSend(d4, 0x10);
    	   FCD_LCDDisplay0_RawSend(d5, 0x10);
    	   FCD_LCDDisplay0_RawSend(d6, 0x10);
    	   FCD_LCDDisplay0_RawSend(d7, 0x10);
    
    	   //Clear the display
    	   FCD_LCDDisplay0_RawSend(0x01, 0);
    	   delay_ms(2);
    	   FCD_LCDDisplay0_RawSend(0x02, 0);
    	   delay_ms(2);
    
    }
    
    #include "C:\Program Files (x86)\Flowcode\v5\CAL\includes.c"
    
    //Impl�mentations Macro
    
    
    void FCM_SPI_READ(MX_UINT8 FCL_ADRESS)
    {
    
    	//SS enable
    	//Sortie: 0 -> A3
    	trisa = trisa & 0xF7;
    	if ((0))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Register
    	//Appel de la Routine Composant: SPI_Send_Char(.Adress)
    	FCD_SPI_Legacy0_SPI_Send_Char(FCL_ADRESS);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: READ=SPI_Get_Char()
    	FCV_READ = FCD_SPI_Legacy0_SPI_Get_Char();
    
    	//SS disable
    	//Sortie: 1 -> A3
    	trisa = trisa & 0xF7;
    	if ((1))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Delay
    	//Pause: 100 ms
    	delay_ms(100);
    
    }
    
    
    void FCM_SPI_WRITE(MX_UINT8 FCL_ADRESS, MX_UINT8 FCL_DATA)
    {
    
    	//SS enabled
    	//Sortie: 0 -> A3
    	trisa = trisa & 0xF7;
    	if ((0))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Register
    	//Appel de la Routine Composant: SPI_Send_Char(.adress)
    	FCD_SPI_Legacy0_SPI_Send_Char(FCL_ADRESS);
    
    	//Data
    	//Appel de la Routine Composant: SPI_Send_Char(.Data)
    	FCD_SPI_Legacy0_SPI_Send_Char(FCL_DATA);
    
    	//SS disabled
    	//Sortie: 1 -> A3
    	trisa = trisa & 0xF7;
    	if ((1))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Delay
    	//Pause: 95 ms
    	delay_ms(95);
    
    }
    
    
    void FCM_Initialisation()
    {
    
    	//IOCFG2
    	//Appel d'une Macro: SPI_WRITE(0x00, 0x29)
    	FCM_SPI_WRITE(0x00, 0x29);
    
    	//IOCFG1
    	//Appel d'une Macro: SPI_WRITE(0x01, 0x2E)
    	FCM_SPI_WRITE(0x01, 0x2E);
    
    	//IOCFG0
    	//Appel d'une Macro: SPI_WRITE(0x02, 0x06)
    	FCM_SPI_WRITE(0x02, 0x06);
    
    	//FIFITHR
    	//Appel d'une Macro: SPI_WRITE(0x03, 0x07)
    	FCM_SPI_WRITE(0x03, 0x07);
    
    	//SYNC1
    	//Appel d'une Macro: SPI_WRITE(0x04, 0xD3)
    	FCM_SPI_WRITE(0x04, 0xD3);
    
    	//SYNC0
    	//Appel d'une Macro: SPI_WRITE(0x05, 0x91)
    	FCM_SPI_WRITE(0x05, 0x91);
    
    	//PKTLEN
    	//Appel d'une Macro: SPI_WRITE(0x06, 0x3D)
    	FCM_SPI_WRITE(0x06, 0x3D);
    
    	//PKTCTRL1
    	//Appel d'une Macro: SPI_WRITE(0x07, 0x04)
    	FCM_SPI_WRITE(0x07, 0x04);
    
    	//PKTCTRL0
    	//Appel d'une Macro: SPI_WRITE(0x08, 0x12)
    	FCM_SPI_WRITE(0x08, 0x12);
    
    	//ADDR
    	//Appel d'une Macro: SPI_WRITE(0x09, 0x00)
    	FCM_SPI_WRITE(0x09, 0x00);
    
    	//CHANNR
    	//Appel d'une Macro: SPI_WRITE(0x0A, 0x03)
    	FCM_SPI_WRITE(0x0A, 0x03);
    
    	//FSCTRL1
    	//Appel d'une Macro: SPI_WRITE(0X0B, 0x0A)
    	FCM_SPI_WRITE(0X0B, 0x0A);
    
    	//FSCTRL0
    	//Appel d'une Macro: SPI_WRITE(0x0C, 0x00)
    	FCM_SPI_WRITE(0x0C, 0x00);
    
    	//FREQ2
    	//Appel d'une Macro: SPI_WRITE(0x0D, 0x5D)
    	FCM_SPI_WRITE(0x0D, 0x5D);
    
    	//FREQ1
    	//Appel d'une Macro: SPI_WRITE(0x0E, 0x44)
    	FCM_SPI_WRITE(0x0E, 0x44);
    
    	//FREQ0
    	//Appel d'une Macro: SPI_WRITE(0x0F, 0xEC)
    	FCM_SPI_WRITE(0x0F, 0xEC);
    
    	//MDMCFG4
    	//Appel d'une Macro: SPI_WRITE(0x10, 0x2D)
    	FCM_SPI_WRITE(0x10, 0x2D);
    
    	//MDMCFG3
    	//Appel d'une Macro: SPI_WRITE(0x11, 0x3B)
    	FCM_SPI_WRITE(0x11, 0x3B);
    
    	//MDMCFG2
    	//Appel d'une Macro: SPI_WRITE(0x12, 0xF0)
    	FCM_SPI_WRITE(0x12, 0xF0);
    
    	//MDMCFG1
    	//Appel d'une Macro: SPI_WRITE(0x13, 0x23)
    	FCM_SPI_WRITE(0x13, 0x23);
    
    	//MDMCFG0
    	//Appel d'une Macro: SPI_WRITE(0x14, 0x3B)
    	FCM_SPI_WRITE(0x14, 0x3B);
    
    	//DEVIATN
    	//Appel d'une Macro: SPI_WRITE(0x15, 0x01)
    	FCM_SPI_WRITE(0x15, 0x01);
    
    	//MCSM2
    	//Appel d'une Macro: SPI_WRITE(0x16, 0x07)
    	FCM_SPI_WRITE(0x16, 0x07);
    
    	//MCSM1
    	//Appel d'une Macro: SPI_WRITE(0x17, 0x30)
    	FCM_SPI_WRITE(0x17, 0x30);
    
    	//MCSM0
    	//Appel d'une Macro: SPI_WRITE(0x18, 0x18)
    	FCM_SPI_WRITE(0x18, 0x18);
    
    	//FOCCFG
    	//Appel d'une Macro: SPI_WRITE(0x19, 0x1D)
    	FCM_SPI_WRITE(0x19, 0x1D);
    
    	//BSCFG
    	//Appel d'une Macro: SPI_WRITE(0x1A, 0x1C)
    	FCM_SPI_WRITE(0x1A, 0x1C);
    
    	//AGCCTRL2
    	//Appel d'une Macro: SPI_WRITE(0x1B, 0xC7)
    	FCM_SPI_WRITE(0x1B, 0xC7);
    
    	//AGCCTRL1
    	//Appel d'une Macro: SPI_WRITE(0x1C, 0x00)
    	FCM_SPI_WRITE(0x1C, 0x00);
    
    	//AGCCTRL0
    	//Appel d'une Macro: SPI_WRITE(0x1D, 0xB0)
    	FCM_SPI_WRITE(0x1D, 0xB0);
    
    	//WOREVTV1
    	//Appel d'une Macro: SPI_WRITE(0x1E, 0x87)
    	FCM_SPI_WRITE(0x1E, 0x87);
    
    	//WOREVTV0
    	//Appel d'une Macro: SPI_WRITE(0x1F, 0x6B)
    	FCM_SPI_WRITE(0x1F, 0x6B);
    
    	//WORCTRL
    	//Appel d'une Macro: SPI_WRITE(0x20, 0xF8)
    	FCM_SPI_WRITE(0x20, 0xF8);
    
    	//FREND1
    	//Appel d'une Macro: SPI_WRITE(0x21, 0xB6)
    	FCM_SPI_WRITE(0x21, 0xB6);
    
    	//FREND0
    	//Appel d'une Macro: SPI_WRITE(0x22, 0X10)
    	FCM_SPI_WRITE(0x22, 0X10);
    
    	//FSCAL3
    	//Appel d'une Macro: SPI_WRITE(0x23, 0xEA)
    	FCM_SPI_WRITE(0x23, 0xEA);
    
    	//FSCAL2
    	//Appel d'une Macro: SPI_WRITE(0x24, 0x0A)
    	FCM_SPI_WRITE(0x24, 0x0A);
    
    	//FSCAL1
    	//Appel d'une Macro: SPI_WRITE(0x25, 0x00)
    	FCM_SPI_WRITE(0x25, 0x00);
    
    	//FSCAL0
    	//Appel d'une Macro: SPI_WRITE(0x26, 0x11)
    	FCM_SPI_WRITE(0x26, 0x11);
    
    	//RCCTRL1
    	//Appel d'une Macro: SPI_WRITE(0x27, 0x41)
    	FCM_SPI_WRITE(0x27, 0x41);
    
    	//RCCTRL0
    	//Appel d'une Macro: SPI_WRITE(0x28, 0x00)
    	FCM_SPI_WRITE(0x28, 0x00);
    
    	//FSTEST
    	//Appel d'une Macro: SPI_WRITE(0x29, 0x59)
    	FCM_SPI_WRITE(0x29, 0x59);
    
    	//PTEST
    	//Appel d'une Macro: SPI_WRITE(0x2A, 0x7F)
    	FCM_SPI_WRITE(0x2A, 0x7F);
    
    	//AGCTEST
    	//Appel d'une Macro: SPI_WRITE(0x2B, 0x3C)
    	FCM_SPI_WRITE(0x2B, 0x3C);
    
    	//TEST2
    	//Appel d'une Macro: SPI_WRITE(0x2C, 0x88)
    	FCM_SPI_WRITE(0x2C, 0x88);
    
    	//TEST1
    	//Appel d'une Macro: SPI_WRITE(0x2D, 0x31)
    	FCM_SPI_WRITE(0x2D, 0x31);
    
    	//TEST0
    	//Appel d'une Macro: SPI_WRITE(0x2E, 0x0B)
    	FCM_SPI_WRITE(0x2E, 0x0B);
    
    }
    
    
    void FCM_Affichage_READ()
    {
    
    	//Call Component Macro
    	//Appel de la Routine Composant: Curseur(0, 0)
    	FCD_LCDDisplay0_Cursor(0, 0);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: �crit_Cha�ne("READ")
    	FCD_LCDDisplay0_PrintString("READ", 4);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: Curseur(5, 0)
    	FCD_LCDDisplay0_Cursor(5, 0);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: �crit_Nombre(READ)
    	FCD_LCDDisplay0_PrintNumber(FCV_READ);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: Curseur(0, 1)
    	FCD_LCDDisplay0_Cursor(0, 1);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: �crit_Cha�ne("RSSI")
    	FCD_LCDDisplay0_PrintString("RSSI", 4);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: Curseur(5, 1)
    	FCD_LCDDisplay0_Cursor(5, 1);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: �crit_Nombre(RSSI)
    	FCD_LCDDisplay0_PrintNumber(FCV_RSSI);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: Curseur(9, 1)
    	FCD_LCDDisplay0_Cursor(9, 1);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: �crit_Cha�ne("dB")
    	FCD_LCDDisplay0_PrintString("dB", 2);
    
    }
    
    
    void FCM_Rx_mode()
    {
    
    	//SS enabled
    	//Sortie: 0 -> A3
    	trisa = trisa & 0xF7;
    	if ((0))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Register
    	//Appel de la Routine Composant: SPI_Send_Char(0x34)
    	FCD_SPI_Legacy0_SPI_Send_Char(0x34);
    
    	//SS disabled
    	//Sortie: 1 -> A3
    	trisa = trisa & 0xF7;
    	if ((1))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    }
    
    
    void FCM_TEST()
    {
    
    	//SS enabled
    	//Sortie: 0 -> A3
    	trisa = trisa & 0xF7;
    	if ((0))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    	//Register
    	//Appel de la Routine Composant: SPI_Send_Char(0x38)
    	FCD_SPI_Legacy0_SPI_Send_Char(0x38);
    
    	//SS disabled
    	//Sortie: 1 -> A3
    	trisa = trisa & 0xF7;
    	if ((1))
    		porta = (porta & 0xF7) | 0x08;
    	else
    		porta = porta & 0xF7;
    
    }
    
    
    void FCM_Chip_ID_display()
    {
    
    	//Appel d'une Macro
    	//Appel d'une Macro: SPI_READ(0xF0)
    	FCM_SPI_READ(0xF0);
    
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: Curseur(10, 0)
    	FCD_LCDDisplay0_Cursor(10, 0);
    
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: �crit_Cha�ne("ID")
    	FCD_LCDDisplay0_PrintString("ID", 2);
    
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: Curseur(12, 0)
    	FCD_LCDDisplay0_Cursor(12, 0);
    
    	//Call Component Macro
    	//Appel de la Routine Composant: �crit_Nombre(READ)
    	FCD_LCDDisplay0_PrintNumber(FCV_READ);
    
    	//Pause
    	//Pause: 2 s
    	delay_s(2);
    
    }
    
    
    
    void main()
    {
    	//Initialisation
    	ansel = 0;
    	cmcon = 0x07;
    
    
    	//Code Initialisation Interruption
    	option_reg = 0xC0;
    
    
    	//Call Component Macro
    	//Appel de la Routine Composant: SPI_Init()
    	FCD_SPI_Legacy0_SPI_Init();
    
    	//Appel de la Routine Composant
    	//Appel de la Routine Composant: Init()
    	FCD_LCDDisplay0_Start();
    
    	//Appel d'une Macro
    	//Appel d'une Macro: Chip_ID_display()
    	FCM_Chip_ID_display();
    
    	//Call Macro
    	//Appel d'une Macro: Initialisation()
    	FCM_Initialisation();
    
    	//Call Macro
    	//Appel d'une Macro: Rx_mode()
    	FCM_Rx_mode();
    
    	//Loop
    	//Boucle: Tant que 1
    	while (1)
    	{
    
    		//Call Macro
    		//Appel d'une Macro: SPI_READ(0x18+0x80)
    		FCM_SPI_READ(0x18 + 0x80);
    
    		//Call Macro
    		//Appel d'une Macro: Affichage_READ()
    		FCM_Affichage_READ();
    
    		//Pause
    		//Pause: 1 s
    		delay_s(1);
    
    		//Appel de la Routine Composant
    		//Appel de la Routine Composant: Effacer()
    		FCD_LCDDisplay0_Clear();
    
    
    	}
    
    	mainendloop: goto mainendloop;
    }
    
    void MX_INTERRUPT_MACRO(void)
    {
    }
    
    
    
    

    and the register i use from the rf studio 

    5381.CC2500all.html
    <html><head>
    <style>
    body {background-color:#dde;}
    caption {font-weight:bold; font-size:16px;margin-left:30px}
    th { text-align:left; background-color:#f00; color:#fff}
    table { background-color: #eec; font-size:9px;margin:10px}
    </style>
    </head>
    <body><table border=1 cellpadding=5 cellspacing=0>
    <caption>CC2500 registers</caption>
    <tr><th>Name</th><th>Address</th><th>Value</th>
    <th>Description</th></tr><tr><td>IOCFG2<td>0x0000</td><td>0x29</td><td>GDO2Output Pin Configuration </td></tr>
    <tr><td>IOCFG1<td>0x0001</td><td>0x2E</td><td>GDO1Output Pin Configuration </td></tr>
    <tr><td>IOCFG0<td>0x0002</td><td>0x06</td><td>GDO0Output Pin Configuration </td></tr>
    <tr><td>FIFOTHR<td>0x0003</td><td>0x07</td><td>RX FIFO and TX FIFO Thresholds</td></tr>
    <tr><td>SYNC1<td>0x0004</td><td>0xD3</td><td>Sync Word, High Byte </td></tr>
    <tr><td>SYNC0<td>0x0005</td><td>0x91</td><td>Sync Word, Low Byte </td></tr>
    <tr><td>PKTLEN<td>0x0006</td><td>0x3D</td><td>Packet Length </td></tr>
    <tr><td>PKTCTRL1<td>0x0007</td><td>0x04</td><td>Packet Automation Control</td></tr>
    <tr><td>PKTCTRL0<td>0x0008</td><td>0x05</td><td>Packet Automation Control</td></tr>
    <tr><td>ADDR<td>0x0009</td><td>0x00</td><td>Device Address </td></tr>
    <tr><td>CHANNR<td>0x000A</td><td>0x03</td><td>Channel Number </td></tr>
    <tr><td>FSCTRL1<td>0x000B</td><td>0x0A</td><td>Frequency Synthesizer Control </td></tr>
    <tr><td>FSCTRL0<td>0x000C</td><td>0x00</td><td>Frequency Synthesizer Control </td></tr>
    <tr><td>FREQ2<td>0x000D</td><td>0x5D</td><td>Frequency Control Word, High Byte </td></tr>
    <tr><td>FREQ1<td>0x000E</td><td>0x44</td><td>Frequency Control Word, Middle Byte </td></tr>
    <tr><td>FREQ0<td>0x000F</td><td>0xEC</td><td>Frequency Control Word, Low Byte </td></tr>
    <tr><td>MDMCFG4<td>0x0010</td><td>0x2D</td><td>Modem Configuration </td></tr>
    <tr><td>MDMCFG3<td>0x0011</td><td>0x3B</td><td>Modem Configuration </td></tr>
    <tr><td>MDMCFG2<td>0x0012</td><td>0x73</td><td>Modem Configuration</td></tr>
    <tr><td>MDMCFG1<td>0x0013</td><td>0x23</td><td>Modem Configuration</td></tr>
    <tr><td>MDMCFG0<td>0x0014</td><td>0x3B</td><td>Modem Configuration </td></tr>
    <tr><td>DEVIATN<td>0x0015</td><td>0x01</td><td>Modem Deviation Setting </td></tr>
    <tr><td>MCSM2<td>0x0016</td><td>0x07</td><td>Main Radio Control State Machine Configuration </td></tr>
    <tr><td>MCSM1<td>0x0017</td><td>0x30</td><td>Main Radio Control State Machine Configuration</td></tr>
    <tr><td>MCSM0<td>0x0018</td><td>0x18</td><td>Main Radio Control State Machine Configuration </td></tr>
    <tr><td>FOCCFG<td>0x0019</td><td>0x1D</td><td>Frequency Offset Compensation Configuration</td></tr>
    <tr><td>BSCFG<td>0x001A</td><td>0x1C</td><td>Bit Synchronization Configuration</td></tr>
    <tr><td>AGCCTRL2<td>0x001B</td><td>0xC7</td><td>AGC Control</td></tr>
    <tr><td>AGCCTRL1<td>0x001C</td><td>0x00</td><td>AGC Control</td></tr>
    <tr><td>AGCCTRL0<td>0x001D</td><td>0xB0</td><td>AGC Control</td></tr>
    <tr><td>WOREVT1<td>0x001E</td><td>0x87</td><td>High Byte Event0 Timeout </td></tr>
    <tr><td>WOREVT0<td>0x001F</td><td>0x6B</td><td>Low Byte Event0 Timeout </td></tr>
    <tr><td>WORCTRL<td>0x0020</td><td>0xF8</td><td>Wake On Radio Control</td></tr>
    <tr><td>FREND1<td>0x0021</td><td>0xB6</td><td>Front End RX Configuration </td></tr>
    <tr><td>FREND0<td>0x0022</td><td>0x10</td><td>Front End TX configuration </td></tr>
    <tr><td>FSCAL3<td>0x0023</td><td>0xEA</td><td>Frequency Synthesizer Calibration </td></tr>
    <tr><td>FSCAL2<td>0x0024</td><td>0x0A</td><td>Frequency Synthesizer Calibration </td></tr>
    <tr><td>FSCAL1<td>0x0025</td><td>0x00</td><td>Frequency Synthesizer Calibration </td></tr>
    <tr><td>FSCAL0<td>0x0026</td><td>0x11</td><td>Frequency Synthesizer Calibration </td></tr>
    <tr><td>RCCTRL1<td>0x0027</td><td>0x41</td><td>RC Oscillator Configuration </td></tr>
    <tr><td>RCCTRL0<td>0x0028</td><td>0x00</td><td>RC Oscillator Configuration </td></tr>
    <tr><td>FSTEST<td>0x0029</td><td>0x59</td><td>Frequency Synthesizer Calibration Control </td></tr>
    <tr><td>PTEST<td>0x002A</td><td>0x7F</td><td>Production Test </td></tr>
    <tr><td>AGCTEST<td>0x002B</td><td>0x3C</td><td>AGC Test </td></tr>
    <tr><td>TEST2<td>0x002C</td><td>0x88</td><td>Various Test Settings </td></tr>
    <tr><td>TEST1<td>0x002D</td><td>0x31</td><td>Various Test Settings </td></tr>
    <tr><td>TEST0<td>0x002E</td><td>0x0B</td><td>Various Test Settings </td></tr>
    <tr><td>PARTNUM<td>0x0030</td><td>0x80</td><td>Chip ID </td></tr>
    <tr><td>VERSION<td>0x0031</td><td>0x03</td><td>Chip ID </td></tr>
    <tr><td>FREQEST<td>0x0032</td><td>0xE3</td><td>Frequency Offset Estimate from Demodulator </td></tr>
    <tr><td>LQI<td>0x0033</td><td>0x00</td><td>Demodulator Estimate for Link Quality </td></tr>
    <tr><td>RSSI<td>0x0034</td><td>0xC6</td><td>Received Signal Strength Indication </td></tr>
    <tr><td>MARCSTATE<td>0x0035</td><td>0x01</td><td>Main Radio Control State Machine State </td></tr>
    <tr><td>WORTIME1<td>0x0036</td><td>0x00</td><td>High Byte of WOR Time </td></tr>
    <tr><td>WORTIME0<td>0x0037</td><td>0x00</td><td>Low Byte of WOR Time </td></tr>
    <tr><td>PKTSTATUS<td>0x0038</td><td>0x20</td><td>Current GDOxStatus and Packet Status </td></tr>
    <tr><td>VCO_VC_DAC<td>0x0039</td><td>0xCC</td><td>Current Setting from PLL Calibration Module </td></tr>
    <tr><td>TXBYTES<td>0x003A</td><td>0x00</td><td>Underflow and Number of Bytes </td></tr>
    <tr><td>RXBYTES<td>0x003B</td><td>0x00</td><td>Underflow and Number of Bytes </td></tr>
    <tr><td>RCCTRL1_STATUS<td>0x003C</td><td>0x00</td><td>Last RC Oscillator Calibration Result </td></tr>
    <tr><td>RCCTRL0_STATUS<td>0x003D</td><td>0x00</td><td>Last RC Oscillator Calibration Result </td></tr>
    </table>
    </body><html>

    So i think i get something wrong in on of my register because i obtain in my RSSI value from -120 dB to -60 dB, same value when i activate y board to send a signal with samrt RF.

    1) I get error in my register

    2) Bad set up in SmartRF

    but in the second case i change nothing

  • Thanks for you're help ! But i have find my error and now it s work!

    Thanks a lot

  • Hi

    May I know what will happen if I use some other setting rather than the  0x12 (synch serial mode) for example I use the Normal mode with the infinite packet length i.e., to set PKCTRL0 with 0x02 instead of 0x12.

    Thx.

  • Hi

    May I know how did u solve your error because I think I have a similar one here.

    Regards.

  • Can you please provide some details about the problem you're seeing? Is it related to reading the RSSI value? I think the original problem reported in this thread was solved by fixing the SPI read functions they were using.

  • Hi, if I remember, was not a problem in my code but was in my card, who transforme the 3,3V from the CC2500 to my devellop board who was in 5,5V.

    Or give me more detail but i don't think I will remember.

    Regard

    Arnaud  

  • Thank you very much. The logic level converter that I was using was causing the problem. 

    Thx again.

  • Hello,

    I have a similar problem with CC2500, I have a module featuring CC2500 and i interfaced it with an MCU from ATMEL, the RSSI that I read is always stuck between some high range of dbm values like -39 -42 or -19 -24 dbm. even if I am testing in an chamber and there is no signals at all

    can someone explain to me the logical level converter thing? what was the problem and how did you solve it?

  • Try using continuous RX in SmartRF Studio using the same set-up. Studio will show the raw RSSI value (as read from the register) and the same value converted to dBm.

    Remember to subtract the RSSI offset. The CC2500 datasheet, chapter 17.3, explains the details.

  • I am not using a development board from TI, so I can not use smartRF for that. 

    I just created a new thread for my question:L

    http://e2e.ti.com/support/wireless_connectivity/f/155/t/356564.aspx