<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://www.marcelpost.com/wiki/index.php?action=history&amp;feed=atom&amp;title=I2c-master</id>
	<title>I2c-master - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://www.marcelpost.com/wiki/index.php?action=history&amp;feed=atom&amp;title=I2c-master"/>
	<link rel="alternate" type="text/html" href="https://www.marcelpost.com/wiki/index.php?title=I2c-master&amp;action=history"/>
	<updated>2026-05-17T04:14:38Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.17</generator>
	<entry>
		<id>https://www.marcelpost.com/wiki/index.php?title=I2c-master&amp;diff=1372&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;These code snippets and functions are intended for an I2C master device.   Functions: * address an I2C slave and write data to it * address an I2C slave and read data from it ...&quot;</title>
		<link rel="alternate" type="text/html" href="https://www.marcelpost.com/wiki/index.php?title=I2c-master&amp;diff=1372&amp;oldid=prev"/>
		<updated>2014-03-16T10:59:49Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;These code snippets and functions are intended for an I2C master device.   Functions: * address an I2C slave and write data to it * address an I2C slave and read data from it ...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;These code snippets and functions are intended for an I2C master device. &lt;br /&gt;
&lt;br /&gt;
Functions:&lt;br /&gt;
* address an I2C slave and write data to it&lt;br /&gt;
* address an I2C slave and read data from it&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==initialisation==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// I2C definitions&lt;br /&gt;
int LCD_I2C_DEVICE_ID=58;&lt;br /&gt;
#define SCL PA4 &lt;br /&gt;
#define SDA PA5&lt;br /&gt;
&lt;br /&gt;
#define I2C_SCL_T_HIGH_US 50&lt;br /&gt;
#define I2C_SCL_T_LOW_US 50&lt;br /&gt;
&lt;br /&gt;
// Testing i2c reads with 24LC256 EEPROM module&lt;br /&gt;
#define I2C_EEPROM 0x50  // ID# of eeprom&lt;br /&gt;
&lt;br /&gt;
int got_ack;&lt;br /&gt;
int I2C_STRETCH_TIMEOUT_MS=10;  // how long to wait for a slave that&amp;#039;s stretching the clock&lt;br /&gt;
unsigned int i2c_timeout=65535;  // when listening for read replies&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==functions==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
// --- I2C Functions ---&lt;br /&gt;
// --- I2C Functions ---&lt;br /&gt;
// --- I2C Functions ---&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void setPin(int line, int state)&lt;br /&gt;
{&lt;br /&gt;
  // set the I2C SDA or SCL PIN&lt;br /&gt;
&lt;br /&gt;
  if (state == LOW)    // if state = 0 &lt;br /&gt;
  {&lt;br /&gt;
    // set the pin low&lt;br /&gt;
&lt;br /&gt;
    DDRA |= (1 &amp;lt;&amp;lt; line);     // set line to output&lt;br /&gt;
    PORTA &amp;amp;= ~(1 &amp;lt;&amp;lt; line);   // set it to zero&lt;br /&gt;
&lt;br /&gt;
  } else {&lt;br /&gt;
&lt;br /&gt;
    // set the pin high (let external pull-up resistor bring it high)&lt;br /&gt;
&lt;br /&gt;
    DDRA &amp;amp;= ~(1 &amp;lt;&amp;lt; line);  // set line to input&lt;br /&gt;
   &lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void i2c_tx(char d)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // SDA is LOW, SCL is high (inherited from START sequence)&lt;br /&gt;
&lt;br /&gt;
  // 1010 0000 0    0000 00000 0   0001 0101 0 00010&lt;br /&gt;
  // 80 &amp;lt;&amp;lt; 1 W A      &lt;br /&gt;
  &lt;br /&gt;
  // bring clock low to start data transfer&lt;br /&gt;
&lt;br /&gt;
  setPin(SCL,LOW);&lt;br /&gt;
  _delay_us(I2C_SCL_T_LOW_US);&lt;br /&gt;
 &lt;br /&gt;
  char x;&lt;br /&gt;
  //static int b;&lt;br /&gt;
  for(x=8; x; x--) &lt;br /&gt;
  { &lt;br /&gt;
    if(d&amp;amp;0x80) &lt;br /&gt;
    {&lt;br /&gt;
      setPin(SDA,HIGH);  &lt;br /&gt;
	 &lt;br /&gt;
	  &lt;br /&gt;
	  &lt;br /&gt;
    } else {&lt;br /&gt;
      setPin(SDA,LOW);  &lt;br /&gt;
	 &lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    setPin(SCL,HIGH);                  // strobe clock&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    // allow for I2C clock stretching (SCL can be held low by slave)&lt;br /&gt;
    // see I2C_STRETCH_TIMEOUT_MS&lt;br /&gt;
&lt;br /&gt;
    int stretch_counter;&lt;br /&gt;
    &lt;br /&gt;
    for (stretch_counter=0; stretch_counter &amp;lt; I2C_STRETCH_TIMEOUT_MS; stretch_counter++)&lt;br /&gt;
    {&lt;br /&gt;
      // allow for some cycles for SCL to go high  &lt;br /&gt;
&lt;br /&gt;
      if (bit_is_clear(PINA,SCL))&lt;br /&gt;
      {&lt;br /&gt;
        // SCL is held low by slave&lt;br /&gt;
        // we&amp;#039;ll just wait a little &lt;br /&gt;
&lt;br /&gt;
        _delay_us(5);&lt;br /&gt;
&lt;br /&gt;
      } else {&lt;br /&gt;
&lt;br /&gt;
        // SCL has risen, ready to move on&lt;br /&gt;
        stretch_counter = I2C_STRETCH_TIMEOUT_MS;&lt;br /&gt;
      }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    _delay_us(I2C_SCL_T_HIGH_US);       // if everything went fine we still need to make sure&lt;br /&gt;
    setPin(SCL,LOW);                    // we&amp;#039;re waiting at least 4us until we can bring SCL LOW&lt;br /&gt;
	_delay_us(I2C_SCL_T_LOW_US);&lt;br /&gt;
    d &amp;lt;&amp;lt;= 1;                 // shift byte&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  // read acknowledge bit if any&lt;br /&gt;
&lt;br /&gt;
  _delay_us(I2C_SCL_T_LOW_US);&lt;br /&gt;
  setPin(SDA,HIGH);         // first bring SDA into listening mode&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  // An addressed i2c slave that wants to set an ACK will have already set SDA low.&lt;br /&gt;
  // If the slave doesn&amp;#039;t respond to the ACK we need to make sure not to see a false&lt;br /&gt;
  // positive from our own SDA pin&lt;br /&gt;
&lt;br /&gt;
  _delay_us(I2C_SCL_T_HIGH_US);             // give the bus some time to possibly bring the pin high&lt;br /&gt;
  setPin(SCL,HIGH);         // start the clock pulse&lt;br /&gt;
&lt;br /&gt;
  // check if slave set an ack on the SDA line or not&lt;br /&gt;
  if (bit_is_set(PINA,SDA))&lt;br /&gt;
  {&lt;br /&gt;
    got_ack=0;&lt;br /&gt;
  } else {&lt;br /&gt;
    got_ack=1;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  //setPin(SDA,LOW);         // we now bring SDA low&lt;br /&gt;
  //_delay_us(10);          // give the bus some time to prevent slaves from detecting this as a false stop?    ----- may go &lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
  _delay_us(I2C_SCL_T_HIGH_US); &lt;br /&gt;
&lt;br /&gt;
  setPin(SCL,LOW);          // end the clock pulse&lt;br /&gt;
  &lt;br /&gt;
  // show ack result here..&lt;br /&gt;
&lt;br /&gt;
  // slave detects SCL is low and will release SDA &lt;br /&gt;
&lt;br /&gt;
  // need an extra bit of delay here for our I2C LCD Module&lt;br /&gt;
 // _delay_us(100);&lt;br /&gt;
  _delay_us(I2C_SCL_T_LOW_US);    // this should be 10us or so  &lt;br /&gt;
  _delay_us(I2C_SCL_T_LOW_US);    // this should be 10us or so  &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
  // -- end of i2c_tx function --&lt;br /&gt;
  // function ends with:&lt;br /&gt;
  //&lt;br /&gt;
  //   SDA: HIGH&lt;br /&gt;
  //   SCL: LOW  &lt;br /&gt;
 &lt;br /&gt;
 &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void i2c_start()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // SDA goes from high to low while SCL is high&lt;br /&gt;
&lt;br /&gt;
  // we expect both SDA and SCL to be high&lt;br /&gt;
  &lt;br /&gt;
  //_delay_us(500);&lt;br /&gt;
  //setPin(SDA,HIGH); &lt;br /&gt;
  //_delay_us(500);    // give bus some time to bring SDA high&lt;br /&gt;
  //setPin(SCL,HIGH);&lt;br /&gt;
&lt;br /&gt;
  //_delay_us(100);    &lt;br /&gt;
&lt;br /&gt;
  setPin(SDA,LOW);&lt;br /&gt;
  _delay_us(I2C_SCL_T_LOW_US);    &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void i2c_write(char i2c_id)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  i2c_start();&lt;br /&gt;
&lt;br /&gt;
  // send the I2C Device ID&lt;br /&gt;
  // send as Write (last bit is 0)&lt;br /&gt;
&lt;br /&gt;
  i2c_tx(i2c_id&amp;lt;&amp;lt;1);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void i2c_stop()&lt;br /&gt;
{&lt;br /&gt;
  // SDA goes from low to high while SCL is high&lt;br /&gt;
  &lt;br /&gt;
  // we expect SCL to be low but don&amp;#039;t know the state of SDA&lt;br /&gt;
  // therefore we force SCL to be low so we don&amp;#039;t accidentally &lt;br /&gt;
  // generate a .. and then bring down SDA so we begin with&lt;br /&gt;
  // a known start condition.&lt;br /&gt;
  &lt;br /&gt;
  setPin(SCL,LOW);&lt;br /&gt;
  _delay_us(I2C_SCL_T_LOW_US);    // give bus some time to bring SCL LOW&lt;br /&gt;
  setPin(SDA,LOW);  &lt;br /&gt;
  _delay_us(I2C_SCL_T_LOW_US);    // give bus some time to bring SDA LOW&lt;br /&gt;
  &lt;br /&gt;
  // initiate STOP sequence&lt;br /&gt;
&lt;br /&gt;
  setPin(SCL,HIGH);&lt;br /&gt;
  _delay_us(I2C_SCL_T_HIGH_US);&lt;br /&gt;
&lt;br /&gt;
  setPin(SDA,HIGH);&lt;br /&gt;
  _delay_us(I2C_SCL_T_HIGH_US);&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void i2c_lcd_text(char *StrData)&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  int p = 0;&lt;br /&gt;
  int q = strlen(StrData);&lt;br /&gt;
  int temp = 0;&lt;br /&gt;
&lt;br /&gt;
  for (p = 0; p &amp;lt; q; p++)&lt;br /&gt;
  {&lt;br /&gt;
    temp = StrData[p];&lt;br /&gt;
    i2c_tx(temp);&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void i2c_lcd_number(int number)&lt;br /&gt;
{&lt;br /&gt;
  int digits;&lt;br /&gt;
&lt;br /&gt;
  if (number == 0)&lt;br /&gt;
  {&lt;br /&gt;
    digits = 0;&lt;br /&gt;
    int array[0];&lt;br /&gt;
    array[0]=0;&lt;br /&gt;
    i2c_tx(array[0]+48);&lt;br /&gt;
&lt;br /&gt;
  } else {&lt;br /&gt;
&lt;br /&gt;
    // determine the number of digits&lt;br /&gt;
    digits = (int) (log(number)/log(10))+1;&lt;br /&gt;
&lt;br /&gt;
    // split up the number&amp;#039;s digits into an array&lt;br /&gt;
    int i = digits -1;&lt;br /&gt;
    int array[digits];&lt;br /&gt;
    while (number &amp;gt; 0)&lt;br /&gt;
    {&lt;br /&gt;
      array[i--] = number % 10;&lt;br /&gt;
      number /= 10;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    // send array over i2c&lt;br /&gt;
    for (i =0; i &amp;lt;= digits-1; i++)&lt;br /&gt;
    {&lt;br /&gt;
      i2c_tx(array[i]+48);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
  }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
void i2c_cls(uint8_t device)&lt;br /&gt;
{&lt;br /&gt;
  // send out Clear LCD command to I2C_LCD device&lt;br /&gt;
  i2c_write(device);       &lt;br /&gt;
  i2c_tx(12);         // blank lcd command&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void i2c_pos (uint8_t device, uint8_t row, uint8_t col)&lt;br /&gt;
{ &lt;br /&gt;
  // positions the cursor on an I2C_LCD device&lt;br /&gt;
  i2c_write(device);        &lt;br /&gt;
  i2c_tx(10);   // i2c position command&lt;br /&gt;
  i2c_tx(row);  // row position&lt;br /&gt;
  i2c_tx(col);  // col position&lt;br /&gt;
  i2c_stop();                &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void i2c_write_number(uint8_t device, int16_t number)&lt;br /&gt;
{&lt;br /&gt;
  // write a number to an I2C_LCD device&lt;br /&gt;
  i2c_write(device);&lt;br /&gt;
  i2c_lcd_number(number);&lt;br /&gt;
  i2c_stop();&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char i2c_rxbyte()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
  // read a byte from an i2c slave we just addressed with its ID and the register we wish to read&lt;br /&gt;
&lt;br /&gt;
  unsigned char rxbyte=0;&lt;br /&gt;
  int bitcount=8;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
  // i2c_tx ends with:&lt;br /&gt;
  // SDA: HIGH&lt;br /&gt;
  // SCL: LOW&lt;br /&gt;
  &lt;br /&gt;
 &lt;br /&gt;
   // the ic2_tx command lastly sent the ack pulse and now has SDA and SCL set to LOW&lt;br /&gt;
   // we now control the read from the i2c slave device by pulsing SCL and reading SDA &lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  while (bitcount &amp;gt; 0)&lt;br /&gt;
  { &lt;br /&gt;
  &lt;br /&gt;
    rxbyte = rxbyte &amp;lt;&amp;lt; 1; // shift all bits in rxbyte one position to the left&lt;br /&gt;
    &lt;br /&gt;
	setPin(SCL,HIGH);         // start the clock pulse&lt;br /&gt;
    _delay_us(I2C_SCL_T_HIGH_US);           // give the bus some time to possibly bring the pin high&lt;br /&gt;
&lt;br /&gt;
	if (bit_is_set(PINA,SDA))&lt;br /&gt;
    {&lt;br /&gt;
      // -- detected bit &amp;#039;1&amp;#039; --&lt;br /&gt;
      rxbyte |= 1 &amp;lt;&amp;lt; 0 ; // sets bit 0 of rxbyte to 1&lt;br /&gt;
	  &lt;br /&gt;
    } else {&lt;br /&gt;
      // -- detected bit &amp;#039;0&amp;#039; --&lt;br /&gt;
	 &lt;br /&gt;
    }&lt;br /&gt;
     setPin(SCL,LOW);         // stop the clock pulse&lt;br /&gt;
	 _delay_us(I2C_SCL_T_LOW_US);           // give the bus some time to possibly bring the pin high&lt;br /&gt;
	&lt;br /&gt;
	bitcount--;  // decrement bitcounter&lt;br /&gt;
	&lt;br /&gt;
  }&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
	&lt;br /&gt;
  // send ack clock pulse&lt;br /&gt;
  &lt;br /&gt;
  setPin(SCL,HIGH);         // start the clock pulse&lt;br /&gt;
  _delay_us(I2C_SCL_T_HIGH_US);  &lt;br /&gt;
  setPin(SCL,LOW);         // stop the clock pulse&lt;br /&gt;
  _delay_us(I2C_SCL_T_HIGH_US);&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  return rxbyte;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
unsigned char i2c_read(uint8_t i2c_id, uint16_t DEV_REG)&lt;br /&gt;
{&lt;br /&gt;
  &lt;br /&gt;
  // reading a register from an eeprom device&lt;br /&gt;
  &lt;br /&gt;
  unsigned char read_result=0;&lt;br /&gt;
  &lt;br /&gt;
  i2c_id = i2c_id&amp;lt;&amp;lt;1; // shift all bits one position to the left (i.e. multiply by 2)&lt;br /&gt;
   &lt;br /&gt;
  // send start sequence&lt;br /&gt;
  i2c_start();&lt;br /&gt;
&lt;br /&gt;
  // send the I2C Device ID with the R/W bit low (send as Write, last bit is 0)&lt;br /&gt;
  i2c_tx(i2c_id); &lt;br /&gt;
  &lt;br /&gt;
  //_delay_us(10);    &lt;br /&gt;
       &lt;br /&gt;
  // send the register we want to query to the device&lt;br /&gt;
  &lt;br /&gt;
  // for the 74LC256 we need to do this in two goes. First the MSB then the LSB&lt;br /&gt;
  &lt;br /&gt;
  i2c_tx(DEV_REG &amp;gt;&amp;gt; 8);    // MSB&lt;br /&gt;
		&lt;br /&gt;
  i2c_tx(DEV_REG &amp;amp; 0xFF);  // LSB&lt;br /&gt;
 &lt;br /&gt;
  // i2c_tx alread has a delay at the end&lt;br /&gt;
  // i2c_tx ends with:&lt;br /&gt;
  // SDA: HIGH&lt;br /&gt;
  // SCL: LOW&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  // -- send repeated start --&lt;br /&gt;
  // in order to generate a valid repeated-start we must make sure SCL is high&lt;br /&gt;
  //setPin(SCL,HIGH);&lt;br /&gt;
  //_delay_us(10);&lt;br /&gt;
  &lt;br /&gt;
  // -- or --&lt;br /&gt;
&lt;br /&gt;
  // send stop &lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  _delay_us(I2C_SCL_T_LOW_US);&lt;br /&gt;
  &lt;br /&gt;
  // send start sequence again&lt;br /&gt;
  i2c_start();&lt;br /&gt;
  // i2c_start ends with:&lt;br /&gt;
  // SDA: LOW&lt;br /&gt;
  // SCL: HIGH&lt;br /&gt;
  // i2c_tx will bring SDA low again in order to start a valid transmission  &lt;br /&gt;
  &lt;br /&gt;
  // send the I2C Device ID with the R/W bit high (send as Read, last bit is 1)&lt;br /&gt;
  i2c_id |= 1 &amp;lt;&amp;lt; 0; // set bit 0 to 1&lt;br /&gt;
  i2c_tx(i2c_id); &lt;br /&gt;
  // i2c_tx ends with:&lt;br /&gt;
  // SDA: HIGH&lt;br /&gt;
  // SCL: LOW&lt;br /&gt;
&lt;br /&gt;
	&lt;br /&gt;
  // read data from device, one byte long&lt;br /&gt;
  read_result=i2c_rxbyte();  &lt;br /&gt;
 &lt;br /&gt;
  i2c_stop();&lt;br /&gt;
  &lt;br /&gt;
  &lt;br /&gt;
  return read_result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
// -- end I2C functions --&lt;br /&gt;
// -- end I2C functions --&lt;br /&gt;
// -- end I2C functions --&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==usage==&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
int main()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	setPin(SDA,HIGH);&lt;br /&gt;
	setPin(SCL,HIGH);&lt;br /&gt;
&lt;br /&gt;
	uint8_t eeadr=0;&lt;br /&gt;
	int getvalue=0;&lt;br /&gt;
		&lt;br /&gt;
	while (eeadr &amp;lt; 25)&lt;br /&gt;
	{&lt;br /&gt;
		&lt;br /&gt;
		getvalue=i2c_read(I2C_EEPROM,eeadr);&lt;br /&gt;
		&lt;br /&gt;
		Write_Serial_Number(eeadr);&lt;br /&gt;
		Write_Serial_Data(&amp;#039;,&amp;#039;);&lt;br /&gt;
			&lt;br /&gt;
		Write_Serial_Number(getvalue);&lt;br /&gt;
		Write_Serial_Text(crlf);    // crlf&lt;br /&gt;
	&lt;br /&gt;
		eeadr++;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>
	</entry>
</feed>