Test program to send MAX!-Messages with a RFM22-Module

Dependencies:   RF22 TextLCD TextLCDScroll mbed RF22Max

Committer:
charly
Date:
Mon Jan 16 19:06:53 2012 +0000
Revision:
0:94dd393bd9bb
Child:
1:b71f9a293c54
Intial Version working on mbed.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
charly 0:94dd393bd9bb 1
charly 0:94dd393bd9bb 2 // Test code used during library development, showing how
charly 0:94dd393bd9bb 3 // to do various things, and how to call various functions
charly 0:94dd393bd9bb 4 // ported to mbed by Karl Zweimueller
charly 0:94dd393bd9bb 5
charly 0:94dd393bd9bb 6 #include "mbed.h"
charly 0:94dd393bd9bb 7
charly 0:94dd393bd9bb 8 #include <RF22.h>
charly 0:94dd393bd9bb 9
charly 0:94dd393bd9bb 10 Serial pc(USBTX, USBRX);
charly 0:94dd393bd9bb 11
charly 0:94dd393bd9bb 12 // mbed LEDs
charly 0:94dd393bd9bb 13 //DigitalOut led1(LED1);
charly 0:94dd393bd9bb 14 //DigitalOut led2(LED2);
charly 0:94dd393bd9bb 15 //DigitalOut led3(LED3);
charly 0:94dd393bd9bb 16 //DigitalOut led4(LED4);
charly 0:94dd393bd9bb 17
charly 0:94dd393bd9bb 18
charly 0:94dd393bd9bb 19 // Singleton instance of the radio
charly 0:94dd393bd9bb 20 //rf22(PinName slaveSelectPin , PinName mosi, PinName miso, PinName sclk, PinName interrupt );
charly 0:94dd393bd9bb 21 RF22 rf22(p14,p11,p12,p13,p15);
charly 0:94dd393bd9bb 22
charly 0:94dd393bd9bb 23 void setup() {
charly 0:94dd393bd9bb 24
charly 0:94dd393bd9bb 25 if (!rf22.init())
charly 0:94dd393bd9bb 26 pc.printf("RF22 init failed\n\r");
charly 0:94dd393bd9bb 27 }
charly 0:94dd393bd9bb 28
charly 0:94dd393bd9bb 29 void
charly 0:94dd393bd9bb 30 test_read_write() {
charly 0:94dd393bd9bb 31 uint8_t val;
charly 0:94dd393bd9bb 32 rf22.spiWrite(RF22_REG_42_CHECK_HEADER0, 10);
charly 0:94dd393bd9bb 33 val = rf22.spiRead(RF22_REG_42_CHECK_HEADER0);
charly 0:94dd393bd9bb 34 pc.printf("%n\r\n",val);
charly 0:94dd393bd9bb 35
charly 0:94dd393bd9bb 36 rf22.spiWrite(RF22_REG_42_CHECK_HEADER0, 5);
charly 0:94dd393bd9bb 37 val = rf22.spiRead(RF22_REG_42_CHECK_HEADER0);
charly 0:94dd393bd9bb 38 pc.printf("%n\r\n", val);
charly 0:94dd393bd9bb 39 pc.printf("-----");
charly 0:94dd393bd9bb 40 }
charly 0:94dd393bd9bb 41
charly 0:94dd393bd9bb 42 void
charly 0:94dd393bd9bb 43 test_adc() {
charly 0:94dd393bd9bb 44 uint8_t val = rf22.adcRead(RF22_ADCSEL_GND);
charly 0:94dd393bd9bb 45 pc.printf("%n\r\n", val);
charly 0:94dd393bd9bb 46 }
charly 0:94dd393bd9bb 47
charly 0:94dd393bd9bb 48 void test_temp() {
charly 0:94dd393bd9bb 49 float val = rf22.temperatureRead();
charly 0:94dd393bd9bb 50 pc.printf("%3.1f\r\n", (val/2)-64);
charly 0:94dd393bd9bb 51 }
charly 0:94dd393bd9bb 52
charly 0:94dd393bd9bb 53 void
charly 0:94dd393bd9bb 54 test_burst_read() {
charly 0:94dd393bd9bb 55 uint8_t buf[127];
charly 0:94dd393bd9bb 56 rf22.spiBurstRead(0, buf, sizeof(buf));
charly 0:94dd393bd9bb 57 uint8_t i;
charly 0:94dd393bd9bb 58 for (i = 0; i < 127; i++) {
charly 0:94dd393bd9bb 59 pc.printf("%x : %x\n\r",i,buf[i]);
charly 0:94dd393bd9bb 60 }
charly 0:94dd393bd9bb 61 }
charly 0:94dd393bd9bb 62
charly 0:94dd393bd9bb 63 void test_burst_write() {
charly 0:94dd393bd9bb 64 uint8_t buf[] = "Hello";
charly 0:94dd393bd9bb 65 rf22.spiBurstWrite(RF22_REG_7F_FIFO_ACCESS, buf, sizeof(buf));
charly 0:94dd393bd9bb 66 }
charly 0:94dd393bd9bb 67
charly 0:94dd393bd9bb 68 void
charly 0:94dd393bd9bb 69 test_wut() {
charly 0:94dd393bd9bb 70 pc.printf("WUT Start");
charly 0:94dd393bd9bb 71 rf22.setWutPeriod(10000); // 10000, 0, 0 -> 1 secs
charly 0:94dd393bd9bb 72 rf22.spiWrite(RF22_REG_07_OPERATING_MODE1, RF22_ENWT);
charly 0:94dd393bd9bb 73 // Wait for the interrupt to occur
charly 0:94dd393bd9bb 74 while (1) {
charly 0:94dd393bd9bb 75 uint8_t val = rf22.spiRead(RF22_REG_04_INTERRUPT_STATUS2);
charly 0:94dd393bd9bb 76 if (val & RF22_IWUT)
charly 0:94dd393bd9bb 77 break;
charly 0:94dd393bd9bb 78 }
charly 0:94dd393bd9bb 79 rf22.spiWrite(RF22_REG_07_OPERATING_MODE1, 0);
charly 0:94dd393bd9bb 80
charly 0:94dd393bd9bb 81 pc.printf("WUT Interrupt bit detected OK");
charly 0:94dd393bd9bb 82 }
charly 0:94dd393bd9bb 83
charly 0:94dd393bd9bb 84 void
charly 0:94dd393bd9bb 85 test_set_frequency() {
charly 0:94dd393bd9bb 86 if (!rf22.setFHStepSize(0))
charly 0:94dd393bd9bb 87 pc.printf("setFHStepSize 1 Fail");
charly 0:94dd393bd9bb 88 if (!rf22.setFHChannel(0))
charly 0:94dd393bd9bb 89 pc.printf("setFHChannel 1 Fail");
charly 0:94dd393bd9bb 90 if (!rf22.setFrequency(434.0))
charly 0:94dd393bd9bb 91 pc.printf("setFrequency 1 Fail");
charly 0:94dd393bd9bb 92 if (!rf22.setFrequency(240.0))
charly 0:94dd393bd9bb 93 pc.printf("setFrequency 2 Fail");
charly 0:94dd393bd9bb 94 if (!rf22.setFrequency(929.9999)) // Higher than this produces FREQERR on my 06 silicon
charly 0:94dd393bd9bb 95 pc.printf("setFrequency 3 Fail");
charly 0:94dd393bd9bb 96 if (rf22.setFrequency(960.1)) // Should fail
charly 0:94dd393bd9bb 97 pc.printf("setFrequency 4 Fail");
charly 0:94dd393bd9bb 98
charly 0:94dd393bd9bb 99 pc.printf("-------------");
charly 0:94dd393bd9bb 100 }
charly 0:94dd393bd9bb 101
charly 0:94dd393bd9bb 102 void
charly 0:94dd393bd9bb 103 test_rssi() {
charly 0:94dd393bd9bb 104 rf22.setModeRx();
charly 0:94dd393bd9bb 105 pc.printf("Start\n\r");
charly 0:94dd393bd9bb 106 float f = 848.0;
charly 0:94dd393bd9bb 107 while (f < 888.0) {
charly 0:94dd393bd9bb 108 rf22.setFrequency(f);
charly 0:94dd393bd9bb 109 wait_ms(200); // Wait for freq to settle
charly 0:94dd393bd9bb 110 uint8_t rssi = rf22.rssiRead();
charly 0:94dd393bd9bb 111
charly 0:94dd393bd9bb 112 pc.printf("%f: %i\n\r",f,rssi);
charly 0:94dd393bd9bb 113 f += 1.0;
charly 0:94dd393bd9bb 114 }
charly 0:94dd393bd9bb 115 pc.printf("End\n\r");
charly 0:94dd393bd9bb 116 rf22.setModeIdle();
charly 0:94dd393bd9bb 117 pc.printf("\n\r-------------\n\r");
charly 0:94dd393bd9bb 118 }
charly 0:94dd393bd9bb 119
charly 0:94dd393bd9bb 120 // Sends 0.5 secs of PN9 modulated with with GFSK at full power
charly 0:94dd393bd9bb 121 void test_tx_pn9() {
charly 0:94dd393bd9bb 122 rf22.setFrequency(434.0);
charly 0:94dd393bd9bb 123 rf22.setTxPower(RF22_TXPOW_17DBM);
charly 0:94dd393bd9bb 124 rf22.setModeRx();
charly 0:94dd393bd9bb 125 // Takes a little while to start
charly 0:94dd393bd9bb 126 wait(1);
charly 0:94dd393bd9bb 127 pc.printf("%x \n\r",rf22.statusRead());
charly 0:94dd393bd9bb 128 rf22.setModemConfig(RF22::FSK_PN9_Rb2Fd5);
charly 0:94dd393bd9bb 129 // rf22.setModemConfig(RF22::UnmodulatedCarrier);
charly 0:94dd393bd9bb 130 rf22.setModeTx(); // Turns off Rx
charly 0:94dd393bd9bb 131 // Takes a little while to start
charly 0:94dd393bd9bb 132 wait(1);
charly 0:94dd393bd9bb 133 pc.printf("%x \n\r",rf22.statusRead());
charly 0:94dd393bd9bb 134 wait_ms(500);
charly 0:94dd393bd9bb 135 rf22.setModeIdle();
charly 0:94dd393bd9bb 136 // Takes a little while to turn off the transmitter
charly 0:94dd393bd9bb 137 wait_ms(10);
charly 0:94dd393bd9bb 138 pc.printf("%x \n\r",rf22.statusRead());
charly 0:94dd393bd9bb 139 pc.printf("-------------");
charly 0:94dd393bd9bb 140 wait_ms(500);
charly 0:94dd393bd9bb 141 }
charly 0:94dd393bd9bb 142
charly 0:94dd393bd9bb 143 // Connect analog test points to GPIO1 and GPIO2
charly 0:94dd393bd9bb 144 void test_analog_gpio() {
charly 0:94dd393bd9bb 145 rf22.setFrequency(434.0);
charly 0:94dd393bd9bb 146 rf22.setModeRx();
charly 0:94dd393bd9bb 147 // GPIO1 for Test N output
charly 0:94dd393bd9bb 148 rf22.spiWrite(RF22_REG_0C_GPIO_CONFIGURATION1, 0x0c);
charly 0:94dd393bd9bb 149 // GPIO2 for Test P output
charly 0:94dd393bd9bb 150 rf22.spiWrite(RF22_REG_0D_GPIO_CONFIGURATION2, 0x0d);
charly 0:94dd393bd9bb 151 rf22.spiWrite(RF22_REG_50_ANALOG_TEST_BUS_SELECT, 15); // Detector?
charly 0:94dd393bd9bb 152 while (1);
charly 0:94dd393bd9bb 153 }
charly 0:94dd393bd9bb 154
charly 0:94dd393bd9bb 155 void test_modem_config() {
charly 0:94dd393bd9bb 156 if (rf22.setModemConfig((RF22::ModemConfigChoice)255)) // Should fail
charly 0:94dd393bd9bb 157 pc.printf("setModemConfig 1 failed");
charly 0:94dd393bd9bb 158 if (!rf22.setModemConfig(RF22::FSK_Rb2Fd5))
charly 0:94dd393bd9bb 159 pc.printf("setModemConfig 2 failed");
charly 0:94dd393bd9bb 160 if (!rf22.setModemConfig(RF22::FSK_Rb2_4Fd36))
charly 0:94dd393bd9bb 161 pc.printf("setModemConfig 3 failed");
charly 0:94dd393bd9bb 162 if (!rf22.setModemConfig(RF22::GFSK_Rb2_4Fd36))
charly 0:94dd393bd9bb 163 pc.printf("setModemConfig 3 failed");
charly 0:94dd393bd9bb 164 if (!rf22.setModemConfig(RF22::OOK_Rb40Bw335))
charly 0:94dd393bd9bb 165 pc.printf("setModemConfig 4 failed");
charly 0:94dd393bd9bb 166
charly 0:94dd393bd9bb 167 pc.printf("-------------");
charly 0:94dd393bd9bb 168 }
charly 0:94dd393bd9bb 169
charly 0:94dd393bd9bb 170 // This works with test_rx below
charly 0:94dd393bd9bb 171 void test_tx() {
charly 0:94dd393bd9bb 172 pc.printf("Start Send...\n\r");
charly 0:94dd393bd9bb 173 if (!rf22.setFrequency(869.50))
charly 0:94dd393bd9bb 174 pc.printf("setFrequency failed");
charly 0:94dd393bd9bb 175 if (!rf22.setModemConfig(RF22::GFSK_Rb2Fd5))
charly 0:94dd393bd9bb 176 pc.printf("setModemConfig failed");
charly 0:94dd393bd9bb 177 //uint8_t data[] = "hello";
charly 0:94dd393bd9bb 178 // 255 octets:
charly 0:94dd393bd9bb 179 uint8_t data[] = "12345678901234567890123456789012345678901234567890123456789012312345678901234567890123456789012345678901234567890123456789012312345678901234567890123456789012345678901234567890123456789012312345678901234567890123456789012345678901234567890123456789012345";
charly 0:94dd393bd9bb 180 rf22.send(data, sizeof(data));
charly 0:94dd393bd9bb 181 rf22.waitPacketSent();
charly 0:94dd393bd9bb 182 pc.printf("Send OK\n\r");
charly 0:94dd393bd9bb 183
charly 0:94dd393bd9bb 184 }
charly 0:94dd393bd9bb 185
charly 0:94dd393bd9bb 186 // This works with test_tx above
charly 0:94dd393bd9bb 187 void test_rx() {
charly 0:94dd393bd9bb 188 pc.printf("Start Receive...\n\r");
charly 0:94dd393bd9bb 189 //if (!rf22.setFrequency(869.50))
charly 0:94dd393bd9bb 190 if (!rf22.setFrequency(869.49)) // sending frequesnce doesn't work!!! Seems to be a problem if combining RFM22B-S1 with -S2
charly 0:94dd393bd9bb 191 pc.printf("setFrequency failed\n\r");
charly 0:94dd393bd9bb 192 if (!rf22.setModemConfig(RF22::GFSK_Rb2Fd5))
charly 0:94dd393bd9bb 193 pc.printf("setModemConfig failed\n\r");
charly 0:94dd393bd9bb 194
charly 0:94dd393bd9bb 195 //while (1) {
charly 0:94dd393bd9bb 196 uint8_t buf[RF22_MAX_MESSAGE_LEN];
charly 0:94dd393bd9bb 197 uint8_t len = sizeof(buf);
charly 0:94dd393bd9bb 198 if (rf22.recv(buf, &len)) // Should fail, no message available
charly 0:94dd393bd9bb 199 pc.printf("recv 1 failed\n\r");
charly 0:94dd393bd9bb 200
charly 0:94dd393bd9bb 201 //rf22.waitAvailable();
charly 0:94dd393bd9bb 202 if (rf22.waitAvailableTimeout(6000)) {
charly 0:94dd393bd9bb 203 if (rf22.recv(buf, &len))
charly 0:94dd393bd9bb 204 pc.printf("got one in user: >%s<\n\r",(char*)buf);
charly 0:94dd393bd9bb 205
charly 0:94dd393bd9bb 206 else
charly 0:94dd393bd9bb 207 pc.printf("recv 2 failed\n\r");
charly 0:94dd393bd9bb 208 } else
charly 0:94dd393bd9bb 209 pc.printf("recv timeout\n\r");
charly 0:94dd393bd9bb 210
charly 0:94dd393bd9bb 211 //}
charly 0:94dd393bd9bb 212 }
charly 0:94dd393bd9bb 213
charly 0:94dd393bd9bb 214 void loop() {
charly 0:94dd393bd9bb 215 // test_read_write();
charly 0:94dd393bd9bb 216 // test_adc();
charly 0:94dd393bd9bb 217 // test_temp();
charly 0:94dd393bd9bb 218 // test_burst_read();
charly 0:94dd393bd9bb 219 // test_burst_write();
charly 0:94dd393bd9bb 220 // test_wut();
charly 0:94dd393bd9bb 221 // test_set_frequency();
charly 0:94dd393bd9bb 222 // test_rssi();
charly 0:94dd393bd9bb 223 test_tx_pn9();
charly 0:94dd393bd9bb 224 // test_analog_gpio();
charly 0:94dd393bd9bb 225 // test_modem_config();
charly 0:94dd393bd9bb 226 // test_tx();
charly 0:94dd393bd9bb 227 // test_rx();
charly 0:94dd393bd9bb 228
charly 0:94dd393bd9bb 229 // while (1);
charly 0:94dd393bd9bb 230 wait_ms(1000);
charly 0:94dd393bd9bb 231 }
charly 0:94dd393bd9bb 232
charly 0:94dd393bd9bb 233 /*float start = 868.0;
charly 0:94dd393bd9bb 234 float end = 868.8;
charly 0:94dd393bd9bb 235 */
charly 0:94dd393bd9bb 236 //869,40 - 869,65 Allgemein
charly 0:94dd393bd9bb 237 float start = 869.4;
charly 0:94dd393bd9bb 238 float end = 869.65;
charly 0:94dd393bd9bb 239 float step = 0.02;
charly 0:94dd393bd9bb 240
charly 0:94dd393bd9bb 241 void spec() {
charly 0:94dd393bd9bb 242 rf22.setModeRx();
charly 0:94dd393bd9bb 243 float freq;
charly 0:94dd393bd9bb 244 pc.printf("\033[H"); // Home
charly 0:94dd393bd9bb 245 pc.printf("\033[2J"); // Clear Screen
charly 0:94dd393bd9bb 246 for (freq = start; freq < end; freq += step) {
charly 0:94dd393bd9bb 247 rf22.setFrequency(freq);
charly 0:94dd393bd9bb 248 wait_ms(10); // Let the freq settle
charly 0:94dd393bd9bb 249 uint8_t rssi = rf22.rssiRead();
charly 0:94dd393bd9bb 250 uint8_t stars = rssi / 8;
charly 0:94dd393bd9bb 251
charly 0:94dd393bd9bb 252 pc.printf("%f: ",freq);
charly 0:94dd393bd9bb 253
charly 0:94dd393bd9bb 254 // Serial.print(rssi, DEC);
charly 0:94dd393bd9bb 255 uint8_t i;
charly 0:94dd393bd9bb 256 for (i = 0; i < stars; i++)
charly 0:94dd393bd9bb 257 pc.putc('*');
charly 0:94dd393bd9bb 258 pc.printf("\033[K\n\r"); // DElete to EOL
charly 0:94dd393bd9bb 259
charly 0:94dd393bd9bb 260 }
charly 0:94dd393bd9bb 261 pc.printf("------------------\n\r");
charly 0:94dd393bd9bb 262 }
charly 0:94dd393bd9bb 263
charly 0:94dd393bd9bb 264
charly 0:94dd393bd9bb 265 int main() {
charly 0:94dd393bd9bb 266 pc.baud(115200);
charly 0:94dd393bd9bb 267
charly 0:94dd393bd9bb 268 pc.printf("\n\rConnected to mbed\n\r");
charly 0:94dd393bd9bb 269
charly 0:94dd393bd9bb 270 pc.printf("Pre-setup|");
charly 0:94dd393bd9bb 271 setup();
charly 0:94dd393bd9bb 272 pc.printf("Post-setup\n\r");
charly 0:94dd393bd9bb 273
charly 0:94dd393bd9bb 274
charly 0:94dd393bd9bb 275 //pc.printf("Pre-test_temp|");
charly 0:94dd393bd9bb 276 //test_temp();
charly 0:94dd393bd9bb 277 //pc.printf("Post-test_temp\n\r");
charly 0:94dd393bd9bb 278
charly 0:94dd393bd9bb 279 //pc.printf("Pre-test_set_frequency|");
charly 0:94dd393bd9bb 280 //test_set_frequency();
charly 0:94dd393bd9bb 281 //pc.printf("Post-test_set_frequency\n\r");
charly 0:94dd393bd9bb 282
charly 0:94dd393bd9bb 283 /* while (1){
charly 0:94dd393bd9bb 284 pc.printf("Pre-test_rssi|");
charly 0:94dd393bd9bb 285 test_rssi();
charly 0:94dd393bd9bb 286 pc.printf("Post-test_rssi\n\r");
charly 0:94dd393bd9bb 287 }
charly 0:94dd393bd9bb 288
charly 0:94dd393bd9bb 289 while (1) {
charly 0:94dd393bd9bb 290 spec();
charly 0:94dd393bd9bb 291 }
charly 0:94dd393bd9bb 292 */
charly 0:94dd393bd9bb 293
charly 0:94dd393bd9bb 294 while (1) {
charly 0:94dd393bd9bb 295 test_tx();
charly 0:94dd393bd9bb 296 rf22.setModeRx();
charly 0:94dd393bd9bb 297 wait(0.5);
charly 0:94dd393bd9bb 298 test_rx();
charly 0:94dd393bd9bb 299 wait(2);
charly 0:94dd393bd9bb 300 spec();
charly 0:94dd393bd9bb 301 }
charly 0:94dd393bd9bb 302
charly 0:94dd393bd9bb 303 //pc.printf("Ready.\n\r");
charly 0:94dd393bd9bb 304 }
charly 0:94dd393bd9bb 305
charly 0:94dd393bd9bb 306