<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<title type="html"><![CDATA[forum.rcl-radio.ru &mdash; Wire_low]]></title>
	<link rel="self" href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=482&amp;type=atom" />
	<updated>2022-03-13T10:28:08Z</updated>
	<generator>PunBB</generator>
	<id>http://forum.rcl-radio.ru/viewtopic.php?id=482</id>
		<entry>
			<title type="html"><![CDATA[Wire_low]]></title>
			<link rel="alternate" href="http://forum.rcl-radio.ru/viewtopic.php?pid=5521#p5521" />
			<content type="html"><![CDATA[<p>Тестовая библиотека, основной архив.</p><p><span class="attention-yellow"></span> </p><br /><p>Wire_low.h<br /></p><div class="codebox"><pre><code>// rcl-radio.ru liman324@yandex.ru 

// Atmega8
// Atmega48
// Atmega88
// Atmega168
// Atmega328
#include &lt;Arduino.h&gt;
    void wire_set(long f_clock, long i2c_clock);
    void wire_start_r(byte i2c_addr);
    void wire_start_w(byte i2c_addr);
    void wire_write(byte i2c_data);
    byte wire_read_a();
    byte wire_read();
    void wire_stop();</code></pre></div><p>Wire_low.cpp<br /></p><div class="codebox"><pre><code>#include &lt;avr/io.h&gt;
#include &lt;util/delay.h&gt;
#include &lt;Wire_low.h&gt;

void wire_set(long f_clock, long i2c_clock){
   TWBR = (((f_clock)/(i2c_clock)-16 )/2) ;
   TWSR = 0;
}

void wire_start_r(byte i2c_addr){
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  // START
  while (!(TWCR &amp; (1&lt;&lt;TWINT))); 
   TWDR = (i2c_addr &lt;&lt; 1) | 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
}

byte wire_read_a(){
   TWCR=(1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWEA); 
  while(~TWCR&amp;(1&lt;&lt;TWINT));
   byte value = TWDR; 
  return value;
}

byte wire_read(){
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN); 
  while(~TWCR&amp;(1&lt;&lt;TWINT));
   byte value = TWDR; 
  return value;
}

void wire_start_w(byte i2c_addr){
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWSTA)|(1&lt;&lt;TWEN);  
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
   TWDR = i2c_addr &lt;&lt; 1;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
}

void wire_write(byte i2c_data){
   TWDR = i2c_data;
   TWCR = (1&lt;&lt;TWINT) | (1&lt;&lt;TWEN);
  while (!(TWCR &amp; (1&lt;&lt;TWINT)));
}

void wire_stop(){  
   TWCR = (1&lt;&lt;TWINT)|(1&lt;&lt;TWEN)|(1&lt;&lt;TWSTO); 
  }  </code></pre></div>]]></content>
			<author>
				<name><![CDATA[liman324]]></name>
				<uri>http://forum.rcl-radio.ru/profile.php?id=2</uri>
			</author>
			<updated>2022-03-13T10:28:08Z</updated>
			<id>http://forum.rcl-radio.ru/viewtopic.php?pid=5521#p5521</id>
		</entry>
</feed>
