<?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>Tamkovich.com: Телеком/VoIP блог &#187; Сделай сам</title>
	<atom:link href="http://tamkovich.com/do-it-yourself/feed/" rel="self" type="application/rss+xml" />
	<link>http://tamkovich.com</link>
	<description>Современные технологии: Asterisk, SIP, Kamailio, Linux, Cisco, Linksys</description>
	<lastBuildDate>Mon, 30 Jan 2012 11:42:13 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.2</generator>
		<item>
		<title>Подсветка летницы на Arduino</title>
		<link>http://tamkovich.com/2012/01/stairway-light-arduino/</link>
		<comments>http://tamkovich.com/2012/01/stairway-light-arduino/#comments</comments>
		<pubDate>Sat, 07 Jan 2012 16:47:55 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Железо]]></category>
		<category><![CDATA[Сделай сам]]></category>
		<category><![CDATA[Arduino]]></category>
		<category><![CDATA[Умный Дом]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=2270</guid>
		<description><![CDATA[Чего только не сделали на контроллерах Arduino. И самолёты, и вертолёты и машинки, и много чего ещё. Интересные решения на этом контроллере есть для &#171;Умного дома&#187;. Вот, например, автоматическая диодная подсветка для лестницы на базе Arduino Mini Pro: Инструкции и схемы данного решения можно найти на сайте автора.]]></description>
			<content:encoded><![CDATA[<p align=justify>
Чего только не сделали на контроллерах Arduino. И самолёты, и вертолёты и машинки, и много чего ещё. Интересные решения на этом контроллере есть для &laquo;Умного дома&raquo;. Вот, например, автоматическая диодная подсветка для лестницы на базе Arduino Mini Pro:
</p>
<p><iframe width="700" height="505" src="http://www.youtube.com/embed/iqJ54XC51GQ" frameborder="0" allowfullscreen></iframe></p>
<p align=justify>
Инструкции и схемы данного решения можно найти на <a href=http://www.thekanes.org/projects/automated-led-stairs-howto>сайте автора</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2012/01/stairway-light-arduino/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Векторный клипарт для станков ЧПУ</title>
		<link>http://tamkovich.com/2011/04/vector-clipart-for-cnc-router/</link>
		<comments>http://tamkovich.com/2011/04/vector-clipart-for-cnc-router/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 10:24:24 +0000</pubDate>
		<dc:creator>rius</dc:creator>
				<category><![CDATA[Сделай сам]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=2002</guid>
		<description><![CDATA[На одной из моих предыдущих работ мне приходилось иметь дело со станками ЧПУ — плоттером, фрезерным станком и лазером. Сами по себе это достаточно продвинутые устройства и типичные заказы не использовали все их возможности. Для плоттера типовыми заданиями были макеты упаковки из картона (он умел резать и формировать сгибы) и чертежи на кальке. Для лазера [...]]]></description>
			<content:encoded><![CDATA[<p align="justify">На одной из моих предыдущих работ мне приходилось иметь дело со станками ЧПУ — плоттером, фрезерным станком и лазером. Сами по себе это достаточно продвинутые устройства и типичные заказы не использовали все их возможности. Для плоттера типовыми заданиями были макеты упаковки из картона (он умел резать и формировать сгибы) и чертежи на кальке. Для лазера заказы были посложнее — фанерные заготовки для плоских и ротационных штанцформ. Но все равно, по большей части это прямоугольники и параллельные линии, тогда как лазер мог с точностью 0.01 мм отрабатывать контуры очень сложной формы. При этом он мог не только прорезать материал (фанера, оргстекло, акриловое стекло, резина, линолеум и пр.) насквозь, но и наносить рисунок на поверхность в режиме гравировки. Сам рез получается черным и, если материал светлый, смотрится очень красиво за счет контраста.</p>
<p><span id="more-2002"></span></p>
<p align="justify">Свободного времени на  работе было достаточно — после того, как заказ запущен в обработку, на плоттере не требуются вообще никакие действия, а на лазере надо изредка проверять толщину реза. В общем, в зависимости от длины контуров в чертеже получалось 10 — 20 минут относительно свободного  времени. Через некоторое время мне надоело просто смотреть, как работают мои ЧПУ-подчиненные и я решил, что надо как-то использовать паузы.</p>
<p align="justify">И плоттеру, и лазеру для работы нужны стандартные автокадовские файлы DWG или DXF. Какие-то простые чертежи можно сделать и самому в  AutoCAD — прямоугольники, дуги, многоугольники. Но что делать если надо получить чертеж, скажем, мотоцикла или самолета, да еще не просто проекцию, а скажем используя фото как образец? Сначала я просто вставлял прямо в автокадовский чертеж графический файл, обводил нужные контуры прямыми линиями, вписывал дуги, а после этого еще и сплайнами там, где прямые не подходили. На крайний случай подойдет и такой трудозатратный метод.</p>
<p align="justify">Я стал собирать информацию по данной теме. Оказалось, что задача векторизации растровых изображений может решаться графическими редакторами, например Corel Draw. Но это только отчасти, т.к. сразу в работу векторизованный файл запускать нельзя и нужно его еще дорабатывать (хотя бы разнести контуры по слоям и сделать незамкнутыми те контуры, которые на вырезанном изделии не должны выпадать).</p>
<p align="justify">Ничего подходящего на дисках с векторным клипартом, продаваемых в магазинах я не нашел. Возможно сейчас ситуация и изменилась.</p>
<p align="justify">А потом я нашел сайт с векторным клипартом <a href="http://vector-images.com/">http://vector-images.com/</a>  Это было уже что-то. Многие файлы доступны для бесплатного скачивания, те, что получше — за деньги. После скачивания, я конвертировал файл с помощью Corel Draw в DWG. Затем шли манипуляции со слоями — что-то режется насквозь, что-то в режиме гравировки. Часто надо было перерисовывать сплайны и прямые — из-за ошибок конвертации и неточностей в самом исходном файле они не всегда проходили там, где нужно. В случае с гербами часто помогало то, что многие элементы симметричны: даже если один испорчен, можно зеркально отразить тот, который в хорошем качестве. В старой версии AutoCAD были проблемы с обработкой некоторых сплайнов — программа аварийно завершалась при попытке сохранить файл или просто при его редактировании. Короче говоря, времени требовалось на доводку до ума много, но все равно меньше, чем при других подходах. </p>
<p align="justify">Из моего опыта работы с сайтом могу рассказать следующее.<br />
Я делал платеж всего один раз в размере 300 рублей (платных файлов качал не так много). Банковские реквизиты прошли не с первого раза и только во втором по счету отделении банка. Правда после этого все было просто: отослал сканированную копию квитанции на электронную почту и получил деньги на виртуальный счет.<br />
Файл с гербом России в хорошем качестве на этом сайте до сих пор платный, в то время как файл с эмблемой ФСБ бесплатен и герб России можно получить из него. Сразу могу сказать, что  потребуется изрядная доводка.</p>
<p align="justify">Ну и напоследок немного фотографий, чтобы читатель понял, что результат стоит усилий:</p>
<p>
<center><br />
<img src="http://tamkovich.com/wp-content/uploads/2011/04/VS.jpg" alt="Эмблема Вооруженных Сил России" width="640" height="480" class="aligncenter size-full wp-image-2008" /><br />
<strong>Эмблема Вооруженных Сил России</strong><br />
</center><br />
<br />
<center><br />
<img src="http://tamkovich.com/wp-content/uploads/2011/04/ussr-300x225.jpg" alt="" width="300" height="225" class="aligncenter size-medium wp-image-2007" /><br />
<strong>Герб СССР</strong><br />
</center><br />
<center><img src="http://tamkovich.com/wp-content/uploads/2011/04/FSB.jpg" alt="" width="600" height="800" class="aligncenter size-full wp-image-2004" /><br />
<strong>Эмблема ФСБ</strong><br />
</center><br />
<br />
<center><img src="http://tamkovich.com/wp-content/uploads/2011/04/gps.jpg" alt="" width="464" height="348" class="aligncenter size-full wp-image-2005" /><br />
<strong>Эмблема Пожарной Службы</strong><br />
</center><br />
<br />
<center><br />
<img src="http://tamkovich.com/wp-content/uploads/2011/04/Litva_big.jpg" alt="" width="576" height="432" class="aligncenter size-full wp-image-2006" /><br />
<strong>Герб Литвы. Интересен уклоном в сторону фэнтези &#8211; бросаются в глаза грифон и единорог :)</strong><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2011/04/vector-clipart-for-cnc-router/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Устройство управления шаговым двигателем на базе ПЛИС Altera</title>
		<link>http://tamkovich.com/2011/04/step-motor-driver-with-altera/</link>
		<comments>http://tamkovich.com/2011/04/step-motor-driver-with-altera/#comments</comments>
		<pubDate>Sun, 17 Apr 2011 18:16:12 +0000</pubDate>
		<dc:creator>rius</dc:creator>
				<category><![CDATA[Сделай сам]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1924</guid>
		<description><![CDATA[В продолжение темы управления электромоторами, начатой в статье Управление мотором жесткого диска &#8211; сегодня мы поговорим о другой разновидности электромоторов &#8211; о шаговых двигателях. Сперва немного общих сведений о шаговых двигателях. К достоинствам шаговых двигателей можно отнести: угол поворота ротора определяется числом импульсов, которые поданы на двигатель двигатель обеспечивает полный момент в режиме остановки (если [...]]]></description>
			<content:encoded><![CDATA[<p align=justify>В продолжение темы управления электромоторами, начатой в статье <a href="http://tamkovich.com/2010/06/hdd-motor-controller/" >Управление мотором жесткого диска</a> &#8211; сегодня мы поговорим о другой разновидности электромоторов &#8211; о <b>шаговых двигателях</b>. Сперва немного общих сведений о шаговых двигателях.</p>
<p align=justify>
<strong>К достоинствам шаговых двигателей можно отнести:</strong></p>
<ul>
<li>угол поворота ротора определяется числом импульсов, которые поданы на двигатель</li>
<li>двигатель обеспечивает полный момент в режиме остановки (если обмотки запитаны)</li>
<li>прецизионное позиционирование и повторяемость. Хорошие шаговые двигатели имеют точность 3-5% от величины шага. Эта ошибка не накапливается от шага к шагу<br />
возможность быстрого старта/остановки/реверсирования</li>
<li>высокая надежность, связанная с отсутствием щеток, срок службы шагового двигателя фактически определяется сроком службы подшипников </li>
<li>однозначная зависимость положения от входных импульсов обеспечивает позиционирование без обратной связи </li>
<li>возможность получения очень низких скоростей вращения для нагрузки, присоединенной непосредственно к валу двигателя без промежуточного редуктора </li>
<li>может быть перекрыт довольно большой диапазон скоростей, скорость пропорциональна частоте входных импульсов</li>
</ul>
<p><span id="more-1924"></span></p>
<p align=justify>
<strong>К недостаткам шаговых двигателей можно отнести:</strong></p>
<ul>
<li>возможна потеря контроля положения ввиду работы без обратной связи</li>
<li>потребление энергии не уменьшается даже без нагрузки</li>
<li>затруднена работа на высоких скоростях</li>
<li>невысокая удельная мощность</li>
<li>относительно сложная схема управления</li>
</ul>
<p align=justify>
<strong>Биполярные и униполярные шаговые двигатели </strong><br />
В зависимости от конфигурации обмоток двигатели делятся на биполярные и униполярные. Биполярный двигатель имеет одну обмотку в каждой фазе, которая для изменения направления магнитного поля переполюсовывается драйвером. Для такого типа двигателя требуется мостовой драйвер, или полумостовой с двуполярным питанием. Всего биполярный двигатель имеет две обмотки и, соответственно, четыре вывода (рис.1а).
</p>
<p><center><br />
<img src="http://tamkovich.com/wp-content/uploads/2011/04/step11.png" alt="Рис. 1. Биполярный двигатель (а), униполярный (б) и четырехобмоточный (в)." width="488" height="101" class="aligncenter size-full wp-image-1941" /><br />
<em>Рис. 1. Биполярный двигатель (а), униполярный (б) и четырехобмоточный (в).</em><br />
</center></p>
<p align=justify>
Униполярный двигатель также имеет одну обмотку в каждой фазе, но от середины обмотки сделан отвод. Это позволяет изменять направление магнитного поля, создаваемого обмоткой, простым переключением половинок обмотки. При этом существенно упрощается схема драйвера. Драйвер должен иметь только 4 простых ключа. Таким образом, в униполярном двигателе используется другой способ изменения направления магнитного поля. Средние выводы обмоток могут быть объединены внутри двигателя, поэтому такой двигатель может иметь 5 или 6 выводов (рис. 1б). Иногда униполярные двигатели имеют раздельные 4 обмотки, по этой причине их ошибочно называют 4-х фазными двигателями. Каждая обмотка имеет отдельные выводы, поэтому всего выводов 8 (рис. 1в). При соответствующем соединении обмоток такой двигатель можно использовать как униполярный или как биполярный. Униполярный двигатель с двумя обмотками и отводами тоже можно использовать в биполярном режиме, если отводы оставить не подключенными. В любом случае ток обмоток следует выбирать так, чтобы не превысить максимальной рассеиваемой мощности.
</p>
<p align=justify>
<strong>Преимущества биполярных шаговых двигателей</strong><br />
Если сравнивать между собой биполярный и униполярный двигатели, то биполярный имеет более высокую удельную мощность. При одних и тех же размерах биполярные двигатели обеспечивают больший момент. Момент, создаваемый шаговым двигателем, пропорционален величине магнитного поля, создаваемого обмотками статора. Путь для повышения магнитного поля – это увеличение тока или числа витков обмоток. Естественным ограничением при повышении тока обмоток является опасность насыщения железного сердечника. Однако на практике это ограничение действует редко. Гораздо более существенным является ограничение по нагреву двигателя вследствии омических потерь в обмотках. Как раз этот факт и демонстрирует одно из преимуществ биполярных двигателей. В униполярном двигателе в каждый момент времени используется лишь половина обмоток. Другая половина просто занимает место в окне сердечника, что вынуждает делать обмотки проводом меньшего диаметра. В то же время в биполярном двигателе всегда работают все обмотки, т.е. их использование оптимально. В таком двигателе сечение отдельных обмоток вдвое больше, а омическое сопротивление – соответственно вдвое меньше. Это позволяет увеличить ток в корень из двух раз при тех же потерях, что дает выигрыш в моменте примерно 40%. Если же повышенного момента не требуется, униполярный двигатель позволяет уменьшить габариты или просто работать с меньшими потерями. На практике все же часто применяют униполярные двигатели, так как они требуют значительно более простых схем управления обмотками. Это важно, если драйверы выполнены на дискретных компонентах. В настоящее время существуют специализированные микросхемы драйверов для биполярных двигателей, с использованием которых драйвер получается не сложнее, чем для униполярного двигателя. Например, это микросхемы L293E, L298N или L6202 фирмы SGS-Thomson, PBL3770, PBL3774 фирмы Ericsson, NJM3717, NJM3770, NJM3774 фирмы JRC, A3957 фирмы Allegro, LMD18T245 фирмы National Semiconductor. В моей работе была использована микросхема KР1128КТ4, которая является отечественным аналогом микросхемы L293D.
</p>
<p align=justify>
<strong>Способы управления шаговым двигателем и соответствующие временные диаграммы</strong><br />
Существует несколько способов управления фазами шагового двигателя.<br />
Первый способ обеспечивается попеременной коммутации фаз, при этом они не перекрываются, в один момент времени включена только одна фаза (рис 2а). Этот способ называют ”one phase on” full step или wave drive mode. Точки равновесия ротора для каждого шага совпадают с «естественными» точками равновесия ротора у незапитанного двигателя. Недостатком этого способа управления является то, что для биполярного двигателя в один и тот же момент времени иcпользуется 50% обмоток, а для униполярного – только 25%. Это означает, что в таком режиме не может быть получен полный момент.
</p>
<p><center><br />
<img src="http://tamkovich.com/wp-content/uploads/2011/04/step2.png" alt="Различные способы управления фазами шагового двигателя." width="565" height="327" class="aligncenter size-full wp-image-1930" /><br />
<em>Рис. 2. Различные способы управления фазами шагового двигателя.</em><br />
</center></p>
<p align=justify>
Второй способ &#8211; управление фазами с перекрытием: две фазы включены в одно и то же время. Его называют ”two-phase-on” full step или просто full step mode. При этом способе управления ротор фиксируется в промежуточных позициях между полюсами статора (рис. 2б) и обеспечивается примерно на 40% больший момент, чем в случае одной включенной фазы. Этот способ управления обеспечивает такой же угол шага, как и первый способ, но положение точек равновесия ротора смещено на пол-шага.
</p>
<p align=justify>
Третий способ является комбинацией первых двух и называется полушаговым режимом, ”one and two-phase-on” half step или просто half step mode, когда двигатель делает шаг в половину основного. Этот метод управления достаточно распространен, так как двигатель с меньшим шагом стоит дороже и очень заманчиво получить от 100-шагового двигателя 200 шагов на оборот. Каждый второй шаг запитана лишь одна фаза, а в остальных случаях запитаны две (рис. 2в). В результате угловое перемещение ротора составляет половину угла шага для первых двух способов управления. Кроме уменьшения размера шага этот способ управления позволяет частично избавиться от явления резонанса. Полушаговый режим обычно не позволяет получить полный момент, хотя наиболее совершенные драйверы реализуют модифицированный полушаговый режим, в котором двигатель обеспечивает практически полный момент, при этом рассеиваемая мощность не превышает номинальной.
</p>
<p align=justify>
Еще один способ управления называется микрошаговым режимом или micro stepping mode. При этом способе управления ток в фазах нужно менять небольшими шагами, обеспечивая таким образом дробление половинного шага на еще меньшие микрошаги. Когда одновременно включены две фазы, но их токи не равны, то положение равновесия ротора будет лежать не в середине шага, а в другом месте, определяемом соотношением токов фаз. Меняя это соотношение, можно обеспечить некоторое количество микрошагов внутри одного шага. Вместе с тем, для реализации микрошагового режима требуются значительно более сложные драйверы, позволяющие задавать ток в обмотках с необходимой дискретностью. Полушаговый режим является частным случаем микрошагового режима, но он не требует формирования ступенчатого тока питания катушек, поэтому часто реализуется.
</p>
<p align=justify>
Моей задачей была реализация полношагового и полушагового режимов. Полушаговый режим запустить так и не удалось. Я склонен думать, что виноват двигатель: он был взят из старого трехдюймового дисковода. Это был единственный двигатель из 4 штук, который вообще удалось запустить.
</p>
<p align=justify>
<strong>Драйвер шагового двигателя.</strong><br />
Спроектированный мной драйвер шагового двигателя состоит из счетчика и генератора битовых последовательностей.
</p>
<p><center><br />
<img src="http://tamkovich.com/wp-content/uploads/2011/04/step3.png" alt="Счётчик битовых последовательностей" width="291" height="112" class="aligncenter size-full wp-image-1931" /><br />
<em>Рис. 3. Счетчик</em><br />
</center></p>
<p align=justify>
Счетчик, используемый в моей работе имеет 16 разрядов, и является суммирующим. Существует возможность сбросить его значение в 0 с помощью сигнала RESET, однако в моей работе данная возможность не используется. Из шины выходных проводов мне нужен 16-й провод, соответствующий старшему разряду, сигнал которого имеет минимальную частоту. Назначение счетчика – поделить поступающую тактовую частоту 25 Мгц со встроенного тактового генератора. Значение полученной в результате деления частоты определяется разрядностью счетчика, и в данном случае она равна 381 Гц, что соответствует делению базовой частоты 25 МГц на число 216=65536. Они реализованы следующим образом на языке AHDL:
</p>

<div class="wp_syntax"><div class="code"><pre class="vhdl" style="font-family:monospace;">Title <span style="color: #7f007f;">&quot;Counter&quot;</span><span style="color: #000066;">;</span>
&nbsp;
SUBDESIGN counter
<span style="color: #000066;">&#40;</span>
	clk, reset		<span style="color: #000066;">:</span> INPUT <span style="color: #000066;">;</span>
	result<span style="color: #000066;">&#91;</span><span style="color: #ff0000;">15</span>..<span style="color: #ff0000;">0</span><span style="color: #000066;">&#93;</span>		<span style="color: #000066;">:</span> OUTPUT<span style="color: #000066;">;</span>
<span style="color: #000066;">&#41;</span>
<span style="color: #000080; font-weight: bold;">VARIABLE</span>	count<span style="color: #000066;">&#91;</span><span style="color: #ff0000;">15</span>..<span style="color: #ff0000;">0</span><span style="color: #000066;">&#93;</span><span style="color: #000066;">:</span> <span style="color: #000080; font-weight: bold;">DFF</span><span style="color: #000066;">;</span>
&nbsp;
<span style="color: #000080; font-weight: bold;">BEGIN</span>
	count<span style="color: #000066;">&#91;</span><span style="color: #000066;">&#93;</span>.clk <span style="color: #000066;">=</span> clk<span style="color: #000066;">;</span>
	count<span style="color: #000066;">&#91;</span><span style="color: #000066;">&#93;</span>.clrn <span style="color: #000066;">=</span> !reset<span style="color: #000066;">;</span>
	<span style="color: #000080; font-weight: bold;">IF</span> !clk <span style="color: #000080; font-weight: bold;">THEN</span>
	count<span style="color: #000066;">&#91;</span><span style="color: #000066;">&#93;</span>.d <span style="color: #000066;">=</span> count<span style="color: #000066;">&#91;</span><span style="color: #000066;">&#93;</span>.q + <span style="color: #ff0000;">1</span><span style="color: #000066;">;</span>
	<span style="color: #000080; font-weight: bold;">ELSE</span>
	count<span style="color: #000066;">&#91;</span><span style="color: #000066;">&#93;</span>.d <span style="color: #000066;">=</span> count<span style="color: #000066;">&#91;</span><span style="color: #000066;">&#93;</span>.q<span style="color: #000066;">;</span>
	<span style="color: #000080; font-weight: bold;">END</span> <span style="color: #000080; font-weight: bold;">IF</span><span style="color: #000066;">;</span>
	result<span style="color: #000066;">&#91;</span><span style="color: #000066;">&#93;</span> <span style="color: #000066;">=</span> count<span style="color: #000066;">&#91;</span><span style="color: #000066;">&#93;</span><span style="color: #000066;">;</span>
<span style="color: #000080; font-weight: bold;">END</span><span style="color: #000066;">;</span></pre></div></div>

<p align=justify>
Если необходимо получить частоту, отличную от 381 Гц, то можно использовать на входе генератора битовых последовательностей вместо используемого в текущей конфигурации провода Result15 другой провод из шины Result. Например, если вывести провод  Result13, то частота на входе генератора увеличится в 4 раза и станет равной 25000000 / 214 = 1524 Гц. Однако, таким образом нельзя получить частоту меньше 381 Гц. Для этого надо изменить размерность массива D-триггеров счетчика в строке:
</p>
<p align=justify>
VARIABLE	count[15..0]: DFF;<br />
Например, так можно сделать размерность массива триггеров равной 20<br />
 VARIABLE	count[19..0]: DFF;<br />
Тогда с провода Result19 можно получить частоту 25000000 / 220 =  24 Гц.
</p>
<p align=justify>
<strong>Генератор битовых последовательностей.</strong><br />
Генератор битовых последовательностей представляет собой автомат Мура, для которого сигнал на выходе зависит от текущего состояния автомата и входных сигналов.
</p>
<p><center><br />
<img src="http://tamkovich.com/wp-content/uploads/2011/04/step4.png" alt="Генератор битовых последовательностей" width="290" height="158" class="aligncenter size-full wp-image-1932" /><br />
<em>Рис. 4. Генератор последовательностей</em><br />
</center></p>
<p align=justify>
Автомат имеет 8 состояний. Зависимость значения на выходе от состояния приведено в таблице:<br />
<center><br />
<TABLE WIDTH="354" BORDER="1" CELLPADDING="2" CELLSPACING="0"><COL WIDTH="80"><COL WIDTH="62"><COL WIDTH="62"><COL WIDTH="62"><COL WIDTH="63"><TR VALIGN="TOP"><TD WIDTH="80" HEIGHT="10"></TD><TD COLSPAN="4"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">Значение на выходе</FONT></FONT></P></TD></TR><TR VALIGN="TOP"><TD WIDTH="80" HEIGHT="11"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">Состояние</FONT></FONT></P></TD><TD WIDTH="54"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">A</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">B</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">C</FONT></FONT></P></TD><TD WIDTH="58"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">D</FONT></FONT></P></TD></TR><TR VALIGN="TOP"><TD WIDTH="80" HEIGHT="11"><P CLASS="western" ALIGN="LEFT" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">s0</FONT></FONT></P></TD><TD WIDTH="54"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="58"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD></TR><TR VALIGN="TOP"><TD WIDTH="80" HEIGHT="11"><P CLASS="western" ALIGN="LEFT" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">s1</FONT></FONT></P></TD><TD WIDTH="54"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD><TD WIDTH="58"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD></TR><TR VALIGN="TOP"><TD WIDTH="80" HEIGHT="11"><P CLASS="western" ALIGN="LEFT" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">s2</FONT></FONT></P></TD><TD WIDTH="54"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="58"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD></TR><TR VALIGN="TOP"><TD WIDTH="80" HEIGHT="11"><P CLASS="western" ALIGN="LEFT" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">s3</FONT></FONT></P></TD><TD WIDTH="54"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="58"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD></TR><TR VALIGN="TOP"><TD WIDTH="80" HEIGHT="11"><P CLASS="western" ALIGN="LEFT" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">s4</FONT></FONT></P></TD><TD WIDTH="54"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD><TD WIDTH="58"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD></TR><TR VALIGN="TOP"><TD WIDTH="80" HEIGHT="11"><P CLASS="western" ALIGN="LEFT" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">s5</FONT></FONT></P></TD><TD WIDTH="54"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD><TD WIDTH="58"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD></TR><TR VALIGN="TOP"><TD WIDTH="80" HEIGHT="11"><P CLASS="western" ALIGN="LEFT" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">s6</FONT></FONT></P></TD><TD WIDTH="54"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="58"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD></TR><TR VALIGN="TOP"><TD WIDTH="80" HEIGHT="30"><P CLASS="western" ALIGN="LEFT" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">s7</FONT></FONT></P></TD><TD WIDTH="54"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="62"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">0</FONT></FONT></P></TD><TD WIDTH="58"><P CLASS="western" ALIGN="CENTER" STYLE="text-indent: 0cm"><FONT FACE="Arial, sans-serif"><FONT SIZE="2">1</FONT></FONT></P></TD></TR></TABLE><br />
</center><br />
На вход Clock генератора поступает уже поделенная частота. Зависимость переходов между состояниями от входных сигналов описывается следующими диаграммой и таблицей:
</p>
<p><center><br />
<img src="http://tamkovich.com/wp-content/uploads/2011/04/step5.png" alt="диаграмма зависимости состояний от входных сигналов" width="185" height="180" class="aligncenter size-full wp-image-1933" /><br />
<br />
<TABLE CELLSPACING="0" RULES="NONE" BORDER="1"><COL WIDTH="86"><COL WIDTH="27"><COL WIDTH="86"><COL WIDTH="86"><COL WIDTH="86"><COL WIDTH="86"><COL WIDTH="74"><TBODY><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" WIDTH="113" HEIGHT="17" ALIGN="LEFT"><BR></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="3" WIDTH="257" ALIGN="CENTER">Значения сигналов</TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" WIDTH="160" ALIGN="CENTER"><FONT FACE="Arial,sans-serif"><BR></FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER">Состояние</TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">DIRECT</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">Half/Full</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">Enable</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">Следующее состояние</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER">s0</TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER">любое</TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER">0</TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s3</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s4</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s7</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s2</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s0</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s5</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s4</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s2</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s2</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s2</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s3</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s2</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s2</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s6</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s2</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s5</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s3</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s3</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s3</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s0</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s3</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s2</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s3</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s7</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s3</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s6</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s4</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s4</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s4</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s5</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s4</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s7</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s4</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s4</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s0</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s5</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s5</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s5</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s6</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s5</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s4</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s5</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s2</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s5</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s1</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s6</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s6</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s6</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s7</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s6</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s5</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s6</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s3</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s6</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s2</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s7</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">любое</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s7</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s7</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s4</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s7</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s6</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s7</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s0</FONT></TD></TR><TR><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" HEIGHT="18" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s7</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">0</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " ALIGN="CENTER"><FONT FACE="Arial,sans-serif">1</FONT></TD><TD STYLE="border-top: 1px solid ; border-bottom: 1px solid ; border-left: 1px solid ; border-right: 1px solid " COLSPAN="2" ALIGN="CENTER"><FONT FACE="Arial,sans-serif">s3</FONT></TD></TR></TBODY></TABLE><br />
</center></p>
<p align=justify>
Высокий уровень сигнала DIRECT соответствует вращению по часовой стрелке, низкий – против часовой. Высокий уровень сигнала Half/Full соответствует полушаговому режиму, низкий – полношаговому режиму. Для проверки можно взять такой случай: полушаговый режим (Half/Full=1), вращение по часовой стрелке (Direct=1). Этому случаю должна соответствовать следующая цепочка состояний: S0-S4-S1-S5-S2-S6-S3-S7. Нетрудно проверить, что такая цепочка прослеживается в таблице.
</p>
<p align=justify>
<strong>Драйвер шагового двигателя</strong><br />
<center><img src="http://tamkovich.com/wp-content/uploads/2011/04/step6.png" alt="" width="555" height="187" class="aligncenter size-full wp-image-1934" /></center><br />
Данное устройство состоит из объединения счетчика и генератора битовых последовательностей. Генератор реализован следующим образом на языке AHDL.
</p>

<div class="wp_syntax"><div class="code"><pre class="vhdl" style="font-family:monospace;">TITLE <span style="color: #7f007f;">&quot;Generator&quot;</span><span style="color: #000066;">;</span>
&nbsp;
SUBDESIGN generator
<span style="color: #000066;">&#40;</span>
   clk, reset, direct, hf, enable <span style="color: #000066;">:</span> INPUT<span style="color: #000066;">;</span>
   P<span style="color: #000066;">&#91;</span><span style="color: #ff0000;">3</span>..<span style="color: #ff0000;">0</span><span style="color: #000066;">&#93;</span> <span style="color: #000066;">:</span> OUTPUT<span style="color: #000066;">;</span> <span style="color: #008000; font-style: italic;">% P0=A P1=C P2=B P3=D %</span>
<span style="color: #000066;">&#41;</span>
<span style="color: #000080; font-weight: bold;">VARIABLE</span>
&nbsp;
   ss<span style="color: #000066;">:</span> MACHINE <span style="color: #000080; font-weight: bold;">OF</span> BITS <span style="color: #000066;">&#40;</span>P<span style="color: #000066;">&#91;</span><span style="color: #ff0000;">3</span>..<span style="color: #ff0000;">0</span><span style="color: #000066;">&#93;</span><span style="color: #000066;">&#41;</span>
       <span style="color: #000080; font-weight: bold;">WITH</span> STATES <span style="color: #000066;">&#40;</span>
                    s0    <span style="color: #000066;">=</span>   b<span style="color: #7f007f;">&quot;0001&quot;</span>,
                    s1    <span style="color: #000066;">=</span>   b<span style="color: #7f007f;">&quot;0100&quot;</span>,
                    s2    <span style="color: #000066;">=</span>   b<span style="color: #7f007f;">&quot;0010&quot;</span>,
                    s3    <span style="color: #000066;">=</span>   b<span style="color: #7f007f;">&quot;1000&quot;</span>,
&nbsp;
                    s4    <span style="color: #000066;">=</span>   b<span style="color: #7f007f;">&quot;0101&quot;</span>,
                    s5    <span style="color: #000066;">=</span>   b<span style="color: #7f007f;">&quot;0110&quot;</span>,
                    s6    <span style="color: #000066;">=</span>   b<span style="color: #7f007f;">&quot;1010&quot;</span>,
                    s7    <span style="color: #000066;">=</span>   b<span style="color: #7f007f;">&quot;1001&quot;</span><span style="color: #000066;">&#41;</span><span style="color: #000066;">;</span>
&nbsp;
<span style="color: #000080; font-weight: bold;">BEGIN</span>
   ss.clk   <span style="color: #000066;">=</span> clk<span style="color: #000066;">;</span>
   ss.reset <span style="color: #000066;">=</span> reset<span style="color: #000066;">;</span>
&nbsp;
   TABLE
      ss,    direct,      hf  ,  enable   <span style="color: #000066;">=&gt;</span>   ss<span style="color: #000066;">;</span>
&nbsp;
      s0,      X,         X,        <span style="color: #ff0000;">0</span>     <span style="color: #000066;">=&gt;</span>   s0<span style="color: #000066;">;</span>
      s0,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s1<span style="color: #000066;">;</span>
      s0,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s3<span style="color: #000066;">;</span>
      s0,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s4<span style="color: #000066;">;</span>
      s0,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s7<span style="color: #000066;">;</span>
<span style="color: #008000; font-style: italic;">%-----------------------------------------------------%</span>
      s1,      X,         X,        <span style="color: #ff0000;">0</span>     <span style="color: #000066;">=&gt;</span>   s1<span style="color: #000066;">;</span>
      s1,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s0<span style="color: #000066;">;</span>
      s1,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s2<span style="color: #000066;">;</span>
      s1,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s4<span style="color: #000066;">;</span>
      s1,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s5<span style="color: #000066;">;</span>
<span style="color: #008000; font-style: italic;">%-----------------------------------------------------%</span>
      s2,      X,         X,        <span style="color: #ff0000;">0</span>     <span style="color: #000066;">=&gt;</span>   s2<span style="color: #000066;">;</span>
      s2,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s1<span style="color: #000066;">;</span>
      s2,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s3<span style="color: #000066;">;</span>
      s2,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s6<span style="color: #000066;">;</span>
      s2,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s5<span style="color: #000066;">;</span>
<span style="color: #008000; font-style: italic;">%-----------------------------------------------------%</span>
      s3,      X,         X,        <span style="color: #ff0000;">0</span>     <span style="color: #000066;">=&gt;</span>   s3<span style="color: #000066;">;</span>
      s3,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s2<span style="color: #000066;">;</span>
      s3,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s0<span style="color: #000066;">;</span>
      s3,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s7<span style="color: #000066;">;</span>
      s3,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s6<span style="color: #000066;">;</span>
<span style="color: #008000; font-style: italic;">%-----------------------------------------------------%</span>
      s4,      X,         X,        <span style="color: #ff0000;">0</span>     <span style="color: #000066;">=&gt;</span>   s4<span style="color: #000066;">;</span>
      s4,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s7<span style="color: #000066;">;</span>
      s4,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s5<span style="color: #000066;">;</span>
      s4,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s1<span style="color: #000066;">;</span>
      s4,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s0<span style="color: #000066;">;</span>
<span style="color: #008000; font-style: italic;">%-----------------------------------------------------%</span>
      s5,      X,         X,        <span style="color: #ff0000;">0</span>     <span style="color: #000066;">=&gt;</span>   s5<span style="color: #000066;">;</span>
      s5,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s4<span style="color: #000066;">;</span>
      s5,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s1<span style="color: #000066;">;</span>
      s5,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s2<span style="color: #000066;">;</span>
      s5,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s6<span style="color: #000066;">;</span>
<span style="color: #008000; font-style: italic;">%-----------------------------------------------------%</span>
      s6,      X,         X,        <span style="color: #ff0000;">0</span>     <span style="color: #000066;">=&gt;</span>   s6<span style="color: #000066;">;</span>
      s6,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s5<span style="color: #000066;">;</span>
      s6,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s2<span style="color: #000066;">;</span>
      s6,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s3<span style="color: #000066;">;</span>
      s6,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s7<span style="color: #000066;">;</span>
<span style="color: #008000; font-style: italic;">%-----------------------------------------------------%</span>
      s7,      X,         X,        <span style="color: #ff0000;">0</span>     <span style="color: #000066;">=&gt;</span>   s7<span style="color: #000066;">;</span>
      s7,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s6<span style="color: #000066;">;</span>
      s7,      <span style="color: #ff0000;">0</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s3<span style="color: #000066;">;</span>
      s7,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">1</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s0<span style="color: #000066;">;</span>
      s7,      <span style="color: #ff0000;">1</span>,         <span style="color: #ff0000;">0</span>,        <span style="color: #ff0000;">1</span>     <span style="color: #000066;">=&gt;</span>   s4<span style="color: #000066;">;</span>
<span style="color: #008000; font-style: italic;">%-----------------------------------------------------%</span>
   <span style="color: #000080; font-weight: bold;">END</span> TABLE<span style="color: #000066;">;</span>
<span style="color: #000080; font-weight: bold;">END</span><span style="color: #000066;">;</span></pre></div></div>

<p align=justify>
<strong>Подключение усиливающего устройства.</strong><br />
Сигнал, снимаемый с программирумой логической интегральной микросхемы, имеет недостаточную мощность для подключения шагового двигателя напрямую. Поэтому в своей работе я использовал усилительную схему на базе микросхемы КР1128КТ4. Другое назначение этой микросхемы – предотвратить выбросы напряжения на обмотках двигателя (это реализуется с помощью внутренных диодов микросхемы). Микросхема выпускается в 16-ти ножечном корпусе. Я использовал следующую схему подключения:
</p>
<p><center><br />
<img src="http://tamkovich.com/wp-content/uploads/2011/04/step7.png" alt="" width="389" height="378" class="aligncenter size-full wp-image-1935" /></center></p>
<p align=justify>
Соответствие фаз и проводов шины DATA:<br />
Data0 A<br />
Data1 C<br />
Data2 B<br />
Data3 D</p>
<p>На 16-ую ножку нужно подать напряжение Vcc2 для питания шагового двигателя и  для данного шагового двигателя на нее нужно подать напряжение 5 В. Мной была оценена максимальная частота работы для двигателя. При подаче импульсов частотой 1524 Гц он вращался, тогда как при частоте 3049 Гц &#8211; уже нет. Из этого можно сделать вывод, что максимальная частота работы данного шагового двигателя лежит в пределах:<br />
1524 Гц &lt; F &lt; 3049 Гц.</p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2011/04/step-motor-driver-with-altera/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Kamailio: загружаем много данных с помощью db_mysql</title>
		<link>http://tamkovich.com/2010/10/kamailio-how-to-load-big-table-with-db_mysql/</link>
		<comments>http://tamkovich.com/2010/10/kamailio-how-to-load-big-table-with-db_mysql/#comments</comments>
		<pubDate>Wed, 20 Oct 2010 09:42:38 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[ITSP]]></category>
		<category><![CDATA[Программирование]]></category>
		<category><![CDATA[Сделай сам]]></category>
		<category><![CDATA[Kamailio]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1572</guid>
		<description><![CDATA[В Kamailio/OpenSIPS, как в любом взрослом проекте, имеется некоторое количество &#171;прокладочных&#187; интерфейсов. Задача этих интерфейсов &#8211; унификация. Например, с помощью mem/mem.h унифицирована работа с памятью. Интерфейс предоставляет набор вызовов pkg_malloc/pkg_free для работы с обычной памятью и shm_malloc/shm_free для работы с разделяемой памятью. Благодаря унификации работы с памятью &#8211; Kamailio портирован на множество различных платформ. Другим [...]]]></description>
			<content:encoded><![CDATA[<p align=justify>
В Kamailio/OpenSIPS, как в любом взрослом проекте, имеется некоторое количество &laquo;прокладочных&raquo; интерфейсов. Задача этих интерфейсов &#8211; унификация. Например, с помощью mem/mem.h унифицирована работа с памятью. Интерфейс предоставляет набор вызовов pkg_malloc/pkg_free для работы с обычной памятью и shm_malloc/shm_free для работы с разделяемой памятью. Благодаря унификации работы с памятью &#8211; Kamailio портирован на множество различных платформ. Другим интерфейсом-прокладкой является интерфейс работы с базами данных <a href=http://www.asipto.com/pub/kamailio-devel-guide/#c09database>DB API</a>. Базовая работа с этим интерфейсом хорошо описана в <a href=http://www.asipto.com/pub/kamailio-devel-guide/>KAMAILIO (OPENSER) Devel Guide</a>.
</p>
<p><span id="more-1572"></span></p>
<p align=justify>
Классическая операция получения данных из MySQL выглядит следующим образом:</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">snprintf<span style="color: #009900;">&#40;</span>sqlcmd<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>sqlcmd<span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">&quot;select n.id,n.name,n.ip,n.port,n.capacity,COUNT(c.node) 
         from cluster_nodes n left join active_calls c on (n.name=c.node) 
         where online=1 group by n.name&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
sql_cmd.<span style="color: #202020;">s</span> <span style="color: #339933;">=</span> sqlcmd<span style="color: #339933;">;</span>
sql_cmd.<span style="color: #202020;">len</span> <span style="color: #339933;">=</span> strlen<span style="color: #009900;">&#40;</span>sqlcmd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
LOG<span style="color: #009900;">&#40;</span>L_DBG<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Trying to execute SQL: '%s'<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> sqlcmd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
fres <span style="color: #339933;">=</span> dbf.<span style="color: #202020;">raw_query</span><span style="color: #009900;">&#40;</span>db_handle<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>sql_cmd<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>res<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>fres <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        total <span style="color: #339933;">=</span> RES_ROW_N<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>total <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> total<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        node <span style="color: #339933;">=</span> shm_malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> ci_li_node<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>node <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                LM_ERR<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Could not allocate shared memory<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                <span style="color: #b1b100;">return</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span>
                        node<span style="color: #339933;">-&gt;</span>id <span style="color: #339933;">=</span> RES_ROWS<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">values</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">0</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">val</span>.<span style="color: #202020;">int_val</span><span style="color: #339933;">;</span>
                        node<span style="color: #339933;">-&gt;</span>calls_init <span style="color: #339933;">=</span> RES_ROWS<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">values</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">5</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">val</span>.<span style="color: #202020;">int_val</span><span style="color: #339933;">;</span>
                        node<span style="color: #339933;">-&gt;</span>calls_current <span style="color: #339933;">=</span> node<span style="color: #339933;">-&gt;</span>calls_init<span style="color: #339933;">;</span>
                        node<span style="color: #339933;">-&gt;</span>calls_max <span style="color: #339933;">=</span> RES_ROWS<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">values</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">4</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">val</span>.<span style="color: #202020;">int_val</span><span style="color: #339933;">;</span>
                        node<span style="color: #339933;">-&gt;</span>port <span style="color: #339933;">=</span> RES_ROWS<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">values</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">3</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">val</span>.<span style="color: #202020;">int_val</span><span style="color: #339933;">;</span>
                        snprintf<span style="color: #009900;">&#40;</span>node<span style="color: #339933;">-&gt;</span>name<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>node<span style="color: #339933;">-&gt;</span>name<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%s&quot;</span><span style="color: #339933;">,</span> 
                                <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>RES_ROWS<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">values</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">val</span>.<span style="color: #202020;">str_val</span>.<span style="color: #202020;">s</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        snprintf<span style="color: #009900;">&#40;</span>node<span style="color: #339933;">-&gt;</span>ip<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>node<span style="color: #339933;">-&gt;</span>ip<span style="color: #009900;">&#41;</span><span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%s&quot;</span><span style="color: #339933;">,</span> 
                                <span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>RES_ROWS<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>.<span style="color: #202020;">values</span><span style="color: #009900;">&#91;</span><span style="color: #0000dd;">2</span><span style="color: #009900;">&#93;</span>.<span style="color: #202020;">val</span>.<span style="color: #202020;">str_val</span>.<span style="color: #202020;">s</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                        node<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
&nbsp;
                        total_max <span style="color: #339933;">+=</span> node<span style="color: #339933;">-&gt;</span>calls_max<span style="color: #339933;">;</span>
                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>mylist<span style="color: #339933;">-&gt;</span>last <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                mylist<span style="color: #339933;">-&gt;</span>last <span style="color: #339933;">=</span> node<span style="color: #339933;">;</span>
                                mylist<span style="color: #339933;">-&gt;</span>first <span style="color: #339933;">=</span> node<span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                                mylist<span style="color: #339933;">-&gt;</span>last<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> node<span style="color: #339933;">;</span>
                                mylist<span style="color: #339933;">-&gt;</span>last <span style="color: #339933;">=</span> node<span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span>
                <span style="color: #009900;">&#125;</span>
                LOG<span style="color: #009900;">&#40;</span>L_DBG<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;PRELOAD TOTAL: [servers] %d items = %lu bytes.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> 
                        i<span style="color: #339933;">,</span> i <span style="color: #339933;">*</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> ci_li_node<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                mylist<span style="color: #339933;">-&gt;</span>dt <span style="color: #339933;">=</span> time<span style="color: #009900;">&#40;</span>NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>       
        dbf.<span style="color: #202020;">free_result</span><span style="color: #009900;">&#40;</span>db_handle<span style="color: #339933;">,</span> res<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Как видим из простого примера, получение данных из MySQL сводится к трём действиям:
<ol>
<li>Отправляем SQL запрос с помощью команды raw_query.
<li>Читаем результаты с помощью макросов RES_ROW_N и RES_ROWS
<li>Подчищаем за собой память с помощью free_result</ol>
<p>Пока мы действуем по шаблону &#8211; всё отлично работает.
</p>
<p align=justify >
Но стоит нам захотеть чего то большего &#8211; и подход придётся менять. Например приведенным выше кодом нельзя загрузить за раз большую таблицу (тысячи записей). Прокладочные интерфейсы БД и памяти &#8211; накладываются друг на друга и возникают интересные эффекты. Дело в том, что при попытке загрузить большую таблицу целиком &#8211; db_mysql выделяет память под неё &#8211; одним куском. С другой стороны, pkg_free не освобождает память моментально, а лишь помечает её как готовую к очистке. Всё это приводит к тому, что загрузка большой таблицы срабатывает 2 раза подряд, а на третий возникает ошибка &#8211; недостаточно памяти.
</p>
<p align=justify >
Зачем загружать всю таблицу целиком &#8211; спросите вы? Вариантов может быть очень много &#8211; самый распространённый, пожалуй, &#8211; для того, что бы закешировать данные из БД. На одной СУБД далеко не уедешь, даже на такой быстрой как MySQL. Итак, что же нужно сделать для того, что бы обойти проблемы с памятью? Ответ очень простой: нужно воспользоваться вызовом fetch_result. К сожалению, применение этого вызова не расписано в <a href=http://www.asipto.com/pub/kamailio-devel-guide/>KAMAILIO (OPENSER) Devel Guide</a>, но, как известно, лучшая документация это исходный код. С практикой применения этого вызова можно ознакомиться в модулях Kamailio:</p>
<pre>
[root@sipproxy kamailio-3.0.3]# grep -l fetch_result */*/*.c
...
modules_k/dialog/dlg_db_handler.c
modules_k/drouting/dr_load.c
modules_k/htable/ht_db.c
modules_k/pdt/pdt.c
...
</pre>
<p>Вызов fetch_result позволяет указать сколько строк мы хотим поместить в память. Таким образом, вызывая fetch_result в цикле &#8211; мы обработаем все строки возвращённые базой данных по порциям. Если вы планируете использовать fetch_result самостоятельно, необходимо передать NULL в качестве указателя db_res_t** _r у функций raw_query(&#8230;) и query(&#8230;). Для наглядности, рассмотрим похожий кусок кода, написанный с использованием вызова fetch_result. Параметр ci_preload_chunk задаёт количество строк загружаемых в память за 1 вызов:
</p>

<div class="wp_syntax"><div class="code"><pre class="c" style="font-family:monospace;">snprintf<span style="color: #009900;">&#40;</span>sqlcmd<span style="color: #339933;">,</span> <span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span>sqlcmd<span style="color: #009900;">&#41;</span> <span style="color: #339933;">-</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">,</span>
        <span style="color: #ff0000;">&quot;select name,owner from sip where host='dynamic' and owner&gt;0&quot;</span>
<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
sql_cmd.<span style="color: #202020;">s</span> <span style="color: #339933;">=</span> sqlcmd<span style="color: #339933;">;</span>
sql_cmd.<span style="color: #202020;">len</span> <span style="color: #339933;">=</span> strlen<span style="color: #009900;">&#40;</span>sqlcmd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
LOG<span style="color: #009900;">&#40;</span>L_DBG<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Trying to execute SQL: '%s'<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> sqlcmd<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
fres <span style="color: #339933;">=</span> dbf.<span style="color: #202020;">raw_query</span><span style="color: #009900;">&#40;</span>db_handle<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>sql_cmd<span style="color: #339933;">,</span> NULL<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>fres <span style="color: #339933;">==</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
        LOG<span style="color: #009900;">&#40;</span>L_DBG<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;Trying to fetch first %d items.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> ci_preload_chunk<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>dbf.<span style="color: #202020;">fetch_result</span><span style="color: #009900;">&#40;</span>db_handle<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>res<span style="color: #339933;">,</span> ci_preload_chunk<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                LM_ERR<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Error while fetching result<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                        dbf.<span style="color: #202020;">free_result</span><span style="color: #009900;">&#40;</span>db_handle<span style="color: #339933;">,</span> res<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span>
                <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>       
        total <span style="color: #339933;">=</span> RES_ROW_N<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        LOG<span style="color: #009900;">&#40;</span>L_DBG<span style="color: #339933;">,</span> <span style="color: #ff0000;">&quot;%d first items fetched.<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #339933;">,</span> total<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>total <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                <span style="color: #b1b100;">do</span> <span style="color: #009900;">&#123;</span>
                        <span style="color: #b1b100;">for</span><span style="color: #009900;">&#40;</span>i <span style="color: #339933;">=</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span> i <span style="color: #339933;">&lt;</span> total<span style="color: #339933;">;</span> i<span style="color: #339933;">++</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                row <span style="color: #339933;">=</span> RES_ROWS<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> i<span style="color: #339933;">;</span>
                                u <span style="color: #339933;">=</span> shm_malloc<span style="color: #009900;">&#40;</span><span style="color: #993333;">sizeof</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">struct</span> ci_li_sipuser<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>u <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                        LM_ERR<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Could not allocate shared memory<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                        <span style="color: #b1b100;">return</span> <span style="color: #339933;">-</span><span style="color: #0000dd;">1</span><span style="color: #339933;">;</span>
                                <span style="color: #009900;">&#125;</span>       
                                u<span style="color: #339933;">-&gt;</span>sipaccount <span style="color: #339933;">=</span> atoi<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span><span style="color: #339933;">*</span><span style="color: #009900;">&#41;</span>VAL_STRING<span style="color: #009900;">&#40;</span>ROW_VALUES<span style="color: #009900;">&#40;</span>row<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                u<span style="color: #339933;">-&gt;</span>customer <span style="color: #339933;">=</span> VAL_INT<span style="color: #009900;">&#40;</span>ROW_VALUES<span style="color: #009900;">&#40;</span>row<span style="color: #009900;">&#41;</span> <span style="color: #339933;">+</span> <span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                u<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> NULL<span style="color: #339933;">;</span>
                                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>mylist<span style="color: #339933;">-&gt;</span>last <span style="color: #339933;">==</span> NULL<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                        mylist<span style="color: #339933;">-&gt;</span>last <span style="color: #339933;">=</span> u<span style="color: #339933;">;</span>
                                        mylist<span style="color: #339933;">-&gt;</span>first <span style="color: #339933;">=</span> u<span style="color: #339933;">;</span>
                                <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">else</span> <span style="color: #009900;">&#123;</span>
                                        mylist<span style="color: #339933;">-&gt;</span>last<span style="color: #339933;">-&gt;</span>next <span style="color: #339933;">=</span> u<span style="color: #339933;">;</span>
                                        mylist<span style="color: #339933;">-&gt;</span>last <span style="color: #339933;">=</span> u<span style="color: #339933;">;</span>
                                <span style="color: #009900;">&#125;</span>
                                mylist<span style="color: #339933;">-&gt;</span>elements<span style="color: #339933;">++;</span>
                                cnt<span style="color: #339933;">++;</span>
                        <span style="color: #009900;">&#125;</span>
                        <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>dbf.<span style="color: #202020;">fetch_result</span><span style="color: #009900;">&#40;</span>db_handle<span style="color: #339933;">,</span> <span style="color: #339933;">&amp;</span>res<span style="color: #339933;">,</span> ci_preload_chunk<span style="color: #009900;">&#41;</span> <span style="color: #339933;">&lt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                LM_ERR<span style="color: #009900;">&#40;</span><span style="color: #ff0000;">&quot;Error while fetching result<span style="color: #000099; font-weight: bold;">\n</span>&quot;</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                <span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
                                        dbf.<span style="color: #202020;">free_result</span><span style="color: #009900;">&#40;</span>db_handle<span style="color: #339933;">,</span> res<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                                <span style="color: #009900;">&#125;</span>
                                <span style="color: #b1b100;">return</span> <span style="color: #0000dd;">0</span><span style="color: #339933;">;</span>
                        <span style="color: #009900;">&#125;</span>
                        total <span style="color: #339933;">=</span> RES_ROW_N<span style="color: #009900;">&#40;</span>res<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                <span style="color: #009900;">&#125;</span> <span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span>total <span style="color: #339933;">&gt;</span> <span style="color: #0000dd;">0</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
                dbf.<span style="color: #202020;">free_result</span><span style="color: #009900;">&#40;</span>db_handle<span style="color: #339933;">,</span> res<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
        <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/10/kamailio-how-to-load-big-table-with-db_mysql/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Антенны для Yota</title>
		<link>http://tamkovich.com/2010/10/anthenna-for-yota/</link>
		<comments>http://tamkovich.com/2010/10/anthenna-for-yota/#comments</comments>
		<pubDate>Mon, 11 Oct 2010 07:36:15 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Сделай сам]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=1552</guid>
		<description><![CDATA[Несколько идей по созданию антенн для йоты (yota). Внешние антенны для сети wi-max (4G), различных форм и размеров. Эксклюзивно от yaplakal.com :)]]></description>
			<content:encoded><![CDATA[<p align=justify >
Несколько идей по созданию антенн для йоты (yota). Внешние антенны для сети wi-max (4G), различных форм и размеров. Эксклюзивно от <a href=http://www.yaplakal.com/forum2/topic283978.html>yaplakal.com</a> :)
</p>
<p><center><br />
<img src=/wp-content/uploads/2010/10/yota.jpg ><br />
</center></p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2010/10/anthenna-for-yota/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Спутниковая сигнализация своими руками</title>
		<link>http://tamkovich.com/2009/11/satellite-alarm-gps-gsm/</link>
		<comments>http://tamkovich.com/2009/11/satellite-alarm-gps-gsm/#comments</comments>
		<pubDate>Mon, 30 Nov 2009 11:04:32 +0000</pubDate>
		<dc:creator>Сергей Тамкович</dc:creator>
				<category><![CDATA[Сделай сам]]></category>
		<category><![CDATA[GPS]]></category>
		<category><![CDATA[GSM]]></category>

		<guid isPermaLink="false">http://tamkovich.com/?p=625</guid>
		<description><![CDATA[<p align=justify>
Установка спутниковой (GPS/GSM) сигнализации в Москве обойдётся от 20 до 100 тысяч рублей, без учета ежегодной абонентской платы. Столь высокая "входная" цена делает бессмысленым установку подобной сигнализации на машины дешевле 2 миллионов рублей - скидки по КАСКО не покроют и половину стоимости сигнализации. Выход, как всегда, предлагает eBay. Покупка спутниковой сигнализации в Китае с доставко по России обойдётся чуть меньше 5000 рублей.
</p>
<img src=/wp-content/uploads/2009/11/gps1.jpg >
<p align=justify>
Пара слов об устройстве: устройство умеет передавать свои координаты с помощью SMS и GPRS. Передача происходит циклически, каждые N секунд (настраивается) или по запросу. Сигнализация поддерживает тревожную (потайную) кнопку, при нажатии на которую, устройство отсылает текущие координаты и специальное тревожное сообщение. Кроме того, сигнализация понимает коневики дверей, и может информировать об открытии дверей. Так же данное устроство позволяет отключать бортовую электросеть автомобиля (разрывать ноль) и отключать бензонасос с помощью реле. Сигнализация оснащена собственным, литиево-ионным аккумулятором, который позволяет ей работать 2 суток даже при проподании питания в бортовой сети. Качество упаковки, изготовления и комплектация - приятно удивили меня, но обо всём по порядку.
</p>]]></description>
			<content:encoded><![CDATA[<table border=0 width=100%>
<tr>
<td align=right><i><br />
- У вас есть ксенон для Great Wall?<br />
- Да есть, 3000 рублей.<br />
- Наверно какое-нибудь китайское говно?<br />
</i></td>
</tr>
</table>
<p align=justify>
Установка спутниковой (GPS/GSM) сигнализации в Москве обойдётся от 20 до 100 тысяч рублей, без учета ежегодной абонентской платы. Столь высокая &laquo;входная&raquo; цена делает бессмысленным установку подобной сигнализации на машины дешевле 2 миллионов рублей &#8211; скидки по КАСКО не покроют и половину стоимости сигнализации. Выход, как всегда, предлагает eBay. Покупка спутниковой сигнализации в Китае с доставкой по России обойдётся чуть меньше 5000 рублей.
</p>
<p><img src=/wp-content/uploads/2009/11/gps1.jpg ></p>
<p align=justify>
Пара слов об устройстве: устройство умеет передавать свои координаты с помощью SMS и GPRS. Передача происходит циклически, каждые N секунд (настраивается) или по запросу. Сигнализация поддерживает тревожную (потайную) кнопку, при нажатии на которую, устройство отсылает текущие координаты и специальное тревожное сообщение. Кроме того, сигнализация понимает дверные концевики, и может информировать об открытии дверей. Так же данное устройство позволяет отключать бортовую электросеть автомобиля (разрывать ноль) и отключать бензонасос с помощью реле. Сигнализация оснащена собственным, литиево-ионным аккумулятором, который позволяет ей работать 2 суток даже при пропадании питания в бортовой сети. Качество упаковки, изготовления и комплектация &#8211; приятно удивили меня, но обо всём по порядку.
</p>
<p><span id="more-625"></span></p>
<p align=justify>
На упаковку посылки китайцы, как всегда, не пожалели скотча и ударопрочной плёнки (с пупырышками :) ). Умиляют надписи на этикетках, китайцы, видимо, имеют большой опыт общения с различными таможнями. На всех китайских посылках, которые мне приходили, красовались надписи &laquo;Gift&raquo; и &laquo;value: $10&#8243;.
</p>
<p><img src=/wp-content/uploads/2009/11/gps2.jpg ></p>
<p align=justify>
Не все &laquo;брендовые&raquo; товары могут похвастать качественной упаковки. Тем более не ожидал я её от китайского устройства. Качественный картон, грамотно разложенные аксессуары и даже крышка на магните. Мелочь, а приятно.
</p>
<p><img src=/wp-content/uploads/2009/11/gps3.jpg ></p>
<p align=justify>
Комплектация &#8211; отменная. Внутри набора есть всё, что можно придумать. Помимо основного блока (GPS, GSM и аккумулятор) в наличие имеется: реле для управления бензонасосом, моток проводов для подключения реле, концевиков двери, питания и т.п.; GSM антенна (качество изготовления оставляет желать лучшего); GPS антенна &#8211; отличного качества; Микрофон со стандартным разъёмом minijack (3.5 mm) &#8211; позволяет послушать, что происходит в салоне вашего авто; две инструкции на английском языке и диск с программным обеспечением (модифицированный Google Earth).
</p>
<p><img src=/wp-content/uploads/2009/11/gps4.jpg ></p>
<p align=justify>
Про недостатки. Недостатков у данного продукта два. GSM антенна, по качеству изготовления, сильно проигрывает остальным компонентам, с другой стороны, антенна подключается с помощью стандартного разъёма SMA-F. Заменить антенну совсем несложно. Второй недостаток данной сигнализации &#8211; это реализация управляющего интерфейса. Единственный способ настроить систему это .. SMS. Работать с последовательным портом (RS232) привычней и удобней! К сожалению, никакого намёка, на последовательный порт &#8211; нет. Что ж, придётся терпеть это неудобство, благо цена позволяет.
</p>
<p align=justify>
Пару слов об использовании. GPRS покрытие в Московской и Калужской областях оставляет желать лучшего. По этому, на мой взгляд, более надёжным методом для передачи координат является SMS (хотя, вероятно, и более дорогим). Организовать автоматический приём и обработку координат поступающих по SMS несложно. Для этого достаточно взять компьютер с linux и GSM модем (в качестве модема подойдёт старый GSM телефон Siemens или Nokia). Подробнее об автоматической <a href= >отправке и приёме SMS</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://tamkovich.com/2009/11/satellite-alarm-gps-gsm/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
	</channel>
</rss>

