Hello People,
I'm not able to properly interface with RFEM24-250 RF Energy Module via I2C. Specifically, I cannot set the device mode to operating as it is always in standby mode. I followed all the basic command sequences mentioned in the user manual specifications. Any help or extra documentation would be appreciated.
-Ganesh
Were you able to successfully interface with the module?
I am attempting to do the same using I2C with a Total Phase Aardvark as the Master OR an Arduino Uno as the maser both through Matlab.
I can do python as well, but the customer preferred matlab. Please advise.
Yes. I was able to connect. Please let me know which step you are stuck on.
-Ganesh
-Ganesh
At first, try to determine the reason of the standby using LED indication as described in the Interface Reference Manual.
Then read "Read Alerts" register and investigate all the status bits.
If CMD_ERR Alert bit is set, read an error code that will provide more information as to the cause of the error.
Have a great day,
Pavel
TIC
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------
Pavel, the LED is awaiting ID assignment in my case. Yet, I cannot get it to assign address. The arduino uno dioes not detect it either by 0x7F address or by bus search. A total phase aardvark as master does see the device at the 0X7F address, but device does not seem to respond.
Ideally, I would like to control with an Arduino Uno as master through matlab. This method allows the user to monitor other pins and device status. Please advise.
Hello!
I got the Module to work and its worth the money. Firstly, I hope you were able to download the interface datasheet from NXP.
I followed the following steps to assign the ID after your regular initializations:
This should work. Verify by LED Status! (It should change to Standby)
Also, I would recommend the following troubleshooting tips before you actually connect your load:
Do let me know if you need more help.
-Ganesh
Hey Ganesh, reviving an old thread. I am also trying to use an Arduino UNO as the host for this module. I am stuck on figuring out the CRC calculation function. For the reset command, 0x00, the supplied function (and lookup table) generates 0x65 which matches your comment and seems to have the desired effect. However, when I try the CRC calculation for the Read Alerts command I am missing something.
Sending 0x46 0xB0 as you suggest above does seem successful, as I am able to then read alert bytes back (ie Wire.available() = 2). However, when I try to use the supplied CRC functions (either lookup or the alternate implementation shown on page 25 of the interface doc) with an input of 0x46 I get 0x97 (151) instead of the 0xB0 value suggested.
Can you provide the code you used to get the module running, or comment on what may be going wrong with my understanding of the CRC code?
CRC Table:
static const uint8_t crc8_table_[256] = {
0x00, 0x65, 0xCA, 0xAF, 0xF1, 0x94, 0x3B, 0x5E, 0x87, 0xE2, 0x4D, 0x28, 0x76, 0x13, 0xBC, 0xD9,
0x6B, 0x0E, 0xA1, 0xC4, 0x9A, 0xFF, 0x50, 0x35, 0xEC, 0x89, 0x26, 0x43, 0x1D, 0x78, 0xD7, 0xB2,
0xD6, 0xB3, 0x1C, 0x79, 0x27, 0x42, 0xED, 0x88, 0x51, 0x34, 0x9B, 0xFE, 0xA0, 0xC5, 0x6A, 0x0F,
0xBD, 0xD8, 0x77, 0x12, 0x4C, 0x29, 0x86, 0xE3, 0x3A, 0x5F, 0xF0, 0x95, 0xCB, 0xAE, 0x01, 0x64,
0xC9, 0xAC, 0x03, 0x66, 0x38, 0x5D, 0xF2, 0x97, 0x4E, 0x2B, 0x84, 0xE1, 0xBF, 0xDA, 0x75, 0x10,
0xA2, 0xC7, 0x68, 0x0D, 0x53, 0x36, 0x99, 0xFC, 0x25, 0x40, 0xEF, 0x8A, 0xD4, 0xB1, 0x1E, 0x7B,
0x1F, 0x7A, 0xD5, 0xB0, 0xEE, 0x8B, 0x24, 0x41, 0x98, 0xFD, 0x52, 0x37, 0x69, 0x0C, 0xA3, 0xC6,
0x74, 0x11, 0xBE, 0xDB, 0x85, 0xE0, 0x4F, 0x2A, 0xF3, 0x96, 0x39, 0x5C, 0x02, 0x67, 0xC8, 0xAD,
0xF7, 0x92, 0x3D, 0x58, 0x06, 0x63, 0xCC, 0xA9, 0x70, 0x15, 0xBA, 0xDF, 0x81, 0xE4, 0x4B, 0x2E,
0x9C, 0xF9, 0x56, 0x33, 0x6D, 0x08, 0xA7, 0xC2, 0x1B, 0x7E, 0xD1, 0xB4, 0xEA, 0x8F, 0x20, 0x45,
0x21, 0x44, 0xEB, 0x8E, 0xD0, 0xB5, 0x1A, 0x7F, 0xA6, 0xC3, 0x6C, 0x09, 0x57, 0x32, 0x9D, 0xF8,
0x4A, 0x2F, 0x80, 0xE5, 0xBB, 0xDE, 0x71, 0x14, 0xCD, 0xA8, 0x07, 0x62, 0x3C, 0x59, 0xF6, 0x93,
0x3E, 0x5B, 0xF4, 0x91, 0xCF, 0xAA, 0x05, 0x60, 0xB9, 0xDC, 0x73, 0x16, 0x48, 0x2D, 0x82, 0xE7,
0x55, 0x30, 0x9F, 0xFA, 0xA4, 0xC1, 0x6E, 0x0B, 0xD2, 0xB7, 0x18, 0x7D, 0x23, 0x46, 0xE9, 0x8C,
0xE8, 0x8D, 0x22, 0x47, 0x19, 0x7C, 0xD3, 0xB6, 0x6F, 0x0A, 0xA5, 0xC0, 0x9E, 0xFB, 0x54, 0x31,
0x83, 0xE6, 0x49, 0x2C, 0x72, 0x17, 0xB8, 0xDD, 0x04, 0x61, 0xCE, 0xAB, 0xF5, 0x90, 0x3F, 0x5A
};
uint8_t GetCRCByte(uint8_t* DATA, uint8_t LENGTH, uint8_t CRC_SEED)
{
//Keep Decrementing the Data length!
while(LENGTH--)
{
CRC_SEED = crc8_table_[(uint8_t)(CRC_SEED ^ *DATA++)];
}
return CRC_SEED;
}
Awesome, thank you for the response - my problem actually ended up being with the I2C bus which is now sorted. Now that I have that fixed though, I am unsure how to supply the required 32MHz clock (or standalone crystal as I'm only using one module). I have 32 MHz crystal oscillators but the interface document is very scarce on how this should be input to the RFEM. What was your solution for that?
Hey Bud! see the picture for details on my setup for the crystal. I used an enable line to control this crystal oscillator (it is optional)
Great, many thanks for the helpful responses. I have a functioning clock set up and the module is entering operating mode. Unfortunately it is now failing the pulse test with error code 0xA1, "under forward power" in the low power portion of the test. Did you run into anything similar? The interface manual again doesn't give any information on troubleshooting.