{"id":263,"date":"2010-11-14T02:20:37","date_gmt":"2010-11-14T02:20:37","guid":{"rendered":"http:\/\/louisc.co.uk\/FYP\/?p=263"},"modified":"2016-11-05T11:17:47","modified_gmt":"2016-11-05T11:17:47","slug":"experiment-connecting-up-and-testing-the-rf12-trx433s-modules","status":"publish","type":"post","link":"https:\/\/louisc.co.uk\/?p=263","title":{"rendered":"Experiment &#8211; Connecting up and testing the RF12 \/ TRX433S modules"},"content":{"rendered":"<h1><span style=\"text-decoration: underline;\">Experiment Aim<\/span><\/h1>\n<p>The aim here is to Setup two wireless modules and use the RF12_Demo application provided with the <a href=\"http:\/\/jeelabs.org\/\">JeeLabs <\/a>library to drive the modules.\u00a0Special attention will be paid to the robustness of the signal at range.<\/p>\n<p>A secondary aim is to gain an understanding into how the library is driving the modules and begin to think about how I will implement them.<\/p>\n<h2>Predicted Outcome<\/h2>\n<p>The specifications on the module say that they can reach a maximum distance of 300m. It must be assumed this will be in ideal conditions with no obstacles or\u00a0interference\u00a0 and hence direct line of sight. This will also assume correct antenna use. A prediction of around 20-30m would be impressive considering testing is being carried out in the Undergraduate Engineering labs which are densely filled with electronic equipment.<\/p>\n<h1><span style=\"text-decoration: underline;\">Setup<\/span><\/h1>\n<p>After reading through the documentation provided with the library the following setup was chosen:<\/p>\n<h2>Circuit<\/h2>\n<p>The following diagram illustrates the circuit to be used and how it will be connected on the breadboard:<\/p>\n<table border=\"0\">\n<tbody>\n<tr>\n<td><a href=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/Untitled-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-265 \" title=\"Diagram of test circuit for transceiver module\" src=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/Untitled-2.png\" alt=\"\" width=\"519\" height=\"232\" srcset=\"https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/Untitled-2-300x133.png 300w, https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/Untitled-2.png 742w\" sizes=\"auto, (max-width: 519px) 100vw, 519px\" \/><\/a><\/td>\n<\/tr>\n<tr>\n<td style=\"text-align: center;\">Test circuit Setup for the Alpha transceiver module. (RF12)<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><!--more-->This was worked out by looking at the header files of the library:<\/p>\n<pre class=\"brush: cpp\">\/\/ ATmega328, etc.\r\n#define RFM_IRQ     2\r\n#define SS_PORT     PORTB\r\n#define SPI_SS      5\r\n#define SPI_MOSI    11\r\n#define SPI_MISO    12\r\n#define SPI_SCK     13<\/pre>\n<p>These were referenced with the\u00a0pin out\u00a0diagram of the transceiver module:<\/p>\n<div class=\"fusion-fullwidth fullwidth-box hundred-percent-fullwidth non-hundred-percent-height-scrolling\"  style='background-color: rgba(255,255,255,0);background-position: center center;background-repeat: no-repeat;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;'><div class=\"fusion-builder-row fusion-row \"><div  class=\"fusion-layout-column fusion_builder_column fusion_builder_column_1_1  fusion-one-full fusion-column-first fusion-column-last fusion-column-no-min-height 1_1\"  style='margin-top:0px;margin-bottom:0px;'>\n\t\t\t\t\t<div class=\"fusion-column-wrapper\" style=\"background-position:left top;background-repeat:no-repeat;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;\"  data-bg-url=\"\">\n\t\t\t\t\t\t<div id=\"attachment_123\" style=\"width: 310px\" class=\"wp-caption alignnone\"><a href=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/11\/pinout_alphatx.jpg\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-123\" class=\"size-medium wp-image-123\" title=\"Pin-out for ALPHA RF module \" src=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/11\/pinout_alphatx-300x196.jpg\" alt=\"Pin-out for ALPHA RF module\" width=\"300\" height=\"196\" srcset=\"https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/11\/pinout_alphatx-300x196.jpg 300w, https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/11\/pinout_alphatx.jpg 590w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><p id=\"caption-attachment-123\" class=\"wp-caption-text\">Pin-out for ALPHA RF module (From Data Sheet)<\/p><\/div>\n<h2>Code &#8211; &#8220;RF12demo&#8221; (<em>Relevant excerpts<\/em>)<\/h2>\n<p>A look into what the demo code is doing to better understand what is going on. The microcontroller (MCU) was flashed with the demo program. A serial console was then opened on the computer it was connected to and a serial connection established.<\/p>\n<h3>Setup code:<\/h3>\n<p>This is the code which will be run before entering the main loop. I have used comments to better explain what it does.<\/p>\n<pre class=\"brush: cpp\">void setup() {\r\n      \/\/Initialize a serial connection with the\r\n      \/\/computer at 27600 baud\r\n      Serial.begin(57600);\r\n      \/\/A simple print via serial connection\r\n      Serial.print(\"\\n<div class=\"fusion-clearfix\"><\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div><div  class=\"fusion-layout-column fusion_builder_column fusion_builder_column_1_1  fusion-one-full fusion-column-first fusion-column-last fusion-column-no-min-height 1_1\"  style='margin-top:0px;margin-bottom:0px;'>\n\t\t\t\t\t<div class=\"fusion-column-wrapper\" style=\"background-position:left top;background-repeat:no-repeat;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover;\"  data-bg-url=\"\">\n\t\t\t\t\t\t[RF12demo.6]\");\r\n      \/\/First check EEPROM memory for stored configuration,\r\n      \/\/if nothing is found it will default to the else statement\r\n      if (rf12_config()) {\r\n         config.nodeId = eeprom_read_byte(RF12_EEPROM_ADDR);\r\n         config.group = eeprom_read_byte(RF12_EEPROM_ADDR + 1);\r\n     }\r\n     \/\/ The default settings if no previously stored\r\n     \/\/configuration is found in EEPROM\r\n     else {\r\n         config.nodeId = 0x41; \/\/ node A1 @ 433 MHz\r\n         config.group = 0xD4;\r\n         saveConfig();\r\n     }\r\n\r\n      \/\/This will run the show help function which\r\n      \/\/prints text containing commands to the screen\r\n      showHelp();\r\n }<\/pre>\n<p>Before continuing a look at the commands this demo program allows. This is the code that the &#8220;showHelp&#8221; function prints to the serial connection,\u00a0useful\u00a0commands have been commented:<\/p>\n<pre class=\"brush: cpp\">char helpText1[] PROGMEM =\r\n    \"\\n\"\r\n    \"Available commands:\" \"\\n\"\r\n    \/\/ This will allow setting of ID in EEPROM -----------------\r\n    \"   i     - set node ID (standard node ids are 1..26)\"\r\n    \"           (or enter an uppercase 'A'..'Z' to set id)\"\r\n    \/\/ ------------------------------------------------------\r\n    \"   b     - set MHz band (4 = 433, 8 = 868, 9 = 915)\"\r\n    \"   g     - set network group (RFM12 only allows 212, 0 = any)\"\r\n    \"   c     - set collect mode (advanced, normally 0)\"\r\n    \/\/ ------Our main method of testing will be using this-----\r\n    \"   t     - broadcast max-size test packet, with ack\"\r\n    \"  ..., a - send data packet to node , with ack\"\r\n    \/\/ ------------------------------------------------------\r\n    \"  ..., s - send data packet to node , no ack\"\r\n    \"   l     - turn activity LED on PB1 on or off\"\r\n    \"   q     - set quiet mode (1 = don't report bad packets)\"\r\n;<\/pre>\n<h3>Main Loop<\/h3>\n<p>Now the initialization of the device is complete it will fall into its main loop where it will wait for instructions via serial or received packets via the wireless module. Some relevant code excerpts have been explained below: The first condition we have will check whether there is any information on the serial buffer. If there is it will read the data into the function handleInput().<\/p>\n<pre class=\"brush: cpp\">    if (Serial.available())\r\n        handleInput(Serial.read());<\/pre>\n<p>Inside &#8220;handleInput&#8221; is a simple set of switch case statements. I have included below the switch case statements for the highlighted commands above:<\/p>\n<p>If &#8216;i&#8217; is send to the board via serial the following code is executed:<\/p>\n<pre class=\"brush: cpp\">case 'i': \/\/ set node id\r\n        config.nodeId = (config.nodeId &amp; 0xE0) + (value &amp; 0x1F);\r\n        saveConfig();\r\n        break;<\/pre>\n<p>So simply put when &#8216;i&#8217; is selected the variable &#8220;nodeId&#8221; in class config is filled. The config is then saved. If &#8216;t&#8217; is selected the following is run:<\/p>\n<pre class=\"brush: cpp\">case 't': \/\/ broadcast a maximum size test packet, request an ack\r\n        cmd = 'a';\r\n        sendLen = RF12_MAXDATA;\r\n        dest = 0;\r\n        for (byte i = 0; i &lt; RF12_MAXDATA; ++i)\r\n             testbuf[i] = i;\r\n        break;<\/pre>\n<p>The task here is to broadcast a test packet of the maximum size available and request an acknowledgement. If this is broken down:<\/p>\n<ul>\n<li>Firstly broadcast means we want to send it to all nodes. This is done by setting its destination address to 0. This can be seen on line 4 of the code above.<\/li>\n<li>Maximum size of a packet is defined in the header file by RF12_MAXDATA. We will set &#8220;sendLen&#8221; to this value. To create some data to send we load the array with numbers using a for loop from 0 to RF12_MAXDATA.<\/li>\n<li>Lastly an ack must be requested. This is done by setting the &#8220;cmd&#8221; variable to &#8216;a&#8217;.<\/li>\n<\/ul>\n<p>It will soon become clear how setting these variable will, after breaking from this switch case, influence the behaviour of the radio module. Here we see the &#8216;a&#8217; and the &#8216;s&#8217; keys run the same piece of code. The only difference is that the selected choice is moved into the global variable &#8220;cmd&#8221;.<\/p>\n<pre class=\"brush: cpp\">            case 'a': \/\/ send packet to node ID N, request an ack\r\n            case 's': \/\/ send packet to node ID N, no ack\r\n                cmd = c;\r\n                sendLen = top;\r\n                dest = value;\r\n                memcpy(testbuf, stack, top);\r\n                break;<\/pre>\n<p>So the above commands, &#8216;t&#8217;, &#8216;a&#8217; and &#8216;s&#8217; set up some variables but do not actually transmit anything. The transmission part is done outside of the switch case. This was done, most likely to reduce the\u00a0repetition of code within the program. Below is the code which actually performs the\u00a0transmission\u00a0using calls to library provided functions: Before taking a look at this code its makes for easier visual conception to see take a look at the structure of a packet:<\/p>\n<pre class=\"brush: cpp\">    if (cmd &amp;&amp; rf12_canSend()) {\r\n        Serial.print(\" -&gt; \");\r\n        Serial.print((int) sendLen);\r\n        Serial.println(\" b\");\r\n        byte header = cmd == 'a' ? RF12_HDR_ACK : 0;\r\n        if (dest)\r\n            header |= RF12_HDR_DST | dest;\r\n        rf12_sendStart(header, testbuf, sendLen);\r\n        cmd = 0;\r\n    }<\/pre>\n<p>So to begin we have <em>if (cmd &amp;&amp; rf12_canSend()). <\/em>Here is a condition which stops a send going ahead without a command first being set AND the module returning true to &#8220;rf12_canSend&#8221; stating its readiness. The module cannot transmit and\u00a0receive\u00a0at the same time.<\/p>\n<p>At this point it became important to understand the structure of the packet to be sent. The diagram below shows the packet layout:<\/p>\n<p><a href=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/packet_struct_03.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-303 \" title=\"Packet Structure Diagram \" src=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/packet_struct_03.png\" alt=\"\" width=\"485\" height=\"39\" srcset=\"https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/packet_struct_03-300x24.png 300w, https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/packet_struct_03.png 606w\" sizes=\"auto, (max-width: 485px) 100vw, 485px\" \/><\/a><\/p>\n<p>Command to build packet:<\/p>\n<pre><code>void rf12_sendStart(byte header, const void* data, byte length);<\/code><\/pre>\n<ul>\n<li>Header: Destination, if ack is required or if it is an ack<\/li>\n<li>Length: Length of data in bytes (up to 66 bytes)<\/li>\n<li>Data: A pointer to the data to be sent<\/li>\n<\/ul>\n<p>Above we saw the data to be transmitted being placed into a variable names &#8220;testbuf&#8221; and the length of &#8220;testbuf&#8221; placed into &#8220;sendLen&#8221;. Now a look into how the application is building the correct packets for\u00a0transmission:<\/p>\n<p>After printing some\u00a0characters\u00a0to the serial port the header of the packet to be sent is built factoring in whether to request an acknowledgement or not.\u00a0The line<\/p>\n<p><em>&#8220;byte header = cmd == &#8216;a&#8217; ? RF12_HDR_ACK : 0 ;&#8221;<\/em><\/p>\n<p>is a simple &#8220;if&#8221; statement. It could also be written:<\/p>\n<pre class=\"brush: cpp\">if( cmd == 'a')               \/\/If cmd is equal to 'a'\r\n     header = RF12_HDR_ACK;   \/\/Header is set equal to the pre-defined-\r\nelse                          \/\/-value RF12_HDR_ACK\r\n     header = 0;              \/\/If not header is set to Zero<\/pre>\n<p>Next we bring together all the variables we have just set and pass them to &#8220;rf12_sendstart&#8221; for transmission:<\/p>\n<pre class=\"brush: cpp\">rf12_sendStart(header, testbuf, sendLen);<\/pre>\n<h1>Experiment and Results<\/h1>\n<p>The experiment was simple.\u00a0Set-up\u00a0one of the Boards described above on a desk attached to a bench power supply. Power the other from a laptop and walk around whilst hitting the &#8216;t&#8217; command. This will transmit a packet and then display acknowledgements, if any,\u00a0received.<\/p>\n<p>This was carried out in the undergraduate\u00a0laboratories at the\u00a0University\u00a0of Surrey. These labs are packed\u00a0densely with electronic instruments and devices.<\/p>\n<p>A diagram of the\u00a0set-up:<\/p>\n<p><a href=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/wireless-demo_sm.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-310\" title=\"wireless-demo_diagram\" src=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/wireless-demo_sm.png\" alt=\"\" width=\"454\" height=\"254\" srcset=\"https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/wireless-demo_sm-300x168.png 300w, https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/wireless-demo_sm.png 900w\" sizes=\"auto, (max-width: 454px) 100vw, 454px\" \/><\/a><\/p>\n<p>The results were very impressive. The link was solid for over 25 meters in nearly all directions. This was through walls and even worked into the building opposite. All in all the results indicate there should be little issue with range and\u00a0transmission\u00a0ability.<\/p>\n<p>Table of results:<\/p>\n<table style=\"width: 216px;\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n<tbody>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\"><\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" colspan=\"2\" valign=\"bottom\">Direction 1<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" colspan=\"2\" valign=\"bottom\">Direction 2<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">Distance (m)<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">packets \u00a0Lost \/ 10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">Line of Sight<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">Packets Lost \/ 10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">Line of Sight<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">2<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">4<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">6<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">1<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">8<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">12<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">14<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">16<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">18<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">20<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">22<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">yes<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">24<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">26<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">6<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">28<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">5<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">30<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">0<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">32<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">8<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">8<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">34<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">36<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">38<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<tr>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">40<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">10<\/td>\n<td style=\"width: 27px; border: 1px solid #000000;\" valign=\"bottom\">no<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>?A graph of the values:<\/p>\n<p><a href=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/11\/linkreliability.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-327\" title=\"linkreliability\" src=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/11\/linkreliability.jpg\" alt=\"\" width=\"496\" height=\"298\" srcset=\"https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/11\/linkreliability-300x180.jpg 300w, https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/11\/linkreliability.jpg 496w\" sizes=\"auto, (max-width: 496px) 100vw, 496px\" \/><\/a><\/p>\n<p>A screen shot of the test taking place (click to zoom):<\/p>\n<p><a href=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/Capture.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-313\" title=\"Screen Capture of the experiment results\" src=\"http:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/Capture.png\" alt=\"\" width=\"409\" height=\"404\" srcset=\"https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/Capture-300x296.png 300w, https:\/\/louisc.co.uk\/wp-content\/uploads\/2010\/12\/Capture.png 584w\" sizes=\"auto, (max-width: 409px) 100vw, 409px\" \/><\/a><\/p>\n<p>Credits once again to <a href=\"http:\/\/jeelabs.org\/\">http:\/\/jeelabs.org\/<\/a>. An\u00a0immensely\u00a0helpful\u00a0and well written library.<div class=\"fusion-clearfix\"><\/div>\n\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div><\/div><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Experiment Aim The aim here is to Setup two wireless modules and use the RF12_Demo application provided with the JeeLabs library to drive the modules.\u00a0Special attention will be paid to the robustness of the signal at range. A secondary aim is to gain an understanding into how the library is driving the modules and begin to think about how I will implement them. Predicted Outcome The specifications on the module say that they can reach a maximum [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":473,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[32],"tags":[19,17,34,35,20,18,40],"class_list":["post-263","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-lightive-reactive-lighting-system","tag-433mhz","tag-alpha","tag-arduino","tag-atmel","tag-spi-interface","tag-transceiver","tag-trx433s"],"_links":{"self":[{"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/263","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=263"}],"version-history":[{"count":58,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/263\/revisions"}],"predecessor-version":[{"id":2724,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/posts\/263\/revisions\/2724"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=\/wp\/v2\/media\/473"}],"wp:attachment":[{"href":"https:\/\/louisc.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=263"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=263"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/louisc.co.uk\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=263"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}