<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.mcselec.com/bavr/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=CONFIG_I2CSLAVE%2Fde</id>
		<title>CONFIG I2CSLAVE/de - Revision history</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.mcselec.com/bavr/index.php?action=history&amp;feed=atom&amp;title=CONFIG_I2CSLAVE%2Fde"/>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=CONFIG_I2CSLAVE/de&amp;action=history"/>
		<updated>2026-05-02T01:05:29Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=CONFIG_I2CSLAVE/de&amp;diff=2181&amp;oldid=prev</id>
		<title>Admin: 1 revision</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=CONFIG_I2CSLAVE/de&amp;diff=2181&amp;oldid=prev"/>
				<updated>2013-02-15T19:13:30Z</updated>
		
		<summary type="html">&lt;p&gt;1 revision&lt;/p&gt;
&lt;table class='diff diff-contentalign-left'&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Older revision&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Revision as of 19:13, 15 February 2013&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://wiki.mcselec.com/bavr/index.php?title=CONFIG_I2CSLAVE/de&amp;diff=2180&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;The I2C-Slave library is intended to create I2C slave chips. This is an add-on library that is not included in Bascom-AVR by default. It is a commercial add on library. It is ...&quot;</title>
		<link rel="alternate" type="text/html" href="http://wiki.mcselec.com/bavr/index.php?title=CONFIG_I2CSLAVE/de&amp;diff=2180&amp;oldid=prev"/>
				<updated>2013-02-07T21:03:33Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;The I2C-Slave library is intended to create I2C slave chips. This is an add-on library that is not included in Bascom-AVR by default. It is a commercial add on library. It is ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== (**COPIED FROM ENGLISH PAGE**) ==The I2C-Slave library is intended to create I2C slave chips. This is an add-on library that is not included in Bascom-AVR by default. It is a commercial add on library. It is available from&amp;amp;nbsp;[http://www.mcselec.com/index.php?page=shop.product_details&amp;amp;flypage=shop.flypage&amp;amp;product_id=34&amp;amp;category_id=6&amp;amp;option=com_phpshop&amp;amp;Itemid=1 MCS Electronics]&lt;br /&gt;
&lt;br /&gt;
The I2C Slave add on can turn some chips into a I2C slave device. You can start your own chip plant this way.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
Most new AVR chips have a so called TWI/I2C interface. As a customer of the I2C slave lib, you can get both libs.&lt;br /&gt;
&lt;br /&gt;
The&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;i2cslave.lib&amp;lt;/span&amp;gt;&amp;amp;nbsp;works in interrupt mode and is the best way as it adds less overhead and also less system resources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
With this add-on library you get both libraries:&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;13&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt; font-family: Arial;&amp;quot;&amp;gt;�&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;i2cslave.lib&amp;lt;/span&amp;gt;&amp;amp;nbsp;and&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;i2cslave.lbx&amp;lt;/span&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;: This library is used for AVR‘s which have&amp;amp;nbsp;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;no&amp;lt;/span&amp;gt;&amp;amp;nbsp;hardware TWI/I2C interface like &amp;amp;nbsp;for example ATTINY2313 or ATTINY13. In this case TIMER0 and INT0 is used for SDA and SCL (Timer0 Pin = SCL, INT0 Pin = SDA). Only AVR' with TIMER0 and INT0&amp;amp;nbsp;&amp;lt;span style=&amp;quot;text-decoration: underline;&amp;quot;&amp;gt;on the same port&amp;lt;/span&amp;gt;&amp;amp;nbsp;can use this library like for example ATTINY2313 or ATTINY13. The i2cslave.lib file contains the ASM source. The i2cslave.lbx file contains the compiled ASM source. See&amp;amp;nbsp;&amp;lt;span class=&amp;quot;f_Syntax&amp;quot;&amp;gt;CONFIG I2CSLAVE&amp;lt;/span&amp;gt;&amp;amp;nbsp;below.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;13&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt; font-family: Arial;&amp;quot;&amp;gt;�&amp;lt;/span&amp;gt;&lt;br /&gt;
| &amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;i2c_TWI-slave.LBX&amp;lt;/span&amp;gt;&amp;amp;nbsp;: This library can be used when an AVR have an TWI/I2C hardware interface like for example ATMEGA8, ATMEGA644P or ATMEGA128. In this case the hardware SDA and SCL pin's of the AVR will be used (with ATMEGA8: SCL is PORTC.5 and SDA is PORTC.4). This library will be used when USERACK = OFF. When USERACK =ON then&amp;amp;nbsp;&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;i2c_TWI-slave-acknack.LBX&amp;lt;/span&amp;gt;&amp;amp;nbsp;will be used. See also&amp;amp;nbsp;[[CONFIG TWISLAVE|Config TWISLAVE]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Action&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Configures the I2C slave mode.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Before you begin&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
Copy the library files into the BASCOM-AVR\LIB directory.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Syntax&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;f_Syntax&amp;quot;&amp;gt;CONFIG I2CSLAVE&amp;lt;/span&amp;gt;&amp;amp;nbsp;= address , INT = interrupt , TIMER = tmr&lt;br /&gt;
&lt;br /&gt;
(This function is part of the I2C-Slave library. This is an add-on library that is not included in Bascom-AVR by default. It is a commercial add on library. It is available from&amp;amp;nbsp;[http://www.mcselec.com/index.php?page=shop.product_details&amp;amp;flypage=shop.flypage&amp;amp;product_id=34&amp;amp;category_id=6&amp;amp;option=com_phpshop&amp;amp;Itemid=1 MCS Electronics]&amp;amp;nbsp;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Remarks&amp;lt;/span&amp;gt; =&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px 0px 0px 4px;&amp;quot;&amp;gt;&lt;br /&gt;
{| width=&amp;quot;561&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 2px solid rgb(0, 0, 0); border-spacing: 0px; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;18%&amp;quot; style=&amp;quot;width: 97px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Address&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;width: 455px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
The slave address you want to assign to the I2C slave chip. This is an address that must be even like &amp;amp;H60. So &amp;amp;H61 cannot be used.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
I2C uses a 7 bit address from bit 1 to bit 7. Bit 0 is used to specify a read/write operation. In BASCOM the byte transmission address is used for I2C.&lt;br /&gt;
&lt;br /&gt;
This means that an I2C address of 1 becomes &amp;amp;B10 = 2. And we say the address is 2. This is done so you can copy the address from the data sheets which are in the same format in most cases.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;18%&amp;quot; style=&amp;quot;width: 97px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Interrupt&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;width: 455px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
The interrupt that must be used. This is INT0 by default.&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;18%&amp;quot; style=&amp;quot;width: 97px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
Tmr&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;100%&amp;quot; style=&amp;quot;width: 455px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
The timer that must be used. This is TIMER0 by default.&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The library was written for TIMER0 and INT0.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
While the interrupt can be specified, you need to change the library code when you use a non-default interrupt. For example when you like to use INT1 instead of the default INT0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The same applies to the TIMER. You need to change the library when you like to use another timer.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
You can not use these interrupts yourself. It also means that the SCL and SDA pins are fixed.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span class=&amp;quot;f_Syntax&amp;quot;&amp;gt;CONFIG I2CSLAVE&amp;lt;/span&amp;gt;&amp;amp;nbsp;will enable the global interrupts.&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Timer0 and INT0 Pin's of Various AVR's&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The I2C slave routines use the TIMER0 and INT0.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The following table lists the pins for the various chips&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px 0px 0px 4px;&amp;quot;&amp;gt;&lt;br /&gt;
{| cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;1&amp;quot; border=&amp;quot;1&amp;quot; style=&amp;quot;border: 2px solid rgb(0, 0, 0); border-spacing: 0px; border-collapse: collapse;&amp;quot;&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; bgcolor=&amp;quot;#ffff99&amp;quot; style=&amp;quot;width: 182px; background-color: rgb(255, 255, 153); border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;Chip&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; bgcolor=&amp;quot;#ffff99&amp;quot; style=&amp;quot;width: 125px; background-color: rgb(255, 255, 153); border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;SCL&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; bgcolor=&amp;quot;#ffff99&amp;quot; style=&amp;quot;width: 127px; background-color: rgb(255, 255, 153); border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;SDA&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
AT90S1200&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.2&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
AT90S2313&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.2&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
AT90S2323&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTB.2&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTB.1&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
AT90S2333&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.2&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
AT90S2343&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTB.2&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTB.1&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
AT90S4433&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.2&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATTINY22&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTB.2&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTB.1&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATTINY13&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTB.2&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTB.1&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATTINY2313&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.2&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATMEGA1280&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.7&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.0&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATMEGA128CAN&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.7&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.0&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATMEGA168&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.2&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATMEGA2560&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.7&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.0&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATMEGA2561&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.7&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.0&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATMEGA48&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.2&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATMEGA88&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.2&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
ATMEGA8&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.4&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
PORTD.2&lt;br /&gt;
&lt;br /&gt;
|- style=&amp;quot;vertical-align: top;&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;182&amp;quot; style=&amp;quot;width: 182px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;125&amp;quot; style=&amp;quot;width: 125px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;127&amp;quot; style=&amp;quot;width: 127px; border: 1px solid rgb(0, 0, 0);&amp;quot; | &lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After you have configured the slave address, you can insert your code.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A do-loop would be best:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Do&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;' your code here&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Loop&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After your main program you need to insert two labels with a return:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the master needs to read a byte, the following label is always called.&lt;br /&gt;
&lt;br /&gt;
You must put the data you want to send to the master in variable _a1 which is register R16&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;I2c_master_needs_data&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;'when your code is short, you need to put in a waitms statement&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;'Take in mind that during this routine, a wait state is active and the master will wait&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;'After the return, the waitstate is ended&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Config&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(128, 0, 0);&amp;quot;&amp;gt;Portb&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Input&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;' make it an input&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;_a1&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(128, 0, 0);&amp;quot;&amp;gt;Pinb&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;' Get input from portB and assign it&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Return&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
When the master writes a byte, the following label is always called.&lt;br /&gt;
&lt;br /&gt;
It is your task to retrieve variable _A1 and do something with it&lt;br /&gt;
&lt;br /&gt;
_A1 is register R16 that could be destroyed/altered by BASIC statements&lt;br /&gt;
&lt;br /&gt;
For that reason it is important that you first save this variable.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;I2c_master_has_data&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;:&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;'when your code is short, you need to put in a waitms statement&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;'Take in mind that during this routine, a wait state is active and the master will wait&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;'After the return, the waitstate is ended&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;Bfake&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;_a1 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;' this is not needed but it shows how you can store _A1 in a byte&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;'after you have stored the received data into bFake, you can alter R16&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Config&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(128, 0, 0);&amp;quot;&amp;gt;Portb&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Output&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;' make it an output since it could be an input&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(128, 0, 0);&amp;quot;&amp;gt;Portb&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(255, 0, 0);&amp;quot;&amp;gt;=&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier;&amp;quot;&amp;gt;&amp;amp;nbsp;_a1 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; color: rgb(0, 128, 0);&amp;quot;&amp;gt;'assign _A1 (R16)&amp;lt;/span&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;span style=&amp;quot;font-size: 8pt; font-family: Courier; font-weight: bold; color: rgb(0, 0, 128);&amp;quot;&amp;gt;Return&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;See Also&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
[[CONFIG TWI|CONFIG TWI]]&amp;amp;nbsp;,&amp;amp;nbsp;[[CONFIG TWISLAVE|CONFIG TWISLAVE]],&amp;amp;nbsp;[[I2C TWI Slave|I2C TWI Slave]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Debugging Hint's&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
If you encounter a problem first check:&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;13&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', Arial;&amp;quot;&amp;gt;•&amp;lt;/span&amp;gt;&lt;br /&gt;
| Do you use the correct Pin's for SDA and SCL&amp;amp;nbsp;?&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;13&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', Arial;&amp;quot;&amp;gt;•&amp;lt;/span&amp;gt;&lt;br /&gt;
| Pull-up Resistor from SDA and SCL to Vcc&amp;amp;nbsp;?&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;13&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', Arial;&amp;quot;&amp;gt;•&amp;lt;/span&amp;gt;&lt;br /&gt;
| Try to reduce clockrate from I2C Master&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;13&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', Arial;&amp;quot;&amp;gt;•&amp;lt;/span&amp;gt;&lt;br /&gt;
| Try to use&amp;amp;nbsp;&amp;lt;span class=&amp;quot;f_Syntax&amp;quot;&amp;gt;waitms XX&amp;lt;/span&amp;gt;&amp;amp;nbsp;between the&amp;amp;nbsp;&amp;lt;span class=&amp;quot;f_Syntax&amp;quot;&amp;gt;I2CWBYTE&amp;lt;/span&amp;gt;&amp;amp;nbsp;in the I2C Master AVR&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;div style=&amp;quot;padding: 0px; margin: 0px;&amp;quot;&amp;gt;&lt;br /&gt;
{| border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|- valign=&amp;quot;baseline&amp;quot; style=&amp;quot;vertical-align: baseline;&amp;quot;&lt;br /&gt;
| width=&amp;quot;13&amp;quot; | &amp;lt;span style=&amp;quot;font-size: 10pt; font-family: 'Arial Unicode MS', 'Lucida Sans Unicode', Arial;&amp;quot;&amp;gt;•&amp;lt;/span&amp;gt;&lt;br /&gt;
| Try to reduce code in the interrupt routine&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;span style=&amp;quot;font-family: Arial;&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= &amp;lt;span class=&amp;quot;f_Header&amp;quot;&amp;gt;Example&amp;lt;/span&amp;gt; =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;source lang=&amp;quot;bascomavr&amp;quot;&amp;gt;&lt;br /&gt;
'-----------------------------------------------------------------------------------------&lt;br /&gt;
'name : i2c_pcf8574.bas&lt;br /&gt;
'copyright : (c) 1995-2005, MCS Electronics&lt;br /&gt;
'purpose : shows how you could use the I2C slave library to create a PCF8574&lt;br /&gt;
'micro : AT90S2313&lt;br /&gt;
'suited for demo : NO, ADDON NEEDED&lt;br /&gt;
'commercial addon needed : yes&lt;br /&gt;
'-----------------------------------------------------------------------------------------&lt;br /&gt;
 &lt;br /&gt;
$regfile = &amp;quot;2313def.dat&amp;quot; ' specify the used micro&lt;br /&gt;
$crystal = 3684000 ' used crystal frequency&lt;br /&gt;
$baud = 19200 ' use baud rate&lt;br /&gt;
$hwstack = 32 ' default use 32 for the hardware stack&lt;br /&gt;
$swstack = 10 ' default use 10 for the SW stack&lt;br /&gt;
$framesize = 40 ' default use 40 for the frame space&lt;br /&gt;
 &lt;br /&gt;
'This program shows how you could use the I2C slave library to create a PCF8574&lt;br /&gt;
'The PCF8574 is an IO extender chip that has 8 pins.&lt;br /&gt;
'The pins can be set to a logic level by writing the address followed by a value&lt;br /&gt;
'In order to read from the pins you need to make them '1' first&lt;br /&gt;
 &lt;br /&gt;
'This program uses a AT90S2313, PORTB is used as the PCF8574 PORT&lt;br /&gt;
'The slave library needs INT0 and TIMER0 in order to work.&lt;br /&gt;
'SCL is PORTD.4 (T0)&lt;br /&gt;
'SDA is PORTD.2 (INT0)&lt;br /&gt;
'Use 10K pull up resistors for both SCL and SDA&lt;br /&gt;
 &lt;br /&gt;
'The Slave library will only work for chips that have T0 and INT0 connected to the same PORT.&lt;br /&gt;
'These chips are : 2313,2323, 2333,2343,4433,tiny22, tiny12,tiny15, M8&lt;br /&gt;
'The other chips have build in hardware I2C(slave) support.&lt;br /&gt;
 &lt;br /&gt;
'specify the slave address. This is &amp;amp;H40 for the PCF8574&lt;br /&gt;
'You always need to specify the address used for write. In this case &amp;amp;H40 ,&lt;br /&gt;
 &lt;br /&gt;
'The config i2cslave command will enable the global interrupt enable flag !&lt;br /&gt;
Config I2cslave = &amp;amp;B01000000 ' same as &amp;amp;H40&lt;br /&gt;
'Config I2cslave = &amp;amp;H40 , Int = Int0 , Timer = Timer0&lt;br /&gt;
'A byte named _i2c_slave_address_received is generated by the compiler.&lt;br /&gt;
'This byte will hold the received address.&lt;br /&gt;
 &lt;br /&gt;
'A byte named _i2c_slave_address is generated by the compiler.&lt;br /&gt;
'This byte must be assigned with the slave address of your choice&lt;br /&gt;
 &lt;br /&gt;
'the following constants will be created that are used by the slave library:&lt;br /&gt;
 &lt;br /&gt;
' _i2c_pinmask = &amp;amp;H14&lt;br /&gt;
' _i2c_slave_port = Portd&lt;br /&gt;
' _i2c_slave_pin = Pind&lt;br /&gt;
' _i2c_slave_ddr = Ddrd&lt;br /&gt;
' _i2c_slave_scl = 4&lt;br /&gt;
' _i2c_slave_sda = 2&lt;br /&gt;
 &lt;br /&gt;
'These values are adjusted automatic depending on the selected chip.&lt;br /&gt;
'You do not need to worry about it, only provided as additional info&lt;br /&gt;
 &lt;br /&gt;
'by default the PCF8574 port is set to input&lt;br /&gt;
Config Portb = Input&lt;br /&gt;
Portb = 255 'all pins high by default&lt;br /&gt;
 &lt;br /&gt;
'DIM a byte that is not needed but shows how you can store/write the I2C DATA&lt;br /&gt;
Dim Bfake As Byte&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'empty loop&lt;br /&gt;
Do&lt;br /&gt;
' you could put your other program code here&lt;br /&gt;
'In any case, do not use END since it will disable interrupts&lt;br /&gt;
 &lt;br /&gt;
Loop&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'here you can write your other program code&lt;br /&gt;
'But do not forget, do not use END. Use STOP when needed&lt;br /&gt;
 &lt;br /&gt;
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;
' The following labels are called from the slave library&lt;br /&gt;
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;
 &lt;br /&gt;
'When the master wants to read a byte, the following label is allways called&lt;br /&gt;
'You must put the data you want to send to the master in variable _a1 which is register R16&lt;br /&gt;
I2c_master_needs_data:&lt;br /&gt;
'when your code is short, you need to put in a waitms statement&lt;br /&gt;
'Take in mind that during this routine, a wait state is active and the master will wait&lt;br /&gt;
'After the return, the waitstate is ended&lt;br /&gt;
Config Portb = Input ' make it an input&lt;br /&gt;
_a1 = Pinb ' Get input from portB and assign it&lt;br /&gt;
Return&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'When the master writes a byte, the following label is always called&lt;br /&gt;
'It is your task to retrieve variable _A1 and do something with it&lt;br /&gt;
'_A1 is register R16 that could be destroyed/altered by BASIC statements&lt;br /&gt;
'For that reason it is important that you first save this variable&lt;br /&gt;
 &lt;br /&gt;
I2c_master_has_data:&lt;br /&gt;
'when your code is short, you need to put in a waitms statement&lt;br /&gt;
'Take in mind that during this routine, a wait state is active and the master will wait&lt;br /&gt;
'After the return, the waitstate is ended&lt;br /&gt;
 &lt;br /&gt;
Bfake = _a1 ' this is not needed but it shows how you can store _A1 in a byte&lt;br /&gt;
'after you have stored the received data into bFake, you can alter R16&lt;br /&gt;
Config Portb = Output ' make it an output since it could be an input&lt;br /&gt;
Portb = _a1 'assign _A1 (R16)&lt;br /&gt;
Return&lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!&lt;br /&gt;
 &lt;br /&gt;
'You could simply extend this sample so it will use 3 pins of PORT D for the address selection&lt;br /&gt;
'For example portD.1 , portd.2 and portD.3 could be used for the address selection&lt;br /&gt;
'Then after the CONFIG I2CSLAVE = &amp;amp;H40 statement, you can put code like:&lt;br /&gt;
'Dim switches as Byte ' dim byte&lt;br /&gt;
'switches = PIND ' get dip switch value&lt;br /&gt;
'switches = switches and &amp;amp;H1110 ' we only need the lower nibble without the LS bit&lt;br /&gt;
'_i2c_slave_address = &amp;amp;H40 + switches ' set the proper address&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br/&amp;gt;{{Languages}}&lt;br /&gt;
&lt;br /&gt;
[[Category:BASCOM Language Reference/de]]&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>