<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1421437964988190395</id><updated>2011-11-27T16:13:47.793-08:00</updated><category term='Interface I2C'/><category term='I2C Parport'/><category term='I2C Hardware'/><category term='Emulation des I2C-Busses per Software (16F628)'/><category term='Serial Buses'/><category term='Logotipo do I2C'/><category term='I2C-Tiny-USB'/><category term='Documentação'/><category term='A single master I2C tutorial'/><category term='Links'/><title type='text'>I2C - Inter Integrated Circuit (Serial Communication)</title><subtitle type='html'>www.carlos-rosa.com</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>10</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1421437964988190395.post-522668294981284359</id><published>2007-09-21T00:47:00.000-07:00</published><updated>2007-09-21T00:53:37.219-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='I2C Parport'/><title type='text'>I2C Parport</title><content type='html'>Fonte: &lt;a href="http://www.kosma.pl/hardware/i2c-parport/"&gt;kosma.pl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;What's this?&lt;/h3&gt;This simple device allows you to connect I2C-enabled chips (serial memories, RTCs, port expanders) to your computer using printer port (LPT, parport).&lt;br /&gt;&lt;br /&gt;&lt;h3&gt;Okay, but what can I use it for?&lt;/h3&gt;&lt;p class="par"&gt;Mostly servicing stuff, like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;reading/writing serial eeproms (like 24C04 or SPD) &lt;li&gt;getting lots of GPIO, via expanders like PCF8574 &lt;/li&gt;&lt;/ul&gt;&lt;h3&gt;Documentation&lt;br /&gt;&lt;a href="http://www.kosma.pl/hardware/i2c-parport/schemat.png"&gt;&lt;img style="WIDTH: 400px; CURSOR: hand" alt="" src="http://www.kosma.pl/hardware/i2c-parport/schemat.png" border="0" /&gt;&lt;/a&gt; &lt;/h3&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.kosma.pl/hardware/i2c-parport/schemat.png"&gt;schematics&lt;/a&gt; [png, 18k], &lt;a href="http://www.kosma.pl/hardware/i2c-parport/fotka.jpg"&gt;photo&lt;/a&gt; [jpg, 80k] &lt;/li&gt;&lt;/ul&gt;&lt;p class="par"&gt;All pull-ups are 10-20k. The photo shows the adapter with a 24C04 EEPROM inserted (used to store HDD encryption password).&lt;/p&gt;&lt;h3&gt;Drivers&lt;/h3&gt;&lt;p class="par"&gt;All the needed drivers are included in 2.6 kernels. They are loaded using &lt;i&gt;modprobe i2c-parport type=0&lt;/i&gt;. Pinout of the adapter is &lt;q&gt;&lt;em&gt;Philips adapter&lt;/em&gt;&lt;/q&gt;, and is also compatible with &lt;a href="http://www.kosma.pl/hardware/mcsfp/"&gt;&lt;strong&gt;&lt;span style="color:#ff0000;"&gt;MCS Flashprogrammer&lt;/span&gt;&lt;/strong&gt;&lt;/a&gt;. Devices can be accessed using standard &lt;i&gt;/dev/i2c-*&lt;/i&gt; nodes or with additional drivers (&lt;i&gt;modprobe pcf8574&lt;/i&gt;, &lt;i&gt;modprobe eeprom&lt;/i&gt;).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1421437964988190395-522668294981284359?l=i2c-rosa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/522668294981284359/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1421437964988190395&amp;postID=522668294981284359' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/522668294981284359'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/522668294981284359'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/2007/09/i2c-parport.html' title='I2C Parport'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1421437964988190395.post-5591205515777555178</id><published>2007-09-21T00:23:00.000-07:00</published><updated>2007-09-21T00:32:37.409-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='I2C-Tiny-USB'/><title type='text'>I2C-Tiny-USB</title><content type='html'>Fonte: &lt;a href="http://www.harbaum.org/till/index.html"&gt;Till Harbaum&lt;/a&gt;, &lt;a href="http://www.harbaum.org/till/i2c_tiny_usb/index.shtml"&gt;I2C-Tiny-USB&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img src="http://www.harbaum.org/till/i2c_tiny_usb/final.jpg" /&gt;&lt;br /&gt;&lt;img src="http://www.harbaum.org/till/i2c_tiny_usb/prototype.gif" /&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://www.harbaum.org/till/i2c_tiny_usb/parts.gif"&gt;&lt;img src="http://www.harbaum.org/till/i2c_tiny_usb/parts_small.gif" border="0" /&gt;&lt;/a&gt;Part placement&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.harbaum.org/till/i2c_tiny_usb/top.gif"&gt;&lt;img src="http://www.harbaum.org/till/i2c_tiny_usb/top_small.gif" border="0" /&gt;&lt;/a&gt;Top (click for 600 dpi)&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.harbaum.org/till/i2c_tiny_usb/bottom.gif"&gt;&lt;img src="http://www.harbaum.org/till/i2c_tiny_usb/bottom_small.gif" border="0" /&gt;&lt;/a&gt;Bottom (click for 600 dpi)&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.harbaum.org/till/i2c_tiny_usb/pcb.jpg" border="0" /&gt;The final PCB&lt;/p&gt;&lt;p&gt;&lt;img src="http://www.harbaum.org/till/i2c_tiny_usb/cable.jpg" /&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.harbaum.org/till/palm/index.html"&gt;Tills Palm Pages&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.harbaum.org/till/twonky/index.html"&gt;Twonky - Linux based Media PC&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.harbaum.org/till/bluegps/index.html"&gt;BlueGPS - RBT-3000 download tool&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.harbaum.org/till/nanovm/index.html"&gt;NanoVM, Java for the AVR&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.harbaum.org/till/lcd2usb/index.html"&gt;LCD2USB, a cheap text LCD interface&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.harbaum.org/till/macavr/index.html"&gt;MacAVR, AVR development under MacOS X&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.harbaum.org/till/ledmatrix/index.html"&gt;LEDMATRIX, a 80x32 pixel DIY LED matrix display&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.harbaum.org/till/spi2cf/index.html"&gt;SPI2CF, a fast and efficient WLAN interface for the AVR&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.harbaum.org/till/i2c_tiny_usb/index.html"&gt;i2c-tiny-usb, a simple i2c interface for the usb port&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bluez.org/"&gt;BlueZ - Linux Bluetooth Stack&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.bluemp3.de/"&gt;BlueMP3 - bluetooth mp3 receiver&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.btkit.de/"&gt;BTkit - bluetooth remote control&lt;/a&gt; &lt;li&gt;&lt;a href="http://sourceforge.net/projects/stonx/"&gt;STonX - Atari ST emulator for Unix&lt;/a&gt; &lt;li&gt;&lt;a href="http://glmaze.sourceforge.net/"&gt;glMaze - OpenGL maze game&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.harbaum.org/till/atari/index.html"&gt;Discontinued Atari stuff (german)&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.harbaum.org/till/the_maze/index.html"&gt;A discontinued maze game&lt;/a&gt; &lt;li&gt;&lt;a href="http://www.harbaum.org/till/c64/index.html"&gt;C64 projects&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1421437964988190395-5591205515777555178?l=i2c-rosa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/5591205515777555178/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1421437964988190395&amp;postID=5591205515777555178' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/5591205515777555178'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/5591205515777555178'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/2007/09/i2c-tiny-usb.html' title='I2C-Tiny-USB'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1421437964988190395.post-4458202108733801523</id><published>2007-09-21T00:00:00.001-07:00</published><updated>2007-09-21T00:07:03.068-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Interface I2C'/><title type='text'>Interface I2C</title><content type='html'>Fonte: &lt;a href="http://www.basicavr.com/ATmega16Evboard/mega16_jinpin.htm"&gt;Basicavr.com&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 466px; HEIGHT: 340px" height="395" src="http://www.basicavr.com/ATmega16Evboard/16328535.jpg" width="555" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 495px; HEIGHT: 220px" height="269" src="http://www.basicavr.com/ATmega16Evboard/power.gif" width="607" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 502px; HEIGHT: 194px" height="256" src="http://www.basicavr.com/ATmega16Evboard/rs232.gif" width="607" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 512px; HEIGHT: 271px" height="348" src="http://www.basicavr.com/ATmega16Evboard/mcu1.gif" width="623" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="352" src="http://www.basicavr.com/ATmega16Evboard/mcu2.gif" width="517" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 517px; HEIGHT: 175px" height="245" src="http://www.basicavr.com/ATmega16Evboard/reset_isp_jtag.gif" width="608" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 515px; HEIGHT: 191px" height="257" src="http://www.basicavr.com/ATmega16Evboard/buzz_key.gif" width="607" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img style="WIDTH: 520px; HEIGHT: 320px" height="362" src="http://www.basicavr.com/ATmega16Evboard/7seg.gif" width="607" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="322" src="http://www.basicavr.com/ATmega16Evboard/PCF8563_AT24C02.gif" width="528" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="421" src="http://www.basicavr.com/ATmega16Evboard/PWM.gif" width="455" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="421" src="http://www.basicavr.com/ATmega16Evboard/PS2_1WIRE_IR_VREF.gif" width="455" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="322" src="http://www.basicavr.com/ATmega16Evboard/162A_KS0108B.gif" width="462" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="322" src="http://www.basicavr.com/ATmega16Evboard/NOKIA5110_T6963C.gif" width="375" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="514" src="http://www.basicavr.com/ATmega16Evboard/I_O.gif" width="455" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="178" src="http://www.basicavr.com/ATmega16Evboard/ADC_1.gif" width="632" border="0" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;img height="178" src="http://www.basicavr.com/ATmega16Evboard/ADC_2.gif" width="251" border="0" /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1421437964988190395-4458202108733801523?l=i2c-rosa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/4458202108733801523/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1421437964988190395&amp;postID=4458202108733801523' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/4458202108733801523'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/4458202108733801523'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/2007/09/interface-i2c.html' title='Interface I2C'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1421437964988190395.post-6743777884088224286</id><published>2007-09-20T23:54:00.000-07:00</published><updated>2007-09-20T23:56:32.526-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='I2C Hardware'/><title type='text'>I2C Hardware</title><content type='html'>Fonte: &lt;a href="http://llg.cubic.org/dmx4linux/i2c.html"&gt;Cubic.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p&gt;DMX4Linux can control the tda8444 DAC connected to an I2C bus. Up to 4 tda8444 can be controlled over a single I2C bus, resulting in 32 analog outputs.&lt;/p&gt;&lt;p&gt;If you don't have a I2C bus, you can fake it with a standard parallel port and the following schematic. Use the &lt;code&gt;i2c-simple-par&lt;/code&gt; driver to access it.&lt;/p&gt;&lt;p&gt;&lt;img src="http://llg.cubic.org/dmx4linux/interfaces/simple-i2c.png" border="0" /&gt; &lt;/p&gt;&lt;h3&gt;Using your setup&lt;/h3&gt;&lt;p&gt;You should connect your tda8444 hardware to an I2C bus and configure your Linux Kernel to enable the I2C subsystem and your local I2C device. If you are using the above parport hack, load the driver with: &lt;code&gt;modprobe i2c-simple-par&lt;/code&gt;.&lt;/p&gt;&lt;p&gt;Then load the tda8444 driver: &lt;code&gt;modprobe tda8444&lt;/code&gt;.&lt;br /&gt;Finally load the DMX4Linux I2C driver: &lt;code&gt;modprobe dmxi2c&lt;/code&gt;.&lt;br /&gt;You should now have a working DMX4Linux setup.&lt;/p&gt;&lt;h3&gt;Driver configuration&lt;/h3&gt;&lt;h4&gt;i2c-simple-par&lt;/h4&gt;&lt;h5&gt;Synopsis&lt;/h5&gt;&lt;p&gt;&lt;code&gt;i2c-simple-par [parport=&lt;number&gt;]&lt;/code&gt;&lt;br /&gt;You can use the following line in &lt;code&gt;/etc/modules.conf&lt;/code&gt; to set another default parport.&lt;br /&gt;&lt;code&gt;options i2c-simple-par parport=3&lt;/code&gt;&lt;/p&gt;&lt;h4&gt;dmxi2c&lt;/h4&gt;&lt;h5&gt;Synopsis&lt;/h5&gt;&lt;p&gt;&lt;code&gt;dmxi2c [adapter=&lt;number&gt;]&lt;/code&gt;&lt;br /&gt;The &lt;code&gt;adapter&lt;/code&gt; parameter selects the 'nth DAC on the I2C bus.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1421437964988190395-6743777884088224286?l=i2c-rosa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/6743777884088224286/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1421437964988190395&amp;postID=6743777884088224286' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/6743777884088224286'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/6743777884088224286'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/2007/09/i2c-hardware.html' title='I2C Hardware'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1421437964988190395.post-2312552918270379891</id><published>2007-09-20T23:40:00.000-07:00</published><updated>2007-09-20T23:44:38.081-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Emulation des I2C-Busses per Software (16F628)'/><title type='text'>Emulation des I2C-Busses per Software (16F628)</title><content type='html'>Fonte: &lt;a href="http://www.sprut.de/electronic/pic/grund/i2c_soft.htm"&gt;SPRUR.de&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.sprut.de/electronic/pic/programm/thermo75/thermo75.htm"&gt;&lt;img height="209" alt="Link zu einem Lernbeispiel" src="http://www.sprut.de/electronic/pic/programm/thermo75/lm75k.gif" width="474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;&lt;a name="draht"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;&lt;span style="font-size:+1;"&gt;Verdrahtung&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;  &lt;table width="100%"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Zur Ansteuerung des I2C-Busses benötigt man 2 open-drain- oder open-kollektor-Ausgänge, die auch als Eingänge funktionieren. Das Pin RA4 ist das einzige Pin, das diese Voraussetzung erfüllt. Allerdings ist es aufgrund der &lt;a href="http://www.sprut.de/electronic/pic/fallen/fallen.html#ra4"&gt;RA4-Falle,&lt;/a&gt; nicht ganz einfach zu nutzen. &lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Ich bastle mir lieber aus jeweils 2 Pins des Ports A einen bidirektionalen open-drain-Leitungstreiber. Folglich sind die Pins RA0..RA3 für den I2C-Bus reserviert.&lt;/span&gt; &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;RA0    SDA-Ausgang&lt;/span&gt; &lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;RA1    SCL-Eingang&lt;/span&gt; &lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;RA2    SDA-Eingang&lt;/span&gt; &lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;RA3    SCL-Ausgang&lt;/span&gt; &lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Die nebenstehende Grafik zeigt das an einem &lt;a href="http://www.sprut.de/electronic/pic/programm/thermo75/thermo75.htm"&gt;praktischen Beispiel&lt;/a&gt;.&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;a href="http://www.sprut.de/electronic/pic/programm/thermo75/thermo75.htm"&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Ich lege per   #define-Befehl eingängige Namen für diese 4 Pins fest:&lt;/span&gt;&lt;br /&gt;  &lt;table cols="1" width="80%" bg border="1" style="color:#cccccc;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        list p=16f628&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;**************************************************************&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;*      Pinbelegung&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;*      ---------------------------------- &lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;*      PORTA:  0 SDA out&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;*              1 CLK in&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;*              2 SDA in&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;*              3 CLK out&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;*              4 -&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;**************************************************************&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;sprut (zero) Bredendiek 12/2002 &lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; I2C-Bus am 16F628&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; Prozessor 16F628 &lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; Prozessor-Takt 10 MHz&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; I2C am PortA&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;**********************************************************&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; Includedatei für den 16F628 einbinden&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        #include &lt;p16f628.inc&gt;&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; Configuration festlegen:&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; Power on Timer, kein Watchdog, HS-Oscillator, kein Brown out, kein LV-programming&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        __CONFIG        _PWRTE_ON &amp;amp; _WDT_OFF &amp;amp; _HS_OSC &amp;amp; _BODEN_OFF &amp;amp; _LVP_OFF&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; für I2C&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;#define SDAo    PORTA,0         ;Daten output&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;#define SDAi    PORTA,2         ;Daten input&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;#define SCL     PORTA,3         ;Takt&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;#define SCLo    PORTA,3         ;Takt&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;#define SCLi    PORTA,1         ;Takt input&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;b&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;&lt;span style="font-size:+1;"&gt;Initialisierung&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Um die Pins RA0..RA3 wie oben beschrieben nutzen zu können, müssen RA0 und RA3 als Output definiert werden. Außerdem müssen die &lt;a href="http://www.sprut.de/electronic/pic/fallen/fallen.html#analog"&gt;Komparatoreingänge deaktiviert&lt;/a&gt; werden, damit die Pins überhaupt als digitale I/O-Pins nutzbar sind.&lt;/span&gt;&lt;br /&gt;  &lt;/p&gt;&lt;table cols="1" width="80%" bg border="1" style="color:#cccccc;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; Das Programm beginnt mit der Initialisierung&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;Init    bsf     STATUS, RP0     ; Bank 1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   B'11100110'     ; PortA alle input außer RA0,3,4&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movwf   TRISA&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     STATUS, RP0     ; Bank 0&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        clrf    PORTA &lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; 16F628 alle Comparatoreingänge auf Digital umschalten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        BSF     CMCON, CM0&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        BSF     CMCON, CM1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        BSF     CMCON, CM2&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_reset&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;&lt;a name="bustaktbrg"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Einstellung der Busgeschwindigkeit&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Da das gesamte Busprotokoll per Software erzeugt wird, hängt die Busgeschwindigkeit von der Kompaktheit der Softwareroutinen und dem Takt des PICs ab. Die hier vorgestellten Routinen erreichen bei 10 MHz-PIC-Takt einen I2C-Bus-Takt von 210 kHz. Sie können für low-speed-I2C-Slaves verwendet werden, wenn der PIC mit 4 MHz getaktet wird:&lt;/span&gt;&lt;br /&gt;  &lt;table cols="4" width="50%" bgcolor="#cccccc" border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;center&gt;&lt;b&gt;PIC-Takt&lt;/b&gt;&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;&lt;b&gt;I2C-Takt&lt;/b&gt;&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;&lt;b&gt;Standart-Mode&lt;/b&gt;&lt;br /&gt;(100 kHz)&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;&lt;b&gt;Fast-Mode&lt;/b&gt;&lt;br /&gt;(400 kHz)&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;center&gt;4 MHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;85 kHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;o.k.&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;o.k.&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;center&gt;8 MHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;170 kHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;-&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;o.k.&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;center&gt;10 MHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;210 kHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;-&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;o.k.&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;center&gt;12 MHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;250 kHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;-&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;o.k.&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;center&gt;16 MHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;340 kHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;-&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;o.k.&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;&lt;center&gt;20 MHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;420 kHz&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;-&lt;/center&gt;&lt;/td&gt;&lt;td&gt;&lt;center&gt;-&lt;/center&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Natürlich kann der I2C-Takt auch durch das Einfügen einiger NOP-Befehle in die Routinen verringert werden. Eine Beschleunigung ist aber nur möglich, wenn man nicht alle Feinheiten des I2C-Busses nutzen will. Meine Routinen berücksichtigen die Möglichkeit, dass ein Slave den I2C-Takt aktiv verlängert. Das macht aber in Wirklichkeit kaum ein I2C-Schaltkreis. Wer sich sicher ist, dass er dieses Feature nicht braucht, kann die I2C-Routinen verschlanken, und einen schnelleren I2C-Takt erreichen.&lt;/span&gt; &lt;/p&gt;&lt;br /&gt;&lt;a name="schreiben"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;&lt;span style="font-size:+1;"&gt;Daten auf den I2C-Bus schreiben&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Um Daten auf den I2C-Bus zu schreiben, wird der Bus mit &lt;a href="http://www.sprut.de/electronic/pic/grund/i2c_soft.htm#hifsroutinen"&gt;i2c_on&lt;/a&gt; übernommen. Danach wird das zu schreibende Byte nach 'w' geladen, und danach &lt;a href="http://www.sprut.de/electronic/pic/grund/i2c_soft.htm#hifsroutinen"&gt;i2c_txt&lt;/a&gt; aufgerufen.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Ist der Datentransfer beendet, gibt man mit &lt;a href="http://www.sprut.de/electronic/pic/grund/i2c_soft.htm#hifsroutinen"&gt;i2c_off &lt;/a&gt;den Bus wieder frei.&lt;/span&gt; &lt;p&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Nachfolgendes Beispiel steuert einenTDA8444 an. Dieser Chip enthält acht 6-Bit-Digital-Analog-Wandler (DAC). Die ersten 6 DACs des TDA8444 werden auf 6 unterschiedliche Spannungen eingestellt:&lt;/span&gt;&lt;br /&gt;  &lt;table cols="1" width="80%" bg border="1" style="color:#cccccc;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; Achtung PIC-Takt maximal 4 MHz&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_on          ; Bus übernehmen&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   H'40'           ; Adresse des TDA8444 (A0..A2=0)&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_tx&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   H'00'           ; kanal 0 increment adress&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_tx&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   H'00'           ; DAC0: 0V&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_tx&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   H'01'           ; DAC1: 1/64 Vcc&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_tx&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   H'02'           ; DAC2: 1/32 Vcc&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_tx&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   H'04'           ; DAC3: 1/16 Vcc&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_tx&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   H'08'           ; DAC4: 1/8 Vcc&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_tx&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   H'10'           ; DAC5: 1/4 Vcc&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_tx&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   H'20'           ; DAC6: 1/2 Vcc&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_tx&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_off         ; Bus freigeben&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;p&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Da der TDA8444 ein Standard-Mode-Chip (max. 100 kHz) ist, darf der PIC dabei mit nur 4 MHz getaktet werden. Der TDA benötigt offiziell eine Betriebsspannung (Vcc) von mindestens 4,5V. Meiner Erfahrung nach läuft er aber erst ab 6V. Diese Betriebsspannung darf natürlich nicht mit dem Vcc-Pin des PIC verbunden werden. Der braucht seine eigenen 5 V.&lt;/span&gt; &lt;/p&gt;&lt;br /&gt;&lt;a name="lesen"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;&lt;span style="font-size:+1;"&gt;Daten vom I2C-Bus lesen&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Um Daten vom den I2C-Bus zu lesen, wird der Bus mit &lt;a href="http://www.sprut.de/electronic/pic/grund/i2c_soft.htm#hifsroutinen"&gt;i2c_on&lt;/a&gt; übernommen. Danach wird die Adresse des auszulesenden I2C-Bausteins mit gesetztem Bit0 in 'w' geladen, und dieser Baustein dann mit &lt;a href="http://www.sprut.de/electronic/pic/grund/i2c_soft.htm#hifsroutinen"&gt;i2c_tx&lt;/a&gt; adressiert. Danach wird&lt;a href="http://www.sprut.de/electronic/pic/grund/i2c_soft.htm#hifsroutinen"&gt; i2c_rx &lt;/a&gt;oder&lt;a href="http://www.sprut.de/electronic/pic/grund/i2c_soft.htm#hifsroutinen"&gt; i2c_rxack&lt;/a&gt; aufgerufen. Diese Routine liest ein Byte vom I2C-Bus, und schreibt es nach 'w'. i2c_rxack erzeugt zusätzlich ein ACK-Signal für den gelesenen I2C-Baustein. Das ist nötig, wenn noch weitere Bytes gelsesen werden sollen..&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Ist der Datentransfer beendet, gibt man mit &lt;a href="http://www.sprut.de/electronic/pic/grund/i2c_soft.htm#hifsroutinen"&gt;i2c_off &lt;/a&gt;den Bus wieder frei.&lt;/span&gt; &lt;p&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Nachfolgendes Beispiel steuert einen &lt;a href="http://www.sprut.de/electronic/pic/programm/thermo75/thermo75.htm"&gt;LM75-Temperatursensor&lt;/a&gt; an, und liest die von ihm gemessene Temperatur aus (2 Byte) :&lt;/span&gt;&lt;br /&gt;  &lt;table cols="1" width="80%" bg border="1" style="color:#cccccc;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_on          ; Bus aktiv &lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   H'91'           ; 1001 0001 , LM75 (A0..A2=0)&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_tx          ; LM75 zum Lesen adressieren &lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_rxack       ; lesen mit ACK&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movwf   Temp_h          ; 1. Byte in Speicherzelle Datenpuffer retten&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_rx          ; lesen ohne ACK - letztes Byte&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movwf   Temp_l          ; 2. Byte in Speicherzelle Datenpuffer retten &lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_off         ; Bus freigeben&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;br /&gt;&lt;a name="hifsroutinen"&gt;&lt;/a&gt;&lt;b&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;&lt;span style="font-size:+1;"&gt;Hilfsroutinen&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Folgende Routinen werden benötigt:&lt;/span&gt; &lt;ul&gt;&lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;i2c_reset&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;bringt den I2C-Bus in einen definierten Ausgangszustand&lt;/span&gt; &lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;i2c_on&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;übernimmt den I2C-Bus, sobald er frei ist&lt;/span&gt; &lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;i2c_off&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;gibt den I2C-Bus wieder frei&lt;/span&gt; &lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;i2c_tx&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;sendet das Byte aus 'w' über den I2C-Bus&lt;/span&gt; &lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;i2c_rx&lt;/span&gt; &lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;empfängt ein Byte aus dem I2C-Bus, und legt es in 'w', buf ab&lt;/span&gt; &lt;li&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;i2c_rxack&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;empfängt ein Byte aus dem I2C-Bus, und legt es in 'w', buf ab&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;anschließend wird ein ACK-Signal erzeugt&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:Arial,Helvetica;"&gt;Es wird ein Register 'buf' benötigt, das mit einem EQU-Befehl vorab definiert werden muß.&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&lt;table cols="1" width="80%" bg border="1" style="color:#cccccc;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;*****************************************************************&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; Routinen für I2C&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;       Bus zurücksetzen       i2c_reset&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;       Bus übernehmen         i2c_on&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;       W senden               i2c_tx&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;       Byte empfangen         i2c_rx    (nach w und buf)&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;       Byte empfangen &amp;amp; ACK   i2c_rxack (nach w und buf)&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;       Bus freigeben          i2c_off&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;*****************************************************************&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;i2c_reset&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SDAo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SCLo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   9&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movwf   buf&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;i2c_reset1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SCLo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SCLo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        decfsz  buf, f&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        goto    i2c_reset1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_on&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SCLo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SCLo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    i2c_off&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        return&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;i2c_on&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; wenn SDA und SCL beide High, dann SDA auf Low ziehen&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SCL             ; failsave&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SDAo            ; failsave&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ;testen, ob der Bus frei ist&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        btfss   SCLi&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        goto    i2c_on          ; Taktleitung frei?&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        btfss   SDAi&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        goto    i2c_on          ; Datenleitung frei?&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SDAo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SCL&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        return&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;i2c_tx&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; w über i2c senden&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; takt ist unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; daten sind unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    WrI2cW          ; 8 Bit aus W nach I2C&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; ACK muß nun empfangen werden&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; Takt ist low&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SDAo            ;Datenleitung loslassen&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SCL             ; ACK Takt high&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;i2c_tx2&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        btfss   SCLi&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        goto    i2c_tx2&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;i2c_tx1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;       btfsc   SDAi            ; ACK empfangen?&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;       goto    i2c_tx1         ; nein SDA ist high&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SCL             ; ja , Takt beenden&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SDAo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        return &lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;i2c_rxack&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; takt ist unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; daten sind unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    RdI2cW          ; 8 von I2C nach W&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; Takt ist unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; ACK muß nun gesendet werden&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SDAo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SCL&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;i2c_rxack1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        btfss   SCLi&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        goto    i2c_rxack1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SCL&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SDAo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        return&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;i2c_rx&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; takt ist unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; daten sind unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        call    RdI2cW          ; 8 von I2C nach W&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; Takt ist unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; kein ACK&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SDAo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SCL&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;i2c_rx1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        btfss   SCLi&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        goto    i2c_rx1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SCL&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SDAo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        return&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;i2c_off&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; SCL ist Low und SDA ist Low&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SCL&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SDAo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        return&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;*****************************************************&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; I2C-Peride ist 2,5 µs&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; PIC-Zyklus ist 4/10MHz = 0,4µs&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; -&gt; Takt muß für 3 Zyklen H und für 3 Zyklen L sein&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;     + 1 Zyklus Reserve&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;schiebt das Byte aus W in den I2C&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; MSB zuerst&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;; 78 Takte&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;WrI2cW&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; Takt unten, Daten unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; Datenbyte in w&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movwf   buf&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   8&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movwf   count           ; 8 Bits&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;WrI2cW1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; Datenleitung setzen&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SDAo&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        rlf     buf,f&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        btfsc   STATUS,C        ; 0?&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SDAo            ; nein, 1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SCL             ; Taht high&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;WrI2cW2&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        btfss   SCLi&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        goto    WrI2cW2&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SCL             ; Takt low&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        decfsz  count,f         ; 8 Bits raus?&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        goto    WrI2cW1         ; nein&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        return                  ; ja&lt;/span&gt;&lt;/tt&gt; &lt;p&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;;liest das Byte aus I2C nach W&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; takt ist unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        ; daten sind unten&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;RdI2cW&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        clrf    buf&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movlw   8&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movwf   count&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SDAo            ;failsave&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;RdI2cW1&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        nop&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        clrc&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        btfsc   SDAi&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        setc&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        rlf     buf,f&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bsf     SCL             ; Takt high&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;RdI2cW2&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        btfss   SCLi&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        goto    RdI2cW2&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        bcf     SCL             ; Takt low&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        decfsz  count,f         ; 8 Bits drinn?&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        goto    RdI2cW1         ; nein&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        movfw   buf             ; ja fertig&lt;/span&gt;&lt;/tt&gt;&lt;br /&gt;&lt;tt&gt;&lt;span style="color:#006600;"&gt;        return&lt;/span&gt;&lt;/tt&gt;&lt;/p&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1421437964988190395-2312552918270379891?l=i2c-rosa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/2312552918270379891/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1421437964988190395&amp;postID=2312552918270379891' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/2312552918270379891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/2312552918270379891'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/2007/09/emulation-des-i2c-busses-per-software.html' title='Emulation des I2C-Busses per Software (16F628)'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1421437964988190395.post-502638495083042862</id><published>2007-09-20T23:34:00.000-07:00</published><updated>2007-09-20T23:35:43.867-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='A single master I2C tutorial'/><title type='text'>A single master I2C tutorial</title><content type='html'>Fonte: &lt;a href="http://www.best-microcontroller-projects.com/i2c-tutorial.html"&gt;Best Microcontroller Projects&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;This I2C tutorial shows you how the I2C protocol works at the physical bit level. It only discusses single master mode (a single controlling device) as this is the most common use for I2C in a small system.&lt;br /&gt;&lt;br /&gt;&lt;script type="text/javascript"&gt;&lt;!-- google_ad_client = "pub-9104060237506308"; google_ad_width = 336; google_ad_height = 280; google_ad_format = "336x280_as"; google_ad_type = "text"; //2007-07-14: 336x280-grey-url-red-text google_ad_channel = "5005407263"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_text = "CC0000"; google_color_url = "E6E6E6"; //--&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;&lt;/script&gt;&lt;br /&gt;&lt;p style="TEXT-ALIGN: center" align="justify"&gt;&lt;iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-9104060237506308&amp;amp;dt=1190356376796&amp;amp;lmt=1190208845&amp;amp;format=336x280_as&amp;amp;output=html&amp;amp;correlator=1190356373484&amp;amp;channel=5005407263&amp;amp;url=http%3A%2F%2Fwww.best-microcontroller-projects.com%2Fi2c-tutorial.html&amp;amp;color_bg=FFFFFF&amp;amp;color_text=CC0000&amp;amp;color_link=0000FF&amp;amp;color_url=E6E6E6&amp;amp;color_border=FFFFFF&amp;amp;ad_type=text&amp;amp;ref=http%3A%2F%2Fimages.google.com.br%2Fimgres%3Fimgurl%3Dhttp%3A%2F%2Fwww.best-microcontroller-projects.com%2Fimages%2Fi2c-tutorial-typical-signals.png%26imgrefurl%3Dhttp%3A%2F%2Fwww.best-microcontroller-projects.com%2Fi2c-tutorial.html%26h%3D356%26w%3D489%26sz%3D7%26hl%3Dpt-BR%26start%3D3%26sig2%3D-iLynGh96-oXTvg4fU0oaA%26um%3D1%26tbnid%3D6MfkGEnRJN1g0M%3A%26tbnh%3D95%26tbnw%3D130%26ei%3DPETzRpDFLqLCiwHuv9mbDA%26prev%3D%2Fimages%253Fq%253Di2c%2526svnum%253D10%2526um%253D1%2526hl%253Dpt-BR%2526sa%253DN&amp;amp;ga_vid=1013319710.1190347913&amp;amp;ga_sid=1190356377&amp;amp;ga_hid=2017067349&amp;amp;ga_fc=true&amp;amp;flash=9&amp;amp;u_h=768&amp;amp;u_w=1024&amp;amp;u_ah=704&amp;amp;u_aw=1024&amp;amp;u_cd=32&amp;amp;u_tz=-180&amp;amp;u_java=true" frameborder="0" width="336" scrolling="no" height="280"&gt;&lt;/iframe&gt;&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;I²C (pronounced I-squared-C) created by Philips &lt;a class="kLink" oncontextmenu="return false;" id="KonaLink3" onmouseover="adlinkMouseOver(event,this,3);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,3);" onmouseout="adlinkMouseOut(event,this,3);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;Semiconductors&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; and commonly written as 'I2C' stands for Inter-Integrated Circuit and allows communication of data between I2C devices over two wires. It sends information serially using one line for data (SDA) and one for clock (SCL).&lt;/p&gt;&lt;p align="left"&gt;&lt;span style="FONT-STYLE: italic" kdu1n="0" zwvlw="2"&gt;Note: You can find &lt;a href="http://www.best-microcontroller-projects.com/real-time-clock-ic.html" kdu1n="0" zwvlw="0"&gt;Master mode soft I2C routines&lt;/a&gt; in the RTC project.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img height="194" alt="i2c tutorial master and slaves diagram" src="http://www.best-microcontroller-projects.com/images/i2c-tutorial-block-diag.png" width="489" border="0" /&gt; &lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;Master and slave&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The phillips I2C protocol defines the concept of master and slave devices. A master device is simply the device that is in charge of the bus at the present time and this device controls the clock and generates START and STOP signals. Slaves simply listen to the bus and act on controls and data that they are sent.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The master can send data to a slave or receive data from a slave - slaves do not &lt;a class="kLink" oncontextmenu="return false;" id="KonaLink4" onmouseover="adlinkMouseOver(event,this,4);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,4);" onmouseout="adlinkMouseOut(event,this,4);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;transfer &lt;/span&gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;data&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; between themselves.&lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;Multi Master&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Multi master operation is a more complex use of I2C that lets you have different controlling devices on the same bus. You only need to use this mode if you have more than one microcontroller on the bus (and you want either of them to be the bus master).&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Multi master operation involves arbitration of the bus (where a master has to fight to get control of the bus) and clock synchronisation (each may a use a different clock e.g. because of separate crystal clocks for each micro).&lt;/p&gt;&lt;p align="left"&gt;&lt;i kdu1n="0" zwvlw="0"&gt;Note: Multi master is not covered in this I2C tutorial as the more common use of I2C is to use a single bus master to control &lt;a class="kLink" oncontextmenu="return false;" id="KonaLink5" onmouseover="adlinkMouseOver(event,this,5);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,5);" onmouseout="adlinkMouseOut(event,this,5);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;peripheral &lt;/span&gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;devices&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; e.g. serial memory, ADC, RTC etc.&lt;/i&gt;&lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;Data and Clock&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The I2C interface uses two bi-directional lines meaning that any device could drive either line. In a single master system the master device drives the clock most of the time - the master is in charge of the clock but slaves can influence it to slow it down (See Slow Peripherals below).&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The two wires must be driven as open collector/drain outputs and must be pulled high using one resistor each - this implements a 'wired AND function' - any device pulling the wire low causes all devices to see a low logic value - for high logic value all devices must stop driving the wire.&lt;/p&gt;&lt;p align="left"&gt;&lt;i kdu1n="0" zwvlw="0"&gt;Note : If you use I2C you can not put any other (non I2C) devices on the bus as both lines are used as clock at some point (generation of START and STOP bits toggles the data line). So you can not do something clever such as keeping the clock line inactive and use the data line as a button press detector (to save pins).&lt;/i&gt;&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;You will often will find devices that you realise are I2C compatible but they are labelled as using a '2 wire interface'. The manufacturer is avoiding paying royalties by not using the words 'I2C'!&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;There are two wires (three if you include ground!) :&lt;/p&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Turorial: Signals definition &lt;/h5&gt;&lt;center kdu1n="0" zwvlw="2"&gt;SDA : &lt;a class="kLink" oncontextmenu="return false;" id="KonaLink6" onmouseover="adlinkMouseOver(event,this,6);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,6);" onmouseout="adlinkMouseOut(event,this,6);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;Serial &lt;/span&gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;Data&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;SCL : Serial Clock&lt;/center&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Turorial: end of signal definition &lt;/h5&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;center kdu1n="0" zwvlw="0"&gt;I2C Tutorial : Typical SDA and SCL signals&lt;/center&gt;&lt;p&gt;&lt;img height="356" alt="typical i2c signals" src="http://www.best-microcontroller-projects.com/images/i2c-tutorial-typical-signals.png" width="489" border="0" /&gt; &lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;Speed&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Standard clock speeds are 100kHz and 10kHz but the standard lets you use clock speeds from zero to 100kHz and a fast mode is also available (400kHz - Fast-mode). An even higher speed (3.4MHz - High-speed mode) for more demanding &lt;a class="kLink" oncontextmenu="return false;" id="KonaLink7" onmouseover="adlinkMouseOver(event,this,7);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,7);" onmouseout="adlinkMouseOut(event,this,7);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;applications&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; - The mid range PIC won't be up this mode yet!&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Note that the low-speed mode has been omitted (10kHz) as the standard now specifies the basic system operating from 0 to 100kHz.&lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;Slow peripherals&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;A slow slave device may need to stop the bus while it gathers data or services an interrupt etc. It can do this while holding the clock line (SCL) low forcing the master into the wait state. The master must then wait until SCL is released before proceeding.&lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;Data transfer sequence&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;A basic Master to slave read or write sequence for I2C follows the following order:&lt;/p&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : I2C basic command sequence.&lt;/h5&gt;&lt;ul&gt;&lt;li kdu1n="0" zwvlw="0"&gt;1. Send the START bit (S). &lt;li kdu1n="0" zwvlw="0"&gt;2. Send the slave address (ADDR). &lt;li kdu1n="0" zwvlw="0"&gt;3. Send the Read(R)-1 / Write(W)-0 bit. &lt;li kdu1n="0" zwvlw="0"&gt;4. Wait for/Send an acknowledge bit (A). &lt;li kdu1n="0" zwvlw="0"&gt;5. Send/Receive the data byte (8 bits) (DATA). &lt;li kdu1n="0" zwvlw="0"&gt;6. Expect/Send acknowledge bit (A). &lt;li kdu1n="0" zwvlw="0"&gt;7. Send the STOP bit (P). &lt;/li&gt;&lt;/ul&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : end of I2C basic command sequence.&lt;/h5&gt;&lt;p align="left"&gt;&lt;i kdu1n="0" zwvlw="0"&gt;Note: You can use 7 bit or 10 bit addresses.&lt;/i&gt;&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The sequence 5 and 6 can be repeated so that a multibyte block can be read or written.&lt;br /&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;script type="text/javascript"&gt;&lt;!-- google_ad_client = "pub-9104060237506308"; google_ad_width = 336; google_ad_height = 280; google_ad_format = "336x280_as"; google_ad_type = "text"; //2007-07-14: 336x280-grey-url-red-text google_ad_channel = "5005407263"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_text = "CC0000"; google_color_url = "E6E6E6"; //--&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;&lt;/script&gt;&lt;iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-9104060237506308&amp;amp;dt=1190356376968&amp;amp;lmt=1190208845&amp;amp;prev_fmts=336x280_as&amp;amp;format=336x280_as&amp;amp;output=html&amp;amp;correlator=1190356373484&amp;amp;channel=5005407263&amp;amp;pv_ch=5005407263%2B&amp;amp;url=http%3A%2F%2Fwww.best-microcontroller-projects.com%2Fi2c-tutorial.html&amp;amp;color_bg=FFFFFF&amp;amp;color_text=CC0000&amp;amp;color_link=0000FF&amp;amp;color_url=E6E6E6&amp;amp;color_border=FFFFFF&amp;amp;ad_type=text&amp;amp;ref=http%3A%2F%2Fimages.google.com.br%2Fimgres%3Fimgurl%3Dhttp%3A%2F%2Fwww.best-microcontroller-projects.com%2Fimages%2Fi2c-tutorial-typical-signals.png%26imgrefurl%3Dhttp%3A%2F%2Fwww.best-microcontroller-projects.com%2Fi2c-tutorial.html%26h%3D356%26w%3D489%26sz%3D7%26hl%3Dpt-BR%26start%3D3%26sig2%3D-iLynGh96-oXTvg4fU0oaA%26um%3D1%26tbnid%3D6MfkGEnRJN1g0M%3A%26tbnh%3D95%26tbnw%3D130%26ei%3DPETzRpDFLqLCiwHuv9mbDA%26prev%3D%2Fimages%253Fq%253Di2c%2526svnum%253D10%2526um%253D1%2526hl%253Dpt-BR%2526sa%253DN&amp;amp;ga_vid=1013319710.1190347913&amp;amp;ga_sid=1190356377&amp;amp;ga_hid=2017067349&amp;amp;ga_fc=true&amp;amp;flash=9&amp;amp;u_h=768&amp;amp;u_w=1024&amp;amp;u_ah=704&amp;amp;u_aw=1024&amp;amp;u_cd=32&amp;amp;u_tz=-180&amp;amp;u_java=true" frameborder="0" width="336" scrolling="no" height="280"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;h4 kdu1n="0" zwvlw="0"&gt;&lt;a class="kLink" oncontextmenu="return false;" id="KonaLink8" onmouseover="adlinkMouseOver(event,this,8);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,8);" onmouseout="adlinkMouseOut(event,this,8);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 700; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 700; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;Data &lt;/span&gt;&lt;span class="kLink" style="FONT-WEIGHT: 700; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;Transfer&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; from master to slave&lt;/h4&gt;&lt;center kdu1n="0" zwvlw="0"&gt;I2C Tutorial : Instruction sequence data from master to slave&lt;/center&gt;&lt;p&gt;&lt;img height="103" alt="i2c tutorial master to slave" src="http://www.best-microcontroller-projects.com/images/i2c-tutorial-master-slave.png" width="489" border="0" /&gt; &lt;/p&gt;&lt;p kdu1n="0" zwvlw="0"&gt;A master device sends the sequence S ADDR W and then waits for an acknowledge bit (A) from the slave which the slave will only generate if its internal address matches the value sent by the master. If this happens then the master sends DATA and waits for acknowledge (A) from the slave. The master completes the byte transfer by generating a stop bit (P) (or repeated start).&lt;/p&gt;&lt;h4 kdu1n="0" zwvlw="0"&gt;Data transfer from slave to master&lt;/h4&gt;&lt;center kdu1n="0" zwvlw="0"&gt;I2C Tutorial : Instruction sequence data from slave to master&lt;/center&gt;&lt;p&gt;&lt;img height="94" alt="i2c tutorial slave to master" src="http://www.best-microcontroller-projects.com/images/i2c-tutorial-slave-master.png" width="489" border="0" /&gt; &lt;/p&gt;&lt;p kdu1n="0" zwvlw="2"&gt;A similar process happens when a master reads from the slave but in this case, instead of W, R is sent. After the data is transmitted from the slave to the master the &lt;b kdu1n="0" zwvlw="0"&gt;master&lt;/b&gt; sends the acknowledge (A). If instead the master does not want any more data it must send a not-acknowledge which indicates to the slave that it should release the bus. This lets the master send the STOP or repeated START signal.&lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;Device addresses&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Each device you use on the I2C bus must have a unique address. For some devices e.g. serial memory you can set the lower address bits using input pins on the device others have a fixed internal address setting e.g. a real time clock DS1307. You can put several memory devices on the same IC bus by using a different address for each.&lt;/p&gt;&lt;p align="left"&gt;&lt;i kdu1n="0" zwvlw="0"&gt;Note: The maximum number of devices is limited by the number of available addresses and by the total bus capacitance (maximum 400pF).&lt;/i&gt;&lt;/p&gt;&lt;h4 kdu1n="0" zwvlw="0"&gt;General call&lt;/h4&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The general call address is a reserved address which when output by the bus master should address all devices which should respond with an acknowledge.Its value is 0000000 (7 bits) and written by the master 0000000W. If a device does not need data from the general call it does not need to respond to it.&lt;/p&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : Reserved addresses.&lt;/h5&gt;&lt;p align="left"&gt;&lt;span   kdu1n="0" zwvlw="12" style="font-family:Courier;font-size:85%;"&gt;0000 000 1 START byte - for slow micros without I2C h/w&lt;br /&gt;0000 001 X CBUS address - a different bus protocol&lt;br /&gt;0000 010 X Reserved for different bus format&lt;br /&gt;0000 011 X Reserved for future purposes&lt;br /&gt;0000 1XX X Hs-mode master code&lt;br /&gt;1111 1XX X Reserved for future purposes&lt;br /&gt;1111 0XX X 10-bit slave addressing&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : End of reserved addresses.&lt;/h5&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Most of these are not that useful for PIC microcontrollers except perhaps the START byte and 10 bit addressing.&lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;START (S) and STOP (P) bits&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="2"&gt;START (S) and STOP (P) bits are unique signals that can be generated on the bus but &lt;b kdu1n="0" zwvlw="0"&gt;only&lt;/b&gt; by a bus master.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Reception of a START bit by an I2C slave device resets its internal bus logic. This can be done at any time so you can force a restart if anything goes wrong even in the middle of communication.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;START and STOP bits are defined as rising or falling edges on the data line while the clock line is kept high.&lt;/p&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : text definition of START and STOP signals&lt;/h5&gt;&lt;p align="left"&gt;&lt;table cellspacing="3" cellpadding="1" width="100%" border="1" font="Courier"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="40%"&gt;&lt;span   kdu1n="0" zwvlw="0" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;START condition (S) &lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span   kdu1n="0" zwvlw="0" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;SCL = 1, SDA falling edge&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="40%"&gt;&lt;span   kdu1n="0" zwvlw="0" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;STOP condition (P) &lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span   kdu1n="0" zwvlw="0" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;SCL = 1, SDA rising edge&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : end of text definition of START and STOP signals&lt;/h5&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The following diagram shows the above information graphically - these are the signals you would see on the I2C bus.&lt;/p&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : end of definition of START and STOP signals&lt;/h5&gt;&lt;center kdu1n="0" zwvlw="0"&gt;I2C Tutorial : START (S) and STOP (P) bits.&lt;/center&gt;&lt;center&gt;&lt;img height="194" alt="i2c tutorial START and STOP" src="http://www.best-microcontroller-projects.com/images/i2c-tutorial-star-stop.png" width="300" border="0" /&gt;&lt;/center&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : end of definition of START and STOP signals&lt;/h5&gt;&lt;p align="left"&gt;&lt;i kdu1n="0" zwvlw="0"&gt;Note : In a single master &lt;a class="kLink" oncontextmenu="return false;" id="KonaLink9" onmouseover="adlinkMouseOver(event,this,9);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,9);" onmouseout="adlinkMouseOut(event,this,9);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;system&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; the only difference between a slave and a master is the master's ability to generate START and STOP bits. Both slave and master can control SDA and SCL.&lt;/i&gt;&lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;Repeated START (Sr)&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;This seems like a confusing term at first as you ask yourself why bother with it as it is functionally identical to the sequence :&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;S ADDR (R/W) DATA A P&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The only difference is that for a repeated start you can repeat the sequence starting from the stop bit (replacing the stop bit with another start bit).&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;S ADDR (R/W) DATA A &lt;b kdu1n="0" zwvlw="0"&gt;Sr ADDR (R/W) DATA A P&lt;/b&gt;&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;and you can do this indefinitely.&lt;/p&gt;&lt;p align="left"&gt;&lt;i kdu1n="0" zwvlw="2"&gt;Note: Reception of both S or Sr force any I2C device reset its internal bus logic so sending S or Sr is really resetting all the bus devices. This can be done &lt;b kdu1n="0" zwvlw="0"&gt;at any time&lt;/b&gt; - it is a forced reset.&lt;/i&gt;&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The &lt;a class="kLink" oncontextmenu="return false;" id="KonaLink10" onmouseover="adlinkMouseOver(event,this,10);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,10);" onmouseout="adlinkMouseOut(event,this,10);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;main &lt;/span&gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;reason&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; that the Sr bit exists is in a multi master configuration where the current bus master does not want to release its mastership. Using the repeated start keeps the bus busy so that no other master can grab the bus.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Because of this when used in a Single master configuration it is just a curiosity.&lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;Data&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;All data blocks are composed of 8 bits. The initial block has 7 address bits followed by a direction bit (Read or Write). Following blocks have 8 data bits. Acknowledge bits are squeezed in between each block.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Each data byte is transmitted MSB first including the address byte.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;To allow START and STOP bit generation by the master the data line (SDA) must not be changed while the clock (SCL) is high - it can only be changed when the clock is low.&lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;Acknowledge&lt;/h3&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The acknowledge bit (generated by the receiving device) indicates to the transmitter that the the data transfer was ok. Note that the clock pulse for the acknowledge bit is always created by the bus master.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The acknowledge data bit is generated by either the master or slave depending on the data direction. For the master writing to a slave (W) the acknowledge is generated by the slave. For the master receiving (R) data from a slave the master generates the acknowledge bit.&lt;/p&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : Definition of ACK bits&lt;/h5&gt;&lt;p align="left"&gt;&lt;table cellspacing="3" cellpadding="1" width="100%" border="1" font="Courier"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td width="40%"&gt;&lt;span   kdu1n="0" zwvlw="0" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;Acknowledge &lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span   kdu1n="0" zwvlw="0" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;0 volts&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td width="40%"&gt;&lt;span   kdu1n="0" zwvlw="0" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;Not acknowledge&lt;/span&gt;&lt;/td&gt;&lt;td&gt;&lt;span   kdu1n="0" zwvlw="0" style="font-family:Verdana, Arial, Helvetica, sans-serif;font-size:85%;"&gt;High volts&lt;/span&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : End of definition of ACK bits&lt;/h5&gt;&lt;h4 kdu1n="0" zwvlw="0"&gt;ACK data master --&gt; slave&lt;/h4&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;In this case the slave generates the acknowledge signal.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;When a not-acknowledge is received by the bus master the transfer has failed and the master must generate a STOP or repeated START to abort the sequence.&lt;/p&gt;&lt;h4 kdu1n="0" zwvlw="0"&gt;ACK data slave --&gt; master&lt;/h4&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;In this case the master generates the acknowledge signal.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Normally the master will generate an acknowledge after it has received data but to indicate to the slave that no more data is required on the last byte transfer the master must generate a 'not-acknowledge'. This indicates to the slave that it should stop sending data. The master can then generate the STOP bit (or repeated START).&lt;/p&gt;&lt;h3 kdu1n="0" zwvlw="0"&gt;I2C Tutorial : Specifics for the 16F88&lt;/h3&gt;&lt;h4 kdu1n="0" zwvlw="0"&gt;Pin configuration&lt;/h4&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;To use the I2C mode in the 16F88 the SDA and SCL pins must be initialised as inputs (TRIS bit = 1) so that an open drain effect is created. By setting them as inputs they are not driving the wires and an external pull up resistor will pull the signals high.&lt;/p&gt;&lt;h4 kdu1n="0" zwvlw="0"&gt;Slave mode&lt;/h4&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The 16F88 fully implements all slave functions except general call.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;The general call function does not really matter as it is quite specialised commanding all devices on the bus to use some data.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;A low output is generated by driving the signal line low and changing the pin direction to an output. A high output is generated by changing the pin direction to an input so that the external resistor pulls the signal high.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;In slave mode this action is done for you by the &lt;a class="kLink" oncontextmenu="return false;" id="KonaLink11" onmouseover="adlinkMouseOver(event,this,11);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,11);" onmouseout="adlinkMouseOut(event,this,11);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;SSP&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; module (the outputs of the register at SDA and SCL are driven low automatically - regardless of the state of the register value).&lt;/p&gt;&lt;h4 kdu1n="0" zwvlw="0"&gt;Master mode&lt;/h4&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Basically there is very limited master mode functionality.&lt;/p&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;There are two elements that are provided:&lt;/p&gt;&lt;ul&gt;&lt;li kdu1n="0" zwvlw="0"&gt;Interrupts &lt;li kdu1n="0" zwvlw="0"&gt;Pin control &lt;/li&gt;&lt;/ul&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;16F88 Interrupts&lt;/h5&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;There are two interrupts that activate on reception of either a START or STOP condition. These two interrupts are only useful in a multi master mode system where it is necessary for the non-master device to detect the start and stop conditions. So for a single master system they are of no use at all!&lt;/p&gt;&lt;h5 kdu1n="0" zwvlw="0"&gt;16F88 Pin control&lt;/h5&gt;&lt;p align="left" kdu1n="0" zwvlw="0"&gt;Note When the SSP module is active SDA and SCL output are always set at zero regardless of the state of the register values. So all you have to do is control the port direction.&lt;/p&gt;&lt;p align="left"&gt;&lt;b kdu1n="1" zwvlw="0"&gt;In master mode (16F88) SDA and SCL must be controlled &lt;a class="kLink" oncontextmenu="return false;" id="KonaLink12" onmouseover="adlinkMouseOver(event,this,12);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,12);" onmouseout="adlinkMouseOut(event,this,12);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 700; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 700; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;using &lt;/span&gt;&lt;span class="kLink" style="FONT-WEIGHT: 700; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;software&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/b&gt;&lt;/p&gt;&lt;h3 kdu1n="1" zwvlw="0"&gt;I2C Tutorial : Specifics for 16F877A&lt;/h3&gt;&lt;p align="left" kdu1n="1" zwvlw="0"&gt;It does it all for you!&lt;/p&gt;&lt;ul&gt;&lt;li kdu1n="1" zwvlw="0"&gt;Full master mode. &lt;li kdu1n="1" zwvlw="0"&gt;Full slave mode. &lt;li kdu1n="1" zwvlw="0"&gt;Full general call. &lt;/li&gt;&lt;/ul&gt;&lt;p align="left"&gt;&lt;i kdu1n="1" zwvlw="0"&gt;Note if you want a chip with full master and slave mode operation look for the MSSP module in a PIC chip e.g. 16F877A - then you won't need more &lt;a class="kLink" oncontextmenu="return false;" id="KonaLink13" onmouseover="adlinkMouseOver(event,this,13);" style="POSITION: static; TEXT-DECORATION: underline! important" onclick="adlinkMouseClick(event,this,13);" onmouseout="adlinkMouseOut(event,this,13);" href="http://www.best-microcontroller-projects.com/i2c-tutorial.html#" target="_top"&gt;&lt;span style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: staticcolor:blue;" &gt;&lt;span class="kLink" style="FONT-WEIGHT: 400; FONT-SIZE: 13px; COLOR: blue! important; FONT-FAMILY: Verdana, Geneva, Arial, Helvetica, sans-serif; POSITION: relative"&gt;software&lt;/span&gt;&lt;/span&gt;&lt;/a&gt; - just enough to drive the module.&lt;/i&gt;&lt;/p&gt;&lt;div style="TEXT-ALIGN: center"&gt;&lt;script type="text/javascript"&gt;&lt;!-- google_ad_client = "pub-9104060237506308"; google_ad_width = 336; google_ad_height = 280; google_ad_format = "336x280_as"; google_ad_type = "text"; //2007-07-14: 336x280-grey-url-red-text google_ad_channel = "5005407263"; google_color_border = "FFFFFF"; google_color_bg = "FFFFFF"; google_color_link = "0000FF"; google_color_text = "CC0000"; google_color_url = "E6E6E6"; //--&gt;&lt;/script&gt;&lt;br /&gt;&lt;script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript"&gt;&lt;/script&gt;&lt;iframe name="google_ads_frame" marginwidth="0" marginheight="0" src="http://pagead2.googlesyndication.com/pagead/ads?client=ca-pub-9104060237506308&amp;amp;dt=1190356377078&amp;amp;lmt=1190208845&amp;amp;prev_fmts=336x280_as%2C336x280_as&amp;amp;format=336x280_as&amp;amp;output=html&amp;amp;correlator=1190356373484&amp;amp;channel=5005407263&amp;amp;pv_ch=5005407263%2B&amp;amp;url=http%3A%2F%2Fwww.best-microcontroller-projects.com%2Fi2c-tutorial.html&amp;amp;color_bg=FFFFFF&amp;amp;color_text=CC0000&amp;amp;color_link=0000FF&amp;amp;color_url=E6E6E6&amp;amp;color_border=FFFFFF&amp;amp;ad_type=text&amp;amp;ref=http%3A%2F%2Fimages.google.com.br%2Fimgres%3Fimgurl%3Dhttp%3A%2F%2Fwww.best-microcontroller-projects.com%2Fimages%2Fi2c-tutorial-typical-signals.png%26imgrefurl%3Dhttp%3A%2F%2Fwww.best-microcontroller-projects.com%2Fi2c-tutorial.html%26h%3D356%26w%3D489%26sz%3D7%26hl%3Dpt-BR%26start%3D3%26sig2%3D-iLynGh96-oXTvg4fU0oaA%26um%3D1%26tbnid%3D6MfkGEnRJN1g0M%3A%26tbnh%3D95%26tbnw%3D130%26ei%3DPETzRpDFLqLCiwHuv9mbDA%26prev%3D%2Fimages%253Fq%253Di2c%2526svnum%253D10%2526um%253D1%2526hl%253Dpt-BR%2526sa%253DN&amp;amp;ga_vid=1013319710.1190347913&amp;amp;ga_sid=1190356377&amp;amp;ga_hid=2017067349&amp;amp;ga_fc=true&amp;amp;flash=9&amp;amp;u_h=768&amp;amp;u_w=1024&amp;amp;u_ah=704&amp;amp;u_aw=1024&amp;amp;u_cd=32&amp;amp;u_tz=-180&amp;amp;u_java=true" frameborder="0" width="336" scrolling="no" height="280"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1421437964988190395-502638495083042862?l=i2c-rosa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/502638495083042862/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1421437964988190395&amp;postID=502638495083042862' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/502638495083042862'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/502638495083042862'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/2007/09/single-master-i2c-tutorial.html' title='A single master I2C tutorial'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1421437964988190395.post-5649758825745889332</id><published>2007-09-20T21:00:00.000-07:00</published><updated>2007-09-20T21:01:22.509-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Serial Buses'/><title type='text'>Serial Buses</title><content type='html'>Fonte: &lt;a href="http://en.wikipedia.org/wiki/Category:Serial_buses"&gt;Wikipedia&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a title="Serial communications" href="http://en.wikipedia.org/wiki/Serial_communications"&gt;Serial communications&lt;/a&gt;&lt;br /&gt;1&lt;br /&gt;&lt;a title="1-Wire" href="http://en.wikipedia.org/wiki/1-Wire"&gt;1-Wire&lt;/a&gt;&lt;br /&gt;9&lt;br /&gt;&lt;a title="9-Pin Protocol" href="http://en.wikipedia.org/wiki/9-Pin_Protocol"&gt;9-Pin Protocol&lt;/a&gt;&lt;br /&gt;C&lt;br /&gt;&lt;a title="Commercial Standard Digital Bus" href="http://en.wikipedia.org/wiki/Commercial_Standard_Digital_Bus"&gt;Commercial Standard Digital Bus&lt;/a&gt;&lt;br /&gt;&lt;a title="ControlNet" href="http://en.wikipedia.org/wiki/ControlNet"&gt;ControlNet&lt;/a&gt;&lt;br /&gt;&lt;a title="Controller Area Network" href="http://en.wikipedia.org/wiki/Controller_Area_Network"&gt;Controller Area Network&lt;/a&gt;&lt;br /&gt;&lt;a title="Current loop" href="http://en.wikipedia.org/wiki/Current_loop"&gt;Current loop&lt;/a&gt;&lt;br /&gt;E&lt;br /&gt;&lt;a title="EIA-422" href="http://en.wikipedia.org/wiki/EIA-422"&gt;EIA-422&lt;/a&gt;&lt;br /&gt;&lt;a title="EIA-485" href="http://en.wikipedia.org/wiki/EIA-485"&gt;EIA-485&lt;/a&gt;&lt;br /&gt;&lt;a title="EIA-530" href="http://en.wikipedia.org/wiki/EIA-530"&gt;EIA-530&lt;/a&gt;&lt;br /&gt;F&lt;br /&gt;&lt;a title="FireWire" href="http://en.wikipedia.org/wiki/FireWire"&gt;FireWire&lt;/a&gt;&lt;br /&gt;G&lt;br /&gt;&lt;a title="GMLAN" href="http://en.wikipedia.org/wiki/GMLAN"&gt;GMLAN&lt;/a&gt;&lt;br /&gt;H&lt;br /&gt;&lt;a title="HAVi" href="http://en.wikipedia.org/wiki/HAVi"&gt;HAVi&lt;/a&gt;&lt;br /&gt;&lt;a title="HIL bus" href="http://en.wikipedia.org/wiki/HIL_bus"&gt;HIL bus&lt;/a&gt;&lt;br /&gt;&lt;a title="High-Speed Serial Interface" href="http://en.wikipedia.org/wiki/High-Speed_Serial_Interface"&gt;High-Speed Serial Interface&lt;/a&gt;&lt;br /&gt;I&lt;br /&gt;&lt;a title="IBM Personal System/2" href="http://en.wikipedia.org/wiki/IBM_Personal_System/2"&gt;IBM Personal System/2&lt;/a&gt;&lt;br /&gt;&lt;a title="IEEE 1355" href="http://en.wikipedia.org/wiki/IEEE_1355"&gt;IEEE 1355&lt;/a&gt;&lt;br /&gt;&lt;a title="INTERBUS" href="http://en.wikipedia.org/wiki/INTERBUS"&gt;INTERBUS&lt;/a&gt;&lt;br /&gt;&lt;a title="ISO 11898" href="http://en.wikipedia.org/wiki/ISO_11898"&gt;ISO 11898&lt;/a&gt;&lt;br /&gt;&lt;a title="InfiniBand" href="http://en.wikipedia.org/wiki/InfiniBand"&gt;InfiniBand&lt;/a&gt;&lt;br /&gt;&lt;a title="I²C" href="http://en.wikipedia.org/wiki/I%C2%B2C"&gt;I²C&lt;/a&gt;&lt;br /&gt;&lt;a title="I²S" href="http://en.wikipedia.org/wiki/I%C2%B2S"&gt;I²S&lt;/a&gt;&lt;br /&gt;L&lt;br /&gt;&lt;a title="Local Interconnect Network" href="http://en.wikipedia.org/wiki/Local_Interconnect_Network"&gt;Local Interconnect Network&lt;/a&gt;&lt;br /&gt;M&lt;br /&gt;&lt;a title="MADI" href="http://en.wikipedia.org/wiki/MADI"&gt;MADI&lt;/a&gt;&lt;br /&gt;&lt;a title="MIDI usage and applications" href="http://en.wikipedia.org/wiki/MIDI_usage_and_applications"&gt;MIDI usage and applications&lt;/a&gt;&lt;br /&gt;&lt;a title="MIL-STD-1553" href="http://en.wikipedia.org/wiki/MIL-STD-1553"&gt;MIL-STD-1553&lt;/a&gt;&lt;br /&gt;&lt;a title="MIL-STD-1760" href="http://en.wikipedia.org/wiki/MIL-STD-1760"&gt;MIL-STD-1760&lt;/a&gt;&lt;br /&gt;&lt;a title="Microwire" href="http://en.wikipedia.org/wiki/Microwire"&gt;Microwire&lt;/a&gt;&lt;br /&gt;&lt;a title="MilCAN" href="http://en.wikipedia.org/wiki/MilCAN"&gt;MilCAN&lt;/a&gt;&lt;br /&gt;&lt;a title="Milcan" href="http://en.wikipedia.org/wiki/Milcan"&gt;Milcan&lt;/a&gt;&lt;br /&gt;&lt;a title="Musical Instrument Digital Interface" href="http://en.wikipedia.org/wiki/Musical_Instrument_Digital_Interface"&gt;Musical Instrument Digital Interface&lt;/a&gt;&lt;br /&gt;P&lt;br /&gt;&lt;a title="PCI Express" href="http://en.wikipedia.org/wiki/PCI_Express"&gt;PCI Express&lt;/a&gt;&lt;br /&gt;&lt;a title="Peripheral Sensor Interface 5" href="http://en.wikipedia.org/wiki/Peripheral_Sensor_Interface_5"&gt;Peripheral Sensor Interface 5&lt;/a&gt;&lt;br /&gt;R&lt;br /&gt;&lt;a title="RS-232" href="http://en.wikipedia.org/wiki/RS-232"&gt;RS-232&lt;/a&gt;&lt;br /&gt;&lt;a title="RS-423" href="http://en.wikipedia.org/wiki/RS-423"&gt;RS-423&lt;/a&gt;&lt;br /&gt;&lt;a title="RS-449" href="http://en.wikipedia.org/wiki/RS-449"&gt;RS-449&lt;/a&gt;&lt;br /&gt;S&lt;br /&gt;&lt;a title="Serial Attached SCSI" href="http://en.wikipedia.org/wiki/Serial_Attached_SCSI"&gt;Serial Attached SCSI&lt;/a&gt;&lt;br /&gt;&lt;a title="Serial Digital Interface" href="http://en.wikipedia.org/wiki/Serial_Digital_Interface"&gt;Serial Digital Interface&lt;/a&gt;&lt;br /&gt;&lt;a title="Serial Peripheral Interface Bus" href="http://en.wikipedia.org/wiki/Serial_Peripheral_Interface_Bus"&gt;Serial Peripheral Interface Bus&lt;/a&gt;&lt;br /&gt;&lt;a title="Serial Storage Architecture" href="http://en.wikipedia.org/wiki/Serial_Storage_Architecture"&gt;Serial Storage Architecture&lt;/a&gt;&lt;br /&gt;&lt;a title="Serial port" href="http://en.wikipedia.org/wiki/Serial_port"&gt;Serial port&lt;/a&gt;&lt;br /&gt;&lt;a title="Smart Battery Data" href="http://en.wikipedia.org/wiki/Smart_Battery_Data"&gt;Smart Battery Data&lt;/a&gt;&lt;br /&gt;&lt;a title="System Management Bus" href="http://en.wikipedia.org/wiki/System_Management_Bus"&gt;System Management Bus&lt;/a&gt;&lt;br /&gt;T&lt;br /&gt;&lt;a title="Terminal line discipline" href="http://en.wikipedia.org/wiki/Terminal_line_discipline"&gt;Terminal line discipline&lt;/a&gt;&lt;br /&gt;&lt;a title="The MIDI 1.0 Protocol" href="http://en.wikipedia.org/wiki/The_MIDI_1.0_Protocol"&gt;The MIDI 1.0 Protocol&lt;/a&gt;&lt;br /&gt;V&lt;br /&gt;&lt;a title="VLYNQ" href="http://en.wikipedia.org/wiki/VLYNQ"&gt;VLYNQ&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1421437964988190395-5649758825745889332?l=i2c-rosa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/5649758825745889332/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1421437964988190395&amp;postID=5649758825745889332' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/5649758825745889332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/5649758825745889332'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/2007/09/serial-buses.html' title='Serial Buses'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1421437964988190395.post-1562085647082403117</id><published>2007-09-20T20:59:00.001-07:00</published><updated>2007-09-21T00:09:19.342-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Links'/><title type='text'>Links</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/I2c"&gt;I2C Wikipedia&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.i2cchip.com/"&gt;I2C Chip&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.jupiteri.com/"&gt;I2C Bus Monitor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.mcselec.com/"&gt;MCSelec&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1421437964988190395-1562085647082403117?l=i2c-rosa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/1562085647082403117/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1421437964988190395&amp;postID=1562085647082403117' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/1562085647082403117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/1562085647082403117'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/2007/09/links.html' title='Links'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1421437964988190395.post-4349021062945691009</id><published>2007-09-20T20:57:00.001-07:00</published><updated>2007-09-20T20:58:38.541-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Logotipo do I2C'/><title type='text'>Logotipo do I2C</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://upload.wikimedia.org/wikipedia/en/1/19/I2clogo.jpg"&gt;&lt;img style="WIDTH: 92px; CURSOR: hand; HEIGHT: 100px" height="96" alt="" src="http://upload.wikimedia.org/wikipedia/en/1/19/I2clogo.jpg" border="0" /&gt;&lt;/a&gt; &lt;a href="http://upload.wikimedia.org/wikipedia/en/1/19/I2clogo.jpg"&gt;http://upload.wikimedia.org/wikipedia/en/1/19/I2clogo.jpg&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1421437964988190395-4349021062945691009?l=i2c-rosa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/4349021062945691009/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1421437964988190395&amp;postID=4349021062945691009' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/4349021062945691009'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/4349021062945691009'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/2007/09/logotipo-do-i2c.html' title='Logotipo do I2C'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1421437964988190395.post-5640189943614088496</id><published>2007-09-06T18:44:00.000-07:00</published><updated>2007-09-06T21:44:48.030-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Documentação'/><title type='text'>Documentação</title><content type='html'>&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/"&gt;NXP Standard ICs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;NXP Advanced I2C devices (&lt;a href="http://www.nxp.com/acrobat_download/literature/9397/75015669.pdf"&gt;75015669.pdf&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/i2c/"&gt;NXP I2C Products&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/literature/i2c/"&gt;NXP I2C All Literature&lt;/a&gt;&lt;/li&gt;&lt;li&gt;I2C (&lt;a href="http://en.wikipedia.org/wiki/I%C2%B2C"&gt;Wikipedia&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://www.nxp.com/acrobat_download/literature/9398/39340011.pdf" href="http://www.nxp.com/acrobat_download/literature/9398/39340011.pdf" rel="nofollow"&gt;NXP (formerly Philips) I²C specifications&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://www.i2c-bus.org/" href="http://www.i2c-bus.org/" rel="nofollow"&gt;Detailed introduction, Primer&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://embedded.com/story/OEG20010718S0073" href="http://embedded.com/story/OEG20010718S0073" rel="nofollow"&gt;Introduction to I²C&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://www.interfacebus.com/Design_Connector_I2C.html" href="http://www.interfacebus.com/Design_Connector_I2C.html" rel="nofollow"&gt;I2C Bus / Access Bus&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://www.linuxjournal.com/article/1342" href="http://www.linuxjournal.com/article/1342" rel="nofollow"&gt;Using the I²C Bus with Linux&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://www.openbsd.org/cgi-bin/man.cgi?query=" href="http://www.openbsd.org/cgi-bin/man.cgi?query=iic&amp;sektion=4" rel="nofollow" sektion="4"&gt;OpenBSD iic(4) manual page&lt;/a&gt; &lt;/li&gt;&lt;li&gt;Linux package &lt;a class="external text" title="http://www.lm-sensors.org/" href="http://www.lm-sensors.org/" rel="nofollow"&gt;lm-sensors&lt;/a&gt; supports I²C bus, among others. &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://techref.massmind.org/i2cs.htm" href="http://techref.massmind.org/i2cs.htm" rel="nofollow"&gt;massmind I²C page&lt;/a&gt; Source code, samples and technical information for using I²C with PC, PIC and SX microcontrollers. &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://tmd.havit.cz/Papers/I2C.pdf" href="http://tmd.havit.cz/Papers/I2C.pdf" rel="nofollow"&gt;I²C bus&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://www.epanorama.net/links/serialbus.html" href="http://www.epanorama.net/links/serialbus.html" rel="nofollow"&gt;Serial buses information page&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://www.esacademy.com/faq/i2c/" href="http://www.esacademy.com/faq/i2c/" rel="nofollow"&gt;I²C Bus Technical Overview and Frequently Asked Questions&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://www.kar.elf.stuba.sk/predmety/mmp/i2c/i2cindex.htm" href="http://www.kar.elf.stuba.sk/predmety/mmp/i2c/i2cindex.htm" rel="nofollow"&gt;The I²C Faq Version 2.0&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://www.bus-buffer.com" href="http://www.bus-buffer.com/" rel="nofollow"&gt;The Bus Buffer Resource. For 2-wire buses such as I²C, SMBus, PMBus, IPMB &amp;amp; IPMI&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a class="external text" title="http://www.nxp.com/products/interface_control/i2c/licensing/" href="http://www.nxp.com/products/interface_control/i2c/licensing/" rel="nofollow"&gt;I²C Licensing Information&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.standardics.nxp.com/i2c/"&gt;NXP I2C Chips&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/products/adcs/"&gt;I2C Analog/Digital Converters&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/products/i2c.bus.controllers/"&gt;I2C Bus Controllers&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/products/i2cdipswitches/"&gt;I2C DIP Switches&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/products/i2c.led.controllers/"&gt;I2C LED Controllers&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/products/i2cmuxes/"&gt;I2C Multiplexers and Switches&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/products/i2c.real.time.clock.calendars/"&gt;I2C Real Time Clock/Calendars&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/products/i2chubs/"&gt;I2C Repeaters/Hubs/Extenders&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/products/seeproms/"&gt;I2C Serial EEPROMs&lt;/a&gt; &lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/products/i2cthermal/"&gt;I2C Thermal Management&lt;/a&gt; &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/#All"&gt;NXP Support Documents&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;p&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;/td&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an168.pdf"&gt;AN168 The I&lt;sup&gt;2&lt;/sup&gt;C Serial Bus: Theory and Practical Consideration Using Philips Low-Voltage PCF84Cxx and PCD33xx Microcontroller Families&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an250.pdf"&gt;AN250 PCA8550 4-Bit Multiplexed/1-Bit Latched 5-Bit I&lt;sup&gt;2&lt;/sup&gt;C E&lt;sup&gt;2&lt;/sup&gt;PROM&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an255.pdf"&gt;AN255-02 I&lt;sup&gt;2&lt;/sup&gt;C/SMBus Repeaters, Hubs, and Expanders&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an256.pdf"&gt;AN256 PTN3500/PTN3501 Provides Simple Card Maintenance and Control Using I&lt;sup&gt;2&lt;/sup&gt;C&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an262.pdf"&gt;AN262 PCA954X Family of I&lt;sup&gt;2&lt;/sup&gt;C/SMBus Multiplexers and Switches&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an264.pdf"&gt;AN264 I&lt;sup&gt;2&lt;/sup&gt;C Devices for LED Display Control&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an444.pdf"&gt;AN444 Using the P82B715 I&lt;sup&gt;2&lt;/sup&gt;C Extender on Long Cables&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an452.pdf"&gt;AN452 One Mile Long I&lt;sup&gt;2&lt;/sup&gt;C Communication Using the P82B715&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an460.pdf"&gt;AN460 Using the P82B96 for Bus Interface&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an469.pdf"&gt;AN469 I&lt;sup&gt;2&lt;/sup&gt;C I/O Ports&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an10146.pdf"&gt;AN10146-02 I2C 2002-1 Evaluation Board&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an10148.pdf"&gt;AN10148 PCA9564 I&lt;sup&gt;2&lt;/sup&gt;C-Bus Controller&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an10149.pdf"&gt;AN10149 PCA9564 Evaluation Board&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an10160.pdf"&gt;AN10160 Level Shifting I&lt;sup&gt;2&lt;/sup&gt;C and SMBus Hot Swappable Bus Buffers&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an10216.pdf"&gt;AN10216-01 I&lt;sup&gt;2&lt;/sup&gt;C Manual&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an10315.pdf"&gt;AN10315 LED Dimmer Demoboard&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an10349.pdf"&gt;AN10349 Digital Temperature Sensor Accuracy Explained&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/logic/pdf/an10366.pdf"&gt;AN10366 HVQFN Application Information&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="yel"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an10441.pdf"&gt;AN10441 Level shifting techniques in I&lt;sup&gt;2&lt;/sup&gt;C-bus design&lt;/a&gt; &lt;img class="new" title="New" alt="" src="http://www.standardics.nxp.com/images/pd-new.gif" /&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/interface/pdf/an10485.pdf"&gt;AN10485 SDA pin connection in SPI mode&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an10579.pdf"&gt;AN10579 Driving LED Light Bars using NXP Solutions&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/interface/pdf/an10587.pdf"&gt;AN10587 Interfacing NXP Bridge IC with NXP ARM Microcontroller&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an95068.pdf"&gt;AN95068 C Routines for the PCx8584&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an96119.pdf"&gt;AN96119 I&lt;sup&gt;2&lt;/sup&gt;C with the XA-G3&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an97055.pdf"&gt;AN97055 Bi-Directional Level Shifter for I&lt;sup&gt;2&lt;/sup&gt;C-Bus and Other Systems&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/an.real.time.clocks.pdf"&gt;Application note for the Philips Real Time Clocks PCF8563,73,83,93&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/anz96003.pdf"&gt;ANZ96003 Using the PCF8584 with Non-Specified Timings and Other Frequently Asked Questions&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/i2c.bus.repeaters.pdf"&gt;Bus Repeaters Expand Use of Popular Inter-IC Bus (in Electronic Design; Mar 17, 2003)&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/i2c/go/http://www.electronicproducts.com/ShowPage.asp?SECTION=3700&amp;PRIMID=&amp;amp;FileName=hljh01.jul2006.html"&gt;First Fm+ Devices Offer Advanced I&lt;sup&gt;2&lt;/sup&gt;C Performance (in Electronic Products; Jul 1, 2006)&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.quick.start.pdf"&gt;I2C Demonstration Board 2005-1 Quick Start Guide&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/zip/user.manual.2005-1.training.zip"&gt;I2C Demonstration Board 2005-1 Training (Complete)&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.training.agenda.pdf"&gt;I2C Demonstration Board 2005-1 Training Agenda&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.training.module.1.setup.gui.operation.pdf"&gt;I2C Demonstration Board 2005-1 Training Module 1. I&lt;sup&gt;2&lt;/sup&gt;C Demonstration Board 2005-1 Setup and GUI operation&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.training.module.2.i2c.bus.protocol.pdf"&gt;I2C Demonstration Board 2005-1 Training Module 2. I&lt;sup&gt;2&lt;/sup&gt;C-bus Protocol&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.training.module.3.mux.switches.pdf"&gt;I2C Demonstration Board 2005-1 Training Module 3. Multiplexers/Switches/Voltage Translation &amp; Hands-on&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.training.module.4.led.blinkers.dimmers.pdf"&gt;I2C Demonstration Board 2005-1 Training Module 4. LED Dimmers/Blinkers &amp;amp; Hands-on&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.training.module.5.gpio.pdf"&gt;I2C Demonstration Board 2005-1 Training Module 5. GPIO&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.training.module.6.eeprom.pdf"&gt;I2C Demonstration Board 2005-1 Training Module 6. EEPROMs&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.training.module.7.real.time.clocks.pdf"&gt;I2C Demonstration Board 2005-1 Training Module 7. Real Time Clocks&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.training.module.8.i2c.bus.master.selector.pdf"&gt;I2C Demonstration Board 2005-1 Training Module 8. I&lt;sup&gt;2&lt;/sup&gt;C Bus Master Selector&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.2005-1.training.module.9.temperature.sensors.pdf"&gt;I2C Demonstration Board 2005-1 Training Module 9. Temperature Sensors&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/schematics.2005-1.pdf"&gt;I2C Demonstration Board 2005-1 Schematics&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/microcontrollers/zip/driver.i2c.slave.pca9564.evalboard.zip"&gt;I&lt;sup&gt;2&lt;/sup&gt;C Slave Driver for the LPC900 Used on the PCA9564 Evaluation Board&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="yel"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/software/selector/"&gt;Off-Line Product Selector V5.3.0.0&lt;/a&gt; &lt;img class="updated" title="Updated" alt="" src="http://www.standardics.nxp.com/images/pd-updated.gif" /&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/optoisolation.pdf"&gt;Opto-Electrical Isolation of the I&lt;sup&gt;2&lt;/sup&gt;C Bus&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/pca9633.board.block.diagram.pdf"&gt;PCA9633 Demo Block Diagram&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/pca9633.board.schematics.pdf"&gt;PCA9633 Demo Board Schematics&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/zip/code.pca9633.demo.board.zip"&gt;PCA9633 Demo Board Source Code&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/user.manual.pca9633.board.schematics.pdf"&gt;PCA9633DEMO User Manual Including Demo Board Schematics&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/i2c/go/http://www.ledsmagazine.com/press/12295"&gt;Philips Fast-mode Plus I&lt;sup&gt;2&lt;/sup&gt;C Devices Support Control of LEDs (in LEDs Magazine; Jun 5, 2006)&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/i2c/go/http://www.eetimes.com/news/latest/showArticle.jhtml?articleID=188700374"&gt;Plain I&lt;sup&gt;2&lt;/sup&gt;C Bus to Get Speed Makeover (in EE Times; Jun 5, 2006)&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/i2c/go/http://www.ecnmag.com/article/CA287869.html"&gt;Repeater Expands Use of I2C Bus in Computing, Telecom, and Networking Applications (in ECN; Apr 1, 2003)&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="y"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/i2c/go/http://www.edn.com/article/CA6333046.html"&gt;Serial Bus Enhances Venerable I&lt;sup&gt;2&lt;/sup&gt;C Bus Speed (in EDN; May 9, 2006)&lt;/a&gt;&lt;/li&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr class="w"&gt;&lt;td style="WHITE-SPACE: nowrap"&gt;&lt;/td&gt;&lt;td class="b"&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/tn07001.pdf"&gt;TN07001 Replacement of NXP Industry Standard PCF8574 or PCF8575&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/pdf/i2c.bus.specification.pdf"&gt;UM10204 I&lt;sup&gt;2&lt;/sup&gt;C-bus specification and user manual, V3&lt;/a&gt; &lt;img class="updated" title="Updated" alt="" src="http://www.standardics.nxp.com/images/pd-updated.gif" /&gt; &lt;img class="hot" title="Hot" alt="" src="http://www.standardics.nxp.com/images/pd-hot.gif" /&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.standardics.nxp.com/support/documents/i2c/zip/software.win-i2cusb.lite.zip"&gt;Win-I2CUSB Lite Software for the I2C Demonstration Board 2005-1 Kit&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1421437964988190395-5640189943614088496?l=i2c-rosa.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://i2c-rosa.blogspot.com/feeds/5640189943614088496/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1421437964988190395&amp;postID=5640189943614088496' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/5640189943614088496'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1421437964988190395/posts/default/5640189943614088496'/><link rel='alternate' type='text/html' href='http://i2c-rosa.blogspot.com/2007/09/documentao.html' title='Documentação'/><author><name>Carlos Alberto Rosa</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='21' height='32' src='http://bp1.blogger.com/_5JsSiudffX8/R7-7JLPUSOI/AAAAAAAACCk/GwrTVUVGAIo/S220/www.carlos-rosa.com.jpg'/></author><thr:total>0</thr:total></entry></feed>
