<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Электроника для всех</title>
	
	<link>http://easyelectronics.ru</link>
	<description>Блог о электронике</description>
	<pubDate>Fri, 26 Feb 2010 17:41:06 +0000</pubDate>
	
	<language>en</language>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/easyelectronics" /><feedburner:info uri="easyelectronics" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>easyelectronics</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>Виртуальная машина и байт код</title>
		<link>http://feedproxy.google.com/~r/easyelectronics/~3/y7IC1tHfV-Q/virtualnaya-mashina-i-bajt-kod.html</link>
		<comments>http://easyelectronics.ru/virtualnaya-mashina-i-bajt-kod.html#comments</comments>
		<pubDate>Fri, 19 Feb 2010 04:38:00 +0000</pubDate>
		<dc:creator>DI HALT</dc:creator>
		
		<category><![CDATA[Робототехника]]></category>

		<category><![CDATA[Алгоритм]]></category>

		<category><![CDATA[Программирование]]></category>

		<category><![CDATA[Робот]]></category>

		<guid isPermaLink="false">http://easyelectronics.ru/?p=297</guid>
		<description><![CDATA[Часто требуется делать большие последовательности сложных операций &#8212; например полетное задание для робота. Да, можно запихать все это дело в основную программу, но вдруг что то пойдет не так как надо и алгоритм надо будет переделать &#8212; придется переделывать всю программу. 
Тут на помощь придет виртуальная машина. Суть в чем &#8212; в памяти контроллера, в [...]]]></description>
			<content:encoded><![CDATA[<p>Часто требуется делать большие последовательности сложных операций &#8212; например полетное задание для робота. Да, можно запихать все это дело в основную программу, но вдруг что то пойдет не так как надо и алгоритм надо будет переделать &#8212; придется переделывать всю программу. </p>
<p>Тут на помощь придет виртуальная машина. Суть в чем &#8212; в памяти контроллера, в основную программу, занесены основные процедуры управления устройством.  Если это робот, то это могут быть такие простые команды как &#8220;вперед&#8221;, &#8220;назад&#8221;, &#8220;повернуть&#8221; и так далее. </p>
<p> Дальше мы увязываем это все в таблицу переходов, где у каждой команды будет номер-смещение. </p>
<p>Потом нам нужен обработчик скриптов, который бы брал откуда нибудь, нашу последовательность действий &#8212; скрипт и преобразовывал это в вызовы реальных кусков кода -микрооперации.<br />
 Обработчик скриптов может быть той же самой задачей диспетчера, запущенной фоном.  А откуда он будет брать данные неважно. Их вполне можно засасывать по usart или тащить из EEPROM памяти. А можно загнать на IIC память и получится сменный картридж :)<br />
<span id="more-297"></span><br />
   В простейшем случае, обработчик  скрипта хватает байт-код из источника и сразу же заправляет его на конвейер, где микрооперация выполняется также как и обычная задача.  А чтобы очередь диспетчера не переполнялась можно сделать так, чтобы новая партия байт-кода бралась только тогда, когда прожуется первая.  Для этого достаточно, чтобы обработчик скрипта запускался по завершении каждой микрооперации.  </p>
<p> В более продвинутой системе в байткоде могут быть и переменные. Тогда обработчик скрипта должен анализировать код, хотя бы по свитчу. </p>
<p> Например, есть у нас такая система команд:</p>
<ul>
<li> 0х00 выключить периферию </li>
<li> 0х01 включить периферию </li>
<li> 0х02,0хZZ поднять манипулятор на ZZ попугаев.  </li>
<li> 0&#215;03,0xYY повернуть манипулятор на YY слонят.  </li>
<li> 0&#215;04 открыть зажим </li>
<li> 0х05 закрыть зажим </li>
</ul>
<p>Тогда алгоритм хватания и переноса в нулевую позицию ящика стоящего на высоте в 10, под углом 15.  Будет в источнике кода (ЕЕПРОМ или вообще что угодно) будет выглядеть примерно таким образом:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #208080;">01</span><span style="color: #339933;">,</span> <span style="color: #208080;">02</span><span style="color: #339933;">,</span><span style="color: #0000dd;">10</span><span style="color: #339933;">,</span> <span style="color: #208080;">03</span><span style="color: #339933;">,</span><span style="color: #0000dd;">15</span><span style="color: #339933;">,</span> <span style="color: #208080;">04</span><span style="color: #339933;">,</span> <span style="color: #208080;">02</span><span style="color: #339933;">,-</span><span style="color: #0000dd;">10</span><span style="color: #339933;">,</span> <span style="color: #208080;">05</span><span style="color: #339933;">,</span> <span style="color: #208080;">02</span><span style="color: #339933;">,</span><span style="color: #0000dd;">10</span><span style="color: #339933;">,</span> <span style="color: #208080;">03</span><span style="color: #339933;">,-</span><span style="color: #0000dd;">15</span><span style="color: #339933;">,</span> <span style="color: #208080;">02</span><span style="color: #339933;">,-</span><span style="color: #0000dd;">10</span><span style="color: #339933;">,</span> <span style="color: #208080;">04</span><span style="color: #339933;">,</span> <span style="color: #208080;">00</span></pre></td></tr></table></div>

<p>Всего 17 байт на довольно сложное действие.  Обрабатывать его можно будет примерно таким способом.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">script_loader<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
Byte_op<span style="color: #339933;">=</span>current_chain<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>	<span style="color: #666666; font-style: italic;">// Берем код команды</span>
&nbsp;
<span style="color: #b1b100;">switch</span><span style="color: #009900;">&#40;</span>Byte_op<span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	<span style="color: #b1b100;">case</span> <span style="color: #208080;">0x02</span><span style="color: #339933;">:</span>	<span style="color: #666666; font-style: italic;">// Если у ней есть аргументы</span>
	<span style="color: #b1b100;">case</span> <span style="color: #208080;">0x03</span><span style="color: #339933;">:</span>	<span style="color: #666666; font-style: italic;">// То в зависимости от типа команды делаем переход</span>
		<span style="color: #009900;">&#123;</span>
		SetTask<span style="color: #009900;">&#40;</span>Byte_op<span style="color: #009900;">&#41;</span>;		<span style="color: #666666; font-style: italic;">// Сразу грузим команду на конвейер</span>
		i++;				<span style="color: #666666; font-style: italic;">// Берем аргумент</span>
		Param_REG <span style="color: #339933;">=</span> current_chain<span style="color: #009900;">&#91;</span>i<span style="color: #009900;">&#93;</span>;	<span style="color: #666666; font-style: italic;">// Грузим его в регистр аргументов</span>
		<span style="color: #009900;">&#125;</span>				<span style="color: #666666; font-style: italic;">// Откуда задаче будет его удобно взять</span>
		<span style="color: #000000; font-weight: bold;">break</span>;
	<span style="color: #b1b100;">default</span><span style="color: #339933;">:</span>				<span style="color: #666666; font-style: italic;">// Если команда не имеет аргументов</span>
		<span style="color: #009900;">&#123;</span>
		SetTask<span style="color: #009900;">&#40;</span>Byte_op<span style="color: #009900;">&#41;</span>		<span style="color: #666666; font-style: italic;">// Просто бросаем ее на конвейер. </span>
		Param_REG <span style="color: #339933;">=</span> <span style="color:#800080;">0</span>;			<span style="color: #666666; font-style: italic;">// А регистровый параметр зануляем</span>
		<span style="color: #009900;">&#125;</span>				<span style="color: #666666; font-style: italic;">// Хотя это и не обязательно</span>
	<span style="color: #009900;">&#125;</span>
i++;		<span style="color: #666666; font-style: italic;">// Переводим указатель на следующую команду</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Сейчас операнды байт-кода выполняются последовательно. НО! Никто не мешает сделать доп аргумент разрешающий выполнять их и одновременно (кооперативно, разумеется, но никто не мешает побить ту же микрооперацию на подзадачи которые можно перемешать в конвейере).<br />
 И тогда, например, команды подъема и поворота могут быть указаны следующим образом:</p>
<ul>
<li> 0х00 выключить периферию </li>
<li> 0х01 включить периферию </li>
<li> 0х02,0хZZ,0хMM поднять манипулятор на ZZ попугаев. Поставить MM код многозадачности</li>
<li> 0&#215;03,0xYY,0хMM повернуть манипулятор на YY слонят.  Поставить MM код многозадачности</li>
<li> 0&#215;04 открыть зажим </li>
<li> 0х05 закрыть зажим </li>
</ul>
<p>Что такое код многозадачности? Ну это я только что, экспромтом, придумал :) Некий флаговый байт в памяти содержащий код, который показывает, что текущая задача может допускать параллельное выполнение других задач, а также свой собственный код.<br />
При этом, управление обработчику скриптов отдается сразу же (если MM не нулевой) и следующая задача, забрасываемая в конвейер, проверит код многозадачности и если он не конфликтует с ней (понятно, что повернуть одновременно на разные углы нельзя или есть ограничения механического плана) &#8212; пихается на конвейер в нагрузку к первой.</p>
<p> Конечно, тут еще надо проверять кучу разных условий, думать как хранить коды многозадачности операций и вообще все несколько сложней, чем кажется на первый взгляд. Но общая концепция, думаю, ясна. А детали уже вылезут по ходу реализации. </p>
<p>Вот таким нехитрым образом, увязав диспетчер* с обработчиком скриптов мы получаем действующую виртуальную машину, со своим языком, своим байт кодом.  Получаем полностью отвязанные от железа алгоритмы устройств.<br />
  А поскольку байт код может быть где угодно, хоть в ОЗУ, то это открывает нам широчайший простор для создания полиморфических и самообучающихся алгоритмов =).  </p>
<p> Предлагаю коллективным разумом на <a href="http://forum.easyelectronics.ru/viewtopic.php?f=11&#038;t=347" >форуме</a> сгенерировать ROBO-API на подобном байткоде. По крайней мере сформулировать список команд, синтаксис инструкций.  А тут, в комментах, обсуждения самого подхода. </p>
<p><font size="-2">*) Диспетчер рассмотренный в прошлых статьях  Архитектуры Программ  курса AVR для этих целей не очень годится, т.к. конвейер там основан на указателях, а не на таблице переходов (хотя никто не мешате сварганить там и таблицу переходов, прям в задаче скрипт лоадера). А вот диспетчер из цикла статей по ассемблерной RTOS вполне на эту роль пойдет. Ну и кто то его на Си портировал уже.</font> </p>
<img src="http://feeds.feedburner.com/~r/easyelectronics/~4/y7IC1tHfV-Q" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://easyelectronics.ru/virtualnaya-mashina-i-bajt-kod.html/feed</wfw:commentRss>
		<feedburner:origLink>http://easyelectronics.ru/virtualnaya-mashina-i-bajt-kod.html</feedburner:origLink></item>
		<item>
		<title>AVR. Учебный Курс. Работа на прерываниях</title>
		<link>http://feedproxy.google.com/~r/easyelectronics/~3/0WYcuRY88r4/avr-uchebnyj-kurs-rabota-na-preryvaniyax.html</link>
		<comments>http://easyelectronics.ru/avr-uchebnyj-kurs-rabota-na-preryvaniyax.html#comments</comments>
		<pubDate>Fri, 19 Feb 2010 01:26:38 +0000</pubDate>
		<dc:creator>DI HALT</dc:creator>
		
		<category><![CDATA[AVR. Учебный курс]]></category>

		<category><![CDATA[UART]]></category>

		<category><![CDATA[USART]]></category>

		<category><![CDATA[Прерывания]]></category>

		<category><![CDATA[Язык Си]]></category>

		<guid isPermaLink="false">http://easyelectronics.ru/?p=296</guid>
		<description><![CDATA[Одним из серьезных достоинств контроллеров AVR является дикое количество прерываний. Фактически, каждое периферийное устройство имеет по вектору, а то и не по одному. Так что на прерываних можно замутить кучу параллельных процессов. Работа на прерываниях является одним из способов сделать псевдо многозадачную среду.
 Идеально для передачи данных и обработки длительных процессов. 
Для примера покажу буфферизированный [...]]]></description>
			<content:encoded><![CDATA[<p>Одним из серьезных достоинств контроллеров AVR является дикое количество прерываний. Фактически, каждое периферийное устройство имеет по вектору, а то и не по одному. Так что на прерываних можно замутить кучу параллельных процессов. Работа на прерываниях является одним из способов сделать псевдо многозадачную среду.</p>
<p> Идеально для передачи данных и обработки длительных процессов. </p>
<p>Для примера покажу буфферизированный вывод данных по USART на прерываниях. </p>
<p>В прошлых примерах был такой код:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Отправка строки</span>
<span style="color: #993333;">void</span> SendStr<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> <span style="color: #339933;">*</span><span style="color: #993333;">string</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">while</span> <span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span><span style="color: #993333;">string</span><span style="color: #339933;">!=</span><span style="color: #ff0000;">'<span style="color: #000099; font-weight: bold;">\0</span>'</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	SendByte<span style="color: #009900;">&#40;</span><span style="color: #339933;">*</span><span style="color: #993333;">string</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #993333;">string</span>++;
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #666666; font-style: italic;">// Отправка одного символа</span>
<span style="color: #993333;">void</span> SendByte<span style="color: #009900;">&#40;</span><span style="color: #993333;">char</span> byte<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #339933;">!</span><span style="color: #009900;">&#40;</span>UCSRA <span style="color: #339933;">&amp;</span> <span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UDRE<span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span><span style="color: #009900;">&#41;</span>;
UDR<span style="color: #339933;">=</span>byte;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Данный метод, очевидно, совершенно неэффективен. Дело в том, что у нас тут есть тупейшее ожидание события &#8212; поднятие флага готовности USART. А это зависит, в первую очередь, от скорости передачи данных. Например, на скорости 600 бод передача каких то 600 знаков будет длиться 9 секунд, блокируя работу всей программы, что ни в какие ворота не лезет. </p>
<p>Как быть?<br />
<span id="more-296"></span><br />
Ну раз у нас отправка идет по аппаратному устройству, то большую часть времени мы впустую крутим цикл ожидания флага, хотя от процессора, собственно, тут ничего и не требуется и можно было бы заняться другими делами.  Напрашивается мысль выбросить весь цикл ожидания в тело ядра/автомата/суперцикла и обрабатывать флаг на каждой итерации главного цикла/диспетчера. Но при этом у нас будет плавать время между байтами &#8212; ацтой! </p>
<p>Поэтому прерывания, пожалуй, будет единственным адекватным вариантов. </p>
<p>Итак, если брать в пример <b>USART</b> то у него есть три прерывания:</p>
<ul>
<li> RXT - прием байта. С этим понятно, мы его уже использовали </li>
<li> TXC - завершение отправки </li>
<li> UDRE - опустошение приемного буфера </li>
</ul>
<p>Байты TXC и UDRE обычно вызывают путаницу. Поясню разницу. </p>
<p>Дело в том, что регистр передачи данных UDR в AVR на самом деле куда хитрей чем кажется, он двухэтажный.  На первом ярусе, собственно UDR, а ниже находится конвейер сдвигового регистра. Первый байт, попавший в пустой регистр UDR тут же проваливается на конвейер, а UDR снова опустошается. После чего конвейер неторопливо, в соответствии с битрейтом, выплевывает данные в линию, а потом снова зажевывает байт из UDR.  Поэтому, фактически, в UDR за короткое время влезает сразу два байта - первый тут же проваливается, а второй ждет. </p>
<p> Так вот, </p>
<ul>
<li> Флаг пустого регистра UDRE выставляется тогда, когда мы можем загнать байт в UDR, </li>
<li> Флаг окончания передачи TXC появляется только тогда, когда у нас конвейер опустел, а новых данных в UDR нет. </li>
</ul>
<p>Да, можно слать данные и по флагу TXC, но тогда у нас будет лишняя пауза между двумя разными байтами &#8212; время на опустошение буфера. Некошерно. </p>
<p>Вот как это можно сделать корректней. </p>
<p>Вначале выводим данные в массив, либо берем его из флеша &#8212; не важно. Для простоты запихну массив в ОЗУ. Код возьму из прошлой статьи:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #339933;">#define buffer_MAX 16	// Длина текстового буффера</span>
<span style="color: #993333;">char</span> buffer<span style="color: #009900;">&#91;</span>buffer_MAX<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;0123456789ABCDEF&quot;</span>; 	<span style="color: #666666; font-style: italic;">// А вот и он сам</span>
u08 buffer_index<span style="color: #339933;">=</span><span style="color:#800080;">0</span>;				<span style="color: #666666; font-style: italic;">// Текущий элемент буффера</span></pre></td></tr></table></div>

<p>Инициализация интерфейса выглядит стандартно:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">//InitUSART</span>
UBRRL <span style="color: #339933;">=</span> LO<span style="color: #009900;">&#40;</span>bauddivider<span style="color: #009900;">&#41;</span>;
UBRRH <span style="color: #339933;">=</span> HI<span style="color: #009900;">&#40;</span>bauddivider<span style="color: #009900;">&#41;</span>;
UCSRA <span style="color: #339933;">=</span> <span style="color:#800080;">0</span>;
UCSRB <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>RXEN|<span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>TXEN|<span style="color:#800080;">0</span><span style="color: #339933;">&lt;&lt;</span>RXCIE|<span style="color:#800080;">0</span><span style="color: #339933;">&lt;&lt;</span>TXCIE;
UCSRC <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>URSEL|<span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UCSZ0|<span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UCSZ1;
&nbsp;
sei<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>; 		<span style="color: #666666; font-style: italic;">// Разрешаем прерывания.</span></pre></td></tr></table></div>

<p>Обратите внимание, что прерывания UDRE мы не разрешаем. Это делается потом. Иначе сразу же, на старте, контроллер <b>у</b>скачет на это прерывание, т.к. при пуске UDR пуст и мы получим черти что.</p>
<p>Отправка выглядит элементарно. Вначале пихаем первый байт нашего сообщения, не забыв выставить правильно индекс. А дальше разрешаем прерывание по UDRE оно само улетит куда надо, по прерываниям:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">buffer_index<span style="color: #339933;">=</span><span style="color:#800080;">0</span>;		<span style="color: #666666; font-style: italic;">// Сбрасываем индекс</span>
UDR <span style="color: #339933;">=</span> buffer<span style="color: #009900;">&#91;</span><span style="color:#800080;">0</span><span style="color: #009900;">&#93;</span>;		<span style="color: #666666; font-style: italic;">// Отправляем первый байт</span>
UCSRB|=<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UDRIE<span style="color: #009900;">&#41;</span>;	<span style="color: #666666; font-style: italic;">// Разрешаем прерывание UDRE</span></pre></td></tr></table></div>

<p>Дальше можно затупить или делать вообще что угодно:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> 
<span style="color: #009900;">&#123;</span>
NOP<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>В течении нескольких тактов выскочит прерывание UDRE</p>
<blockquote><p>
Да, кстати, я один раз словил гадский баг который отловил только трассировкой ассемблерного листнига. У меня была такая последовательность:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">UDR <span style="color: #339933;">=</span> X; 
UCSRB|=<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UDRIE<span style="color: #009900;">&#41;</span>;
buffer_index <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span>;</pre></td></tr></table></div>

<p>И вот тут почему то первым байтом шел мусор. А дальше все нормально. Причем если менять уровень оптимизации, то баг то вылезал то нет. Причиной такого поведения являлось то, что я то надеялся на то, что прерывание UDRE выскочит гораздо поздней чем я присвою индексу буфера нужное значение (buffer_index = 1;)  Но индюк тоже думал, а по факту я<br />
пихаю байт в UDR, он в тот момент естественно пуст и уже следующим тактом, на выполнении команды UCSRB|=(1&lt;&lt;UDRIE) данные проваливались в сдвиговый регистр, а UDR тотчас пустел и выставлял бит прерывания.<br />
  А дальше, в зависимости от оптимизации, этот бит успевал выставиться к моменту когда я выставлял верный номер индекса либо не успевал.<br />
 Проблема решилась перестановкой строк:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">UDR <span style="color: #339933;">=</span> X;
buffer_index <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span>; 
UCSRB|=<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UDRIE<span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p><b>Отсюда правило:</b><br />
Готовь все необходимые данные ПЕРЕД разрешением прерываний.</p></blockquote>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #666666; font-style: italic;">// Прерывание по опустошению буффера УАПП</span>
ISR <span style="color: #009900;">&#40;</span>USART_UDRE_vect<span style="color: #009900;">&#41;</span>		
<span style="color: #009900;">&#123;</span>
buffer_index ++;			<span style="color: #666666; font-style: italic;">// Увеличиваем индекс</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>buffer_index <span style="color: #339933;">==</span> buffer_MAX<span style="color: #009900;">&#41;</span>  	<span style="color: #666666; font-style: italic;">// Вывели весь буффер? </span>
	<span style="color: #009900;">&#123;</span>
	UCSRB <span style="color: #339933;">&amp;=</span>~<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UDRIE<span style="color: #009900;">&#41;</span>;	<span style="color: #666666; font-style: italic;">// Запрещаем прерывание по опустошению - передача закончена</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> 
	<span style="color: #009900;">&#123;</span>
	UDR <span style="color: #339933;">=</span> buffer<span style="color: #009900;">&#91;</span>buffer_index<span style="color: #009900;">&#93;</span>;	<span style="color: #666666; font-style: italic;">// Берем данные из буффера. </span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Все, автоматика!  Каждый раз когда UDRE пустеет прерывание срабатывает и бросает туда новых дров. Когда же буфер пустеет и индекс достигает максимума, то мы просто запрещаем прерывание UDRE и успокаиваемся</b>. </p>
<p>Осталось только дать понять головной программе, что мы отработали. Для этого и есть флаг TXC  можно разрешить его прерывание и тогда он сбросится при обработке прерывания USART_TXC_vect, а в самом обработчике сделать заброс задачи на <b>д</b>испетчер или еще что нибудь умное. Либо периодически проверять главным циклом наличие флага TXC и вручную его стереть (записью единицы). </p>
<p>Вот полный код:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #339933;">#define F_CPU 8000000L</span>
<span style="color: #339933;">#include &lt;avr/io.h&gt;</span>
<span style="color: #339933;">#include &lt;util/delay.h&gt;</span>
<span style="color: #339933;">#include &lt;avr/interrupt.h&gt;</span>
<span style="color: #339933;">#include &lt;avrlibdefs.h&gt;</span>
<span style="color: #339933;">#include &lt;avrlibtypes.h&gt;</span>
&nbsp;
<span style="color: #339933;">#define buffer_MAX 16				// Длина текстового буффера</span>
<span style="color: #993333;">char</span> buffer<span style="color: #009900;">&#91;</span>buffer_MAX<span style="color: #009900;">&#93;</span> <span style="color: #339933;">=</span> <span style="color: #ff0000;">&quot;0123456789ABCDEF&quot;</span>; 	<span style="color: #666666; font-style: italic;">// А вот и он сам</span>
u08 buffer_index<span style="color: #339933;">=</span><span style="color:#800080;">0</span>;
&nbsp;
<span style="color: #666666; font-style: italic;">//Прерывание по опустошению буффера УАПП</span>
ISR <span style="color: #009900;">&#40;</span>USART_UDRE_vect<span style="color: #009900;">&#41;</span>		
<span style="color: #009900;">&#123;</span>
buffer_index++;			<span style="color: #666666; font-style: italic;">// Увеличиваем индекс</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>buffer_index <span style="color: #339933;">==</span> buffer_MAX<span style="color: #009900;">&#41;</span>  	<span style="color: #666666; font-style: italic;">// Вывели весь буффер? </span>
	<span style="color: #009900;">&#123;</span>
	UCSRB <span style="color: #339933;">&amp;=</span>~<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UDRIE<span style="color: #009900;">&#41;</span>;	<span style="color: #666666; font-style: italic;">// Запрещаем прерывание по опустошению - передача закончена</span>
	<span style="color: #009900;">&#125;</span>
	<span style="color: #b1b100;">else</span> 
	<span style="color: #009900;">&#123;</span>
	UDR <span style="color: #339933;">=</span> buffer<span style="color: #009900;">&#91;</span>buffer_index<span style="color: #009900;">&#93;</span>;	<span style="color: #666666; font-style: italic;">// Берем данные из буффера. </span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
<span style="color: #993333;">int</span> main<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
&nbsp;
<span style="color: #339933;">#define baudrate 9600L</span>
<span style="color: #339933;">#define bauddivider (F_CPU/(16*baudrate)-1)</span>
<span style="color: #339933;">#define HI(x) ((x)&gt;&gt;8)</span>
<span style="color: #339933;">#define LO(x) ((x)&amp; 0xFF)</span>
&nbsp;
<span style="color: #666666; font-style: italic;">//Init UART</span>
UBRRL <span style="color: #339933;">=</span> LO<span style="color: #009900;">&#40;</span>bauddivider<span style="color: #009900;">&#41;</span>;
UBRRH <span style="color: #339933;">=</span> HI<span style="color: #009900;">&#40;</span>bauddivider<span style="color: #009900;">&#41;</span>;
UCSRA <span style="color: #339933;">=</span> <span style="color:#800080;">0</span>;
UCSRB <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>RXEN|<span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>TXEN|<span style="color:#800080;">0</span><span style="color: #339933;">&lt;&lt;</span>RXCIE|<span style="color:#800080;">0</span><span style="color: #339933;">&lt;&lt;</span>TXCIE;
UCSRC <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>URSEL|<span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UCSZ0|<span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UCSZ1;
&nbsp;
<span style="color: #666666; font-style: italic;">//Это так, просто помигать. </span>
<span style="color: #339933;">#define LED1 4</span>
<span style="color: #339933;">#define LED_PORT PORTD</span>
<span style="color: #339933;">#define LED_DDR DDRD</span>
&nbsp;
LED_DDR <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>LED1;
&nbsp;
sei<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
&nbsp;
buffer_index<span style="color: #339933;">=</span><span style="color:#800080;">0</span>;		<span style="color: #666666; font-style: italic;">// Сбрасываем индекс</span>
UDR <span style="color: #339933;">=</span> buffer<span style="color: #009900;">&#91;</span><span style="color:#800080;">0</span><span style="color: #009900;">&#93;</span>;		<span style="color: #666666; font-style: italic;">// Отправляем первый байт</span>
UCSRB|=<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UDRIE<span style="color: #009900;">&#41;</span>;	<span style="color: #666666; font-style: italic;">// Разрешаем прерывание UDRE</span>
&nbsp;
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span> 
	<span style="color: #009900;">&#123;</span>
	LED_PORT<span style="color: #339933;">=</span><span style="color:#800080;">0</span><span style="color: #339933;">&lt;&lt;</span>LED1;
 	_delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
	LED_PORT<span style="color: #339933;">=</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>LED1;
 	_delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Если грузануть его в <a href="http://shop.easyelectronics.ru/index.php?productID=147" ><b>Pinboard</b></a>, предварительно подключив USART к FT232 и законнектиться терминалкой, то будет мигать наш LED4, а в терминалку от стрелятся байты	ASCII кодов нашей строки. В это же время будет неторопливо тикать наш цикл с мигалкой. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/AVR_kurs/C/5/usartabcd.gif" alt=""></td>
</tr>
</table>
<p><a href="http://easyelectronics.ru/img/AVR_kurs/C/5/Pinboard_5.zip" onclick="javascript:pageTracker._trackPageview('/downloads/img/AVR_kurs/C/5/Pinboard_5.zip');">Ну и, как всегда, пример кода в архиве.</a> </p>
<img src="http://feeds.feedburner.com/~r/easyelectronics/~4/0WYcuRY88r4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://easyelectronics.ru/avr-uchebnyj-kurs-rabota-na-preryvaniyax.html/feed</wfw:commentRss>
		<feedburner:origLink>http://easyelectronics.ru/avr-uchebnyj-kurs-rabota-na-preryvaniyax.html</feedburner:origLink></item>
		<item>
		<title>SinaProg — графическая оболочка для AVRDude</title>
		<link>http://feedproxy.google.com/~r/easyelectronics/~3/JZDBA54pNNQ/sinaprog-graficheskaya-obolochka-dlya-avrdude.html</link>
		<comments>http://easyelectronics.ru/sinaprog-graficheskaya-obolochka-dlya-avrdude.html#comments</comments>
		<pubDate>Mon, 15 Feb 2010 23:25:59 +0000</pubDate>
		<dc:creator>DI HALT</dc:creator>
		
		<category><![CDATA[AVR. Учебный курс]]></category>

		<category><![CDATA[Софт]]></category>

		<category><![CDATA[avrdude]]></category>

		<category><![CDATA[GUI]]></category>

		<category><![CDATA[Программатор]]></category>

		<guid isPermaLink="false">http://easyelectronics.ru/?p=295</guid>
		<description><![CDATA[ Вот уже много лет я пользуюсь мощнейшей программой для прошивки &#8212; avrdude.  Программа эта поддерживает почти все виды программаторов, а те что не поддерживает изначально легко в нее добавляются.
 Но есть у ней особенность которая сильно отпугивает многих &#8212; она консольная. И все шаманства с ней заключаются в формировании командной строки. 
С одной [...]]]></description>
			<content:encoded><![CDATA[<p> Вот уже много лет я пользуюсь мощнейшей программой для прошивки &#8212; <strong>avrdude</strong>.  Программа эта поддерживает почти все виды программаторов, а те что не поддерживает изначально легко в нее добавляются.<br />
 Но есть у ней особенность которая сильно отпугивает многих &#8212; она консольная. И все шаманства с ней заключаются в формировании командной строки. </p>
<p>С одной стороны это хорошо &#8212; консольная утилита позволяет очень сильно ускорить и автоматизировать процесс прошивки.  Один раз написал батничек и для перешивки только вызывать его и все. </p>
<p> Остается проблема прошивки разных устройств, ведь под каждую придется делать свой батник. И ладно бы ключи прописать, да файл с прошивкой указать. Самая засада начинается с fuse битами (впрочем, как и везде в мире AVR ;) ) Тут их надо вначале внимательно проштудировать в даташите, выписать в виде байтов, вписать правильно в командную строку и молиться на то, чтобы нигде не ошибиться.<br />
 Да, для avrdude написано много оболочек, но все что мне встречались раньше решали лишь малозначительную проблему выбора нужного ключа файла и/или программатора, а фузы также было надо указывать числом. </p>
<p> Проблема решилась с появлением новой версии оболочки SinaProg от команды <strike>программистов-террористов из Аль-каиды</strike> иранских AVR программеров. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SinaProg/sina1.gif" alt=""></td>
</tr>
</table>
<p><span id="more-295"></span><br />
Морда выглядит простенько и со вкусом. Ничего лишнего. Выбираем в первой строке хекс файла и зашиваем его в нужную память &#8212; flash или eeprom. </p>
<p>Следом идет прогресс бар и кнопка открытия консольного лога &#8212; ошибки смотреть. </p>
<p>Ниже выбираем тип микроконтроллера, также есть кнопочка поиска &#8212; полезно для проверки работы программатора.</p>
<p>Отдельно стоит сказать про секцию Fuses.<br />
Осторожней с выпадающим списком. С виду там все просто, но это на самом деле предустановки, описываются они файле <b>Fuse.txt</b>  вот его дефолтное содержание:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #b1b100;">Default</span>.
<span style="color: #009900;">&#91;</span><span style="color: #009900;">&#93;</span>
&nbsp;
ATmega8.<span style="color: #202020;">ATmega16</span>.
<span style="color: #009900;">&#91;</span><span style="color: #993333;">Int</span>. <span style="color: #0000dd;">1</span> MHz	d9e1
<span style="color: #993333;">Int</span>. <span style="color: #0000dd;">2</span> MHz	d9e2
<span style="color: #993333;">Int</span>. <span style="color: #0000dd;">4</span> MHz	d9e3
<span style="color: #993333;">Int</span>. <span style="color: #0000dd;">8</span> MHz	d9e4
Ext. <span style="color: #202020;">Crys</span>.	<span style="color: #202020;">d9ff</span><span style="color: #009900;">&#93;</span>
&nbsp;
ATmega32.
<span style="color: #009900;">&#91;</span><span style="color: #993333;">Int</span>. <span style="color: #0000dd;">1</span> MHz	d9e1
<span style="color: #993333;">Int</span>. <span style="color: #0000dd;">2</span> MHz	d9e2
<span style="color: #993333;">Int</span>. <span style="color: #0000dd;">4</span> MHz	d9e3
<span style="color: #993333;">Int</span>. <span style="color: #0000dd;">8</span> MHz	d9e4
Ext. <span style="color: #202020;">Crys</span>.	<span style="color: #202020;">d9ff</span><span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>Видишь, формат очень прост.  Строка контроллера (обязательно с точкой!) и в квадратных скобаках возможные варианты (отделенные табуляцией) с байтами тех самых фузов. Обратите внимание, что тут меняется <b>СРАЗУ ОБА БАЙТА</b> Fuse битов. Т.е. касаются далеко не только тактовой частоты. А еще всего остального что конфигурируется в FUSE. Так что я бы сразу переназвал их иначе. Скажем как<br />
All Default,but 1MHZ<br />
All Default,but 2MHZ<br />
All Default,but 4MHZ</p>
<p>Чтобы было понятней. Но это как бы быстрые шаблоны и не претендуют на глобальность. </p>
<p>Лучше сразу нажать <b>Advanced</b> и узреть &#8230; тот самый цифровой ввод.  </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SinaProg/Sina2.gif" alt=""></td>
</tr>
</table>
<p>Но не стоит напрягаться, достаточно нажать кнопочку &#8220;С&#8221; (видимо авторы имели ввиду Calculator) и увидеть удобнейшие выпадающие списки с человеческим описанием. Прям как в STK500. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SinaProg/Sina3.gif" alt=""></td>
</tr>
</table>
<p><b><font color="#ff0000">Но ни в коем случае не забывайте нажать кнопочку READ перед тем как что либо менять. Помните, неустановленные fuse это тоже какое то значение, которое будет записано при нажатии кнопки WRITE</font></b></p>
<p><b>Конфигурирование программы</b><br />
Впрочем, все же главным достоинством этой оболочки является ее легкая заточка под любой программатор поддерживаемый через <b>AVRDUDE</b>. </p>
<p>Покажу на примере программатора встроенного в <a href="http://shop.easyelectronics.ru/index.php?productID=147" ><b>Pinboard</b></a> (На базе FTDI, но распиновка выводов немного отличная от <a href="http://easyelectronics.ru/skorostnoj-avr-usb-programmator-na-ft232rl-bez-vspomogatelnogo-kontrollera.html" >FTBB описанного ранее</a>). </p>
<p>Закрываем программу, чтобы не мешалась и не держала файлы.</p>
<p>Прописывание конфигурации FTBB в файле avrdude.conf я описывать не буду, подробней я об этом уже <a href="http://easyelectronics.ru/skorostnoj-avr-usb-programmator-na-ft232rl-bez-vspomogatelnogo-kontrollera.html" >писал ранее</a>.</p>
<p> Считаем, что это уже сделано и в файле конфигов <b>avrdude</b> у нас есть нужная секция. Я назвал ее <b>pinb</b>, впрочем, название может быть и произвольным. </p>
<p>Первым делом открываем файл <b>Programmer.txt</b> и видим там список:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">ABCmini
ALF
Arduino
AT ISP
AVR109
AVR910
AVR911
AVRISP
AVRISP <span style="color: #0000dd;">2</span>
AVRISP mkII
AVRISP v2</pre></td></tr></table></div>

<p>и еще полторы страницы все известных и не очень типов программаторов. Вписываем там первой строкой наш pinb</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">ABCmini
pinb
ALF
Arduino
AT ISP
AVR109
AVR910
AVR911
AVRISP
AVRISP <span style="color: #0000dd;">2</span>
AVRISP mkII
AVRISP v2</pre></td></tr></table></div>

<p>Все, теперь он в списке, но ему еще надо сопоставить порт. Поэтому открывай файл <b>Port.txt</b><br />
Вот его дефолтное содержимое:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #b1b100;">Default</span>.
<span style="color: #009900;">&#91;</span>COM1	com1
COM2	com2
COM3	com3
COM4	com4
COM5	com5
COM6	com6
COM7	com7
COM8	com8
COM9	com9
LPT1	lpt1
LPT2	lpt2
LPT3	lpt3<span style="color: #009900;">&#93;</span>
&nbsp;
STK500 v2.
<span style="color: #009900;">&#91;</span>USB	avrdoper<span style="color: #009900;">&#93;</span>
&nbsp;
AVRISP mkII.
<span style="color: #009900;">&#91;</span>USB	usb<span style="color: #009900;">&#93;</span>
&nbsp;
USBasp.
<span style="color: #009900;">&#91;</span>USB	x<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>Как видишь, формат тут сходный. Название программатора (с точкой в конце!), а в скобках варианты. Причем первым делом пишем произвольное название порта, а потом то в каком виде он должен подставиться в командную строку avrdude. Между ними табуляция.</p>
<p>Порт <b>FTDI bitbang</b> в консоли называется <b>ft#</b> и номер от нуля до бесконечности. В зависимости от того сколько чипов FTDI навешано на твой компьютер в данный момент. Причем учитываются именно подключенные, активные, чипы. И не стоит путать этот номер с номером виртуального COM порта который этот чип организует. Так что если у тебя в системе всего один адаптер USB-COM на базе FTDI, то какой бы там COM порт ни был, для bitbang программатора он зовется ft0 и никак иначе. На всякий случай добавляем несколько вариантов. </p>
<p>Добавляем туда нашу секцию</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">pinb.
<span style="color: #009900;">&#91;</span>FTDI	ft0
FTDI1	ft1
FTDI2	ft2
FTDI3	ft3<span style="color: #009900;">&#93;</span></pre></td></tr></table></div>

<p>Отлично, программатор мы прописали и порт мы сопоставили. Теперь надо сину заставить это дело все прожевать.  Для этого берем и удаляем файл SinaProg.sav  Не знаю как построена логика программы, но почему то именно это действие заставляет ее перечитать собственные конфиги и добавить наши строки в списки. </p>
<p>Все! Готово &#8212; можно шить!  Удачной прошивки!</p>
<p><a href="http://microstar.ir/" onclick="javascript:pageTracker._trackPageview('/outbound/article/microstar.ir');">Сайт разработчиков SinaProg</a><br />
<a href="http://depositfiles.com/ru/files/loryd21lm" onclick="javascript:pageTracker._trackPageview('/outbound/article/depositfiles.com');">Моя сборка SinaProg</a> с уже настроенными конфигами под <a href="http://shop.easyelectronics.ru/index.php?productID=147" ><b>Pinboard</b></a> и FTBB</p>
<img src="http://feeds.feedburner.com/~r/easyelectronics/~4/JZDBA54pNNQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://easyelectronics.ru/sinaprog-graficheskaya-obolochka-dlya-avrdude.html/feed</wfw:commentRss>
		<feedburner:origLink>http://easyelectronics.ru/sinaprog-graficheskaya-obolochka-dlya-avrdude.html</feedburner:origLink></item>
		<item>
		<title>Датчик Холла</title>
		<link>http://feedproxy.google.com/~r/easyelectronics/~3/zeukNvgCnrM/datchik-xolla.html</link>
		<comments>http://easyelectronics.ru/datchik-xolla.html#comments</comments>
		<pubDate>Sun, 14 Feb 2010 04:52:52 +0000</pubDate>
		<dc:creator>DI HALT</dc:creator>
		
		<category><![CDATA[Начинающим]]></category>

		<category><![CDATA[AVR]]></category>

		<category><![CDATA[PinBoard]]></category>

		<category><![CDATA[Датчик]]></category>

		<category><![CDATA[Магнетизм]]></category>

		<guid isPermaLink="false">http://easyelectronics.ru/?p=294</guid>
		<description><![CDATA[Есть такой интересный эффект &#8212; если через квадратную проводящую пластину гнать постоянный ток, а саму пластину пронизать магнитным полем, чтобы линии индукции проходили через ее сечение, то летящие по пластине электроны отклоняются силой Лоуренса.





А раз так, то с одного края электронов будет больше чем с другой. Возникает разность потенциалов, то есть напряжение. И чем больше [...]]]></description>
			<content:encoded><![CDATA[<p>Есть такой интересный эффект &#8212; если через квадратную проводящую пластину гнать постоянный ток, а саму пластину пронизать магнитным полем, чтобы линии индукции проходили через ее сечение, то летящие по пластине электроны отклоняются силой Лоуренса.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/starters/hall/hall.GIF" alt=""></td>
</tr>
</table>
<p>А раз так, то с одного края электронов будет больше чем с другой. Возникает разность потенциалов, то есть напряжение. И чем больше ток и сильней поле, тем большая разность будет. Это и есть эффект Холла. </p>
<p>Дальше дело за малым &#8212; берем источник стабильного тока, чем стабильней тем лучше, ведь от стабильности зависит точность показаний. Прогоняем постоянный ток по пластине, ловим да усиливаем разность потенциалов до осязаемых величин. В результате получаем отличную вещь &#8212; датчик магнитного поля,  он же датчик Холла.<br />
<span id="more-294"></span><br />
Например такой:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/starters/hall/ss490a.gif" alt=""></td>
</tr>
</table>
<p>Моделей существует целая прорва. В чистом виде, правда, встречается редко. Обычно элемент Холла с чем нибудь да совмещен. Либо, как тут, с усилителем, либо с силовыми ключами, как в датчиках из компьютерных бесколлекторных вентиляторов &#8212; там он сразу же коммутирует обмотки, выполняя роль электронного коллектора. Правда на некоторых старых моделях вентиляторов можно обнаружить и целые микросборки из &#8220;чистого&#8221; датчика, усилителя и силовых ключей, но вот уже лет 5 мне такие не попадались. </p>
<p> Делал я тут один частный заказик недавно, вот там и применил эти козявки. </p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/starters/hall/hall_photo.jpg" alt=""></td>
</tr>
</table>
<p>Подключение проще простого &#8212; подал питание, снял сигнал.  Питание по даташиту написано двуполярное, но ничего не мешает подать и однополярное. Просто в этом случае ноль сигнала у нас будет не 0В а Vcc/2. У меня на Pinboard напряжение в магистрали питания около 4.8 вольт, поэтому на выходе датчика 2.4 вольта в подвешенном состоянии. </p>
<p>Теперь берем и подносим к нашему датчику магнитик. В зависимости от полярности стороны магнита, напруга либо обвалится в ноль, либо подскочит до максимума. Ну и, в зависимости от расстояния, может принимать промежуточные значения, линейно завися от силы магнитного поля. </p>
<p><b>Это все интересно, но что с того? Куда это можно применить?</b><br />
А применений датчику можно придумать вагон и маленькую тележку. Например, бесконтактные концевые выключатели.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/starters/hall/hall_prim.GIF" alt=""></td>
</tr>
</table>
<p>Причем, в отличии от герконов, датчики эти почти вечные &#8212; там нет ни единой движущейся части. </p>
<p>А если совместить датчик с магнитом и подсунуть ему шестеренку, что будет замыкать через себя магнитный поток, то можно легко получить датчик скорости вращения. Когда зубец будет ближе к датчику, то сопротивление магнитному потоку будет ниже, а значит и его сила будет больше. А на межзубцовых промежутках все наоборот. В результате, на выходе датчика будут импульсы сходные с формой зубов шестерни, а уж посчитать их не составит труда. </p>
<p>Или, например, надо нам замерить БОООЛЬШОЙ постоянный ток. Скажем идущий к драйверу двигателя. С малыми токами все ясно и так &#8212; ставим шунт и снимаем с него падение напряжения. С большими токами финт прокатит плохо &#8212; шунт будет лишней нагрузкой, сжирающей мощность, греющейся. Да и сделай его еще из подручных средств&#8230;  А ведь можно сделать все куда проще. Заворачиваем провод в катушку, опоясываем магнитопроводом, а в разрез пихаем наш датчик. Причем необязательно делать много витков &#8212; если ток большой, да датчик чувствительный, то и одного-двух витков хватит (кстати, есть и неплохие промышленные датчики постоянного тока &#8212; LEM делает).</p>
<p>Ну и вот такой практический примерчик &#8212; на базе датчика SS495A сварганил простейший цифровой тахометр :)</p>
<p>Схему собрал на своей демоплате:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/starters/hall/sx_hall.GIF" alt=""></td>
</tr>
</table>
<p>Получилась такая вот конструкция:</p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/starters/hall/pinboard_hall.jpg" alt=""></td>
</tr>
</table>
<p>Включил моторчик, магнитик завертелся, а на выходе датчика Холла пошла вот такая вот картина:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/starters/hall/hall_motor.jpg" alt=""></td>
</tr>
</table>
<p>Вообще я сам удивился насколько четкие и резкие фронты. Я думал будет подобие синуса. Ан нет, магнит оказался мощный (ниодимовый из лазерной головки CD-ROM&#8217;a) и видимо он сразу же зашкаливает наш датчик. </p>
<p>Дальше, на базе ядра диспетчера, описанного в не так давно, набросал по быстрому программку (только функциональная часть):</p>
<p><b>HAL.c</b></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">inline</span> <span style="color: #993333;">void</span> InitAll<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #666666; font-style: italic;">//InitUSART</span>
UBRRL <span style="color: #339933;">=</span> LO<span style="color: #009900;">&#40;</span>bauddivider<span style="color: #009900;">&#41;</span>;
UBRRH <span style="color: #339933;">=</span> HI<span style="color: #009900;">&#40;</span>bauddivider<span style="color: #009900;">&#41;</span>;
UCSRA <span style="color: #339933;">=</span> <span style="color:#800080;">0</span>;
UCSRB <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>RXEN|<span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>TXEN|<span style="color:#800080;">0</span><span style="color: #339933;">&lt;&lt;</span>RXCIE|<span style="color:#800080;">0</span><span style="color: #339933;">&lt;&lt;</span>TXCIE|<span style="color:#800080;">0</span>&lt;&lt;;UDRIE;
UCSRC <span style="color: #339933;">=</span> <span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>URSEL|<span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UCSZ0|<span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UCSZ1;
&nbsp;
<span style="color: #666666; font-style: italic;">//Init Interrupts</span>
MCUCR |= <span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>ISC00|<span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>ISC01; 	<span style="color: #666666; font-style: italic;">// Конфигурируем прерывание по фронту</span>
GICR |= <span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>INT0;		<span style="color: #666666; font-style: italic;">// Разрешаем прерывания</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><b>HAL.h</b><br />
Там вообще много всего, в первую очередь всякие байты и выводы описаны, но нам интересен сейчас макрос:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;"><span style="color: #339933;">#define SEND(X) do{buffer_index = 1; UDR = X; UCSRB|=(1&lt;&lt;UDRIE); }while(0)</span></pre></td></tr></table></div>

<p>Это макрос отправки данных из буффера на прерываниях. Макросы я рекомендую называть заглавными буквами &#8212; сразу будет видно, что это макрос, а не функция. А конструкция do{&#8230;.;&#8230;.;&#8230;.;&#8230;.; }while(0) позволяет запихать в один макрос дофига всяких функций, не опасаясь того, что эту конструкцию перекосит на каком-нибудь if-then-else. Заключенная в блок do{ }while(0) она выполнится как один оператор, а нулевое условие while(0) будет выброшено оптимизатором, так что оверхеда по коду тут не будет. </p>
<p>Ну и, напоследок, код отправки данных из буффера на прерываниях. Шлет в USART данные из буффера, игнорирую данные с кодом 0&#215;00 - их генерит функция itoa  когда значение меньше чем заданная разрядность.<br />
<b>GCC-RTOS.c</b></p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">ISR <span style="color: #009900;">&#40;</span>USART_UDRE_vect<span style="color: #009900;">&#41;</span>		<span style="color: #666666; font-style: italic;">// Прерывание по опустошению буффера УАПП</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">if</span> <span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#91;</span>buffer_index<span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span> UDR <span style="color: #339933;">=</span> buffer<span style="color: #009900;">&#91;</span>buffer_index<span style="color: #009900;">&#93;</span>;  <span style="color: #666666; font-style: italic;">// Если текущее значение не 0х00 вывод</span>
&nbsp;
buffer_index ++;			<span style="color: #666666; font-style: italic;">// Увеличиваем индекс</span>
&nbsp;
<span style="color: #b1b100;">if</span><span style="color: #009900;">&#40;</span>buffer_index <span style="color: #339933;">==</span> buffer_MAX<span style="color: #009900;">&#41;</span>  	<span style="color: #666666; font-style: italic;">// Вывели весь буффер? </span>
	<span style="color: #009900;">&#123;</span>
	UCSRB <span style="color: #339933;">&amp;=</span>~<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #339933;">&lt;&lt;</span>UDRIE<span style="color: #009900;">&#41;</span>;	<span style="color: #666666; font-style: italic;">// Запрещаем прерывание по опустошению - передача закончена</span>
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
&nbsp;
<span style="color: #993333;">void</span> Catch<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>    <span style="color: #666666; font-style: italic;">// Задача подсчета и обработки данных. </span>
<span style="color: #009900;">&#123;</span>
u16 RPM<span style="color: #339933;">=</span><span style="color:#800080;">0</span>;
SetTimerTask<span style="color: #009900;">&#40;</span>Catch<span style="color: #339933;">,</span><span style="color: #0000dd;">2000</span><span style="color: #009900;">&#41;</span>; 	<span style="color: #666666; font-style: italic;">// Время подсчета - 2с</span>
&nbsp;
buffer<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">7</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color:#800080;">0</span>;				<span style="color: #666666; font-style: italic;">// Зануляем знакоместа в буффере</span>
buffer<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">8</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color:#800080;">0</span>;				<span style="color: #666666; font-style: italic;">// Чтобы там не было пустых мест</span>
buffer<span style="color: #009900;">&#91;</span><span style="color: #0000dd;">9</span><span style="color: #009900;">&#93;</span><span style="color: #339933;">=</span><span style="color:#800080;">0</span>;				<span style="color: #666666; font-style: italic;">// Иначе будет гнать при снежении оборотов</span>
&nbsp;
RPM <span style="color: #339933;">=</span> Cycle<span style="color: #339933;">*</span><span style="color: #0000dd;">30</span>;			<span style="color: #666666; font-style: italic;">// Вычисляем число оборотов в минуту</span>
&nbsp;
itoa<span style="color: #009900;">&#40;</span>RPM<span style="color: #339933;">,</span>buffer<span style="color: #339933;">+</span><span style="color: #0000dd;">6</span><span style="color: #339933;">,</span><span style="color: #0000dd;">10</span><span style="color: #009900;">&#41;</span>;		<span style="color: #666666; font-style: italic;">// Перевеодим его в ASCII строку. Вписывая в наш буффер</span>
&nbsp;
SEND<span style="color: #009900;">&#40;</span>buffer<span style="color: #009900;">&#91;</span><span style="color:#800080;">0</span><span style="color: #009900;">&#93;</span><span style="color: #009900;">&#41;</span>;		<span style="color: #666666; font-style: italic;">// Запускаем передачу (макрос в файле HAL.h)</span>
&nbsp;
Cycle <span style="color: #339933;">=</span> <span style="color:#800080;">0</span>;			<span style="color: #666666; font-style: italic;">// Обнуляем счетчик циклов</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p><a href="http://easyelectronics.ru/img/starters/hall/GCC-RTOS_1.ZIP" >Сырки для этого примера</a>. Не обращайте внимания на кучу мусора в коде. Это так, черновой набросок. Да и пример отправки данных на прерываниях я скоро опишу подробней. </p>
<p>А вот как это выглядело вживую:<br />
<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/j0Vqgs98HeY&#038;hl=ru&#038;fs=1"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/j0Vqgs98HeY&#038;hl=ru&#038;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object></p>
<img src="http://feeds.feedburner.com/~r/easyelectronics/~4/zeukNvgCnrM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://easyelectronics.ru/datchik-xolla.html/feed</wfw:commentRss>
		<feedburner:origLink>http://easyelectronics.ru/datchik-xolla.html</feedburner:origLink></item>
		<item>
		<title>Эндрю Таненбаум “Операционные системы. Разработка и реализация”</title>
		<link>http://feedproxy.google.com/~r/easyelectronics/~3/Gbi_v299uFQ/endryu-tanenbaum-operacionnye-sistemy-razrabotka-i-realizaciya.html</link>
		<comments>http://easyelectronics.ru/endryu-tanenbaum-operacionnye-sistemy-razrabotka-i-realizaciya.html#comments</comments>
		<pubDate>Sun, 07 Feb 2010 16:18:47 +0000</pubDate>
		<dc:creator>DI HALT</dc:creator>
		
		<category><![CDATA[Книги]]></category>

		<guid isPermaLink="false">http://easyelectronics.ru/?p=292</guid>
		<description><![CDATA[Автор:Эндрю ТаненбаумНазвание:Операционные системы. Разработка и реализацияИздательство:ПитерОписание:&#160;&#160;Давненько я не выкладывал полезных книжек. Надо исправляться.
Итак, раз уж начал задвигать на тему программирования, то нельзя забыть такого автора как Эндрю Таненбаум.
Программисты про него и так знают &#8212; как никак это один из классических авторов, а его труды детально расписывают принципы построения операционных систем. Причем описывается это все буквально [...]]]></description>
			<content:encoded><![CDATA[<p><TABLE cellSpacing=0 cellPadding=4 width="100%" border=0><TBODY><TR><TD width=201 rowSpan=5><IMG src="http://easyelectronics.ru/img/books/tannenbaum.jpg"></TD><TD><B>Автор:</B></TD><TD>Эндрю Таненбаум</TD></TR><TR><TD><B>Название:</B></TD><TD>Операционные системы. Разработка и реализация</TD></TR><TR><TD><B>Издательство:</B></TD><TD>Питер</TD></TR><TR><TD><B>Описание:</B></TD><TD>&nbsp;</TD></TR><TR><TD><B>&nbsp;</B></TD><TD>Давненько я не выкладывал полезных книжек. Надо исправляться.<br />
Итак, раз уж начал задвигать на тему программирования, то нельзя забыть такого автора как Эндрю Таненбаум.<br />
Программисты про него и так знают &#8212; как никак это один из классических авторов, а его труды детально расписывают принципы построения операционных систем. Причем описывается это все буквально на пальцах, на упрощенных аналогиях. Впрочем, примеров на Си тоже хватает. Местами занудновато и многое к нашей области не применимо, но для общего развития совершенно не помешает. Книжка из серии обязательных к прочтению. <a href="http://depositfiles.com/files/ffmmagcwt" onclick="javascript:pageTracker._trackPageview('/outbound/article/depositfiles.com');"><B>Скачать!</B></a> </TD></TR></TBODY></TABLE></p>
<img src="http://feeds.feedburner.com/~r/easyelectronics/~4/Gbi_v299uFQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://easyelectronics.ru/endryu-tanenbaum-operacionnye-sistemy-razrabotka-i-realizaciya.html/feed</wfw:commentRss>
		<feedburner:origLink>http://easyelectronics.ru/endryu-tanenbaum-operacionnye-sistemy-razrabotka-i-realizaciya.html</feedburner:origLink></item>
		<item>
		<title>Монтаж плат с SMD компонентами с помощью паяльной пасты и фена.</title>
		<link>http://feedproxy.google.com/~r/easyelectronics/~3/e7ALL_s-AW8/montazh-plat-s-smd-komponentami-s-pomoshhyu-payalnoj-pasty-i-fena.html</link>
		<comments>http://easyelectronics.ru/montazh-plat-s-smd-komponentami-s-pomoshhyu-payalnoj-pasty-i-fena.html#comments</comments>
		<pubDate>Tue, 02 Feb 2010 22:33:51 +0000</pubDate>
		<dc:creator>vvzvlad</dc:creator>
		
		<category><![CDATA[Радиолюбительские Технологии]]></category>

		<category><![CDATA[smd]]></category>

		<category><![CDATA[Пайка]]></category>

		<category><![CDATA[Фен]]></category>

		<guid isPermaLink="false">http://easyelectronics.ru/?p=291</guid>
		<description><![CDATA[




Когда в единственный нормальный магазин в городе, чуть ли не на заказ, привезли паяльную пасту, я был за ней первый в очереди :)
Давно уже хотел полностью перейти на SMD, как наиболее ленивую технологию &#8212; дырки сверлить лень и была паяльная станция LINKO 850, китайский клон незнаю чего (Ну, судя по стилю написания логотипа, косят они [...]]]></description>
			<content:encoded><![CDATA[<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/tehnologia/SolderPaste/600X1.jpg" alt=""></td>
</tr>
</table>
<p>Когда в единственный нормальный магазин в городе, чуть ли не на заказ, привезли паяльную пасту, я был за ней первый в очереди :)<br />
Давно уже хотел полностью перейти на SMD, как наиболее ленивую технологию &#8212; дырки сверлить лень и была паяльная станция LINKO 850, китайский клон незнаю чего (Ну, судя по стилю написания логотипа, косят они все под HAKKO =) Своего рода Adibas =)  прим. DI HALT), пока использовавшаяся только для демонтажа. Мосфеты ей с материнок выковыривать &#8212; милое дело. Паста у меня была <a href="http://www.masteram-online.ru/ru/BGA-solder-paste-BK-30-g.php" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.masteram-online.ru');"><b>BAKU BK-30G</b></a>  (У меня такая же грязюка есть. Мерзкая вещь, но паять ей прикольно. прим. DI HALT)<span id="more-291"></span></p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/tehnologia/SolderPaste/600X9.jpg" alt=""></td>
</tr>
</table>
<p>Плату разрабатываем как обычно.</p>
<p><b>Советы по разводке для SMD монтажа</b> </p>
<ul>
<li> Две площадки рядом - никогда их не сливайте! Наоборот, растяните, и соедините тонким проводником, так они не слипнутся вместе(что придает неаккуратность плате) и позволит визуально проконтролировать наличие дородки между ними(просто так два резистора рядом, или там проводник). </li>
<li> Не гонитесь за размером! Делайте площадки чуть больше компонента, и оставляйте между ними достаточно места. Если ограничены в размере, возмите корпус больше, или сделайте двухстороннюю плату. Сам по началу страдал такой фигней. Пока хватает разрешающей способности &#8212; ставил как можно ближе к друг другу, теперь куча мелких плат с налепленными в шахматном порядке 1206 компонентами &#8212; плату и проводники за ними не видно. </li>
</ul>
<p>После чего травим как обычно, а вот с лужением есть проблемы:<br />
Я лужу сплавом розе, с последующим снятием горячим резиновым скребком(прям в той же кастрюле/банке где плата лудилась) лишнего слоя - получается плоские проводники практически с зеркальным блеском :) </p>
<p>Если у вас его нет, можно применить следующий хинт &#8212; на маломощный паяльник наматываем оплетку для снятий припоя, залуживаем ее, и проводим по дорожкам, предварительно покрытым флюсом. Если так делать не получается, а лудите жалом - оставляйте на контактных площадках как можно тонкий слой олова.<br />
На плоские дорожки деталюхи практически &#8220;приклеиваются&#8221; на паяльную пасту, а выпуклый слой олова они устанавливаются хуже. Ладно если это еще резистор - его все равно поверхостным натяжением припоя на место утащит (главное напор воздуха на минимум, чтоб не сдуло).</p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/tehnologia/SolderPaste/600X4.jpg" alt=""></td>
</tr>
</table>
<p>А вот микруху (например, небезызвестная FT232RL) на выпуклую поверхность ой как сложно ровно установить, все норовит упасть в ямку между дорожками, а если и встанет, поток воздуха даже под малым градусом сдует ее в ту самую ямку, после чего припой загадит и ножки, и контакты, превратив выводы в монолит ;-) , а флюс практически полностью испарится через минуту, после чего нормально сдвинуть ее будет практически невозможно, не угаживая выводы предварительно каким нибудь канифоль-гелем.</p>
<p>Короче, в результате мы должны получить плату  с ПЛОСКИМИ контактными площадками (флюс там слабый, к розовой меди и сплаву розе цепляет на ура, а вот к загаженной меди уже не очень).</p>
<p>После чего, хорошенько размешав пасту, осторожно, не допуская пузырей воздуха, затягиваем полужидкую пасту (Паста эта, кстати, имеет обыкновение высыхать, даже будучи плотно закрытой. Можно ее размочить добавив в нее спирта прим. DI HALT) в обычный шприц-инсулинку, надеваем и обламываем (кому как удобно, я сначала обломал иглу, оставив сантиметр, потом плюнул и обломал под корень) иглу. </p>
<p>Теперь, хорошенько отмыв, и еще более хорошо высушив (: плату, ляпаем на каждую площадку по чуть-чуть пасты. Сколько именно, можете посмотреть на фото, но после двух-трех раз сами поймете, после чего пинцетом усаживаем рассыпуху.</p>
<p><b>Советы по установке</b></p>
<ul>
<li> Высокие и крупные компоненты устанавливаем последними. Сначала конденсаторы 0603, потом резисторы 1206, высокие светодиоды, а затем микрухи. </li>
<li> Под каждый размер - свой пинцет. (или это уже буржуйство?) обычно хватает двух &#8212; мелоч и микруху. Ту же 2313 не возьмешь мелким пинцетом, а большим не получается уже так аккуратно резисторы садить, как маленьким &#8212; руки дрожат, чтоли. (А мне всегда одного хватало. Прим. DI HALT) </li>
</ul>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/tehnologia/SolderPaste/600X3.jpg" alt=""></td>
</tr>
</table>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/tehnologia/SolderPaste/600X5.jpg" alt=""></td>
</tr>
</table>
<p>Теперь, нагревая плату феном, можно наблюдать как паста, сначало вскипев флюсом и засохнув, начинает превращаться в расплавленный металл, который надежно приварит деталюхи к плате :) (паста, кстати, очень сильно при этом уменьшается в обьемах. Там где была огромная сопля остается маленькая капелька. прим. DI HALT)</p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/tehnologia/SolderPaste/600X7.jpg" alt=""></td>
</tr>
</table>
<p>Из за того, что температура станции у меня немного плавает, пришлось научиться определять степень зажаренности по &#8230;запаху ^_^  Когда флюс нагревается до рабочей температуры, он начинает пахнуть чем то похожим на ваниль ;-), а когда начнет пахнуть горелыми волосами - значит опять я локтем провернул ручку температуры и надо идти и покупать 5 светодиодов, взамен зажаренных. (Я предпочитаю жарить при температуре на выходе фена около 290 градусов. У платы будет градусов на 10 меньше, в самый раз. И поток воздуха на минимум. прим. DI HALT).</p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/tehnologia/SolderPaste/600X6.jpg" alt=""></td>
</tr>
</table>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/tehnologia/SolderPaste/600X8.jpg" alt=""></td>
</tr>
</table>
<img src="http://feeds.feedburner.com/~r/easyelectronics/~4/e7ALL_s-AW8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://easyelectronics.ru/montazh-plat-s-smd-komponentami-s-pomoshhyu-payalnoj-pasty-i-fena.html/feed</wfw:commentRss>
		<feedburner:origLink>http://easyelectronics.ru/montazh-plat-s-smd-komponentami-s-pomoshhyu-payalnoj-pasty-i-fena.html</feedburner:origLink></item>
		<item>
		<title>AVR. Учебный курс. Архитектура Программ. Часть 3.</title>
		<link>http://feedproxy.google.com/~r/easyelectronics/~3/-MyMN5pk-iE/avr-uchebnyj-kurs-arxitektura-programm-chast-3.html</link>
		<comments>http://easyelectronics.ru/avr-uchebnyj-kurs-arxitektura-programm-chast-3.html#comments</comments>
		<pubDate>Sun, 31 Jan 2010 15:26:35 +0000</pubDate>
		<dc:creator>DI HALT</dc:creator>
		
		<category><![CDATA[AVR. Учебный курс]]></category>

		<category><![CDATA[RTOS]]></category>

		<category><![CDATA[Алгоритм]]></category>

		<category><![CDATA[Программирование]]></category>

		<guid isPermaLink="false">http://easyelectronics.ru/?p=290</guid>
		<description><![CDATA[Приоритетный диспетчер.
Одной из проблем простого диспетчера является то, что все задачи имеют равный приоритет. С одной стороны, это просто и удобно. С другой &#8212; какое-либо важное событие можно прошляпить, пока там конвейер перещёлкает все задачи&#8230;  
Проблему решает введение приоритетов.
В простейшем случае, можно ввести два приоритета &#8212; высокий и низкий.  Разница между ними будет [...]]]></description>
			<content:encoded><![CDATA[<p><b>Приоритетный диспетчер.</b><br />
Одной из проблем простого диспетчера является то, что все задачи имеют равный приоритет. С одной стороны, это просто и удобно. С другой &#8212; какое-либо важное событие можно прошляпить, пока там конвейер перещёлкает все задачи&#8230;  </p>
<p>Проблему решает введение приоритетов.<br />
В простейшем случае, можно ввести два приоритета &#8212; высокий и низкий.  Разница между ними будет лишь в том с какой стороны очереди они будут засовываться на конвейер. Высокоприоритетные пихаются сразу в начало, низкоприоритетные с конца.<br />
   Разумеется, тут надо следить за тем, чтобы высокоприоритетные задачи не забивали конвейер, блокируя низкоприоритетные.  Никакой защиты от этого нет, только думать головой.  </p>
<p>Если нужна высокоуровневая система приоритетов, то можно очередь задач превратить в двумерный массив, где вторым этажом будет идти приоритет задачи. Правда при этом увеличиться время обработки конвейера &#8212; ведь надо будет сперва прочесать всю очередь в поисках наибольшего элемента.  Но тут можно напридумывать кучу оптимизаций.  Например, сортировать очередь при постановке задачи на конвейер, либо завести TOP list приоритетов, занося туда значения приоритетов. Тогда диспетчер, обрабатывая очередь, сразу будет искать нужный элемент, ориентируясь по TOP листу. Но вот так, на вскидку, я не берусь сказать какой из приемов будет эффективней/компактней/быстрей.<br />
<span id="more-290"></span><br />
<b>Кооперативная RTOS</b></p>
<blockquote><p> На самом деле, называть RTOS такую систему нельзя. Она не является чисто реалтаймовой. Но название устоялось. </p></blockquote>
<p>Это еще более сложная структура разделения кода. Отличается тем, что теперь у нас задания это не цепочки процедурок объединенных конвейером/флаг-автоматом, а полноценные законченные задачи.  </p>
<p>Вот, например, программа мигания двумя светодиодами с разной частотой, на диспетчере (здесь и далее псевдокод), только функциональная часть:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">Led1_OFF<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
SetTimerTask<span style="color: #009900;">&#40;</span>Led1_ON<span style="color: #339933;">,</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
led1_off<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span>
&nbsp;
Led1_On<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
SetTimerTask<span style="color: #009900;">&#40;</span>Led1_OFF<span style="color: #339933;">,</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
led1_on<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span>
&nbsp;
Led2_OFF<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
SetTimerTask<span style="color: #009900;">&#40;</span>Led2_ON<span style="color: #339933;">,</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
led2_off<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span>
&nbsp;
Led2_On<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
SetTimerTask<span style="color: #009900;">&#40;</span>Led2_OFF<span style="color: #339933;">,</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
led2_on<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Как видишь, у нас тут нет функционально законченных блоков. Все наши задачи представляют собой набор простейших действий залинкованных в цепочки друг на друга. Либо напрямую, либо через таймер. В очень больших программах, даже при такой абстракции запутаться уже несложно. </p>
<p>На кооперативной RTOS все будет выглядеть куда прозрачней:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">Blink1_Task<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	Led1_on<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	Dispatch<span style="color: #009900;">&#40;</span>delay<span style="color: #339933;">,</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
	led1_off<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	Dispatch<span style="color: #009900;">&#40;</span>delay<span style="color: #339933;">,</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
Blink2_Task<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	Led2_on<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	Dispatch<span style="color: #009900;">&#40;</span>delay<span style="color: #339933;">,</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
	led2_off<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	Dispatch<span style="color: #009900;">&#40;</span>delay<span style="color: #339933;">,</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Как видишь, программа двух действий разбилась на две независимые части. Мигание диодом 1 и мигание диодом 2. </p>
<p>Вырви из кода один блок, замени Dispatch(delay,1000) на delay_ms(1000); и задачу можно заливать без какой либо организации прям в контроллер и она будет работать как простейшая программа!<br />
  Т.е. теперь у нас уже получаются полноценные программы внутри основной программы.  А что же такое</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">Dispatch<span style="color: #009900;">&#40;</span>delay<span style="color: #339933;">,</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;</pre></td></tr></table></div>

<p>А это команда API ядра RTOS. В нашем псеводокоде, допустим, ей мы приказываем передать управление диспетчеру (чтобы он занялся другими задачами) и вернуться сюда же когда таймерная служба натикает нам 1000мс. </p>
<p>Таким образом появляется многозадачность. Т.е. все неиспользуемое процессорное время (задержки) мы отдаем диспетчеру, который распределит его между другими задачами.   </p>
<p>Таким образом, у нас получается что задача может быть активной &#8212; получит управление сразу же как это будет доступно, ожидающей чего-либо, например, того же таймера и неактивной &#8212; просто висящей в памяти программ. Сюда же могут быть добавлены приоритеты, а также чайный клуб с шахматами и поэтессами. </p>
<p>Задача может ожидать события от чего угодно &#8212; таймера,установки/сброса бита, сообщения от другой задачи.   Также она может посылать события другим задачам.  </p>
<p>Подробней расписывать не буду, о работе корпоративной RTOS очень хорошо расписано в <a href="http://easyelectronics.ru/files/AVR/SalvoUserManual-rus.pdf" onclick="javascript:pageTracker._trackPageview('/downloads/files/AVR/SalvoUserManual-rus.pdf');"><b>Salvo RTOS User Manual</b>  (перевод Андрея Шлеенкова).</a><br />
А несколько позже, наверное, дам подробный раскур какой-нибудь кооперативной RTOS (пока еще даже не решил какой. Salvo, SCM или AVRX - сам еще ни одну из них толком не щупал).</p>
<p><b>Вытесняющая RTOS</b><br />
Все не относящееся к вытесняющим ОС назвать полноценной операционной системой <b>реального времени</b> нельзя. Дело в том, что понятие <b>реального времени</b> означает, что чтобы ни случилось &#8212; время обработки и создание реакции на критического событие не превысит заданного порога. </p>
<p>Т.е. если заявлено что при ядерной ялярме стержни в реактор упадут в течении 50мс, то должно быть так. </p>
<p> Сам понимаешь, что ни диспетчер, ни кооперативная ОС этого гарантировать не могут. Если ты где-то не передашь управление диспетчеру (ну ошибся, бывает) и у тебя проц зациклиться в одной задаче, то повиснет вся система. Реальное время тут гарантируется только мозгами разработчика, четко понимающего что он творит. </p>
<p>Этого недостатка лишена вытесняющая RTOS. Она является по настоящему реалтаймовой. </p>
<p>И задачи там могут быть вида:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
</pre></td><td class="code"><pre class="c c" style="font-family:monospace;">Blink1_Task<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	Led1_on<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
	led1_off<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
Blink2_Task<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
<span style="color: #b1b100;">while</span><span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1</span><span style="color: #009900;">&#41;</span>
	<span style="color: #009900;">&#123;</span>
	Led2_on<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
	led2_off<span style="color: #009900;">&#40;</span><span style="color: #009900;">&#41;</span>;
	delay_ms<span style="color: #009900;">&#40;</span><span style="color: #0000dd;">1000</span><span style="color: #009900;">&#41;</span>;
	<span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
Да хоть 
&nbsp;
DumbLoop<span style="color: #009900;">&#40;</span><span style="color: #993333;">void</span><span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span>
m1<span style="color: #339933;">:</span> <span style="color: #b1b100;">goto</span> m1
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Тут это не важно. Диспетчер тут обладает полномочиями прерывать выполнение любой задачи когда угодно, между двумя любыми командами процессора &#8212; делается это посредством прерывания на котором сидит диспетчер.  В результате, каждая задача выполняется рывками, кусочками заданного интервала. Скажем, по 10мс на задачу. В этом случае, даже если одна будет наглухо висеть, то вся система не повиснет, т.к. диспетчер будет у ней забирать управление и делать более важные вещи.  Круто, да? </p>
<p>Но за крутизну приходится платить. Т.к. у нас происходит отбирание управления у одной задачи и передача другой, то надо сохранять состояние остановленной задачи. И одним сохранением регистров (как это было в прерывании) тут не обойдешься. Ведь у каждой задачи будет еще и собственный стек, и локальные переменные и регистры.<br />
  В результате, на каждую задачу выделяется свое адресное пространство с запасом и не дай боже одной задаче потереть контекст другой &#8212; все рухнет как карточный домик.</p>
<p>На восьмиразрядных микроконтроллерах вытесняющие RTOS существуют (правда название не вспомню, но видел), однако худо бедно этот монстр может запуститься разве что на ATmega128. Да и то большая часть ресурсов, в первую очередь оперативная память, МК будет занята проворачиванием диспетчера, так что кооперативки тут предпочтительней.  А вот на ARM ситуация с этим делом уже намного лучше.</p>
<img src="http://feeds.feedburner.com/~r/easyelectronics/~4/-MyMN5pk-iE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://easyelectronics.ru/avr-uchebnyj-kurs-arxitektura-programm-chast-3.html/feed</wfw:commentRss>
		<feedburner:origLink>http://easyelectronics.ru/avr-uchebnyj-kurs-arxitektura-programm-chast-3.html</feedburner:origLink></item>
		<item>
		<title>Паяльная станция Aoyue 950+</title>
		<link>http://feedproxy.google.com/~r/easyelectronics/~3/cVSmxEM44dA/payalnaya-stanciya-aoyue-950.html</link>
		<comments>http://easyelectronics.ru/payalnaya-stanciya-aoyue-950.html#comments</comments>
		<pubDate>Sat, 30 Jan 2010 16:35:24 +0000</pubDate>
		<dc:creator>Ved_kh</dc:creator>
		
		<category><![CDATA[Инструмент]]></category>

		<guid isPermaLink="false">http://easyelectronics.ru/?p=289</guid>
		<description><![CDATA[DI HALT:
Накопилось у меня тут прорва чужих статей, присланных мне на сайт. Вот буду их потихоньку верстать и выкладывать.
 Понадобилось достаточно плотно работать с SMD, да и чем дальше, тем больше попадается всякого мелкого. Вот и захотелось как-то упростить себе жизнь. 
Фен как-то пока что без надобности, а вот паяльная станция, еще и чтобы с [...]]]></description>
			<content:encoded><![CDATA[<blockquote><p><strong>DI HALT:</strong><br />
Накопилось у меня тут прорва чужих статей, присланных мне на сайт. Вот буду их потихоньку верстать и выкладывать.</p></blockquote>
<p> Понадобилось достаточно плотно работать с SMD, да и чем дальше, тем больше попадается всякого мелкого. Вот и захотелось как-то упростить себе жизнь. </p>
<p>Фен как-то пока что без надобности, а вот паяльная станция, еще и чтобы с SMD было удобно работать - самое оно. Выбирать как-то долго и нудно не хотелось, выбирал из того, что можно было купить или заказать где-то поблизости. </p>
<p>Решил взять <b><a href="http://www.masteram-online.ru/ru/AOYUE-950-SMD-Hot-Tweezer.php" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.masteram-online.ru');">Aoyue 950+</a></b>: термопинцет, да еще и с паяльником в комплекте.</p>
<p>Заказал, пару дней подождал, забрал.<br />
Полностью черный корпус, тумблер питания, ручка регулировки температуры, да разъем под термопинцет и паяльник.<br />
Сама конструкция очень сильно напомнила описанную ранее паяльную станцию Pro’sKit SS-217: такой же с виду паяльник, разъем под него и под термопинцет, такая же подставка от &#8220;фанатов бронепоездов&#8221;.</p>
<p><b>Итак, комплектация:</b>
<ul>
<li> основной блок с шнуром питания; </li>
<li> паяльник (модель 950, без &#8220;+&#8221; идет без паяльника); </li>
<li> термопинцет; </li>
<li> подставка; </li>
<li> резиновый коврик, по описанию стойкий к высокой температуре; </li>
<li> сменные более широкие жала для термопинцета. </li>
</ul>
<p> <span id="more-289"></span></p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Instrument/aoyue950/complect.jpg" alt=""></td>
</tr>
</table>
<p>Остановимся более подробно на самом основном: самом паяльнике и термопинцете.</p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Instrument/aoyue950/solderiron.jpg" alt=""></td>
</tr>
</table>
<p>Паяльник ничего особенного не представляет, вот только жало может попасться очень тонкое и напрашиваться на замену (жала в комплектации бывают разные, как более-менее, так и сильно тонкие).  Разбирать не стал, но внутри, более чем уверен, аналогично паяльнику от <a href="http://easyelectronics.ru/payalnaya-stanciya-pros-kit-ss-217.html" ><b>Pro’sKit SS-217</b>, с обзором которого мы все имели удовольствие не так давно ознакомиться</a>.</p>
<p>А вот и самое интересное: термопинцет.</p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Instrument/aoyue950/pincette.jpg" alt=""></td>
</tr>
</table>
<p>Обычный шнур (коротковатый, иногда может быть неудобным из-за этого) с разъемом. По одному нихромовому нагревателю в каждой части пинцета и две пары жал. Потоньше и потолще.</p>
<p>Жала фиксируются углепластиковыми гайками, закручивать которые лучше без фанатизма, чтобы не перетянуть и не сломать (впрочем, чтобы сломать, их закручивать надо именно что &#8220;с фанатизмом&#8221;).</p>
<p>Нагреватели - нихромовые, не керамика.</p>
<p>Так что особых изысков нет, все прямо говорит о месте происхождения.</p>
<p> А многие общие черты с Pro’sKit&#8217;овской продукцией - так еще и о том что как Pro’sKit, так и Ayoue - это детища одних родителей. Обе являются клонами Hakko.</p>
<p>Покупалась паяльная станция в небезызвестном магазине <a href="http://www.masteram-online.ru/ru/AOYUE-950-SMD-Hot-Tweezer.php" onclick="javascript:pageTracker._trackPageview('/outbound/article/www.masteram-online.ru');"><b>Masteram</b></a>. Отношение там к покупателям весьма понравилось, хотя нельзя не отметить нерасторопность технического консультанта, который бывает непонятно как часто и который по идее должен отвечать за ответы на вопросы, которые не могут дать менеджеры .</p>
<p>А вот отдел продаж и менеджеры - да, к ним никаких вопросов. Действительно отписываются или отзваниваются (смотря как проще) по каждому поводу. Так что тоже рекомендую.</p>
<p>Ну и еще момент, который касается вообще продукции наших восточных братьев. При покупке желательно сразу проверять нагреватель, независимо от того, где и как покупался. Хотя бы цел он или нет и имеется заводской брак.<br />
Дело в чем. Когда взял станцию, дома решил попробовать сменить жала и посмотреть, каково оно паять более широкими жалами на термопинцете. </p>
<p>И меня ожидала небольшая неприятность: нагреватель-то оказался с заводским браком:</p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Instrument/aoyue950/aoyue950brak.jpg" alt=""></td>
</tr>
</table>
<p>Остальное застряло в жале и само по себе или легкими постукиваниями по столу доставаться никак не желало. При этом термопинцет был вполне себе работоспособен.</p>
<p> Впрочем, ситуация разрешилась легко, просто и достаточно быстро: подождав немного времени, чтобы пришел следующий термопинцет, паяльная станция была без разговоров заменена. Что весьма положительно говорит о магазине Masteram.</p>
<p>Так что где бы ни брали паяльники и станции, надо сразу проверять нагреватели: контролеры на производстве могли и пропустить брак.</p>
<p><b>Работа</b><br />
Как паяльник, так и термопинцет нагреваются быстро, минимальная температура - 200, максимум - 480град. Цельсия. Есть шкала и в Фаренгейтах. Орудовать термопинцетом достаточно удобно, но потратить немного времени, чтобы приловчиться, все же понадобится. Но потом с ним расставаться уже не сильно захочется ;).</p>
<p>Подставка &#8212; вполне себе удобная, для термопинцета. </p>
<table border="1" cellspacing="1" cellpadding="1" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Instrument/aoyue950/podstavka.jpg" alt=""></td>
</tr>
</table>
<p>А вот для паяльника &#8212; так себе. Ну и для паяльника все же напрашивается другое жало.</p>
<p>Как небольшой итог, сведу вместе плюсы и минусы.</p>
<p><b>Плюсы:</b>
<ul>
<li> Достаточно удобный термопинцет, который существенно упрощает работу. </li>
<li> Кроме термопинцета в комплекте идет еще и паяльник, что может быть очень удобно, если не надо постоянно орудовать как термопинцетом, так и паяльником. Один же основной блок экономит место на столе. </li>
<li> Сменные более толстые жала, которые в определенных случаях удобнее тонких. </li>
</ul>
<p><b>Минусы:</b></p>
<ul>
<li> Только один разъем, общий для термопицета и для паяльника. Так что если надо постоянно работать обоими, то возможно более хорошим выбором будет покупка отдельно термопинцета без паяльника (модель 950, без &#8220;+&#8221;) и отдельно паяльника (паяльной станции). Правда в этом случае еще несколько сократится место на рабочем столе. (А можно вкорячить здоровенный галетник и второй разъем, чтобы щелкать туда и обратно эту байду. =) <b>прим. DI HALT</b>) </li>
<li> Довольно-таки короткий шнур у термопинцета (около метра длиной), что может быть иногда неудобно. </li>
<li> Часто идет слишком, как по мне, острое жало на паяльнике, которое так и хочется заменить на более удобное (впрочем, это дело вкуса). </li>
</ul>
<p>Итак, вполне могу рекомендовать, но с оглядкой на вышеуказанные минусы.</p>
<img src="http://feeds.feedburner.com/~r/easyelectronics/~4/cVSmxEM44dA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://easyelectronics.ru/payalnaya-stanciya-aoyue-950.html/feed</wfw:commentRss>
		<feedburner:origLink>http://easyelectronics.ru/payalnaya-stanciya-aoyue-950.html</feedburner:origLink></item>
		<item>
		<title>Sprint Layout 5. Подробное руководство.</title>
		<link>http://feedproxy.google.com/~r/easyelectronics/~3/KSlULjv_-E8/sprint-layout-5-podrobnoe-rukovodstvo.html</link>
		<comments>http://easyelectronics.ru/sprint-layout-5-podrobnoe-rukovodstvo.html#comments</comments>
		<pubDate>Fri, 29 Jan 2010 13:08:40 +0000</pubDate>
		<dc:creator>Sailanser</dc:creator>
		
		<category><![CDATA[Софт]]></category>

		<guid isPermaLink="false">http://easyelectronics.ru/?p=287</guid>
		<description><![CDATA[DI HALT
Несмотря на простоту этой программы, меня часто просят написать по ней статью. Но мне все было некогда. Поэтому роль Капитана Очевидность взял на себя Sailanser. Выполнив этот титанический труд. Я лишь подкорректировал, да добавил кое где подробностей.
Всем наверно давно известна программа для изготовления печатных плат под названием Sprint-Layout, на данный момент последняя версия гордо [...]]]></description>
			<content:encoded><![CDATA[<p><b>DI HALT</b></p>
<blockquote><p>Несмотря на простоту этой программы, меня часто просят написать по ней статью. Но мне все было некогда. Поэтому роль Капитана Очевидность взял на себя <b>Sailanser</b>. Выполнив этот титанический труд. Я лишь подкорректировал, да добавил кое где подробностей.</p></blockquote>
<p>Всем наверно давно известна программа для изготовления печатных плат под названием <b>Sprint-Layout</b>, на данный момент последняя версия гордо именуется, 5.0</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/1.png" alt=""></td>
</tr>
</table>
<p>Сама программа очень простая и не потребует много времени на свое освоение, но позволяет делать платы достаточно высокого качества.</p>
<p>Как я и говорил, сама программа довольно проста, но имеет множество кнопочек и менюшек, помогающих нам в работе. Поэтому наш урок в рисовании платы разделим на насколько частей.<br />
В первой части познакомимся с программой и узнаем,  где и что в ней прячется. Во второй части нарисуем простенькую плату, которая будет содержать, к примеру, пару микросхем в DIP корпусах (причем эти микросхемы сделаем с полного нуля), несколько резисторов и конденсаторов, также посмотрим такую интересную фишку программы как <b>Создатель макроса</b> и сделаем с его помощью корпус микросхемы, например TQFP-32.<br />
Также я покажу как обрисовать плату с картинки или фотографии. <span id="more-287"></span></p>
<p><b>Часть 1: Что и где у нас прячется и как это помогает нам в рисовании печатной платы.</b></p>
<p>После того как нашли программу, скачали, распаковали из архива и запустили, то видим такое вот окно.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/2.png" alt=""></td>
</tr>
</table>
<p>Это непосредственно окно работы нашей программы, где мы в последствии будем рисовать платку.</p>
<p>Начнем с верхней панели</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/3.png" alt=""></td>
</tr>
</table>
<p>Сначала посмотрим, что у нас прячется за надписью Файл.</p>
<p>Жмем на эту надпись, и тут же у нас появляется выпадающее меню.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/4.png" alt=""></td>
</tr>
</table>
<ul>
<li> <b>Новый</b>,<b>Открыть</b>,<b>Сохранить</b>,<b>Сохранить как</b>, <b>Установки принтера…</b>, <b>Печать…</b>, <b>Выход</b> С этой братией и так все ясно. Чай не первый день в винде сидим.  </li>
<li> <b>Сохранить как макрос…</b> Эта опция позволяет нам сохранить выделенный фрагмент схемы или иных деталей как макрос, который имеет расширение .lmk  дабы в дальнейшем не повторять действия по их созданию заново. </li>
<li> <b>Автосохранение.</b>. В этой опции можно настроить автосохранение наших файлов с расширением .bak и поставить необходимый интервал в минутах. </li>
<li> <b>Экспорт</b> В этой опции мы сможем сделать экспорт в один из форматов т.е сохранить нашу платку  как картинку, как файл гербера для дальнейшей передачи на производство сохранить как файл сверловки Excellon а также сохранить как файлы контуров для последующего создания платки с помощью ЧПУ станочка. Обычно пригождается при подготовке к фабричному производству. </li>
<li> <b>Директории…</b> В этой опции мы можем настроить параметры работы с программой, такие как сочетание клавиш расположения файлов, макросов, цвета слоев и т.д и т.п. </li>
</ul>
<p>Переходим к следующему пункту Редактор</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/5.png" alt=""></td>
</tr>
</table>
<ul>
<li> <b>Отменить,  Восстановить, Копировать, Вырезать, Вставить, Удалить, Выделить все</b>  Тоже все привычно и стандартно.  </li>
<li> <b>Удвоить</b> По быстрому сделать дубль выделенной детали. Хотя, ИМХО, привычней ctrl+C ctrl+V.  </li>
<li> <b>Копии…</b> </li>
<li> При выборе этого пункта откроется следующее окно: </li>
<li>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/6.png" alt=""></td>
</tr>
</table>
</li>
<li> В котором, мы сможем указать, сколько копий выделенной детали нам надо сделать по горизонтали и вертикали и как их расположить или плиткой или просто в ряд. Удобно когда надо нафигачить матрицу чего либо. Например пятачков или резисторов каких. </li>
</ul>
<p>Следующий пункт меню у нас Проект:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/7.png" alt=""></td>
</tr>
</table>
<ul>
<li> <b>Добавить плату…</b> Тут сможем добавить еще одну плату в наш файл, например очень удобно когда рисуешь основную плату и блок с кнопочками вот и можно на одной вкладке сделать основную плату потом нажать Добавить плату… и на новой вкладке нарисовать сам блок с кнопками.  А еще дополнительные платы это один из немногих способов перетащить с платы на плату кусок монтажа.  </li>
<li> <b>Свойства платы…</b>  В этой опции мы можем настроить свойства нашей платы, такие как высота и ширина, а  так же задать ей имя, например «Моя платка». Это же, кстати, проще из меню инфо на главной панели сделать.<br />
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/8.png" alt=""></td>
</tr>
</table>
</li>
<li>  <b>Копировать плату</b> В этой опции мы можем скопировать нашу плату, дабы на копии сделать небольшие изменения, например, где-то поставить немного другой разъем. </li>
<li> <b>Удалить плату</b> - и так все ясно :) </li>
<li> <b>Установить последней, Установить первой, Переместить вправо, Переместить платку влево</b> Это тасовать очередность плат в чертеже. Почти бесполезная фича.  </li>
<li> <b>Импортировать из…</b> Но мой взгляд самая полезная опция т.к позволяет вставить в платку другую платку из созданных ранее, например очень помогает когда нарисовал сложный корпус а как макрос сохранить забыл. </li>
</ul>
<p><b>Следующим пунктом у нас Действие</b></p>
<ul>
<li> <b>Повернуть, Зеркало по горизонтали, Зеркало по вертикали</b> Пояснений, думаю, не требуется. Разве, что поворот делается на фиксированный угол который задается в опциях, да детальки зеркалятся на том же самом слое. Как картинка. Впрочем, лучше самому один раз тыкнуть чем читать эту муть :) </li>
<li> <b>Группировать, Разгруппировать</b> Можно связывать детали в блоки. Таким образом, например, можно и макрос сделать. А еще при копировании обьекты группируются. Порой это бесит, а порой нравится. По ситуации зависит.  </li>
<li> <b>Переместить на противоположный слой</b> - перебрасывает деталь на соответствующий слой с другой стороны. Медь на медь, шелк на шелк.  </li>
<li> <b>Переместить на слой</b> - Аналогично верхнему меню, но с небольшой разницей, позволяет непосредственно выбрать слой, куда и будем перемещать нашу деталь.<br />
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/9.png" alt=""></td>
</tr>
</table>
</li>
<li> <b>Привязать к сетке</b> На мой взгляд, очень удобная фишка (которой, кстати, не хватает в более серьезных программах, например в таких как Eagle) в программе когда рисуешь платку с разными деталями у каждой свой шаг выводов и когда прокладываешь между ними проводники. Причем сетку можно любую задать в два клика.  </li>
<li> <b>Удалить соединения</b> В программе Sprint-Layout есть такая фишка как воздушные соединения. Обычно ими обозначают перемычки, например между двумя отверстиями, сначала поставили два пятачка, сделали между ними соединение, оно будет тонкой зеленой линией, а потом на другом слое провели между этими двумя пятачками дорожку, и выбрали эту опцию, тогда программа проанализирует нормально соединенные пятачки и уберет все лишние воздушные соединения.  </li>
<li> <b>Удалить элементы вне платы</b> Весь рабочий экран с сеткой в программе считается как плата так вот если какой то элемент попадает на ее границу, то данный пункт просто удаляет все что выходит за эти границы. </li>
<li> <b>Восстановление маски…</b> При выборе этой опции видим такое вот окошко<br />
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/10.png" alt=""></td>
</tr>
</table>
<p>Маска применяется на фабричных платах. Это та самая &#8220;зеленка&#8221; которой покрывают платы на заводе, оставляя открытыми только контакты под пайку. Если сбросить маску и отдать на завод, то потом получишь адский геморрой с процарапыванием этого лака по всем контактным площадкам.  Содрать его задача не легкая и очень утомительная. На первой версии Pinboard одна из контактных площадок по ошибке оказалась закрыта маской. Монтажники изматерились. </li>
</ul>
<p><b>Следующая по списку у нас Опции.</b></p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/11.png" alt=""></td>
</tr>
</table>
<p><b>Установки…</b><br />
При выборе этой опции у нас откроется окошко установки основных параметров нашей программы, поэтому остановимся на нем более подробно.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/12.png" alt=""></td>
</tr>
</table>
<p>Итак, первым пунктом, у нас стоит настройка основных параметров. Мы можем указать единицы измерения длины в нашем случае мм, указать цвет отверстия в контактной площадке, в нашем случае он совпадает с цветом фона и будет черным если в последствии наш фон будет красным, то и цвет отверстия в контактной площадке тоже будет красным. Также можно просто выбрать цвет отверстия белым, и он будет белым в независимости от того какой у нас фон.<br />
Вторым пунктом у нас идет Виртуальные узлы и трассы данный пункт если он отмечен дает очень интересное свойство в программе, он ставит на проводнике который мы рисуем несколько виртуальных узлов.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/13.png" alt=""></td>
</tr>
</table>
<p>Вот они тоненькие синие кружочки которые в последствии если потянуть за них курсором мышки можно превратить в полноценный узел, и изменить, таким образом, проложенную дорожку.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/14.png" alt=""></td>
</tr>
</table>
<p>А программа автоматом добавит на участках между реальными узлами еще несколько виртуальных узлов и мы имеем возможность дальнейшего редактирования нашей дорожки. Это бывает очень удобно когда приходиться протаскивать например третью дорожку, между двумя уже проложенными.</p>
<p><b>Зеркально макросы и текст на обратной стороне</b><br />
Если данный пункт активирован, то при вставке текста или макроса на слой программа будет сама смотреть зеркалить его или нет для того чтобы в последствии детали или надписи имели правильное отображение на нашей готовой плате.</p>
<p>Следующий пункт у нас Карта платы, данный пункт имеет один интересный прикол, если он активирован, то в левой части нашей программы появляется небольшое окошко.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/15.png" alt=""></td>
</tr>
</table>
<p>Это как бы уменьшенная копия нашей платки, включать или нет, это решать уже каждому меня лично прикалывает. Фанаты жанра RTS тоже оценят :)</p>
<p>Всплывающие окна в основном всякие подсказки в программе &#8212; очевидно. </p>
<p><b>Ограничить высоту шрифта (мин 0,15мм)</b><br />
Вот та галочка что ищут многие начинающие да и не только пользователи этой программы если она стоит то когда делаем надписи на плате или на элементах то мы не можем сделать размер букв меньше чем 1,5 мм. Так что если надо, куда то ставить текст размером меньше чем 1,5 мм то рекомендую ее снять. Но при отправке на производство это надо учесть. Не везде могут напечатать шелкографию столь малого разрешения. </p>
<p>Идем дальше и видим еще один интересный пунктик, а именно <b>Ctrl+ мышь для запоминания параметров выделенный объектов</b>, если этот пункт активирован, то появляется один интересная штука. Например, нарисовали две контактные площадки и между ними проложили дорожку скажем шириной 0,6 мм потом сделали еще и еще что-то и в итоге просто забыли какая была ширина этой дорожки, конечно можно просто по ней щелкнуть и в настройке ширины дорожки у нас отобразиться ее ширина, </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/16.png" alt=""></td>
</tr>
</table>
<p>тут вместо 0,55 станет наша ширина 0,60, но ведь потом подкручивать ползунок, справа от числа, дабы подстроить ширину на 0,6 лениво ведь, но если мы щелкнем на той же дорожке с зажатой кнопкой Ctrl то тогда наше значение 0,6 сразу запомниться в этом окне и новую дорожку, мы будем рисовать уже толщиной 0,6мм.</p>
<p><b>Использование шага 0,3937 вместо 0,4.</b><br />
Переводик конечно очень корявый в оригинале этот пункт написан так HPGL-Skalierung mit Faktor 0.3937 statt 0.4  в общем этот пункт отвечает за создание HPGL файла для последующей передачи на координатный станок, и указывает использовать ли один знак после запятой либо в зависимости от станка использовать четыре знака после запятой.</p>
<p>С первым пунктом мы закончили и перейдем теперь ко второму пункту нашего окошка он у нас называется Цвета и посмотрим, что же прячется там.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/17.png" alt=""></td>
</tr>
</table>
<p>Тут у нас все очень просто и задаем цвета для нашей программы для фона, сетки, линий, слоев, либо выбираем из нескольких предложенный вариантов, тут как говориться на вкус и цвет товарищей нет, и каждый ставит их под себя.</p>
<p>Идем дальше и пункт <b>Директории</b> </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/18.png" alt=""></td>
</tr>
</table>
<p>Тут тоже ничего особенного нет, просто указываем пути где и что у нас располагается, данная настройка имеет место если мы ставим программу из дистрибутива скачанного с официального сайта но т.к программа у нас великолепно работает и без всякой установки, то просто ничего можно не менять и пойти дальше.</p>
<p>А дальше у нас пойдет пункт <b>Библиотека</b> </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/19.png" alt=""></td>
</tr>
</table>
<p>Тоже в принципе ничего особо интересного не видим, просто указываем где у нас будет храниться библиотека наших макросов, т.к программа у нас умная то она сама определяет расположение нашей библиотеки с макросами.</p>
<p>Переходим к пункту Возврат</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/20.png" alt=""></td>
</tr>
</table>
<p> Тут тоже все довольно просто и мы просто указываем число, на сколько программа нам сможет сделать откат изменений, если где чего напортачили при рисовании нашей платы я поставил максимальное число 50.</p>
<p>Переходим к следующему пункту, и он у нас называется <b>I</b><sub><b>max</b></sub> <strike>тут показывают кино в 3D формате</strike> </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/21.png" alt=""></td>
</tr>
</table>
<p> Мы задаем предполагаемую толщину меди на нашей заготовке и предполагаемую температуру, дабы встроенный простенький калькулятор показал нам ток и напряжение, которое может проходить по проводнику.</p>
<p>И последний пункт в  нашей настройке это пункт Клавиши</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/22.png" alt=""></td>
</tr>
</table>
<p>В нем мы видим клавиатурные сокращения для тех или иных операций и если что то можем их поменять, хотя я с этим особо не парился и оставил все как есть по умолчанию.</p>
<p>С пунктом Установки мы закончили и посмотрим остальные опции выпадающего меню <b>Опции</b> </p>
<p><b>Свойства</b><br />
Если выбираем этот пункт, то справа в программе у нас откроется окошко</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/23.png" alt=""></td>
</tr>
</table>
<p>Свойства где мы можем задать размер нашей платки по ширине и высоте а также ее название.</p>
<p><b>DRC-контроль</b><br />
При выборе этого пункта у нас откроется справа еще одно окно</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/24.png" alt=""></td>
</tr>
</table>
<p>Которое позволит нам проконтролировать нашу нарисованную платку поставить зазоры ограничения и т.д. Архиудобная и архинужная вещь. Особенно при отправке плат на производство, да и в кустарных условиях пригождается. Суть в чем. Ставим, например, минимальный зазор в 0.3мм и минимальную дорожку не меньше чем 0.2мм и при DRC проверке прога нам найдет все места где эти нормы не выполняются. А раз не выполняются, то могут быть косяки при изготовлении платы. Например, дорожки склеются или еще какая проблема. Также тут идет проверка диаметров отверстий и прочие геометрические параметры. </p>
<p><b>Библиотека</b><br />
При выборе этого пункта мы увидим еще одно окно в правой части программы.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/25.png" alt=""></td>
</tr>
</table>
<p>А именно окошко с макросами, т.е окошко где мы можем выбрать наши готовые детали и корпуса для их последующей вставки в нашу платку.</p>
<p><b>Шаблон…</b><br />
Если выбрать этот пункт, то увидим такое окошко</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/26.png" alt=""></td>
</tr>
</table>
<p>Очень интересный пункт он позволяет поставить картинку задним фоном на наш стол в программе, где мы рисуем платку. Пока описывать детально его не буду, но к нему вернусь.</p>
<p><b>Металлизация</b><br />
При выборе этой опции программа заливает нам всю свободную область медью, но при этом оставляет зазоры вокруг нарисованных проводников.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/27.png" alt=""></td>
</tr>
</table>
<p> Эти зазоры нам могут иногда очень пригодиться, да и плата при таком подходе получается покрасивее, и поэстетичнее, где настроить ширину зазора тоже остановлюсь более подробно, когда будем рисовать платку.</p>
<p><b>Вся плата</b><br />
Выбираем эту опцию, на экране уменьшиться масштаб, и мы увидим всю нашу платку целиком.</p>
<p><b>Все компоненты</b><br />
Аналогично верхнему пункту, но с той лишь разницей что уменьшит масштаб в зависимости от того, сколько компонентов раскидано у нас по платке.</p>
<p><b>Все выделенное</b><br />
Этот пункт подгонит размер экрана в большую или меньшую сторону в зависимости от того, какие компоненты в данный момент у нас выделены.</p>
<p><b>Предыдущий масштаб</b><br />
Вернуться к предыдущему масштабу, тут все просто.</p>
<p><b>Обновить изображение</b><br />
Простая опция просто обновляет изображение на нашем экране. Полезно если на экране возникли какие то визуальные артефакты. Иногда бывает глюк такой. Особенно при копипастинге больших кусков схемы. </p>
<p><b>О проекте…</b><br />
Если выбрать эту опцию то можно написать что либо о самом проекте, а потом вспомнить особенно после вчерашнего, что я там рисовал то, выглядит это так.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/28.png" alt=""></td>
</tr>
</table>
<p><b>Таблица отверстий…</b><br />
Довольно интересный пункт меню который отображает сколько отверстий на нашей плате и какие нужны сверла что бы их просверлить, хотя я использую его в основном для того дабы привести к единому показателю все точки на контактных площадках для последующего сверления и ставлю их размер обычно 0,6 мм.<br />
Вот как это выглядит на реально нарисованной плате.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/29.png" alt=""></td>
</tr>
</table>
<p>Тут видим, что отверстий нам сверлить 56 штук и надо пять их них подогнать, дабы внутренняя точка на контактной площадке была 0,6 мм.</p>
<p><b>Создатель макроса…</b><br />
Очень, очень, очень, полезный пункт в программе, который позволяет нам нарисовать сложный корпус, такой например как SSOP,MLF,TQFP либо какой то другой за минуту-другую. При нажатии на этот пункт откроется такое вот окошко.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/30.png" alt=""></td>
</tr>
</table>
<p>Тут мы можем выбрать и настроить рисование нашего корпуса, смотря на данные из даташита на ту или иную микросхему. Выбираем тип площадок, расстояние между ними. Тип расположения и опа! На плате готовый набор падов. Осталось их только оформить на слое шелкографии (например, обвести в рамочку) и сохранить как макрос. Все!</p>
<p>Следующие пункты такие как Регистрация и знак вопроса, т.е помощь описывать не буду потому что в них нет абсолютно ничего что нам поможет в дальнейшем рисовании нашей платки, правда помощь будет полезна тем кто дружит с немецким языком.</p>
<p>Уф описал таки пунктики в выпадающих меню, но все эти пункты имеют свои пиктограммы в виде картинок на панели чуть ниже, т.е туда вынесены все необходимые для работы опции вот эта панель.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/31.png" alt=""></td>
</tr>
</table>
<p>Слишком подробно останавливаться на ней не буду т.к она дублирует пункты меню, но при дальнейшем рисовании просто буду ссылаться на эти иконки дабы не затруднять восприятие фразами типа, Выберем пункт меню Файл, Новый.</p>
<p>Как и говорил опишу эти иконки, двигаться буду слева на право и просто их перечислять если в иконке будет какая нить настройка то остановлюсь более подробно.<br />
Поехали слева на право Новый, Открыть файл, Сохранить файл, Распечатать файл, Отменить действие, Повторить действие, Вырезать, Скопировать, Вставить, Удалить, Продублировать, Повернуть а вот тут сделаем первую остановку, и посмотрим более подробно на этот пункт, если выбрать какой то компонент на нашей платке и щелкнуть на маленьком треугольнике рядом с иконкой поворота то увидим следующее.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/32.png" alt=""></td>
</tr>
</table>
<p> Вот тут то мы и сможем выбрать на какой угол нам вращать нашу деталь как я говорил выше он был по умолчанию 90 градусов а тут и 45 и 15 и 5 и даже можем поставить свой например как я  поставил 0,5 т.е пол градуса.<br />
  А теперь развлекаемся!  Накидываем на плату комплектухи, разворачиваем ее как попало, под произвольными углами. Разводим все это кривыми линиями аля Topor и хвастаемся перед друзьями укуренными платами с психоделической разводкой :) </p>
<p><b>Идем дальше.</b><br />
Отразить зеркально по вертикали, Отразить зеркально по горизонтали, Выровнять&#8230;</p>
<p>На этом пункте тоже остановлюсь более подробно пункт на самом деле очень хороший помогает придать красивый и эстетичный вид платке дабы в дальнейшем можно было похвастаться перед друзьями как у тебя все аккуратненько и красиво например ставим SMD детали на нашу плату а они все вкривь да вкость из-за привязке к сетке, а тут выдели несколько деталей и выбрали выравнивание по левому краю и у нас все аккуратно смотрится.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/33.png" alt=""></td>
</tr>
</table>
<p>Вот на картинке хорошо видно процесс до и после выравнивания.<br />
Идем дальше.<br />
Привязать к сетке, Удалить соединения, Группировать, Разгруппировать, Масштаб&#8230;</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/34.png" alt=""></td>
</tr>
</table>
<p>Обновить, Шаблон, Свойства, Контроль, Библиотека, О проекте и Прозрачность<br />
Прозрачность тоже довольно интересный пункт, который позволяет видеть слои особенно полезен когда делается двухстороння плата и очень много проводников на каждом слое, если нажать эту кнопку то выглядеть будет примерно так.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/35.png" alt=""></td>
</tr>
</table>
<p>Получается что все слои, становятся как бы прозрачными, и можно видеть один слой через другой.</p>
<p>Теперь обратим наше внимание на панель, которая у нас располагается  слева</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/36.png" alt=""></td>
</tr>
</table>
<p>В ней пойдем по пунктам сверху вниз.<br />
<b>Курсор</b>  Данный пункт при нажатии на него просто представляет из себя курсор, который позволяет нам выделить какой то элемент на плате и перетащить его по плате удерживая левую кнопку мышки<br />
<b>Масштаб</b> При нажатии на эту иконку указатель измениться на линзу с плюсиком и минусом по краям и соответственно если нажать левую кнопку мыши то изображение увеличиться если правую то оно уменьшиться. В принципе при рисовании платки этот пункт можно и не выбирать а прокручивать колесо мышки вперед или назад соответственно вперед масштаб будет увеличиваться а назад уменьшаться.<br />
<b>Проводник</b> При выборе этой иконки указатель меняет свой вид на точку с перекрестьем и позволяет нам нарисовать дорожку от одной контактной площадки к другой. Дорожка рисуется по активному слою, который выбирается внизу.<br />
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/37.png" alt=""></td>
</tr>
</table>
<p><b>Контакт</b> Данная иконка позволяет нам выбрать форму контактной площадки.<br />
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/38.png" alt=""></td>
</tr>
</table>
<p>  Если же выбрать строку «с металлизацией» то контактная площадка изменит цвет на синеватый, с красным тоненьким кругом внутри, это будет подразумевать под собой что в данном отверстии идет металлизация и что это отверстие переходное с одной стороны платы на другую. Также такие контактные площадки очень удобно ставить на двусторонних платах, т.к при последующей распечатке эти контактные площадки будут пропечатаны на обоих, сторонах нашей будущей платы.<br />
<b>SMD- контакт</b> При выборе этой иконки, появляется возможность расположить на нашей платке маленькие smd контакты.<br />
<b>Дуга</b> Данная иконка позволяет нам нарисовать окружность или сделать дугу.<br />
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/39.png" alt=""></td>
</tr>
</table>
<p> Дабы окружность превратить в дугу достаточно на окружности выбрать точку и  просто немного ее протащить в итоге из окружности получим дугу как на изображении справа.<br />
 <b>Полигон</b> Эта иконка позволяет нам нарисовать замкнутый полигон на нашей платке дабы придать ей более красивый вид. Также, если немного изменить его свойства, то можно получить полигон из сетки. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/40.png" alt=""></td>
</tr>
</table>
<p>Это бывает особенно актуально тем кто делает свои платки по технологии ЛУТ и у кого при печати на лазерном принтере, принтер не делает идеально черным большие закрашенные области. В настройках также можно выбирать толщину окантовки, чтобы регулировать округлость углов нашего полигона.<br />
<b>Фигура</b><br />
Если выбрать эту иконку, то тогда открывается окошко из которого можно нарисовать либо какую нить фигурку а можно и причудливую спираль изобразить.</p>
<p><TABLE cellSpacing=0 cellPadding=0 border=0><TBODY><TR><TD><img src="http://easyelectronics.ru/img/Soft/SL5/41.png"></TD><TD><img src="http://easyelectronics.ru/img/Soft/SL5/41_1.png"></TD></TR></TBODY></TABLE></p>
<p><b>Текст</b> При выборе этой иконки открывается окно, где можно ввести текст и потом вставить в какое либо место на плате, подписать например элементы, микросхемы, или вставить свое неповторимое имя на платку. По умолчанию размер текста 5 мм, но регулируется до параметра 1,5 мм если же надо поставить текст размером меньше чем 1,5 мм то я выше писал что надо убрать в настройке и тогда можно будет писать текстом хоть 0,1 мм.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/42.png" alt=""></td>
</tr>
</table>
<p><b>Соединение</b><br />
При выборе этой иконки указатель становиться маленьким и включается режим «воздушного» соединения, достаточно щелкнуть на одной контактной площадке а потом на другой и между ними появится вот такая замечательная зеленая ниточка, которую многие используют для того чтобы показать на плате перемычки, которые потом надо будет запаять. Вот только перемычки я бы ей делать не советовал. Дело в том, что они не дают связи при электрической проверке. Лучше всего перемычки делать дорожками на втором слое, соединяя их через сквозные металлизированные отверстия. В этом случае электрическая проверка покажет контакт. Так что, ИМХО, соединение это бесполезная вещь. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/43.png" alt=""></td>
</tr>
</table>
<p><b>Автотрасса</b><br />
Неимоверно простецкое подобие авторазводчика. Работает просто. Вначале соединяем пины через &#8220;соединение&#8221;, а потом тыкаем в них инструментом автотрассера. Опа.. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/44.png" alt=""></td>
</tr>
</table>
<p>Еще одна бесполезная вещь :) Впрочем, может быть иногда поможет найти дорожку в хитром месте. Да, шагает она по сетке, так что если хочешь чтобы работало лучше - сделай сетку помельче. </p>
<p><b>Контроль</b><br />
Электрический контроль. Позволяет найти все замкнутые цепи. Архиполезная вещь при разводке. Особенно когда у тебя уже дофига всяких цепей проведено и глаз отказывается воспринимать эту кашу. А так ткнул тестером &#8212; все засветилось. Красота! Особенно полезно земли и питания вычислять. Чтобы не забыть ничего запитать. Главное перемычки делать не через &#8220;соединение&#8221;, а по второму слою. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/45.png" alt=""></td>
</tr>
</table>
<p><b>Измеритель</b><br />
Позволяет померить расстояние от точки до точки, очень удобно, когда прикидываешь примерный размер платы, также ко всему прочему можно еще увидеть и угол есть ли он или нет.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/46.png" alt=""></td>
</tr>
</table>
<p><b>Фотовид</b><br />
Вообще прикольная штука можно поглядеть, как платка будет выглядеть если сделают на производстве, или надо рисунок покрасивее куда то выложить на форум или сайт. А еще на ней хорошо разглядывать паяльную маску, где она есть, а где ее нет. Ну и на шелкографию полюбоваться можно. В общем, полезная фича. Также позволяет выловить баги с зеркальным отображением букв/компонентов или если что то по ошибке не на тот слой впендюрил. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/47.png" alt=""></td>
</tr>
</table>
<p><b>Маска</b><br />
Если нажать на эту иконку то можно посмотреть как будет выглядеть маска для пайки, если в последующем придется заказывать платку на производстве.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/48.png" alt=""></td>
</tr>
</table>
<p> Можно в этом режиме удалять или наоборот закрывать детальки маской. Просто тыкая по проводочкам. Есть белая - значит открыто. </p>
<p><b>Теперь подходим к небольшим настройкам</b><br />
 Первым пунктом у нас идет настройка шага сетки первые семь пунктов шага сетки забиты самим производителем программы и их изменить никак нельзя, можно только выбрать но также в настройке сетки можно добавить и свои размеры достаточно нажать «Добавить шаг сетки…» и ввести свои параметры что я и сделал добавив шаг сетки 1мм, 0,5мм, 0,25мм, 0,10 мм 0,05мм и 0,01 мм</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/49.png" alt=""></td>
</tr>
</table>
<p>Активный на данный момент шаг сетки отображается галочкой и с данный момент составляет 1 мм</p>
<p>Также можно и удалить отмеченный шаг сетки или вообще ее выключить привязку к сетке достаточно щелкнуть по соответствующей строчке. А если двигать с нажатой клавишей Ctrl то шаг сетки игнорируется. Удобно когда надо что-либо подвинуть не по сетке.</p>
<p>Следующие три настраиваемых пункта:</p>
<ul>
<li> Настройка ширины проводника, где мы настраиваем ширину нашего проводника. </li>
<li> Настройка размера контактной площадки, тут мы настраиваем внешний и внутренний диаметр. </li>
<li> И последняя настройка это настройка размеров контактной площадки SMD по горизонтали и по вертикали. </li>
</ul>
<p>Также можно создавать свои размеры линий/площадок и сохранять их, чтобы потом можно было выбирать из списка.</p>
<p>Теперь осталась только нижняя панель:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/50.png" alt=""></td>
</tr>
</table>
<p>Тут все просто, слева у нас положение курсора и 5 рабочих слоев активный рабочий слой на данный момент отмечен точкой.<br />
Далее у нас идет кнопочка, Покрытие металлом свободных участков платы, эта кнопочка покрывает всю свободную область платы медью и делает зазоры около проводников, вот в этом окошек и настраивается величина необходимого зазора. Надо только отметить, что зазор выставляется для каждой линии в отдельности! Т.е. бесполезно щелкать этим счетчиком. Надо выделить всю плату (или конкретный проводок)  и только тогда регулировать. </p>
<p>Под ней располагается еще одна иконка, заштрихованный прямоугольник. Он обладает одним интересным свойством, если на него нажать то мы сможем освободить от заливки на плате ту область которую выберем. </p>
<p> Тут правда есть одна тонкость. Дело в том, что если мы попытаемся соединить нашу заливку проводком, то у нас ничего не выйдет. Т.к. заливка будет в панике разбегаться в стороны.  Решается просто &#8212; кидаем от земляной точки до заливки и делаем для этого проводника зазор равный нулю. Все!</p>
<p>Тут же можно и на заливке сделать негативную надпись. Тоже делается просто &#8212; кладем надпись на заливку (заливка разбегается от надписи в разные стороны), а потом в свойствах ставим галочку &#8220;Без зазора&#8221;. Все, надпись стала в виде прорезей в заливке. </p>
<p>Да еще забыл про такую маленькую подсказку которая появляется если нажать на маленький вопросик.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/51.png" alt=""></td>
</tr>
</table>
<p>Вот на этом закончим первый наш урок, в нем узнали что и где у нас прячется и располагается что и где настраивается.</p>
<p><b>Часть №2</b><br />
Нарисуем простенькую платку, создадим корпус <b>TQFP-32</b> и узнаем, как обрисовать платку найденную в Интернете.</p>
<p>В прошлой части мы познакомились с программой, узнали что, где, прячется, что настраивается, а что нет, узнали небольшие фишки, которые есть в программе.<br />
Теперь попробуем после прочитанного в первой части, нарисовать простенькую плату.</p>
<p>В качестве образца возьмем простую схему, ее я откопал в одном из старых журналов, говорить в каком не буду, может кто из посетителей сайта и вспомнит этот журнал.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/52.png" alt=""></td>
</tr>
</table>
<p>Видим что схема старая пережила много чего, и правки карандашом и заливку спиртоканифольным флюсом, но для наших целей она подходит идеально по причине своей простоты.<br />
Прежде чем будем рисовать нашу платку проанализируем схему на предмет того что нам из деталей понадобится.</p>
<ul>
<li> Две микросхемы в DIP корпусах  по 14 ножек у каждой микросхемы. </li>
<li> Шесть резисторов. </li>
<li> Один полярный конденсатор и два обычных конденсатора. </li>
<li> Один диод. </li>
<li> Один транзистор. </li>
<li> Три светодиода. </li>
</ul>
<p>Начнем рисовать наши детали, и для начала определимся, как выглядят наши микросхемы и какие они имеют размеры.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/53.png" alt=""></td>
</tr>
</table>
<p> Вот так выглядят эти микросхемы в DIP корпусах, и имеют размеры между ножками которые составляют 2,54 мм и  между рядами ножек эти размеры 7,62 мм.</p>
<p>Теперь нарисуем эти микросхемы и сохраним их как макрос, дабы в дальнейшем не рисовать заново и у нас будет готовый макрос для последующих проектов.</p>
<p>Запускаем нашу программу и ставим активным слой К2, размер контактной площадки равным 1,3 мм ее форму выбираем «Закругленный вертикально» ширину проводника равной 0,5 мм, и шаг сетки выставим равным 2,54 мм.<br />
Теперь согласно размерам, которые я приводил выше нарисуем нашу микросхему.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/54.png" alt=""></td>
</tr>
</table>
<p>Теперь проверим ее размеры. Впрочем, если делать по сетке это и не требуется. Куда она денется с подводной лодки?</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/55.png" alt=""></td>
</tr>
</table>
<p>Все получилось как и планировалось. </p>
<p>Тогда сохраним нашу будущую плату. Нажимаем на иконку дискеты и водим в поле название файла.</p>
<p>Мы нарисовали расположение ножек микросхемы, но наша микросхемка имеет какой-то незаконченный вид и выглядит сиротливо, надо придать ей более опрятный вид. Надо сделать контур шелкографии. </p>
<p>Для этого переключим шаг сетки на 0,3175 поставим толщину проводника равной 0,1 мм и сделаем активным слой В1.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/57.png" alt=""></td>
</tr>
</table>
<p>Теперь щелкаем по иконке Проводник и нарисуем небольшой контур, щелкаем левой кнопкой мышки, когда надо поставить точку, и правой когда надо завершить линию, потом щелкнем по иконке Полигон и сделаем небольшой треугольник в левой части этого контура.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/58.png" alt=""></td>
</tr>
</table>
<p>Этим треугольником мы обозначим, где у нас будет первый вывод микросхемы.</p>
<p>Почему я нарисовал именно так?<br />
Все очень просто у нас в программе по умолчанию пять слоев это слои К1,В1,К2,В2,U.<br />
Слой К2 это сторона пайки (нижняя) компонентов, слой В1 это маркировка компонентов, т.е куда что ставить или слой шелкографии который потом можно будет нанести на лицевую сторону платы.<br />
Слой К1 это верхняя сторона платы если делаем плату двухсторонней, соответственно слой В2 это слой маркировки или шелкографии для верхней стороны и соответственно слой U это контур платы.</p>
<p>Вот теперь наша микросхемка выглядит более опрятно и аккуратно.</p>
<p>Почему делаю именно так? Да просто потому что меня удручают платы сделанные кое как и на скорую руку бывает скачаешь какую нить платку из сети, а там только контактные площадки и больше ничего. Приходится проверять по схеме каждое соединение, что откуда пришло, что куда идти должно&#8230;</p>
<p>Но я отвлекся.  Мы сделали нашу микросхемку в корпусе DIP-14 теперь нам надо ее сохранить как макрос для того дабы в последствии не рисовать подобное , а просто взять из библиотеки и перенести на плату. К слову сказать, вряд ли ты найдешь SL5 без макросов вобще. Какой то минимальный набор стандартных корпусов уже есть в папке макросов. А по сети ходят целые комплекты из макросборок. </p>
<p>Теперь зажмем левую кнопку мыши и выделим все что мы только что нарисовали.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/59.png" alt=""></td>
</tr>
</table>
<p>Потом нажмем на иконку замка - сгруппируем. А лучше запомнить хоткеи и юзать их.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/60.png" alt=""></td>
</tr>
</table>
<p>И все наши три объекта сгруппируются в один</p>
<p>После этого выберем Файл, Сохранить как макрос…</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/61.png" alt=""></td>
</tr>
</table>
<p>И зададим ему имя DIP-14. Также не помешает создать дерево папок в директории макросов. И не сваливать все сборки в одну помойку, а сортировать их по разделам.</p>
<p>Теперь нажмем на кнопку макросы:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/62.png" alt=""></td>
</tr>
</table>
<p>Вот она буква М на микросхеме.<br />
И посмотрим в окне макросов наш только что созданный макрос</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/63.png" alt=""></td>
</tr>
</table>
<p>Вот наш только что созданный макрос высветился в окошке справа снизу.<br />
Теперь можно просто перетащить его оттуда на сетку мышкой. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/64.png" alt=""></td>
</tr>
</table>
<p>Отлично, но не мешало бы определиться какого же размера будет наша плата, я прикинул по габаритам деталей как их примерно можно раскидать и посчитал в итоге у меня размер получился 51мм на 26 мм.<br />
Переключаемся на слой U - слой фрезеровки или границы платы. На заводе по этому контуру пройдутся фрезой при изготовлении. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/66.png" alt=""></td>
</tr>
</table>
<p>Ставим толщину проводника 0,1 мм</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/67.png" alt=""></td>
</tr>
</table>
<p>Выбираем шаг сетки равным 1 мм</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/68.png" alt=""></td>
</tr>
</table>
<p>И рисуем контур нашей будущей платы.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/69.png" alt=""></td>
</tr>
</table>
<p>Наблюдательный человек скажет ага, начальная точка контура не лежит непосредственно на нуле и будет абсолютно прав я например когда рисую свои платы всегда отступаю сверху и слева по 1 мм. Обусловлено это тем, что в дальнейшем плата будет делаться либо<br />
с помощью метода ЛУТ либо с помощью фоторезиста, а в последнем необходимо чтобы на шаблоне были негативные дорожки, т.е белые дорожки на темном фоне, и при таком подходе в проектировании платы готовый шаблон потом легче вырезать, делать несколько копий на одном листе. Да и сама плата при таком подходе выглядит гораздо красивее. Многие наверно качали платы из сети и самый прикол получается, когда открываешь такую плату а там, чертежик посередине огромного листа и какие то кресты блин по краям.<br />
Теперь поменяем шаг сетки на 0,635 мм.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/70.png" alt=""></td>
</tr>
</table>
<p>И примерно поставим наши микросхемы</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/71.png" alt=""></td>
</tr>
</table>
<p>Теперь нам надо нарисовать конденсатор.<br />
Выбираем Контакт, Круг</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/72.png" alt=""></td>
</tr>
</table>
<p>Шаг сетки оставим тот же равный 0,635 мм.<br />
Поставим внешний круг нашей площадки равный 2мм а внутренний 0,6 мм</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/73.png" alt=""></td>
</tr>
</table>
<p>И поставим две контактные площадки на расстоянии 2,54 мм</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/74.png" alt=""></td>
</tr>
</table>
<p>В схеме у нас конденсатор небольшой емкости и такого расстояния между выводами будет вполне достаточно.<br />
Теперь переключимся на слой В1.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/75.png" alt=""></td>
</tr>
</table>
<p>И на нем нарисуем примерный радиус нашего конденсатора, для этого нам понадобиться инструмент дуга.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/76.png" alt=""></td>
</tr>
</table>
<p>Выберем ее и у нас появится перекрестье на экране, а также курсор изменит свой внешний вид. Вот мы его и поставим как раз посередине наших двух контактов.</p>
<p>Теперь удерживая левую кнопку мышки немного потянем вырисовывая круг под наш диаметер конденсатора, а также с помощью проводника, нарисуем знак плюсика и условное изображение конденсатора. Рисуем, естественно, по слою шелкографии. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/78.png" alt=""></td>
</tr>
</table>
<p>Вот мы и получили наш конденсатор смотрим в схему и видим что он подключается к выводам 4,5 и 1 микросхемы вот примерно туда его и воткнем.<br />
Теперь установим ширину дорожки равной 0,8 мм и начнем соединять ножки микросхемы, соединяем очень просто, сначала щелкнули на одной ножке микросхемы левой кнопкой микросхемы потом на другой, и после того как довел проводник (дорожку) туда куда хотели щелкаем правой, после то как щелкнули правой дорожка больше не будет продолжаться.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/79.png" alt=""></td>
</tr>
</table>
<p>Теперь по аналогичному принципу строим детали, ставя их в нашу плату рисуем между ними проводники, чешем в затылке когда не получается куда то проложить проводник, думаем, опять прокладывая проводники и в некоторых местах не забываем менять ширину проводника, таким образом постепенно выстраивая плату, также при прокладывая проводники нажимаем на клавиатуре пробел эта кнопка меняет углы изгиба проводника, рекомендую попробовать вещь прикольная. Отдельно хочу остановиться на группировке объектов несколько объектов можно собрать в один щелкая на них левой кнопкой мишки с зажатым шифтом, и потом нажать группировку. Итак, рисуем, рисуем, В итоге получаем вот это:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/80.png" alt=""></td>
</tr>
</table>
<p>Помимо всего прочего в слоях, есть одна интересная веешь, такая как отключение видимости слоя, достаточно шелкнуть на имени НЕАКТИВНОГО слоя чтобы сделать его невидимым. Удобно когда проверяешь плату, чтобы всякие лишние линии не мозолили глаз и не отвлекали. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/81.png" alt=""></td>
</tr>
</table>
<p>В результате плата выглядит так:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/82.png" alt=""></td>
</tr>
</table>
<p>Вот наша платка и готова, осталось всего ничего добавить несколько крепежных отверстий, вообще отверстия лучше проектировать на самом первом этапе создания платы.<br />
Отверстия сделаем теми же самыми контактными площадками, после травления у нас будут маленькие точки, и мы точно просверлим отверстия для крепления.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/83.png" alt=""></td>
</tr>
</table>
<p>Теперь немного пояснений по печати зеркального/незеркального изображения. Обычно проблема возникает с ЛУТом, когда по неопытности печатаешь изображение не в том отображении.  Проблема решается на самом деле просто.</p>
<p>  Во всех программах разводки плат у нас принято что текстолит &#8220;прозрачный&#8221; поэтому мы рисуем дорожки глядя как бы сквозь плату. Так проще, в том смысле что нумерация выводов микросхем у нас получается естественной, а не зеркальной  и не путаешься.  Так вот. Нижний слой уже у нас зеркальный. Его печатаем как есть.</p>
<p> А вот верхний надо зеркалить. Так что когда будете делать двусторонку (хотя не советую, большую часть плат можно развести по одной стороне) то ее верхнюю сторону надо будет уже зеркалить при печати. </p>
<p>Вот мы нарисовали простую платку осталось всего несколько маленьких штришков.<br />
Уменьшить общий размер рабочего поля и вывести на печать. Впрочем, можно просто вывести на печать как есть. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/84.png" alt=""></td>
</tr>
</table>
<p>Если вы печатает для ЛУТа или фотошаблон для резиста, то надо чтобы цвет был максимально темный и непрозрачный. А дорожки у нас по дефолту зеленые и при печати будут серыми. Это легко решается выбором черного цвета для печати. Также надо выключить все другие слои. Такие как шелкография и оборотная сторона платы. Иначе будет каша. </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/86.png" alt=""></td>
</tr>
</table>
<p>Зададим несколько копий, мало ли вдруг запортачим:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/88.png" alt=""></td>
</tr>
</table>
<p>Вот мы и нарисовали простенькую платку расположили несколько копий на листе напечатали изготовили и наслаждаемся готовым.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/89.png" alt=""></td>
</tr>
</table>
<p>Все это конечно хорошо но и саму платку не мешало бы закончить, довести до ума, да и положить в архив, вдруг когда пригодиться, или кому то переслать потом надо будет, а у нас не подписаны даже элементы что и где стоит, в принципе то можно и так мы то все помним но вот другой человек которому мы это дадим будет долго материться, сверяя по схеме. Сделаем последний штришок, поставим обозначения элементов и их номинал.<br />
Сначала переключимся на слой B1.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/90.png" alt=""></td>
</tr>
</table>
<p>Теперь выберем иконку текст, в ней проставим размер шрифта 1.0 мм (как сделать, дабы можно было писать шрифтом меньше чем 1,5 мм я уже писал так что смотрим внимательно) включим английский язык на клавиатуре и начнем расставлять обозначения элементов в зависимости, от элемента перед постановкой надписи будем нажимать кнопочки с углами поворота шрифта 0,90,180, или 270 градусов.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/91.png" alt=""></td>
</tr>
</table>
<p>После того как расставили все обозначения элементов можем их выровнять дабы смотрелось более аккуратно, после всех этих действий наша платка выглядит вот так:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/92.png" alt=""></td>
</tr>
</table>
<p>Теперь осталось самое интересное, это проставить номиналы деталей, выделяем левой кнопкой какую либо деталь и жмем на ней правой кнопкой мышки, в выпадающем меню выбираем пункт, Обозначить.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/93.png" alt=""></td>
</tr>
</table>
<p>И в поле пишем наш номинал резистора R1 согласно схеме он у нас 1,5К<br />
Написали, жмем ОК и потом если подведем указатель к резистору R1 то у нас высветиться его номинал.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/95.png" alt=""></td>
</tr>
</table>
<p>Таким образом проставляем номиналы всех деталей и если ничего больше нет то отправляем платку в архив. Единственно не забываем одну вещь программа не любит русские буковки так что все надписи делаем исключительно на английском языке. Впрочем это не касается обозначений номинала во всплывающих подсказках. </p>
<p>Вот мы и сделали простую плату.</p>
<p><b>Создание корпуса TQFP-32</b><br />
Идем дальше теперь мы нарисуем немного сложный корпус, а именно TQFP-32 для этого на нашей платке сделаем вторую вкладку. Делается она очень легко, нажимаем вот тут </p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/96.png" alt=""></td>
</tr>
</table>
<p>Прямо на надписи правой кнопкой мышки и в выпадающем меню выбираем Новая плата. После отвечаем утвердительно на вопрос, откроем свойства новой платки и назовем ее TQFP-32.</p>
<p>Теперь открываем даташит на микросхему которую собрались рисовать сделаем например смотря на даташит от ATmega-8.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/99.png" alt=""></td>
</tr>
</table>
<p>Вот что пишут нам в самом даташите. Параметров дофига, но ничего. Сначала уменьшим размер сетки до 0,15785 мм на всякий случай, а потом откроем такую фишку программы как <b>Создатель макроса</b>.</p>
<p>Опции ->Создатель макроса.</p>
<p>После того как открыли, то мы перед собой видим такое окно.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/100.png" alt=""></td>
</tr>
</table>
<p>Смотрим в даташит на микросхему и видим квадрат у которого с каждой стороны ножки блин, ну да ничего не беде просто в верхнем выпадающем меню выберем другое расположение а именно Четырехсторонний и щелкнем на контакте SMD. Вот и все теперь заглядывая в даташит, и в это окошко смотрим куда какой параметр вводить, в итоге заполняем все поля, и получаем такой результат:</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/102.png" alt=""></td>
</tr>
</table>
<p>Теперь щелкаем на кнопке ОК. Наш корпус становится красным и привязан к мышке и потом щелкаем в любом месте экрана.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/103.png" alt=""></td>
</tr>
</table>
<p>Теперь у нас остался совсем маленький штришок это приблизить изображение крутя колесо мышки от себя, переключиться на слой В2, и нарисовать контур микросхемы и обозначить где у нас будет первая ножка.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/104.png" alt=""></td>
</tr>
</table>
<p>Вот и все, наш корпус под микросхему TQFP-32 создан, теперь если что можно распечатать, его на бумажку приложить микросхему и если немного нет так то слегка подкорректировать параметры, а потом сохранить как макрос дабы в дальнейшем уже подобный корпус не рисовать.</p>
<p><b>Отрисовка картинки</b><br />
И последний шаг нашего урока, я расскажу как из изображения платы найденного в журнале или на просторах Интернета сделать платку.</p>
<p>Для этого создадим следующую вкладку и назовем ее Интернет.<br />
Дабы для повторения долго не искать выйдем в Интернет и в поисковике наберем «Печатная плата» поисковик выкинет кучу ссылок и картинок выберем из них что либо просто так.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/105.png" alt=""></td>
</tr>
</table>
<p>Вот мы видим такую картинку из левой части нам надо только размеры и все они у нас 37,5 на 30 мм.<br />
Вот мы с такими размерами и нарисуем контур на слое U.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/106.png" alt=""></td>
</tr>
</table>
<p>После того как нарисовали, возьмем наше изображение и с помощью графического редактора уберем все что у нас находиться в левой части, она нам в принципе не нужна а правую часть сохраним в файл с расширением .ВМР. Если сканируем платку из какого то журнала то лучше сканировать с разрешением 600 dip и сохранять в файл .ВМР После того как сохранили в программе переходим на слой К2 нажимаем на иконку ШАБЛОН.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/107.png" alt=""></td>
</tr>
</table>
<p>Вот она квадратик разделенный на две части зеленую и желтую и на нем нарисованы дорожки.<br />
После того как нажали, у нас откроется вот такое окошко.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/108.png" alt=""></td>
</tr>
</table>
<p>Нажимаем кнопку Загрузить… и выбираем наш файл. После этого экран у нас примет такой вид</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/110.png" alt=""></td>
</tr>
</table>
<p>Крупновато будет, не правда ли? Вот и я о том. Теперь смотрим от чего мы можем оттолкнуться на этой плате, т.е  размеры чего мы знаем точно, а у нас их два это сами размеры платы и микросхема в DIP корпусе, отлично вот по этим размерам мы и будем меняя параметры в окошках  Размер, СдвигX, СдвигY подгонять наше изображение до приемлемого критерия.<br />
У меня получилось вот с такими параметрами.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/111.png" alt=""></td>
</tr>
</table>
<p>Вот и все теперь просто обрисовываем деталями эту картинку. Вполне возможны случаи когда детали могут не попадать со 100% на нарисованное на картинке, это не страшно главное есть картинка на фоновом слое и набор макросов с фиксированным размером а это самое главное. В программе Sprint-Layout имеется великолепный набор макросов, да и постепенно когда будут рисоваться новые детали он еще и будет пополняться своими.</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/112.png" alt=""></td>
</tr>
</table>
<p>Когда наложен шаблон на задний фон и делаем его обрисовку то дополнительно можно поиграть вот с этими двумя кнопочками</p>
<table border="0" cellspacing="0" cellpadding="0" align=center>
<tr>
<td><img src="http://easyelectronics.ru/img/Soft/SL5/113.png" alt=""></td>
</tr>
</table>
<p>Если нажать на верхнюю то пока ее держим станут невидимыми наши дорожки, а если на нижнюю то пока ее держим станет невидимой наша картинка которую наложили фоном. </p>
<p>Вот в принципе и все о программе Sprint-Layout думаю для начинающих ее осваивать информации и так предостаточно и конечно надо все запомнить что и куда нажимать, как и что делать. И в конце урока про программе Sprint-Layout, можно скачать сам файл с этими платами, на котором и проходили освоения этой программы.</p>
<p>Удачного создания плат!</p>
<img src="http://feeds.feedburner.com/~r/easyelectronics/~4/KSlULjv_-E8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://easyelectronics.ru/sprint-layout-5-podrobnoe-rukovodstvo.html/feed</wfw:commentRss>
		<feedburner:origLink>http://easyelectronics.ru/sprint-layout-5-podrobnoe-rukovodstvo.html</feedburner:origLink></item>
		<item>
		<title>Форум. Второе пришествие</title>
		<link>http://feedproxy.google.com/~r/easyelectronics/~3/4SfzNwqfESs/forum-vtoroe-prishestvie.html</link>
		<comments>http://easyelectronics.ru/forum-vtoroe-prishestvie.html#comments</comments>
		<pubDate>Tue, 26 Jan 2010 16:10:33 +0000</pubDate>
		<dc:creator>DI HALT</dc:creator>
		
		<category><![CDATA[Новости]]></category>

		<category><![CDATA[О сайте]]></category>

		<guid isPermaLink="false">http://easyelectronics.ru/?p=286</guid>
		<description><![CDATA[Самые нетерпеливые уже заметили что форум таки поднялся и даже не вешает сайт. Впрочем, старый форум один фиг не жилец. Дело в том, что последние два три месяца он начал адски глючить (да и раньше красотой кода не отличался, честно говоря) и грузить хостинг. В общем, Simple:Press Forum изначально был мертворожденным уродцем подходящим разве что [...]]]></description>
			<content:encoded><![CDATA[<p>Самые нетерпеливые уже заметили что форум таки поднялся и даже не вешает сайт. Впрочем, старый форум один фиг не жилец. Дело в том, что последние два три месяца он начал адски глючить (да и раньше красотой кода не отличался, честно говоря) и грузить хостинг. В общем, <b>Simple:Press Forum</b> изначально был мертворожденным уродцем подходящим разве что для красоты. Не способен он работать на больших нагрузках (кто ж знал, что форум так резко разрастется, я то его вообще для галочки ставил :) )</p>
<p> Поэтому на отдельном ресурсе был поднят <a href="http://forum.easyelectronics.ru/" ><b>новый форум</b> со своим специализированным движком и прочими радостями современного форумостроения</a>. Посему желающие общацо не только в комментах могут переходить туда. Правда там своя регистрация - интегрировать с движком блога так и не удалось (хотя не очень то и хотелось, все эти перекрестные системы превращают движки в жуткую конструкцию которая может загнуться в любой момент. Чем проще тем лучше).</p>
<p> По поводу переноса инфы со старого форума тут вопрос сложный. Дело в том, что найти конвертер к симпл прессу нам так и не удалось, а свой мы если и напишем, то далеко не скоро. Т.к. больших спецов по SQL у нас нету.  Поэтому новый форум стартует с нуля. А старый через недельку и вовсе будет закрыт для редактирования, превратившись в статичный архив.  Если у кого в старом форуме есть активная тема, то проще всего будет поднять такую же тему в новом форуме и связать их перекрестными ссылками. Мол &#8220;начало тут&#8221; &#038; &#8220;конец там&#8221;. </p>
<p>Кроме того, есть <a href="http://files.mail.ru/BTPDC4" onclick="javascript:pageTracker._trackPageview('/outbound/article/files.mail.ru');"><b>100МБ статичный архив сайта</b></a> (и неслабого куска форума). С картинками и файлами, практически до последней записи. За эту радость спасибо Андрею Кузнецову.</p>
<img src="http://feeds.feedburner.com/~r/easyelectronics/~4/4SfzNwqfESs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://easyelectronics.ru/forum-vtoroe-prishestvie.html/feed</wfw:commentRss>
		<feedburner:origLink>http://easyelectronics.ru/forum-vtoroe-prishestvie.html</feedburner:origLink></item>
	</channel>
</rss><!-- Dynamic Page Served (once) in 1.220 seconds --><!-- Cached page served by WP-Super-Cache -->
