Rev 409 | Blame | Compare with Previous | Last modification | View Log | Download
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><!-- saved from url=(0054)http://www.robot-electronics.co.uk/htm/srf08tech.shtml --><HTML><HEAD><TITLE>SRF08 Ultra sonic range finder</TITLE><META http-equiv=Content-Type content="text/html; charset=windows-1253"><META content="MSHTML 6.00.2600.0" name=GENERATOR></HEAD><BODY><P align=center><B><FONT size=5>SRF08 Ultra sonic range finder </FONT><FONTsize=3><BR>Technical Specification</FONT></B></P><P align=left>Communication with the SRF08 ultrasonic rangefinder is via the I2Cbus. This is available on popular controllers such as the OOPic and Stamp BS2p,as well as a wide variety of micro-controllers. To the programmer the SRF08behaves in the same way as the ubiquitous 24xx series eeprom's, except that theI2C address is different. The default shipped address of the SRF08 is 0xE0. Itcan be changed by the user to any of 16 addresses E0, E2, E4, E6, E8, EA, EC,EE, F0, F2, F4, F6, F8, FA, FC or FE, therefore up to 16 sonar's can be used. Inaddition to the above addresses, all sonar's on the I2C bus will respond toaddress 0 - the General Broadcast address. This means that writing a rangingcommand to I2C address 0 (0x00) will start all sonar's ranging at the same time.This should be useful in ANN Mode (See below). The results must be readindividually from each sonar's real address. We have <Ahref="http://www.robot-electronics.co.uk/htm/examples.shtml">examples</A> ofusing the SRF08 module with a wide range of popular controllers.</P><P align=left><B>Connections<BR></B>The "Do Not Connect" pin should be leftunconnected. It is actually the CPU MCLR line and is used once only in ourworkshop to program the PIC16F872 on-board after assembly, and has an internalpull-up resistor. The SCL and SDA lines should each have a pull-up resistor to+5v somewhere on the I2C bus. You only need one pair of resistors, not a pairfor every module. They are normally located with the bus master rather than theslaves. The SRF08 is always a slave - never a bus master. If you need them, Irecommend 1.8k resistors. Some modules such as the OOPic already have pull-upresistors and you do not need to add any more. </P><P align=center><IMG height=232src="SRF08 Ultra sonic range finder_files/srf08con.jpg" width=302 border=0></P><P align=left><B>Registers</B><BR> The SRF08 appears as a set of 36registers.</P><DIV align=center><CENTER><TABLE cellSpacing=0 cellPadding=0 width="53%" bgColor=#ffffcc border=1><TBODY><TR><TD width="24%"><P align=center>Location</P></TD><TD width="32%"><P align=center>Read</P></TD><TD width="44%"><P align=center>Write</P></TD></TR><TR><TD width="24%"><P align=center>0</P></TD><TD width="32%"><P align=center>Software Revision</P></TD><TD width="44%"><P align=center>Command Register</P></TD></TR><TR><TD width="24%"><P align=center>1</P></TD><TD width="32%"><P align=center>Light Sensor</P></TD><TD width="44%"><P align=center>Max Gain Register (default 31) </P></TD></TR><TR><TD width="24%"><P align=center>2</P></TD><TD width="32%"><P align=center>1st Echo High Byte</P></TD><TD width="44%"><P align=center>Range Register (default 255)</P></TD></TR><TR><TD width="24%"><P align=center>3</P></TD><TD width="32%"><P align=center>1st Echo Low Byte</P></TD><TD width="44%"><P align=center>N/A</P></TD></TR><TR><TD width="24%"><P align=center>~~~~</P></TD><TD width="32%"><P align=center>~~~~</P></TD><TD width="44%"><P align=center>~~~~</P></TD></TR><TR><TD width="24%"><P align=center>34</P></TD><TD width="32%"><P align=center>17th Echo High Byte</P></TD><TD width="44%"><P align=center>N/A</P></TD></TR><TR><TD width="24%"><P align=center>35</P></TD><TD width="32%"><P align=center>17th Echo Low Byte</P></TD><TD width="44%"><P align=center>N/A</P></TD></TR></TBODY></TABLE></CENTER></DIV><P align=left>Only locations 0, 1 and 2 can be written to. Location 0 is thecommand register and is used to start a ranging session. It cannot be read.Reading from location 0 returns the SRF08 software revision. By default,the ranging lasts for 65mS, but can be changed by writing to the range registerat location 2. If you do so, then you will likely need to change the analoguegain by writing to location 1. See the <B>Changing Range</B> and <B>AnalogueGain</B> sections below.</P><P align=left>Location 1 is the onboard light sensor. This data is updated everytime a new ranging command has completed and can be read when range data isread. The next two locations, 2 and 3, are the 16bit unsigned result from thelatest ranging - high byte first. The meaning of this value depends on thecommand used, and is either the range in inches, or the range in cm or theflight time in uS. A value of zero indicates that no objects were detected.There are up to a further 16 results indicating echo's from more distantobjects. </P><P align=left><B>Commands</B><BR>The are three commands to initiate a ranging(80 to 82), to return the result in inches, centimeters or microseconds. Thereis also an ANN mode (Artificial Neural Network) mode which is described laterand a set of commands to change the I2C address.</P><DIV align=center><CENTER><TABLE cellSpacing=0 cellPadding=0 width="77%" bgColor=#ffffcc border=1><TBODY><TR><TD align=middle width="34%" colSpan=2>Command</TD><TD align=middle width="94%" rowSpan=2>Action</TD></TR><TR><TD align=middle width="16%">Decimal</TD><TD align=middle width="18%">Hex</TD></TR><TR><TD align=middle width="16%">80</TD><TD align=middle width="18%">0x50</TD><TD align=left width="94%">Ranging Mode - Result in inches</TD></TR><TR><TD align=middle width="16%">81</TD><TD align=middle width="18%">0x51</TD><TD align=left width="94%">Ranging Mode - Result in centimeters</TD></TR><TR><TD align=middle width="16%">82</TD><TD align=middle width="18%">0x52</TD><TD align=left width="94%">Ranging Mode - Result in micro-seconds</TD></TR><TR><TD align=middle width="16%"> </TD><TD align=middle width="18%"> </TD><TD align=left width="94%"> </TD></TR><TR><TD align=middle width="16%">83</TD><TD align=middle width="18%">0x53</TD><TD align=left width="94%">ANN Mode - Result in inches</TD></TR><TR><TD align=middle width="16%">84</TD><TD align=middle width="18%">0x54</TD><TD align=left width="94%">ANN Mode - Result in centimeters</TD></TR><TR><TD align=middle width="16%">85</TD><TD align=middle width="18%">0x55</TD><TD align=left width="94%">ANN Mode - Result in micro-seconds</TD></TR><TR><TD align=middle width="16%"> </TD><TD align=middle width="18%"> </TD><TD align=left width="94%"> </TD></TR><TR><TD align=middle width="16%">160</TD><TD align=middle width="18%">0xA0</TD><TD align=left width="94%">1st in sequence to change I2C address</TD></TR><TR><TD align=middle width="16%">165</TD><TD align=middle width="18%">0xA5</TD><TD align=left width="94%">3rd in sequence to change I2C address</TD></TR><TR><TD align=middle width="16%">170</TD><TD align=middle width="18%">0xAA</TD><TD align=left width="94%">2nd in sequence to change I2Caddress</TD></TR></TBODY></TABLE></CENTER></DIV><P align=left><B>Ranging Mode</B><BR>To initiate a ranging, write one of theabove commands to the command register and wait the required amount of time forcompletion and read as many results as you wish. The echo buffer is cleared atthe start of each ranging. The first echo range is placed in locations 2,3. thesecond in 4,5, etc. If a location (high and low bytes) is 0, then there will beno further reading in the rest of the registers. The default and recommendedtime for completion of ranging is 65mS, however you can shorten this by writingto the range register before issuing a ranging command. Light sensor data atlocation 1 will also have been updated after a ranging command. </P><P align=left><B>ANN Mode<BR></B>ANN mode (Artificial Neural Network) isdesigned to provide the multi echo data in a way that is easier to input to aneural network, at least I hope it is - I've not actually done it yet. ANN modeprovides a 32 byte buffer (locations 4 to 35 inclusive) where each byterepresents the 65536uS maximum flight time divided into 32 chunks of 2048uS each- equivalent to about 352mm of range. If an echo is received within a bytes timeslot then it will be set to no-zero, otherwise it will be zero. So if an echo isreceived from within the first 352mm, location 4 will be non-zero. If an objectis detected 3m away the location 12 will be non-zero (3000/352 = 8) (8+4=12).Arranging the data like this should be better for a neural net than the otherformats. The input to your network should be 0 if the byte is zero and 1 if itsnon-zero. I have a SOFM (Self Organizing Feature Map) in mind for the neuralnet, but will hopefully be useful for any type. </P><DIV align=center><CENTER><TABLE cellSpacing=0 cellPadding=0 width="71%" bgColor=#ffffcc border=1><TBODY><TR><TD align=middle width="20%">Location 4</TD><TD align=middle width="20%">Location 5</TD><TD align=middle width="20%">Location 6</TD><TD align=middle width="20%">Location 7</TD><TD align=middle width="20%">Locations 8 - 35</TD></TR><TR><TD align=middle width="20%">0 - 352mm</TD><TD align=middle width="20%">353 - 705mm</TD><TD align=middle width="20%">706 - 1057mm</TD><TD align=middle width="20%">1058 - 1410mm</TD><TD align=middle width="20%">and so on</TD></TR></TBODY></TABLE></CENTER></DIV><P align=left>Locations 2,3 contain the range of the nearest object converted toinches, cm or uS and is the same as for Ranging Mode.</P><P align=left><B>Checking for Completion of Ranging</B><BR>You do not have touse a timer on your own controller to wait for ranging to finish. You can takeadvantage of the fact that the SRF08 will not respond to any I2C activity whilstranging. Therefore, if you try to read from the SRF08 (we use the softwarerevision number a location 0) then you will get 255 (0xFF) whilst ranging. Thisis because the I2C data line (SDA) is pulled high if nothing is driving it. Assoon as the ranging is complete the SRF08 will again respond to the I2C bus, sojust keep reading the register until its not 255 (0xFF) anymore. You can thenread the sonar data. Your controller can take advantage of this to perform othertasks while the SRF08 is ranging. </P><P align=left><B>Changing the Range</B><BR>The maximum range of the SRF08 is setby an internal timer. By default, this is 65mS or the equivalent of 11 metres ofrange. This is much further than the 6 metres the SRF08 is actuallycapable of. It is possible to reduce the time the SRF08 listens for an echo, andhence the range, by writing to the range register at location 2. The range canbe set in steps of about 43mm (0.043m or 1.68 inches) up to 11metres. <BR>The range is ((Range Register x 43mm) + 43mm) so setting theRange Register to 0 (0x00) gives a maximum range of 43mm. Setting the RangeRegister to 1 (0x01) gives a maximum range of 86mm. More usefully, 24 (0x18)gives a range of 1 metre and 140 (0x8C) is 6 metres. Setting 255 (0xFF) givesthe original 11 metres (255 x 43 + 43 is 11008mm). There are two reasons you maywish to reduce the range.<BR>1. To get at the range information quicker<BR>2. Tobe able to fire the SRF08 at a faster rate.<BR>If you only wish to get at therange information a bit sooner and will continue to fire the SRF08 at 65ms ofslower, then all will be well. However if you wish to fire the SRF08 at a fasterrate than 65mS, you will definitely need to reduce the gain - see nextsection.<BR>The range is set to maximum every time the SRF08 is powered-up. Ifyou need a different range, change it once as part of your system initializationcode.<BR></P><P align=left><B>Analogue Gain</B><BR>The analogue gain register sets the<I>Maximum</I> gain of the analogue stages. To set the maximum gain, just writeone of these values to the gain register at location 1. During a ranging, theanalogue gain starts off at its minimum value of 94. This is increased atapprox. 70uS intervals up to the maximum gain setting, set by register1. Maximum possible gain is reached after about 390mm of range. The purposeof providing a limit to the maximum gain is to allow you to fire the sonar morerapidly than 65mS. Since the ranging can be very short, a new ranging can beinitiated as soon as the previous range data has been read. A potential hazardwith this is that the second ranging may pick up a distant echo returning fromthe previous "ping", give a false result of a close by object when there isnone. To reduce this possibility, the maximum gain can be reduced to limit themodules sensitivity to the weaker distant echo, whilst still able to detectclose by objects. The maximum gain setting is stored only in the CPU's RAM andis initialized to maximum on power-up, so if you only want do a ranging every65mS, or longer, you can ignore the Range and Gain Registers.<BR><I><B><FONTcolor=#ff00ff>Note</FONT></B></I> - Effective in Ranging Mode only, in ANN mode,gain is controlled automatically. </P><DIV align=center><CENTER><TABLE height=714 cellSpacing=0 cellPadding=0 width=428 bgColor=#ffffccborder=1><TBODY><TR><TD align=middle width=157 colSpan=2 height=19>Gain Register</TD><TD align=middle width=265 height=40 rowSpan=2>Maximum Analogue Gain</TD></TR><TR><TD align=middle width=77 height=19>Decimal</TD><TD align=middle width=80 height=19>Hex</TD></TR><TR><TD align=middle width=74 height=19>0</TD><TD align=middle width=81 height=19>0x00</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to 94</TD></TR><TR><TD align=middle width=74 height=19>1</TD><TD align=middle width=81 height=19>0x01</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to 97</TD></TR><TR><TD align=middle width=74 height=19>2</TD><TD align=middle width=81 height=19>0x02</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to100</TD></TR><TR><TD align=middle width=74 height=19>3</TD><TD align=middle width=81 height=19>0x03</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to103</TD></TR><TR><TD align=middle width=74 height=19>4</TD><TD align=middle width=81 height=19>0x04</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to107</TD></TR><TR><TD align=middle width=74 height=19>5</TD><TD align=middle width=81 height=19>0x05</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to110</TD></TR><TR><TD align=middle width=74 height=19>6</TD><TD align=middle width=81 height=19>0x06</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to114</TD></TR><TR><TD align=middle width=74 height=19>7</TD><TD align=middle width=81 height=19>0x07</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to118</TD></TR><TR><TD align=middle width=74 height=19>8</TD><TD align=middle width=81 height=19>0x08</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to123</TD></TR><TR><TD align=middle width=74 height=19>9</TD><TD align=middle width=81 height=19>0x09</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to128</TD></TR><TR><TD align=middle width=74 height=19>10</TD><TD align=middle width=81 height=19>0x0A</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to133</TD></TR><TR><TD align=middle width=74 height=19>11</TD><TD align=middle width=81 height=19>0x0B</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to139</TD></TR><TR><TD align=middle width=74 height=19>12</TD><TD align=middle width=81 height=19>0x0C</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to145</TD></TR><TR><TD align=middle width=74 height=19>13</TD><TD align=middle width=81 height=19>0x0D</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to152</TD></TR><TR><TD align=middle width=74 height=19>14</TD><TD align=middle width=81 height=19>0x0E</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to159</TD></TR><TR><TD align=middle width=74 height=19>15</TD><TD align=middle width=81 height=19>0x0F</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to168</TD></TR><TR><TD align=middle width=74 height=19>16</TD><TD align=middle width=81 height=19>0x10</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to177</TD></TR><TR><TD align=middle width=74 height=19>17</TD><TD align=middle width=81 height=19>0x11</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to187</TD></TR><TR><TD align=middle width=74 height=19>18</TD><TD align=middle width=81 height=19>0x12</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to199</TD></TR><TR><TD align=middle width=74 height=19>19</TD><TD align=middle width=81 height=19>0x13</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to212</TD></TR><TR><TD align=middle width=74 height=19>20</TD><TD align=middle width=81 height=19>0x14</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to227</TD></TR><TR><TD align=middle width=74 height=19>21</TD><TD align=middle width=81 height=19>0x15</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to245</TD></TR><TR><TD align=middle width=74 height=19>22</TD><TD align=middle width=81 height=19>0x16</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to265</TD></TR><TR><TD align=middle width=74 height=19>23</TD><TD align=middle width=81 height=19>0x17</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to288</TD></TR><TR><TD align=middle width=74 height=19>24</TD><TD align=middle width=81 height=19>0x18</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to317</TD></TR><TR><TD align=middle width=74 height=19>25</TD><TD align=middle width=81 height=19>0x18</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to352</TD></TR><TR><TD align=middle width=74 height=19>26</TD><TD align=middle width=81 height=19>0x20</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to395</TD></TR><TR><TD align=middle width=74 height=19>27</TD><TD align=middle width=81 height=19>0x21</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to450</TD></TR><TR><TD align=middle width=74 height=19>28</TD><TD align=middle width=81 height=19>0x22</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to524</TD></TR><TR><TD align=middle width=74 height=19>29</TD><TD align=middle width=81 height=19>0x23</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to626</TD></TR><TR><TD align=middle width=74 height=19>30</TD><TD align=middle width=81 height=19>0x24</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to777</TD></TR><TR><TD align=middle width=74 height=19>31</TD><TD align=middle width=81 height=19>0x25</TD><TD align=middle width=265 height=19>Set Maximum Analogue Gain to1025</TD></TR></TBODY></TABLE></CENTER></DIV><P align=left>Note that the relationship between the Gain Register setting andthe actual gain is not a linear one. Also there is no magic formula to say "usethis gain setting with that range setting". It depends on the size, shape andmaterial of the object and what else is around in the room. Try playing withdifferent settings until you get the result you want. If you appear to get falsereadings, it may be echo's from previous "pings", try going back to firing theSRF08 every 65mS or longer (slower). <BR>If you are in any doubt about theRange and Gain Registers, remember they are automatically set by the SRF08 totheir default values when it is powered-up. You can ignore and forget about themand the SRF08 will work fine, detecting objects up to 6 metres away every 65mSor slower.</P><P align=left><B>Light Sensor</B><BR>The SRF08 has a light sensor on-board. Areading of the light intensity is made by the SRF08 each time a ranging takesplace in either Ranging or ANN Modes ( The A/D conversion is actually done justbefore the "ping" whilst the +/- 10v generator is stabilizing). The readingincreases as the brightness increases, so you will get a maximum value in brightlight and minimum value in darkness. It should get close to 2-3 in completedarkness and up to about 248 (0xF8) in bright light. The light intensity can beread from the Light Sensor Register at location 1 at the same time thatyou are reading the range data.</P><P align=left><B>LED</B><BR>The red LED is used to flash out a code for the I2Caddress on power-up (see below). It also gives a brief flash during the "ping"whilst ranging.</P><P align=left><B>Changing the I2C Bus Address</B><BR>To change the I2C addressof the SRF08 you must have only one sonar on the bus. Write the 3 sequencecommands in the correct order followed by the address. Example; to change theaddress of a sonar currently at 0xE0 (the default shipped address) to 0xF2,write the following to address 0xE0; (0xA0, 0xAA, 0xA5, 0xF2 ). These commandsmust be sent in the correct sequence to change the I2C address, additionally, Noother command may be issued in the middle of the sequence. The sequence must besent to the command register at location 0, which means 4 separate writetransactions on the I2C bus. When done, you should label the sonar with itsaddress, however if you do forget, just power it up without sending anycommands. The SRF08 will flash its address out on the LED. One long flashfollowed by a number of shorter flashes indicating its address. The flashing isterminated immediately on sending a command the SRF08.</P><DIV align=center><CENTER><TABLE cellSpacing=0 cellPadding=0 width="45%" bgColor=#ffffcc border=1><TBODY><TR><TD align=middle width="45%" colSpan=2>Address</TD><TD align=middle width="25%" rowSpan=2>Long Flash</TD><TD align=middle width="30%" rowSpan=2>Short flashes</TD></TR><TR><TD align=middle width="23%">Decimal</TD><TD align=middle width="22%">Hex</TD></TR><TR><TD align=middle width="23%">224</TD><TD align=middle width="22%">E0</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">0</TD></TR><TR><TD align=middle width="23%">226</TD><TD align=middle width="22%">E2</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">1</TD></TR><TR><TD align=middle width="23%">228</TD><TD align=middle width="22%">E4</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">2</TD></TR><TR><TD align=middle width="23%">230</TD><TD align=middle width="22%">E6</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">3</TD></TR><TR><TD align=middle width="23%">232</TD><TD align=middle width="22%">E8</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">4</TD></TR><TR><TD align=middle width="23%">234</TD><TD align=middle width="22%">EA</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">5</TD></TR><TR><TD align=middle width="23%">236</TD><TD align=middle width="22%">EC</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">6</TD></TR><TR><TD align=middle width="23%">238</TD><TD align=middle width="22%">EE</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">7</TD></TR><TR><TD align=middle width="23%">240</TD><TD align=middle width="22%">F0</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">8</TD></TR><TR><TD align=middle width="23%">242</TD><TD align=middle width="22%">F2</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">9</TD></TR><TR><TD align=middle width="23%">244</TD><TD align=middle width="22%">F4</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">10</TD></TR><TR><TD align=middle width="23%">246</TD><TD align=middle width="22%">F6</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">11</TD></TR><TR><TD align=middle width="23%">248</TD><TD align=middle width="22%">F8</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">12</TD></TR><TR><TD align=middle width="23%">250</TD><TD align=middle width="22%">FA</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">13</TD></TR><TR><TD align=middle width="23%">252</TD><TD align=middle width="22%">FC</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">14</TD></TR><TR><TD align=middle width="23%">254</TD><TD align=middle width="22%">FE</TD><TD align=middle width="25%">1</TD><TD align=middle width="30%">15</TD></TR></TBODY></TABLE></CENTER></DIV><P align=left>Take care not to set more than one sonar to the same address,there will be a bus collision and very unpredictable results.</P><P align=left><B>Current Consumption</B><BR>Average current consumption measuredon our prototype is around 12mA during ranging, and 3mA standby. The module willautomatically go to standby mode after a ranging, whilst waiting for a newcommand on the I2C bus. The actual measured current profile is as follows; </P><DIV align=center><CENTER><TABLE cellSpacing=0 width=400 bgColor=#ffffcc border=1><TBODY><TR><TD align=middle width=253>Operation</TD><TD align=middle width=62>Current</TD><TD align=middle width=65>Duration</TD></TR><TR><TD align=middle width=253>Ranging command received - Power on</TD><TD align=middle width=62>275mA</TD><TD align=middle width=65>3uS</TD></TR><TR><TD align=middle width=253>+/- 10v generator Stabilization</TD><TD align=middle width=62><P align=center>25mA</P></TD><TD align=middle width=65>600uS</TD></TR><TR><TD align=middle width=253>8 cycles of 40kHz "ping"</TD><TD align=middle width=62>40mA</TD><TD align=middle width=65>200uS</TD></TR><TR><TD align=middle width=253>Ranging</TD><TD align=middle width=62>11mA</TD><TD align=middle width=65>65mS max</TD></TR><TR><TD align=middle width=253>Standby</TD><TD align=middle width=62>3mA</TD><TD align=middle width=65>indefinite</TD></TR></TBODY></TABLE></CENTER></DIV><P align=left>The above values are for guidance only, they are not tested onproduction units. </P><P align=left> You can have a look at the <Ahref="http://www.robot-electronics.co.uk/images/srf08schematic.gif">schematic</A>and <A href="http://www.robot-electronics.co.uk/files/srf08.c">software</A> </P><P align=left>Your feedback/comments/criticisms and wish lists are very welcome,as always.<BR>Regards, Gerry.<BR>gerry@robot-electronics.co.uk</P></BODY></HTML>