<?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/category/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>ADC for the PIC16F84A</title>
		<link>http://kvorb.ru/2011/03/10/adc-for-the-pic16f84a/</link>
		<comments>http://kvorb.ru/2011/03/10/adc-for-the-pic16f84a/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 18:52:04 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[Электроника]]></category>
		<category><![CDATA[pic]]></category>
		<category><![CDATA[PIC16F84A]]></category>
		<category><![CDATA[TLC549]]></category>

		<guid isPermaLink="false">http://kvorb.ru/?p=581</guid>
		<description><![CDATA[The good old PIC16F84A does not have an analogue to digital converter (ADC) on board. A good solution to this problem is offered by the TLC549 serial ADC made by Texas Instruments. The TLC549 uses only 3 of the I/O pins of the controller, is very compact and is also readily available. The TLC549 control [...]]]></description>
			<content:encoded><![CDATA[<p>The good old PIC16F84A does not have an analogue to digital converter (ADC) on board. A good solution to this problem is offered by the TLC549 serial ADC made by Texas Instruments. The TLC549 uses only 3 of the I/O pins of the controller, is very compact and is also readily available.</p>
<p>The TLC549 control lines CS and l/O-Clock are controlled from the PIC. The result of the conversion is available via the serial output of the ADC (Data Out), one bit at a time, and is stored into a byte of RAM in<br />
the PIC. You can find a detailed description of how this works in the Texas Instruments data sheet: http://focus.ti.com/lit/ds/symlink/tlc549.pdf. The program shows how the 8 bits in the RESULT byte are fetched in (lines 10 to 25).</p>
<p><span id="more-581"></span><a href="http://kvorb.ru/wp-content/uploads/2011/03/11.png"><img src="http://kvorb.ru/wp-content/uploads/2011/03/11.png" alt="" title="ADC for the PIC16F84A" width="559" height="550" class="aligncenter size-full wp-image-582" /></a></p>
<p>For the sake of clarity it was decided to show each and every step in full. The clock signal for the ADC is generated by the subroutine IOCLOCK (lines 34 to 38). The chip select input of the ADC is controlled by program lines 09 and 26. The operating sequence diagram (datasheet page 3) clearly shows how the CS has to be<br />
controlled. The TLC549 will not operate correctly when the CS is permanently connected to ground.</p>
<p>The routine SHIFTIN takes care of assembling the RESULT byte. RAO (Data Out) is first copied to the carry bit (31). The carry is subsequently left shifted into the RESULT byte (32). Since the order of the data bits from the conversion result is MSB first and LSB last (see datasheet), this ensures that the conversion result ends up the correct way around in the RESULT byte, after going through a complete cycle.</p>
<p>In the schematic you can see that PORTB is used to visualise the result of the conversion using LEDs. If you have another use for PORTB then you may omit program lines 27 and 28. An analogue signal for the input of the ADC is simulated with potentiometer P1. The value is not critical; use a higher value to avoid unnecessary loading of the power supply.</p>
<p>When flash programming the PIC client, the reset circuit (R1, C3 and<br />
RST) needs to be disconnected from pin 4 (MCLR).</p>
]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2011/03/10/adc-for-the-pic16f84a/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BUILD A TWO-TRANSISTOR OSCILLATOR</title>
		<link>http://kvorb.ru/2011/03/10/build-a-two-transistor-oscillator/</link>
		<comments>http://kvorb.ru/2011/03/10/build-a-two-transistor-oscillator/#comments</comments>
		<pubDate>Thu, 10 Mar 2011 18:09:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[Электроника]]></category>
		<category><![CDATA[TRANSISTOR]]></category>

		<guid isPermaLink="false">http://kvorb.ru/?p=576</guid>
		<description><![CDATA[In this experiment, we will build a simple two-transistor oscillator that will generate an audio tone in a speaker. 1. Build the Circuit. Using the schematic along with the pictorial diagram, place the components on a solderless breadboard as shown. Verify that your wiring is correct. 2. Do the Experiment. Theory: A transistor oscillator is [...]]]></description>
			<content:encoded><![CDATA[<p>In this experiment, we will build a simple two-transistor oscillator that will generate an audio tone in a speaker.</p>
<p><strong>1. Build the Circuit.</strong><br />
Using the schematic along with the pictorial diagram, place the components on a solderless breadboard as shown. Verify that your wiring is correct.</p>
<p><a href="http://kvorb.ru/wp-content/uploads/2011/03/1.png"><img class="aligncenter size-full wp-image-577" title="BUILD A TWO-TRANSISTOR OSCILLATOR" src="http://kvorb.ru/wp-content/uploads/2011/03/1.png" alt="" width="362" height="230" /></a></p>
<p><span id="more-576"></span><strong>2. Do the Experiment.</strong><br />
Theory: A transistor oscillator is a circuit that generates a constantly changing current all by itself. The frequency of this varying current tells you how many times per second a complete cycle of change occurs. This oscillator generates a signal of a few volts (about three volts) and approx. 500 cycles per second. This two-transistor direct coupled oscillator uses one NPN and one PNP type transistor. The oscillation is maintained by the feedback from the output (speaker) to the input (base of Q1) through capacitor C1. The frequency of the oscillation is determined by the values of C1 and resistor Rl. The larger the values of R1 and C1, the lower the frequency of oscillation. As the battery is connected, electrons begin to flow from the negative terminal of the battery through R2 and the speaker to charge CI. This small current flowing through the speaker while C1 is charging causes the speaker cone to move slightly. As C1 is charging, Ql begins to conduct current which allows Q2 to begin to conduct current. When Q2 conducts, the electrons travel from the negative of the battery through R2, the speaker, and Q2, back to the positive of the battery. This current is larger and causes the speaker cone to move even more in the same direction. When Q2 conducts, it will discharge C1 which, in turn, causes Q1 to stop conducting, which causes Q2 to stop conducting. The speaker returns to its rest position.</p>
<p><strong>Procedure.</strong><br />
Connect a ninevolt battery to the battery snap and you will hear an approx. 500 Hz (500 cycles per second) tone from the speaker. This one can be used as an alarm sound to let you know someone has opened a door, for example.</p>
]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2011/03/10/build-a-two-transistor-oscillator/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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>Пример работы с TIC107</title>
		<link>http://kvorb.ru/2010/02/13/primer-raboty-s-tic107/</link>
		<comments>http://kvorb.ru/2010/02/13/primer-raboty-s-tic107/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 13:50:36 +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=427</guid>
		<description><![CDATA[Стрелкой отмечен первый контакт (SCL). Схема подключения: 1 &#8211; SCL &#8211; i2c 2 &#8211; POR &#8211; сброс драйвера, сброс высоким уровнем, подключен напрямую к ноге микроконтроллёра 3 &#8211; SDA &#8211; i2c 4 &#8211; VDD1 &#8211; +5В 5 &#8211; VDD2/VDD3 &#8211; через диод 1N4148 к +5. Катодом (отмечен чёрной полоской) к VDD2/VDD3. 6 &#8211; VSS &#8211; [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://kvorb.ru/wp-content/uploads/2010/02/tic107.jpg" alt="" title="TIC107" width="320" height="149" class="alignnone size-full wp-image-422" /></p>
<p>Стрелкой отмечен первый контакт (SCL).</p>
<p>Схема подключения:<br />
1 &#8211; SCL &#8211; i2c<br />
2 &#8211; POR &#8211; сброс драйвера, сброс высоким уровнем, подключен напрямую к ноге микроконтроллёра<br />
3 &#8211; SDA &#8211; i2c<br />
4 &#8211; VDD1 &#8211; +5В<br />
5 &#8211; VDD2/VDD3 &#8211; через диод 1N4148 к +5. Катодом (отмечен чёрной полоской) к VDD2/VDD3.<br />
6 &#8211; VSS &#8211; земля<br />
7 &#8211; VLCD &#8211; керамический конденсатор 0.1 мкФ на землю </p>
<p>SCL и SDA подтянуты резисторами 4.7 КОм к +5. Между VDD1 и VSS конденсатор 0.1 мкФ.</p>
<p><span id="more-427"></span>Для начала надо инициализировать индикатор.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;"><span style="color: #993333;">void</span> LCD_init<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#123;</span>
	TRISC <span style="color: #339933;">=</span> <span style="color: #208080;">0x00</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Порт на вывод</span>
	PORTC <span style="color: #339933;">=</span> <span style="color: #208080;">0xFF</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Сброс высоким уровнем</span>
	Delay1KTCYx<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// Пауза</span>
	PORTC <span style="color: #339933;">=</span> <span style="color: #208080;">0x00</span><span style="color: #339933;">;</span>			<span style="color: #666666; font-style: italic;">// Низкий уровень</span>
	Delay1KTCYx<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">100</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;">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;">0b00001100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// D=1, C=0, B=0</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b00000110</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// I/D=1, S=0</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b00110101</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=1</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b00000011</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// L=1</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b00000100</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// P=0, Q=0</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b00001000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// IM=0, IB=0</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b00010000</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// TC1=0, TC2=0</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b01000010</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>		<span style="color: #666666; font-style: italic;">// S1=1, S0=0 (4x)</span>
	WriteI2C<span style="color: #009900;">&#40;</span><span style="color: #208080;">0b10000000</span> <span style="color: #339933;">|</span> <span style="color: #0000dd;">23</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>	<span style="color: #666666; font-style: italic;">// V=0 (Va)</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>Функция устанавливающая адрес DDRAM, по которому будет выводиться следующий символ.<br />
Здесь 0&#215;40 &#8211; это адрес первого символа второй строки.</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: #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> <span style="color: #208080;">0x40</span><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>Ну и простой пример. Настройка I2C делается отдельно, у меня в коде её нет.<br />
Инициализирую индикатор. Вывожу три символа в первой строке. Перевожу указатель на вторую строку. Вывожу ещё три символа</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: #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>

<p>Есть особенности с кодовой таблицей. Так чтобы вывести латинские символы и цифры, к их коду надо прибавить 128. С кирилицей сложнее. Символы идут не по порядку и они там не все. Так нет символов &#8216;С&#8217;,'T&#8217; и других. Их приходится заменять латинскими. </p>
<p>Вот сама кодовая талица.<br />
<a href="http://kvorb.ru/wp-content/uploads/2010/02/TIC107_table1.jpg"><img src="http://kvorb.ru/wp-content/uploads/2010/02/TIC107_table1-234x300.jpg" alt="" title="TIC107_table" width="234" height="300" class="alignnone size-medium wp-image-424" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2010/02/13/primer-raboty-s-tic107/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>EAGLE. Объединение нескольких проводников в шину.</title>
		<link>http://kvorb.ru/2010/01/21/eagle-obedinenie-neskolkix-provodnikov-v-shinu/</link>
		<comments>http://kvorb.ru/2010/01/21/eagle-obedinenie-neskolkix-provodnikov-v-shinu/#comments</comments>
		<pubDate>Thu, 21 Jan 2010 13:31:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[Электроника]]></category>
		<category><![CDATA[EAGLE]]></category>
		<category><![CDATA[микроконтроллеры]]></category>

		<guid isPermaLink="false">http://kvorb.ru/?p=408</guid>
		<description><![CDATA[Есть вот такая схема. Подключаем текстовый ЖК индикатор к микроконтроллёру. На ней куча связей и надо бы их аккуратно объединить в шину. Сейчас объясню как это сделать. Итак, удаляем все проводники которые соединяют микрокотроллёр и индикатор. И на их месте рисуем шину инструментом Bus. Я работаю на тёмном фоне и у меня получилось вот так. [...]]]></description>
			<content:encoded><![CDATA[<p>Есть вот такая схема. Подключаем текстовый ЖК индикатор к микроконтроллёру. На ней куча связей и надо бы их аккуратно объединить в шину.</p>
<p><img src="http://kvorb.ru/wp-content/uploads/2010/01/1.png" alt="" title="Eagle bus" width="601" height="366" class="alignnone size-full wp-image-409" /></p>
<p>Сейчас объясню как это сделать.<span id="more-408"></span> Итак, удаляем все проводники которые соединяют микрокотроллёр и индикатор. И на их месте рисуем шину инструментом Bus. Я работаю на тёмном фоне и у меня получилось вот так. </p>
<p><img src="http://kvorb.ru/wp-content/uploads/2010/01/2.png" alt="" title="Eagle bus" width="564" height="314" class="alignnone size-full wp-image-412" /></p>
<p>Дальше щелкаем правой кнопкой мыши по шине и выбираем пункт Properties. Откроется окно выбора параметров. В нём надо задать имя шины и количество проводников в ней. Делается это так &#8211; в поле Name вводим что-то вроде &laquo;L[1..14]&laquo;, без кавычек естественно. Получаем шину L с 14 проводниками, как раз под 14 выводов индикатора. </p>
<p>Теперь выбираем инструмент Net и начинаем соединять шину с компонентами. Для этого щелкаем по шине, выбираем из списка нужный нам проводник и подключаем его к ноге компонента. Делаем так со всеми контактами которые надо подключит к шине. Должно получиться вот так.</p>
<p><img src="http://kvorb.ru/wp-content/uploads/2010/01/3.png" alt="" title="Eagle bus" width="564" height="314" class="alignnone size-full wp-image-414" /></p>
<p>Осталось добавить метки для связей. Выбираем инструмент Label и щелкаем по каждой связи, добавляя метки. Чтобы расположить метки красивее &#8211; можно уменьшить шаг сетки. Размер шрифта тоже можно поменять. Должно получиться так. Вот собственно и всё, шина готова.</p>
<p><img src="http://kvorb.ru/wp-content/uploads/2010/01/4.png" alt="" title="Eagle bus" width="564" height="315" class="alignnone size-full wp-image-417" /></p>
]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2010/01/21/eagle-obedinenie-neskolkix-provodnikov-v-shinu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Перевернуть байт</title>
		<link>http://kvorb.ru/2009/08/19/367/</link>
		<comments>http://kvorb.ru/2009/08/19/367/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 14:11:15 +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=367</guid>
		<description><![CDATA[Есть задача перевернуть байт. Чтобы первый и последний биты поменялись местами, предпоследний и второй и т.д. Вот как это можно сделать. Первый вариант: x = &#40;x&#60;&#60;7&#41;&#124;&#40;&#40;x&#60;&#60;5&#41;&#38;64&#41;&#124;&#40;&#40;x&#60;&#60;3&#41;&#38;32&#41;&#124;&#40;&#40;x&#60;&#60;1&#41;&#38;16&#41; &#124;&#40;&#40;x&#62;&#62;1&#41;&#38;8&#41;&#124;&#40;&#40;x&#62;&#62;3&#41;&#38;4&#41;&#124;&#40;&#40;x&#62;&#62;5&#41;&#38;2&#41;&#124;&#40;x&#62;&#62;7&#41;; Вот такой код предложил cybersonner tmp = &#40;&#40;in &#38; 0x0F&#41; &#60;&#60; 4&#41; &#124; &#40;&#40;in &#38; 0xF0&#41; &#62;&#62; 4&#41;; tmp = &#40;&#40;tmp &#38; 0x33&#41; &#60;&#60; 2&#41; &#124; &#40;&#40;tmp &#38; [...]]]></description>
			<content:encoded><![CDATA[<p>Есть задача перевернуть байт. Чтобы первый и последний биты поменялись местами, предпоследний и второй и т.д.</p>
<p>Вот как это можно сделать. Первый вариант:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">x <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span>x<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: #009900;">&#40;</span>x<span style="color: #339933;">&lt;&lt;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span><span style="color: #0000dd;">64</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">&lt;&lt;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span><span style="color: #0000dd;">32</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">&lt;&lt;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span><span style="color: #0000dd;">16</span><span style="color: #009900;">&#41;</span>
<span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">&gt;&gt;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">&gt;&gt;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</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: #009900;">&#40;</span>x<span style="color: #339933;">&gt;&gt;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">&amp;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">|</span><span style="color: #009900;">&#40;</span>x<span style="color: #339933;">&gt;&gt;</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p>Вот такой код предложил <strong>cybersonner</strong></p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">tmp <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>in <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0x0F</span><span style="color: #009900;">&#41;</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: #009900;">&#40;</span>in <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xF0</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">4</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
tmp <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>tmp <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0x33</span><span style="color: #009900;">&#41;</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: #009900;">&#40;</span>tmp <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xCC</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
out <span style="color: #339933;">=</span> <span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span>tmp <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0x55</span><span style="color: #009900;">&#41;</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: #009900;">&#40;</span>tmp <span style="color: #339933;">&amp;</span> <span style="color: #208080;">0xAA</span><span style="color: #009900;">&#41;</span> <span style="color: #339933;">&gt;&gt;</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></div></div>

<p><span id="more-367"></span>Найдено в сети, <strong>33 такта</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">ldi   tmp1<span style="color: #339933;">,</span><span style="color: #0000dd;">40</span>
&nbsp;
loop<span style="color: #339933;">:</span>
   rol   tmp
   ror   tmp1
   brcc  loop
   mov   tmp<span style="color: #339933;">,</span>tmp1</pre></div></div>

<p>Еще вариант, <strong>13 тактов</strong>:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">ldi   tmp<span style="color: #339933;">,</span><span style="color: #0000dd;">40</span>
&nbsp;
mov   tmp1<span style="color: #339933;">,</span>tmp
andi  tmp1<span style="color: #339933;">,</span><span style="color: #208080;">0b01010101</span>
andi  tmp<span style="color: #339933;">,</span><span style="color: #208080;">0b10101010</span>
bst   tmp1<span style="color: #339933;">,</span><span style="color: #0000dd;">0</span>    
lsr   tmp1          
bld   tmp1<span style="color: #339933;">,</span><span style="color: #0000dd;">7</span>        
lsl   tmp           
adc   tmp<span style="color: #339933;">,</span>tmp1     
mov   tmp1<span style="color: #339933;">,</span>tmp     
andi  tmp1<span style="color: #339933;">,</span><span style="color: #208080;">0b01100110</span>
swap  tmp1         
andi  tmp<span style="color: #339933;">,</span> <span style="color: #208080;">0b10011001</span>
add   tmp<span style="color: #339933;">,</span> tmp1</pre></div></div>

<p>А вот это мой вариант.</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">main<span style="color: #339933;">:</span>
ldi   temp<span style="color: #339933;">,</span><span style="color: #0000dd;">40</span>
&nbsp;
ldi   ZL<span style="color: #339933;">,</span>Low<span style="color: #009900;">&#40;</span>BYTES<span style="color: #339933;">*</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span>
ldi   ZH<span style="color: #339933;">,</span>High<span style="color: #009900;">&#40;</span>BYTES<span style="color: #339933;">*</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#41;</span>        
add   ZL<span style="color: #339933;">,</span>temp
lpm        
mov   temp<span style="color: #339933;">,</span>r0
rjmp  main
&nbsp;
BYTES<span style="color: #339933;">:</span>                    <span style="color: #339933;">;</span> Таблица перёрнутых байт
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x00</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x80</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x40</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xC0</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x20</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xA0</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x60</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE0</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x10</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x90</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x50</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xD0</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x30</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xB0</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x70</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xF0</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x08</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x88</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x48</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xC8</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x28</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xA8</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x68</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE8</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x18</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x98</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x58</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xD8</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x38</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xB8</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x78</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xF8</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x04</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x84</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x44</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xC4</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x24</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xA4</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x64</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE4</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x14</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x94</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x54</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xD4</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x34</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xB4</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x74</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xF4</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x0C</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x8C</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x4C</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xCC</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x2C</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xAC</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x6C</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xEC</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x1C</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x9C</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x5C</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xDC</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x3C</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xBC</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x7C</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xFC</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x02</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x82</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x42</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xC2</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x22</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xA2</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x62</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE2</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x12</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x92</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x52</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xD2</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x32</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xB2</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x72</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xF2</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x0A</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x8A</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x4A</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xCA</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x2A</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xAA</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x6A</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xEA</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x1A</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x9A</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x5A</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xDA</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x3A</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xBA</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x7A</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xFA</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x06</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x86</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x46</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xC6</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x26</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xA6</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x66</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE6</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x16</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x96</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x56</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xD6</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x36</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xB6</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x76</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xF6</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x0E</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x8E</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x4E</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xCE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x2E</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xAE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x6E</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xEE</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x1E</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x9E</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x5E</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xDE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x3E</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xBE</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x7E</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xFE</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x01</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x81</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x41</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xC1</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x21</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xA1</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x61</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE1</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x11</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x91</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x51</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xD1</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x31</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xB1</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x71</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xF1</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x09</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x89</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x49</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xC9</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x29</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xA9</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x69</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE9</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x19</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x99</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x59</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xD9</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x39</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xB9</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x79</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xF9</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x05</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x85</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x45</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xC5</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x25</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xA5</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x65</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE5</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x15</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x95</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x55</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xD5</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x35</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xB5</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x75</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xF5</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x0D</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x8D</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x4D</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xCD</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x2D</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xAD</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x6D</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xED</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x1D</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x9D</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x5D</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xDD</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x3D</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xBD</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x7D</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xFD</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x03</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x83</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x43</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xC3</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x23</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xA3</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x63</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE3</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x13</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x93</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x53</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xD3</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x33</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xB3</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x73</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xF3</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x0B</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x8B</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x4B</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xCB</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x2B</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xAB</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x6B</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xEB</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x1B</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x9B</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x5B</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xDB</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x3B</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xBB</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x7B</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xFB</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x07</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x87</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x47</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xC7</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x27</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xA7</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x67</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xE7</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x17</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x97</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x57</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xD7</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x37</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xB7</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x77</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xF7</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x0F</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x8F</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x4F</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xCF</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x2F</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xAF</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x6F</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xEF</span>
    .<span style="color: #202020;">db</span> <span style="color: #208080;">0x1F</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x9F</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x5F</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xDF</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x3F</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xBF</span><span style="color: #339933;">,</span> <span style="color: #208080;">0x7F</span><span style="color: #339933;">,</span> <span style="color: #208080;">0xFF</span></pre></div></div>

<p>Тут все просто. Есть большая таблица с уже перевернутыми байтами. Просто выбираем из неё нужное значение. Места занимает много, зато работает за <strong>7 тактов</strong>.</p>
<p>Ну и напоследок чумовое решение. Соединить крестом два 8-ми битных порта:<br />
<strong>PD0 &#8211; PB7<br />
PD1 &#8211; PB6<br />
PD2 &#8211; PB5<br />
PD3 &#8211; PB4<br />
PD4 &#8211; PB3<br />
PD5 &#8211; PB2<br />
PD6 &#8211; PB1<br />
PD7 &#8211; PB0</strong></p>
<p>Посылаем в первый порт обычный байт, принимаем из второго перевернутый :-D</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">out   PORTB<span style="color: #339933;">,</span>temp
in    temp<span style="color: #339933;">,</span>PORTD</pre></div></div>

<p>Работает за <strong>2 такта</strong>! </p>
]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2009/08/19/367/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>Русская документация к AVRDUDE. Часть 2.</title>
		<link>http://kvorb.ru/2009/06/29/russkaya-dokumentaciya-k-avrdude-chast-2/</link>
		<comments>http://kvorb.ru/2009/06/29/russkaya-dokumentaciya-k-avrdude-chast-2/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 11:20:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Cтатьи]]></category>
		<category><![CDATA[Электроника]]></category>
		<category><![CDATA[avr]]></category>
		<category><![CDATA[avrdude]]></category>

		<guid isPermaLink="false">http://kvorb.ru/?p=303</guid>
		<description><![CDATA[Примеры использования AVRDUDE. Запись файла diag.hex в микроконтроллер ATmega128 используя программатор STK500: Считывание flash памяти из микроконтроллера ATmega128 с помощью программатора STK500 и сохранение данных в бинарный файл c:/diagflash.bin: Используя программатор по умолчанию, записать файл diag.hex в flash память, файл eeprom.hex в EEPROM память. Программирование расширенной, старшей и младшей конфигурационных ячеек в 0xFF, 0&#215;89 и [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Примеры использования AVRDUDE.</strong></p>
<p>Запись файла <span>diag</span>.<span>hex</span> в микроконтроллер <span>ATmega</span>128 используя программатор <span>STK</span>500:</p>
<p><span id="more-303"></span><a href="http://kvorb.ru/wp-content/uploads/2009/06/1.png"><img class="alignnone size-medium wp-image-304" title="avrdude" src="http://kvorb.ru/wp-content/uploads/2009/06/1-300x281.png" alt="avrdude" width="300" height="281" /></a></p>
<p>Считывание <span>flash</span> памяти из микроконтроллера <span>ATmega</span>128 с помощью программатора <span>STK</span>500 и сохранение данных в бинарный файл c:/<span>diag</span><span>flash</span>.<span>bin</span>:</p>
<p><a href="http://kvorb.ru/wp-content/uploads/2009/06/2.PNG"><img class="alignnone size-medium wp-image-305" title="avrdude" src="http://kvorb.ru/wp-content/uploads/2009/06/2-300x145.PNG" alt="avrdude" width="300" height="145" /></a></p>
<p>Используя программатор по умолчанию, записать файл <span>diag</span>.<span>hex</span> в <span>flash</span> память, файл <span>eeprom</span>.<span>hex</span> в <span>EEPROM</span> память. Программирование расширенной, старшей и младшей конфигурационных ячеек в 0<span>xFF</span>, 0&#215;89 и 0x2E соответственно:</p>
<p><a href="http://kvorb.ru/wp-content/uploads/2009/06/3.PNG"><img class="alignnone size-medium wp-image-306" title="avrdude" src="http://kvorb.ru/wp-content/uploads/2009/06/3-300x289.PNG" alt="avrdude" width="300" height="289" /></a></p>
<p>Подключение <span>JTAG</span> <span>ICE</span> <span>mkII</span> программатора к <span>USB</span> и включение терминального режима:</p>
<p><a href="http://kvorb.ru/wp-content/uploads/2009/06/4.PNG"><img class="alignnone size-medium wp-image-307" title="avrdude" src="http://kvorb.ru/wp-content/uploads/2009/06/4-300x105.PNG" alt="avrdude" width="300" height="105" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://kvorb.ru/2009/06/29/russkaya-dokumentaciya-k-avrdude-chast-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

