<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>KVorb &#187; Cтатьи</title>
	<atom:link href="http://kvorb.ru/tag/ctati/feed/" rel="self" type="application/rss+xml" />
	<link>http://kvorb.ru</link>
	<description>KVorb</description>
	<lastBuildDate>Sat, 25 Jun 2011 11:18:30 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Работа с SPI в микроконтроллёре PIC, компилятор MCC18</title>
		<link>http://kvorb.ru/2010/04/12/rabota-s-spi-v-mikrokontrollyore-pic-kompilyator-mcc18/</link>
		<comments>http://kvorb.ru/2010/04/12/rabota-s-spi-v-mikrokontrollyore-pic-kompilyator-mcc18/#comments</comments>
		<pubDate>Mon, 12 Apr 2010 16:54:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[Электроника]]></category>
		<category><![CDATA[pic]]></category>
		<category><![CDATA[SPI]]></category>
		<category><![CDATA[микроконтроллеры]]></category>

		<guid isPermaLink="false">http://kvorb.ru/?p=472</guid>
		<description><![CDATA[В статье описываются функции для работы с модулем SPI в микроконтроллёрах PIC. Работа с SPI в PIC, компилятор MCC18 Для начала подключаем библиотеку функций SPI: #include &#34;spi.h&#34; Функция OpenSPI. Инициализация SPI. Прототип функции void OpenSPI&#40; unsigned char sync_mode, unsigned char bus_mode, unsigned char smp_phase&#41;; Аргументы: sync_mode (Определяет режим работы и частоту) SPI_FOSC_4 SPI Master mode, [...]]]></description>
			<content:encoded><![CDATA[<p>В статье описываются функции для работы с модулем SPI в микроконтроллёрах PIC.</p>
<p>Работа с SPI в PIC, компилятор MCC18 </p>
<p><strong>Для начала подключаем библиотеку функций SPI:</strong></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #339933;">#include &quot;spi.h&quot;</span></pre></div></div>

<p><strong>Функция OpenSPI. Инициализация SPI.</strong><br />
Прототип функции</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> OpenSPI<span style="color: #009900;">&#40;</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> sync_mode<span style="color: #339933;">,</span> 
<span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> bus_mode<span style="color: #339933;">,</span> 
<span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> smp_phase<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Аргументы:<br />
<strong>sync_mode</strong> (Определяет режим работы и частоту)</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">SPI_FOSC_4        SPI Master mode<span style="color: #339933;">,</span> clock <span style="color: #339933;">=</span> Fosc<span style="color: #339933;">/</span><span style="color: #0000dd;">4</span>
SPI_FOSC_16       SPI Master mode<span style="color: #339933;">,</span> clock <span style="color: #339933;">=</span> Fosc<span style="color: #339933;">/</span><span style="color: #0000dd;">16</span>
SPI_FOSC_64       SPI Master mode<span style="color: #339933;">,</span> clock <span style="color: #339933;">=</span> Fosc<span style="color: #339933;">/</span><span style="color: #0000dd;">64</span>
SPI_FOSC_TMR2     SPI Master mode<span style="color: #339933;">,</span> clock <span style="color: #339933;">=</span> TMR2 output<span style="color: #339933;">/</span><span style="color: #0000dd;">2</span>
SLV_SSON          SPI Slave mode<span style="color: #339933;">,</span> <span style="color: #339933;">/</span>SS pin control enabled
SLV_SSOFF         SPI Slave mode<span style="color: #339933;">,</span> <span style="color: #339933;">/</span>SS pin control disabled</pre></div></div>

<p><span id="more-472"></span><strong>bus_mode</strong> (установка битов CKE и CKP)<br />
Может принимать следующие значения</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">MODE_00       <span style="color: #666666; font-style: italic;">//0b00000000  </span>
<span style="color: #666666; font-style: italic;">//CKE           0x40    // SSPSTAT register </span>
<span style="color: #666666; font-style: italic;">//CKP           0x00    // SSPCON1 register </span>
MODE_01       <span style="color: #666666; font-style: italic;">//0b00000001  </span>
<span style="color: #666666; font-style: italic;">//CKE           0x00    // SSPSTAT register </span>
<span style="color: #666666; font-style: italic;">//CKP           0x00    // SSPCON1 register</span>
MODE_10       <span style="color: #666666; font-style: italic;">//0b00000010  </span>
<span style="color: #666666; font-style: italic;">//CKE           0x40    // SSPSTAT register</span>
<span style="color: #666666; font-style: italic;">//CKP           0x10    // SSPCON1 register</span>
MODE_11       <span style="color: #666666; font-style: italic;">//0b00000011  </span>
<span style="color: #666666; font-style: italic;">//CKE           0x00    // SSPSTAT register</span>
<span style="color: #666666; font-style: italic;">//CKP           0x10    // SSPCON1 register</span></pre></div></div>

<p>CKE &#8211; определяет, на каком шаге происходит изменение данных на выходе:<br />
если CKP = 0, то<br />
1 &#8211; данные передаются по переднему фронту сигнала на выводе SCK;<br />
0 &#8211; данные передаются по заднему фронту сигнала на выводе SCK.<br />
если CKP = 1, то<br />
1 &#8211; данный передаются по заднему фронту сигнала на выводе SCK;<br />
0 &#8211; данные передаются по переднему фронту сигнала на выводе SCK.</p>
<p>CKP &#8211; выбор полярности импульса синхронизации:<br />
1 &#8211; пассивный высокий уровень сигнала;<br />
0 &#8211; пассивный низкий уровень сигнала.</p>
<p><strong>smp_phase</strong> (Определяет режим захвата входных данных)<br />
SMPEND &#8211; опрос входа в конце периода вывода данных;<br />
SMPMID &#8211; опрос входа в середине периода вывода данных. </p>
<p>Пример использования:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">OpenSPI<span style="color: #009900;">&#40;</span>SPI_FOSC_16<span style="color: #339933;">,</span> MODE_00<span style="color: #339933;">,</span> SMPEND<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Функция CloseSPI. Отключает модуль SSPx.</strong><br />
Прототип</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> CloseSPI<span style="color: #009900;">&#40;</span> <span style="color: #993333;">void</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Функция DataRdySPI. Эта функция определяет есть ли новое значение в регистре SSPBUFx.</strong><br />
Прототип</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> DataRdySPI<span style="color: #009900;">&#40;</span> <span style="color: #993333;">void</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Пример использования</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span>DataRdySPI<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Функция ReadSPI. Читает байт из модуля SPIx.</strong><br />
Прототип</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> ReadSPI<span style="color: #009900;">&#40;</span> <span style="color: #993333;">void</span> <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Пример использования</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">char</span> x<span style="color: #339933;">;</span>
x <span style="color: #339933;">=</span> ReadSPI<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Функция WriteSPI. Записывает байт в модуль SPIx.</strong><br />
Прототип</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> WriteSPI<span style="color: #009900;">&#40;</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> data_out <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Возвращаемые значения:<br />
0 &#8211; нет ошибок;<br />
-1 &#8211; была ошибка.</p>
<p>Пример использования</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">WriteSPI<span style="color: #009900;">&#40;</span>‘a’<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Функция putsSPI. Передаёт строку в модуль SPIx.</strong><br />
Прототип. Строка заканчивается нулевым символом (который при этом не передаётся).</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> putsSPI<span style="color: #009900;">&#40;</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>wrptr <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Пример использования</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> wrptr<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> “Hello<span style="color: #339933;">!</span>”<span style="color: #339933;">;</span>
putsSPI<span style="color: #009900;">&#40;</span>wrptr<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><strong>Функция getsSPI. Читает строку из модуля SPIx.</strong><br />
Прототип (в параметрах указатель на строку и длина строки)</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> getsSPI<span style="color: #009900;">&#40;</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> <span style="color: #339933;">*</span>rdptr<span style="color: #339933;">,</span> <span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> length <span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Пример использования</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span> wrptr<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">10</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>
getsSPI<span style="color: #009900;">&#40;</span>wrptr<span style="color: #339933;">,</span> <span style="color: #0000dd;">10</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2010/04/12/rabota-s-spi-v-mikrokontrollyore-pic-kompilyator-mcc18/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Индикатор TIC107. Адресация.</title>
		<link>http://kvorb.ru/2010/02/21/indikator-tic107-adresaciya/</link>
		<comments>http://kvorb.ru/2010/02/21/indikator-tic107-adresaciya/#comments</comments>
		<pubDate>Sun, 21 Feb 2010 10:48:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[Электроника]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[I2C]]></category>
		<category><![CDATA[pic]]></category>
		<category><![CDATA[TIC107]]></category>
		<category><![CDATA[микроконтроллеры]]></category>

		<guid isPermaLink="false">http://kvorb.ru/?p=447</guid>
		<description><![CDATA[На рисунке карта памяти индикатора TIC107. Адреса первой строки 0&#215;00-0&#215;27. Второй 0&#215;40-0&#215;67. Видимая часть в первой строке 0&#215;00-0x0F, во второй 0&#215;40-0x4F. Функция переводящая указатель на нужный адрес. void LCD_Address&#40;char DDRAM&#41;&#123; StartI2C&#40;&#41;; WriteI2C&#40;0x74&#41;; // Адрес индикатора WriteI2C&#40;0b00000000&#41;; // Co=0, RS=0 WriteI2C&#40;0b00110100&#41;; // DL=1, M=1, SL=0, H=0 WriteI2C&#40;0b10000000 &#124; DDRAM&#41;; // Установка адреса DDRAM StopI2C&#40;&#41;; &#125; Пример [...]]]></description>
			<content:encoded><![CDATA[<p>На рисунке карта памяти индикатора TIC107.<br />
<a href="http://kvorb.ru/wp-content/uploads/2010/02/TIC107_DDRAM.jpg"><img src="http://kvorb.ru/wp-content/uploads/2010/02/TIC107_DDRAM.jpg" alt="" title="TIC107_DDRAM" width="569" height="154" class="alignnone size-full wp-image-448" /></a></p>
<p>Адреса первой строки 0&#215;00-0&#215;27. Второй 0&#215;40-0&#215;67. Видимая часть в первой строке 0&#215;00-0x0F, во второй 0&#215;40-0x4F.</p>
<p><span id="more-447"></span>Функция переводящая указатель на нужный адрес.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> LCD_Address<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> DDRAM<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	StartI2C<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0x74</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Адрес индикатора</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b00000000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Co=0, RS=0</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b00110100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// DL=1, M=1, SL=0, H=0</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b10000000</span> <span style="color: #339933;">|</span> DDRAM<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// Установка адреса DDRAM </span>
	StopI2C<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Пример использования.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
	LCD_init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Инициализация индикатора</span>
&nbsp;
	StartI2C<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0x74</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Адрес индикатора</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b01000000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Co=0, RS=1</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'A'</span><span style="color: #339933;">+</span><span style="color: #0000dd;">128</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// 'A' </span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'B'</span><span style="color: #339933;">+</span><span style="color: #0000dd;">128</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// 'B'</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'C'</span><span style="color: #339933;">+</span><span style="color: #0000dd;">128</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// 'C'</span>
	StopI2C<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	LCD_Address<span style="color: #009900;">&#40;</span><span style="color: #208080;">0x40</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Указатель на вторую строку</span>
&nbsp;
	StartI2C<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0x74</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Адрес индикатора</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b01000000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Co=0, RS=1</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'1'</span><span style="color: #339933;">+</span><span style="color: #0000dd;">128</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// '1' </span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'2'</span><span style="color: #339933;">+</span><span style="color: #0000dd;">128</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// '2'</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">'3'</span><span style="color: #339933;">+</span><span style="color: #0000dd;">128</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// '3'</span>
	StopI2C<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
	<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2010/02/21/indikator-tic107-adresaciya/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Расширитель портов с интерфейсом I2C</title>
		<link>http://kvorb.ru/2009/07/23/rasshiritel-portov-s-interfejsom-i2c/</link>
		<comments>http://kvorb.ru/2009/07/23/rasshiritel-portov-s-interfejsom-i2c/#comments</comments>
		<pubDate>Thu, 23 Jul 2009 10:07:49 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[Электроника]]></category>

		<guid isPermaLink="false">http://kvorb.ru/?p=359</guid>
		<description><![CDATA[Расширитель портов с интерфейсом I2C на один 8-битный порт. Есть в Proteus такой интересный компонент PCA9554. Его удобно использовать когда нужно отладить работу I2C в микроконтроллере. Это такая микросхема с интерфейсом I2C и 8-битным портом ввода/вывода. Вот его схема: Выводы A0-A2 задают адрес I2C SCL, SDA &#8211; сам I2C Vdd, Vss &#8211; питание и земля [...]]]></description>
			<content:encoded><![CDATA[<p>Расширитель портов с интерфейсом I2C на один 8-битный порт.</p>
<p>Есть в Proteus такой интересный компонент PCA9554. Его удобно использовать когда нужно отладить работу I2C в микроконтроллере. Это такая микросхема с интерфейсом I2C и 8-битным портом ввода/вывода.<br />
<span id="more-359"></span><br />
Вот его схема:</p>
<p><a href="http://kvorb.ru/wp-content/uploads/2009/07/1.png"><img class="alignnone size-medium wp-image-357" title="PCA9554" src="http://kvorb.ru/wp-content/uploads/2009/07/1-300x140.png" alt="PCA9554" width="300" height="140" /></a></p>
<p><strong>Выводы</strong><br />
A0-A2 задают адрес I2C<br />
SCL, SDA &#8211; сам I2C<br />
Vdd, Vss &#8211; питание и земля<br />
IO0-IO7 &#8211; порт ввода/вывода<br />
INT &#8211; прерывание. Появляется при изменении состояния в порту IO, если порт настроен на ввод</p>
<p><strong>Регистры:<br />
Command byte </strong>- передается сразу после адреса устройства. Указывает в какой регистр будет производиться чтение/запись. Может принимать следующие значения:<br />
0 &#8211; Input Port register (чтение)<br />
1 &#8211; Output Port register (чтение/запись)<br />
2 &#8211; Polarity Inversion register (чтение/запись)<br />
3 &#8211; Configuration register (чтение/запись)</p>
<p><strong>Register 0 -Input Port register</strong><br />
Из этого регистра возможно только чтение. В нем содержится состояние порта IO, если он настроен на ввод.</p>
<p><strong>Register 1 &#8211; Output Port register</strong><br />
Записанное в этот регистр значение выводится в порт IO, если он настроен на вывод.</p>
<p><strong>Register 2 &#8211; Polarity Inversion register</strong><br />
Этот регистр позволяет инвертировать значение находящееся в регистре Input. Если бит этого регистра установлен в лог 1, то соответствующий бит регистра Input будет инвертирован. По умолчанию все биты регистра установлены в лог 0.</p>
<p><strong>Register 3 &#8211; Configuration register</strong><br />
Этот регистр настраивает выводы порта на ввод или на вывод. Если бит этого регистра установлен в лог 1, то соответствующий вывод порта будет работать на ввод. Если бит регистра будет установлен в лог 0, то соответствующий вывод порта будет настроен на вывод. По умолчанию все биты этого регистра установлены в лог 1, то есть порт настроен на ввод.</p>
<p><strong>Вывод прерывания</strong><br />
Устанавливается в лог 1, если изменилось значение на выводах порта и порт установлен на ввод. Возвращается в лог 0, если на выводах порта устанавливается предыдущее значение или если из регистра Input было прочитано значение.</p>
<p><strong>Адрес устройства</strong><br />
<a href="http://kvorb.ru/wp-content/uploads/2009/07/2.png"><img class="alignnone size-medium wp-image-358" title="PCA9554" src="http://kvorb.ru/wp-content/uploads/2009/07/2-300x77.png" alt="PCA9554" width="300" height="77" /></a></p>
<p>Четыре бита заданы жестко. Биты A0-A2 устанавливаются подачей лог 0 или лог 1 на соответствующие выводы устройства.</p>
<p>Не забывайте, что перед записью значения в порт, его надо настроить на вывод.</p>
<p><strong>Пример записи в порт:</strong></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Состояние СТАРТ</span>
I2C_START<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Адрес устройства</span>
I2C_ADDR<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b01001110</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Command byte == 3, выбор конфигурационного регистра</span>
I2C_WRITE<span style="color: #009900;">&#40;</span><span style="color: #208080;">0x03</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Настраиваю порт на вывод</span>
I2C_WRITE<span style="color: #009900;">&#40;</span><span style="color: #208080;">0x00</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Состояние ПОВСТАРТ</span>
I2C_START<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Адрес устройства</span>
I2C_ADDR<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b01001110</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Command byte == 0, выбор регистра Output</span>
I2C_WRITE<span style="color: #009900;">&#40;</span><span style="color: #208080;">0x03</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Записываю в порт число 0xA0</span>
I2C_WRITE<span style="color: #009900;">&#40;</span><span style="color: #208080;">0xA0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Состояние СТОП</span>
I2C_STOP<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2009/07/23/rasshiritel-portov-s-interfejsom-i2c/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Конвертер UART 2 I2C</title>
		<link>http://kvorb.ru/2009/07/21/konverter-uart-2-i2c/</link>
		<comments>http://kvorb.ru/2009/07/21/konverter-uart-2-i2c/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 08:27:28 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[Электроника]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[микроконтроллеры]]></category>

		<guid isPermaLink="false">http://kvorb.ru/?p=346</guid>
		<description><![CDATA[Программа для микроконтроллера ATmega. Работает с модулем TWI. Пока возможна только запись данных в I2C, чтение сделаю в следующей версии. Все команды состоят из трёх символов. Выполняемое действие и два байта на данные в HEX, если они нужны. Основные команды: Sxx &#8211; установить состояние СТАРТ или ПОВСТАРТ на линии I2C. Вместо &#171;xx&#187; могут быть любые [...]]]></description>
			<content:encoded><![CDATA[<p>Программа для микроконтроллера ATmega. Работает с модулем TWI. Пока возможна только запись данных в I2C, чтение сделаю в следующей версии. Все команды состоят из трёх символов. Выполняемое действие и два байта на данные в HEX, если они нужны.<br />
Основные команды:<br />
<strong>Sxx</strong> &#8211; установить состояние СТАРТ или ПОВСТАРТ на линии I2C. Вместо &laquo;xx&raquo; могут быть любые символы.<br />
<strong>Pxx</strong> &#8211; установить состояние СТОП на линии I2C. Вместо &laquo;xx&raquo; могут быть любые символы.<br />
<strong>Axx</strong> &#8211; Отправка адреса ведомого устройства I2C. Вместо &laquo;xx&raquo; адрес устройства в HEX.<br />
<strong>Dxx</strong> &#8211; Отправка данных. Вместо &laquo;xx&raquo; байт данных в HEX.</p>
<p><strong>Bxx</strong> &#8211; Отправить байт данных в порт B микроконтроллера. Вместо &laquo;xx&raquo; байт данных в HEX.<br />
<span id="more-346"></span></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
</pre></td><td class="code"><pre class="c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Конвертер UART =&gt; I2C</span>
<span style="color: #666666; font-style: italic;">// Микроконтроллёр ATmega8</span>
<span style="color: #666666; font-style: italic;">// Частота 1 Мгц. </span>
<span style="color: #666666; font-style: italic;">// Автор KVorb. Версия программы 1.0</span>
<span style="color: #339933;">#include &quot;ioavr.h&quot;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Счётчик принятых по UART байтов</span>
<span style="color: #666666; font-style: italic;">// Буфер для команд </span>
<span style="color: #993333;">char</span> UART_count <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
<span style="color: #993333;">unsigned</span> <span style="color: #993333;">char</span><span style="color: #339933;">*</span> UART_str <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;123&quot;</span><span style="color: #339933;">;</span>
&nbsp;
<span style="color: #993333;">void</span> USART_init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Инифиализация UART</span>
  <span style="color: #666666; font-style: italic;">// Битрейт 2400 бит в секунду, при частоте 1 МГц</span>
  UCSRA <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                                
  UCSRB <span style="color: #339933;">|=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>  
  UCSRC <span style="color: #339933;">|=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                        
  UCSRC <span style="color: #339933;">|=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>             
  UCSRC <span style="color: #339933;">-=</span> <span style="color: #0000dd;">128</span><span style="color: #339933;">;</span>                             
  UBRRH <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
  UBRRL <span style="color: #339933;">=</span> <span style="color: #0000dd;">25</span><span style="color: #339933;">;</span>                               
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">char</span> CHAR_to_HEX<span style="color: #009900;">&#40;</span> <span style="color: #993333;">char</span> a <span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Функция конвертирует символ в hex число</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// число больше или равно 48</span>
  <span style="color: #666666; font-style: italic;">// и меньше или равно 57 ('0'-'9' ASCII)</span>
  <span style="color: #666666; font-style: italic;">// получаю число от 0x00 до 0x09</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> a <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">48</span> <span style="color: #339933;">&amp;&amp;</span> a <span style="color: #339933;">&lt;=</span> <span style="color: #0000dd;">57</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    a <span style="color: #339933;">-=</span> <span style="color: #0000dd;">48</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// число больше или равно 65</span>
  <span style="color: #666666; font-style: italic;">// и меньше или равно 70 ('A'-'F' ASCII)</span>
  <span style="color: #666666; font-style: italic;">// получаю число от 0x0A до 0x0F</span>
  <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span> a <span style="color: #339933;">&gt;=</span> <span style="color: #0000dd;">65</span> <span style="color: #339933;">&amp;&amp;</span> a <span style="color: #339933;">&lt;=</span> <span style="color: #0000dd;">70</span> <span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
    a <span style="color: #339933;">-=</span> <span style="color: #0000dd;">55</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span> 
&nbsp;
  <span style="color: #b1b100;">return</span> a<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> TWI_START<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Состояние СТАРТ на линии I2C</span>
  TWCR <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span> TWCR <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> TWI_ADDR<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> temp<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Отправка адреса I2C</span>
  <span style="color: #666666; font-style: italic;">// Адрес в переменной temp</span>
  TWDR <span style="color: #339933;">=</span> temp<span style="color: #339933;">;</span>
  TWCR <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span> TWCR <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> TWI_DATA<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> temp<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Отправка байта данных I2C</span>
  <span style="color: #666666; font-style: italic;">// Данные в переменной temp</span>
  TWDR <span style="color: #339933;">=</span> temp<span style="color: #339933;">;</span>
  TWCR <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span> TWCR <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> TWI_STOP<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Состояние СТОП на линии I2C</span>
  TWCR <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">|</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">char</span> STRING_to_HEX<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Функция конвертирует строку в число HEX</span>
  <span style="color: #993333;">char</span> temp<span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Получаю первую цифру числа</span>
  <span style="color: #666666; font-style: italic;">// Умножаю её на 0х10, чтобы получить десятки</span>
  <span style="color: #666666; font-style: italic;">// Получаю вторую цифру и прибавляю её к десяткам</span>
  temp <span style="color: #339933;">=</span> CHAR_to_HEX<span style="color: #009900;">&#40;</span>UART_str<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  temp <span style="color: #339933;">*=</span> <span style="color: #208080;">0x10</span><span style="color: #339933;">;</span>
  temp <span style="color: #339933;">+=</span> CHAR_to_HEX<span style="color: #009900;">&#40;</span>UART_str<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
  <span style="color: #b1b100;">return</span> temp<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">void</span> main<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Порт B все пины на выход</span>
  DDRB <span style="color: #339933;">=</span> <span style="color: #0000dd;">255</span><span style="color: #339933;">;</span>                     
&nbsp;
  <span style="color: #666666; font-style: italic;">// Fscl=25КГц</span>
  <span style="color: #666666; font-style: italic;">// Запускаю TWI</span>
  TWBR <span style="color: #339933;">=</span> <span style="color: #0000dd;">12</span><span style="color: #339933;">;</span>			        
  TWCR <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                     
&nbsp;
  <span style="color: #666666; font-style: italic;">// Инициализирую UART</span>
  USART_init<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>        
&nbsp;
  <span style="color: #666666; font-style: italic;">// Разрешаю прерывания</span>
  SREG <span style="color: #339933;">|=</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>                     
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #339933;">#pragma vector = USART_RXC_vect</span>
__interrupt <span style="color: #993333;">void</span> Recieve<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
  <span style="color: #666666; font-style: italic;">// Прерывание на приём по UART</span>
&nbsp;
  <span style="color: #993333;">char</span> t<span style="color: #339933;">;</span>
  <span style="color: #993333;">char</span><span style="color: #339933;">*</span> status <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; 00 &quot;</span><span style="color: #339933;">;</span>
&nbsp;
  <span style="color: #666666; font-style: italic;">// Копирую в буфер принятый байт</span>
  <span style="color: #666666; font-style: italic;">// Увеличиваю счётчик принятых байтов</span>
  UART_str<span style="color: #009900;">&#91;</span>UART_count<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> UDR<span style="color: #339933;">;</span>         
  UART_count<span style="color: #339933;">++;</span>                       
&nbsp;
  <span style="color: #666666; font-style: italic;">// Если приняты все три байта, то выполняются функции обработки</span>
  <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>UART_count <span style="color: #339933;">==</span> <span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span>                 
  <span style="color: #009900;">&#123;</span> 
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>UART_str<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #ff0000;">'S'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>TWI_START<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>                
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>UART_str<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #ff0000;">'A'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>TWI_ADDR<span style="color: #009900;">&#40;</span>STRING_to_HEX<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>    
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>UART_str<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #ff0000;">'D'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>TWI_DATA<span style="color: #009900;">&#40;</span>STRING_to_HEX<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>UART_str<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #ff0000;">'P'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>TWI_STOP<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>UART_str<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">==</span><span style="color: #ff0000;">'B'</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>PORTB <span style="color: #339933;">=</span> STRING_to_HEX<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Вместо этого условия надо написать функцию</span>
    <span style="color: #666666; font-style: italic;">// Конвертирующую число в строку</span>
    <span style="color: #666666; font-style: italic;">// Сделаю в следующей версии :)</span>
    <span style="color: #b1b100;">switch</span> <span style="color: #009900;">&#40;</span>TWSR<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span> 
      <span style="color: #b1b100;">case</span> <span style="color: #208080;">0xF8</span><span style="color: #339933;">:</span> status <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; F8 &quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">case</span> <span style="color: #208080;">0x08</span><span style="color: #339933;">:</span> status <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; 08 &quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">case</span> <span style="color: #208080;">0x10</span><span style="color: #339933;">:</span> status <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; 10 &quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">case</span> <span style="color: #208080;">0x18</span><span style="color: #339933;">:</span> status <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; 18 &quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">case</span> <span style="color: #208080;">0x20</span><span style="color: #339933;">:</span> status <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; 20 &quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">case</span> <span style="color: #208080;">0x28</span><span style="color: #339933;">:</span> status <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; 28 &quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">case</span> <span style="color: #208080;">0x30</span><span style="color: #339933;">:</span> status <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; 30 &quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">case</span> <span style="color: #208080;">0x38</span><span style="color: #339933;">:</span> status <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; 38 &quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
      <span style="color: #b1b100;">default</span><span style="color: #339933;">:</span> status <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot; 00 &quot;</span><span style="color: #339933;">;</span> <span style="color: #000000; font-weight: bold;">break</span><span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Отправляю по UART код статуса TWI    </span>
    <span style="color: #b1b100;">for</span> <span style="color: #009900;">&#40;</span>t<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> t<span style="color: #339933;">&lt;</span><span style="color: #0000dd;">4</span><span style="color: #339933;">;</span> t<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span>
    <span style="color: #009900;">&#123;</span>
&nbsp;
      <span style="color: #666666; font-style: italic;">// Жду когда очистится буфер отправки по UART    </span>
      <span style="color: #666666; font-style: italic;">// Отправляю статус</span>
      <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span> <span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span> UCSRA <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span> <span style="color: #339933;">&lt;&lt;</span> <span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span><span style="color: #009900;">&#125;</span>   
      UDR <span style="color: #339933;">=</span> status<span style="color: #009900;">&#91;</span>t<span style="color: #009900;">&#93;</span><span style="color: #339933;">;</span>                
    <span style="color: #009900;">&#125;</span>
&nbsp;
    <span style="color: #666666; font-style: italic;">// Обнуляю счётчик принятых байтов</span>
    UART_count<span style="color: #339933;">=</span><span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>                     
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2009/07/21/konverter-uart-2-i2c/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Цифровой термометр на датчике LM75AD.</title>
		<link>http://kvorb.ru/2009/06/18/cifrovoj-termometr-na-datchikax-lm75ad/</link>
		<comments>http://kvorb.ru/2009/06/18/cifrovoj-termometr-na-datchikax-lm75ad/#comments</comments>
		<pubDate>Thu, 18 Jun 2009 14:48:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[Электроника]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[LM75AD]]></category>
		<category><![CDATA[микроконтроллеры]]></category>
		<category><![CDATA[термометр]]></category>

		<guid isPermaLink="false">http://kvorb.ru/?p=274</guid>
		<description><![CDATA[Сделал цифровой термометр для измерения температуры воздуха в диапазоне от нуля до +45 градусов. Схема термометра представлена на рис. 2. Управляет термометром микроконтроллёр ATtiny2313, настроенный на работу с тактовой частотой 1 МГц от внутреннего генератора. Прошивку можно скачать здесь Для измерения температуры применён цифровой датчик LM75AD с интерфейсом I2C. В соответствии со спецификацией линии I2C [...]]]></description>
			<content:encoded><![CDATA[<p>Сделал цифровой термометр для измерения температуры воздуха в диапазоне от нуля до +45 градусов.</p>
<p><img class="alignnone size-full wp-image-269" title="Термометр" src="http://kvorb.ru/wp-content/uploads/2009/06/Termometr.jpg" alt="Термометр" width="400" height="231" /></p>
<p><span id="more-274"></span>
<p>Схема термометра представлена на рис. 2. Управляет термометром микроконтроллёр ATtiny2313, настроенный на работу с тактовой частотой 1 МГц от внутреннего генератора. Прошивку можно скачать <a href="http://kvorb.ru/soft/Termometr_LM75_ATtiny2313.hex">здесь</a></p>
<p><a href="http://kvorb.ru/wp-content/uploads/2009/06/Termometr.png" target="_bank"><img class="alignnone size-medium wp-image-273" title="Термометр" src="http://kvorb.ru/wp-content/uploads/2009/06/Termometr-300x223.png" alt="Термометр" width="300" height="223" /></a></p>
<p>Для измерения температуры применён цифровой датчик LM75AD с интерфейсом I2C. В соответствии со спецификацией линии I2C микросхема LM75AD имеет семиразрядный адрес. Старшие четыре разряда адреса установлены жестко: 1001, три младших  задаются на выводах A0, A1, A2, подачей на них логических 0 или 1.</p>
<p>В LM75AD входят регистр-указатель, код которого выбирает нужный регистр данных и четыре регистра данных. Код 0&#215;00 выбирает двухбайтовый регистр температуры, который работает только на чтение, в нём хранится код текущей температуры. В табл. 1 приведено размещение данных в этом регистре. Если в температурном регистре бит D10 равен 0, то температура больше 0 и рассчитывается по формуле T=(Temp_data) x 0.125.</p>
<p><img class="alignnone size-full wp-image-277" title="LM75 регистр температуры" src="http://kvorb.ru/wp-content/uploads/2009/06/LM75_Temp_register.PNG" alt="LM75 регистр температуры" width="307" height="144" /></p>
<p>Для отображения температуры применён жидкокристаллический индикатор TIC5234. При передаче данных на индикатор первым передается самый старший бит, управляющий сегментом 49. Затем передается бит сегмента 48, и так далее, пока не передадутся все биты. После этого нужно защелкнуть регистр, установив LOAD в лог. 0. При этом выбранная конфигурация сегментов отобразится на индикаторе. Лог. 1 соответствует включенный сегмент, Лог. 0 &#8211; выключенное состояние.</p>
<p>Прибор питается от 9ти вольтовой батарейки &laquo;Крона&raquo;. Для снижения напряжения применён стабилизатор L78L33 c напряжением на выходе 3.3 Вольта и максимальным током 100 мА.</p>
<p>Чертёж платы изображен на рис. 3. Также на плате расположен разъём для внутрисхемного программирования.</p>
<p><img class="alignnone size-full wp-image-282" title="Термометр" src="http://kvorb.ru/wp-content/uploads/2009/06/Termometr_SL.jpg" alt="Термометр" width="400" height="326" /></p>
<p>На рис. 4 фотография платы с установленными компонентами.</p>
<p><img class="alignnone size-full wp-image-270" title="Термометр" src="http://kvorb.ru/wp-content/uploads/2009/06/Termometr_plata.jpg" alt="Термометр" width="400" height="423" /></p>
]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2009/06/18/cifrovoj-termometr-na-datchikax-lm75ad/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Simple One-wire Touch Detector</title>
		<link>http://kvorb.ru/2009/03/15/simple-one-wire-touch-detector/</link>
		<comments>http://kvorb.ru/2009/03/15/simple-one-wire-touch-detector/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 16:10:14 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[сенсор]]></category>
		<category><![CDATA[Электроника]]></category>

		<guid isPermaLink="false">http://kvorb.iblogger.org/?p=44</guid>
		<description><![CDATA[Эта простая схема сенсорного выключателя может быть использована для активации чего либо, например подключив её к микроконтроллеру, реле  или просто для включения LED1 который загорается, от прикосновения к металлической пластине. Схема состоит из делителя напряжения R1 и R2, одного триггера Шмитта от микросхемы 40106 и LED1 с ограничивающим ток резистором R3. Металлическая пластина подключена через [...]]]></description>
			<content:encoded><![CDATA[<p>Эта простая схема сенсорного выключателя может быть использована для активации чего либо, например подключив её к микроконтроллеру, реле  или просто для включения LED1 который загорается, от прикосновения к металлической пластине.</p>
<p><span id="more-44"></span>Схема состоит из делителя напряжения R1 и R2, одного триггера Шмитта от микросхемы 40106 и LED1 с ограничивающим ток резистором R3. Металлическая пластина подключена через провод к R1. R1 и R2 образуют делитель напряжения. R1 нужен чтобы защитить вход инвертора от пробоя статикой. Вы можете увеличить чувствительность детектора экспериментируя с более низкими значениями R1, например 1 Ком и меньшими по площади металлическими пластинами.</p>
<p><img class="alignnone size-full wp-image-231" title="Simple One-wire Touch Detector" src="http://kvorb.ru/wp-content/uploads/2009/06/Simple-One-wire-Touch-Detector.JPG" alt="Simple One-wire Touch Detector" width="291" height="287" /></p>
<p>Значение резистора R3 рассчитывается таким образом, чтобы текущий через LED1 ток был ниже его номинального значения. Большинство обычных светодиодов расчитано на ток в 20 мА. Схема будет работать, если вы удалите LED1 и просто подключите резистор R3 к выводу PIN 2 микросхемы, а затем подключите порт ввода микроконтроллера к этому резистору. Не забывайте подключать подтягивающий резистор в микроконтроллёре.</p>
]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2009/03/15/simple-one-wire-touch-detector/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ультразвуковой отпугиватель комаров.</title>
		<link>http://kvorb.ru/2009/03/15/ultrazvukovoj-otpugivatel-komarov/</link>
		<comments>http://kvorb.ru/2009/03/15/ultrazvukovoj-otpugivatel-komarov/#comments</comments>
		<pubDate>Sun, 15 Mar 2009 10:11:43 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[комары]]></category>
		<category><![CDATA[ультразвук]]></category>
		<category><![CDATA[Электроника]]></category>

		<guid isPermaLink="false">http://kvorb.iblogger.org/?p=39</guid>
		<description><![CDATA[Environmentally-friendly Mosquito Repeller. С возвращением хорошей погоды, Вы, несомненно, будете отдыхать по вечерам  во дворе своего дома или в саду, но даже если вы ненаходитесь рядом с болотами или другими мелкими водоёмами очень вероятно, что комары постараются испортить Вам отдых. Хотя в помещении можно легко избавиться от комаров, даже предотвратить их попадание в дом повесив [...]]]></description>
			<content:encoded><![CDATA[<p>Environmentally-friendly Mosquito Repeller.</p>
<p>С возвращением хорошей погоды, Вы, несомненно, будете отдыхать по вечерам  во дворе своего дома или в саду, но даже если вы ненаходитесь рядом с болотами или другими мелкими водоёмами очень вероятно, что комары постараются испортить Вам отдых.</p>
<p>Хотя в помещении можно легко избавиться от комаров, даже предотвратить их попадание в дом повесив москитные сетки на окна, чего нельзя сказать  о улице.</p>
<p><span id="more-39"></span>Принцип работы ултразвукового отпугивателя комаров заключается в следующем. Согласно некоторым публикациям, частота необходимая для отпугивания комаров равна 20-25 кГц, и находится в ультразвуковом диапазоне. Но по мнению других, она находится в районе 5-7 кГц, то есть в дипазоне который слышит человек.</p>
<p><img class="alignnone size-full wp-image-232" title="Environmentally-friendly Mosquito Repeller" src="http://kvorb.ru/wp-content/uploads/2009/06/Environmentally-friendly-Mosquito-Repeller.JPG" alt="Environmentally-friendly Mosquito Repeller" width="342" height="269" /></p>
<p>Вместо покупки дорогих устройств, которые кроме того, обычно имеют фиксированную частоту, мы предлагаем собрать собственное устройство, которое к тому же является очень простым и дешевым для создания . Как показано на рисунке, в нём используется только одна микросхему CMOS типа 4047.  Это очень универсальная микросхема которая может быть соединена в очень многих режимах, в том числе в режиме мультивибратора или нестабильном использованом здесь. Рабочая частота задается значениями компонентов C1, R1, и P1; последний позволяет легко настроить частоту, с учетом неопределенности, которая существует в отношении наиболее эффективной частоты&#8230; Для наилучшего воспроизведения высоких частот используется высокочастотный излучатель.</p>
]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2009/03/15/ultrazvukovoj-otpugivatel-komarov/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>USB Standby Killer</title>
		<link>http://kvorb.ru/2009/03/14/usb-standby-killer/</link>
		<comments>http://kvorb.ru/2009/03/14/usb-standby-killer/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 18:26:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[Электроника]]></category>

		<guid isPermaLink="false">http://kvorb.iblogger.org/?p=32</guid>
		<description><![CDATA[Когда компьютер включается и выключается, различные периферийные устройства (такие как принтер, монитор, сканер и т.д.) приходится часто включать и выключать. С помощью 5-вольтового напряжение питания от USB интерфейса на ПК, все эти периферийные устройства могут легко включатся и выключатся вместе с компьютером. Этот принцип также может быть использован на другие приборы, которые имеют интерфейс USB [...]]]></description>
			<content:encoded><![CDATA[<p>Когда компьютер включается и выключается, различные периферийные устройства (такие как принтер, монитор, сканер и т.д.) приходится часто включать и выключать.</p>
<p>С помощью 5-вольтового напряжение питания от USB интерфейса на ПК, все эти периферийные устройства могут легко включатся и выключатся вместе с компьютером. Этот принцип также может быть использован на другие приборы, которые имеют интерфейс USB (например, современные телевизоры и радиоприемники).</p>
<p><span id="more-32"></span></p>
<p><img class="alignnone size-full wp-image-233" title="USB Standby Killer" src="http://kvorb.ru/wp-content/uploads/2009/06/USB-Standby-Killer.JPG" alt="USB Standby Killer" width="346" height="320" /></p>
<p>Чтобы собрать &laquo;USB-standby-killer&raquo; потребуется всего 5 компонентов. USB обеспечивает выходное напряжение для активации опто-драйвера тиристора (MOC3043), с встроенным детектором перехода через 0. Он, в свою очередь, управляет тиристором типа BT126.</p>
<p>Схема расчитана на переключение нагрузки с суммарной мощностью до 150 Вт и защищена предохранителем на 1 Ампер.  Однако схема может обрабатывать гораздо большие нагрузки. В этом случае, и/или при использовании очень индуктивной нагрузки, нужен snubber тиристор.  Предохранитель также должен быть заменен в зависимости от нагрузки. Схема может быть легко встроена в сеть несколькими способами. Убедитесь, что у вас есть хорошая изоляция между USB и сетевой частью.</p>
]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2009/03/14/usb-standby-killer/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

