Hi guys,
I am working on an ECG monitor project using the ADS1298, the MSP430FG4618 and the CC2500. The ADS1298 converts the input signal to a digital work of 24 bits with a sampling frequency of 1KHz. I have 8 channels received at the time with 3 byte information on each, making the number of bytes per sample equal to 24. I have set simpliciTI to send 50 bytes packages per transmission consisting of 2 * 8 channel samples (2*3*8=48). I am using the extra two bytes as sample ID.
The problem is that with the default 250 kbps of the CC2500 in simpliciTI there is a point in which data is lost on my system. I understand that this is because the real data rate using simpliciTI at 250kbps is about 70-80 kbps (see this post for the calculation details http://e2e.ti.com/support/low_power_rf/f/156/t/16559.aspx).
Having 8 KB of RAM on the MSP430 could help if I just needed to sample a few cycles but since this is meant to be live monitoring the memory would be overwritten due to the slow data rate of the wireless link. This is, dividing the RAM in two 4KB blocks each block gives me 4096 bytes. I define a page on the RAM equal to the data to be sent on 1 package, which is 50 bytes per page. Therefore each page stores 2 samples, resulting on 80 pages per block ( which is 160 samples). Ideally, BLOCK1 is used as transmission buffer while BLOCK2 samples the next buffer. But let us see how long it takes to fill out BLOCK1 and how long it takes to send it to the other end. With a sample happening every 1 ms and having 2 samples per page (remember each sample is 3 byte long, we have 8 channels and page size is 2 samples plus 2 ID bytes), we fill out BLOCK1 in 160 ms. With the effective data rate of the CC2500 using simpliciTI, lets say 75kbps, it takes 50(bytes per page)*80(pages in BLOCK1)*8(conversion to bits)/75kbps=426.6ms to send the data to the other end. Since BLOCK2 will be filled at t=320ms, there wouldn't be enough time to finish sending the data from BLOCK1 when this block starts to be filled again, and same will happen to BLOCK2, resulting on loss of data.
I believe that having a 500 kbps would effectively increase the data rate, assuming that the preamble and acknowledge times are reduced by half (leading to 1.9 ms) and that the calibration, CCA and startup are around 1 ms , the effective data rate would be 50 * 8 /2.9 ms= 137.9 kbps. Still not enough. The minimum data rate would be around 214 kbps in order to have enough time to send the information without loosing data.
One of the options I have is to reduce the sampling frequency to 500 Hz and having the effective data rate of 137.9 kbps. This would limit the detection algorithm I would be using on the PC for detection myocardiac infarction but that can be solved.
Once the situation is described, the questions are the next:
1. How can I set the data rate from 250 kbps to 500 kbps for the CC2500in simpliciTI? I have tried looking for the file and register to modify but due to all the linking and different files on the stack is very difficult. I will appreciate any hint.
2. Another approach would be to use the CC2500 without simpliciTI. Could you point me some code examples for using the CC2500 with the MSP430FG4618 experimenter's board using CCS? I have only found the example using IAR.
3. Finally, can I communicate the ED I am designing with the eZ430-RF2500T plugged to the eZ430-RF USB to send the data to the computer by modifying the sensor monitor GUI? (I potentially see a problem due to the 1K RAM of the MSP430F2274). Do you have any other suggestion for using an existing eval board with GUI as base station?
Thanks a lot for taking the time reading my question. An answer for any of the 3 questions would be greatly appreciated but the first is what is getting me stuck so please help specially on that one =),
Efrain
Jesus Efrain Gaxiola-Sosa
PhD Candidate
Analog and Mixed Signal Center
Electrical and Computer Engineering
Texas A&M University