<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2494543</guid>
        <pubDate>Wed, 03 Feb 2010 10:28:43 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2494543</link>
        <description><![CDATA[Oleg-galaxy: В программировании не очень силен, поэтому не пинайте. Как можно изменить схемку и программу, чтобы управление для двух нагрузок было одним энкодером и кнопкой, а уровень отображался на 2-х семисегментниках отдельно от 0 до 9, кнопка для переключения каналов, регулируемый канал отображался точкой возле цифры?]]></description>
        <author>Oleg-galaxy</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2317279</guid>
        <pubDate>Tue, 21 Jul 2009 16:42:32 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2317279</link>
        <description><![CDATA[Prince: Прости, был неправ. Вспомнил даташит на at90s2313, в нём никаких защелок по входу вроде бы не было. Предположил, что и тут аналогичная схема.]]></description>
        <author>Prince</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2317235</guid>
        <pubDate>Tue, 21 Jul 2009 16:02:53 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2317235</link>
        <description><![CDATA[MeG: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2316127'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Prince &#064; <time class="tag-quote__quoted-time" datetime="2009-07-20T12:52:52+00:00">20.07.09, 12:52</time></span><div class='quote '>Вообще-то PIND не регистр. PIND адресуется непосредственно к выводам МК, независимо от того, как они сконфигурированы</div></div><br>
вообще-то PIND это регистр синхронизированный с клоком если верить даташиту Атмела на ATtiny2313<br>
<br>
http://www.atmel.com/dyn/resources/prod_documents/DOC2543.PDF<br>
<br>
на странице 54 (рисунок 25) нарисована эквивалентная схема одного пина порта. Через ключ ножка подключается к триггеру шмидта, с него на триггер защелку и далее на синхронный D-триггер (именно он и назван PINxn), то есть, сигнал с ножки доступен для считывания с задержкой в один такт. Ключ перед триггером шмидта управляется сигналом DIGITAL INPUT-ENABLE, то есть, триггер подключен к ножке в случае если порт настроен как цифровой вход. В тоже время, считывать сигнал с D-триггера пина порта (PINxn) можно независимо от того как настроен порт, на вход, на выход или как аналоговый. Если порт не настроен на вход, то, в силу подтяжки к земле перед триггером шмидта, с PINxn будет считываться ноль. С триггера шмидта выходит сигнал DIxn, он используется как входной цифровой сигнал в случае использования порта для альтернативной функции (таблица 23).]]></description>
        <author>MeG</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2316168</guid>
        <pubDate>Mon, 20 Jul 2009 13:34:55 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2316168</link>
        <description><![CDATA[dws: Извиняюсь,я знал,что PIND это ножка порта,я думал если написать,например if(PIND==0), то выдаст ошибку,оказывается можно, тогда попробуем на деле этот код.Получается,это обращение к любому выводу порта D]]></description>
        <author>dws</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2316127</guid>
        <pubDate>Mon, 20 Jul 2009 12:52:52 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2316127</link>
        <description><![CDATA[Prince: Вообще-то PIND не регистр. PIND адресуется непосредственно к выводам МК, независимо от того, как они сконфигурированы.]]></description>
        <author>Prince</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2315915</guid>
        <pubDate>Mon, 20 Jul 2009 10:57:19 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2315915</link>
        <description><![CDATA[MeG: PIND, это висьмибитный входной регистр порта D, восемь ножек этого порта соответствуют восьми битам этого регистра. Логический уровень напряжения на ножке порта соответствует значению бита в регистре, если данная ножка сконфигурирована на вход.]]></description>
        <author>MeG</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2315241</guid>
        <pubDate>Sun, 19 Jul 2009 18:00:15 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2315241</link>
        <description><![CDATA[dws: Заинтересовался кодом для энкодера с этой темы-<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;if((((PIND) &amp; (1&#60;&#60;PD2)) == 0) &nbsp; ^ (((PIND) &amp; (1&#60;&#60;PD3)) == 0)){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;PWMValue+=50;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;setPin(PB0, 1); // - Отладка</div><div class="code_line">&nbsp;&nbsp; &nbsp;}else{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;PWMValue-=50;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;setPin(PB0, 0); // - Отладка</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
Я пишу на CVAVR,так же по схеме хочу соединить к меге16, вот это- PIND - не могу понять как написать, не могли бы обьяснить,что это обозначает PIND,какая это нога или ранее запомненное состояние]]></description>
        <author>dws</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2163255</guid>
        <pubDate>Fri, 09 Jan 2009 19:53:15 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2163255</link>
        <description><![CDATA[Змей: <span class="tag-color tag-color-named" data-value="gray" style="color: gray">[офтоп]<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2162604'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-08T23:37:07+00:00">08.01.09, 23:37</time></span><div class='quote '>Именно энкодеры потому что упралять или удобней и приятней чем теми же реостатами + современней и стильней смотрися и ощущается, да и вообще они ближе к цифре чем к аналогу.</div></div><br>
ясн...<br>
<br>
<span class='tag-size' data-value='8' style='font-size:8pt;'>хотя ИМХО единственный плюс (с точки зрения разработчика) и он же минус (с точки зрения пользователя) энкодера — возможность использовать его для задания нескольких параметров (как в нынешних автомагнитолах делают)... Незнаю, может и есть кто, кому нравится, что для реглировки басов надо четыре раза нажать кнопку, глянуь на магнитолу, убедиться, что она показывает &quot;bass&quot;, и только после этого крутить ручку... но мне кажется в миллион раз удобнее на ощупь найти ручку нужного потенциометра и крутнуть её...</span><br>
<br>
кстати, в твоём устройстве вроде кнопки энкодеров не задействованы? так мог тоже съэкономить один энкодер, повесив на кнопку функцию переключения управляемого канала<br>
<br>
[/офтоп]</span>]]></description>
        <author>Змей</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162791</guid>
        <pubDate>Fri, 09 Jan 2009 10:01:15 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162791</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2162604'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-08T23:37:07+00:00">08.01.09, 23:37</time></span><div class='quote '><span class="tag-color tag-color-named" data-value="gray" style="color: gray">[офтоп]<br>
Именно энкодеры потому что упралять или удобней и приятней чем теми же реостатами <br>
[/офтоп]</span></div></div><br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><br>
 А я делал так - с кнопками UP и DOWN:<br>
 <a class='tag-url' href='http://www.lomo-eltem.ru/applications/main/main.php?set=catalogue&cat=01&gr=08&id=4' target='_blank'>ссылка</a><br>
</span>]]></description>
        <author>ЫукпШ</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162604</guid>
        <pubDate>Thu, 08 Jan 2009 23:37:07 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162604</link>
        <description><![CDATA[HardRock: <span class="tag-color tag-color-named" data-value="gray" style="color: gray">[офтоп]<br>
<br>
Колесо от мышки одна из реализация энкодера =)<br>
Те что у меня больше похожи на регуляторы громкости на музыкальных центрах / магнитолах, ну или на выбор времени на микроволновках :D<br>
Именно энкодеры потому что упралять или удобней и приятней чем теми же реостатами + современней и стильней смотрися и ощущается, да и вообще они ближе к цифре чем к аналогу.<br>
<br>
[/офтоп]</span>]]></description>
        <author>HardRock</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162597</guid>
        <pubDate>Thu, 08 Jan 2009 23:27:19 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162597</link>
        <description><![CDATA[Змей: <span class="tag-color tag-color-named" data-value="gray" style="color: gray">[офтоп]<br>
<br>
<strong class='tag-b'>KillerXX7</strong>, а можно вопрос?<br>
зачем понадобилось использовать энкодеры (кста, этож вроде как колесо от мыши, нет?), почему было не взять ATTiny26 (он с АЦП. ШИМ-каналов правда только 2, а не 4, но тут больше и не используется) и два обычных потенциометра?<br>
<br>
[/офтоп]</span>]]></description>
        <author>Змей</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162417</guid>
        <pubDate>Thu, 08 Jan 2009 17:47:21 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162417</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2162359'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-08T15:57:08+00:00">08.01.09, 15:57</time></span><div class='quote '>Получается что диод в таком случае можно снять, верно?</div></div><br>
Да. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>-Added <time class="tag-mergetime" datetime="2009-01-08T17:49:28+00:00">08.01.09, 17:49</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2162359'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-08T15:57:08+00:00">08.01.09, 15:57</time></span><div class='quote '>С другой стороны именяю её значение я также только в прерываниях, а до выхода из прерывания все остальные прерывания запрещены.</div></div><br>
Тогда и проблем нет.<br>
 А если бы было необходимо править эту<br>
 переменную в фоновой программе, можно было бы<br>
 на время операции с ней запрещать прерывания.]]></description>
        <author>ЫукпШ</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162359</guid>
        <pubDate>Thu, 08 Jan 2009 15:57:08 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162359</link>
        <description><![CDATA[HardRock: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2162161'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>MeG &#064; <time class="tag-quote__quoted-time" datetime="2009-01-08T11:10:01+00:00">08.01.09, 11:10</time></span><div class='quote '>PWMValue двухбайтная, а контроллер восьмиразрядный, все операции с этой переменной делаются из нескольких инструкций, младший байт -- старший байт. используешь ты ее в прерываниях. Если прерывание происходит в момент когда обрабатывается эта переменная, то в ней оказывается не верное значение и в прерывании ты его считываешь. От этого и была у тебя проблема ошибочных значений шима. Я бы сделал эту переменную размером в байт, а в прерывании сдвигом получал бы нужную разрядность. Или на время работы с этой переменной включал глобальный запрет прерываний.</div></div><br>
С другой стороны именяю её значение я также только в прерываниях, а до выхода из прерывания все остальные прерывания запрещены.<br>
Компилятор никаких варнингов не выдаёт, код компилится вообще молча (что даже странно для сишной проги :D).<br>
Возможно компилятор сам разрулиает с именением переменной и прерываниями, но не факт.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2162203'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2009-01-08T12:39:33+00:00">08.01.09, 12:39</time></span><div class='quote '>Вот так, силой мысли можно сэкономить кучу конденсаторов.</div></div><br>
Алгоритм ясен =)<br>
Именно такую реализацию не пробовал.<br>
Но всётаки осталвлю конденсаторы, очень нраится как с ними работает =)))<br>
Резисторы действительно впаяю. Слабо верится что через энкодер может протекать ток около 5 ампер, но цифра в любом случае страшная.<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2162203'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2009-01-08T12:39:33+00:00">08.01.09, 12:39</time></span><div class='quote '>Чтобы иметь возможность выключить питание<br>
и быстро включить ставят VD2 и &quot;R5vgnd&quot;.<br>
Если это точно не требуется на них можно сэкономить.</div></div><br>
Необходимости в &quot;передергивании&quot; питания нет. <br>
Получается что диод в таком случае можно снять, верно?]]></description>
        <author>HardRock</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162203</guid>
        <pubDate>Thu, 08 Jan 2009 12:39:33 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162203</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T02:59:06+00:00">07.01.09, 02:59</time></span><div class='quote '>Вот именно на это самое программное подавление я и потратил целый день, прочитав похоже доводы против.<br>
Что только не пробовал, оно всёравно глючило.</div></div><br>
Это весьма не сложно.<br>
 На конденсаторах ты делаешь интегратор.<br>
 Сделаем его программно:<br>
1. Запустим таймерную процедуру-интеррапт.<br>
 Например, 1[мС].<br>
 В качестве цифрового интегратора будем использовать<br>
 реверсивный двоичный счетчик.<br>
 При таком периоде считать можно до 4-8.<br>
 Дребезг контактов дольше, как правило, не бывает.<br>
<br>
2. В этой процедуре смастерим двоичный реверсивный<br>
счетчик (с двумя ограничениями, сверху и снизу).<br>
 Это и есть аналог интегратора.<br>
<br>
3. По прерыванию считываем значение бита.<br>
1 - и нет насыщения сверху - увеличиваем значение счетчика<br>
0 - и нет насыщения снизу  - уменьшаем значение счетчика<br>
(Чему именно соответствует 0 и 1 зависит от схемы)<br>
<br>
4. Достигнутая граница сверху - кнопка нажата, выставим флаг<br>
Достигнутая граница снизу - кнопку отпустили, сбросим флаг.<br>
<br>
 Вот так, силой мысли можно сэкономить кучу конденсаторов. :D <br>
 Не знаю - нужно ли приводить исходные тексты ?<br>
 Это не так уж и сложно. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>-Added <time class="tag-mergetime" datetime="2009-01-08T12:53:57+00:00">08.01.09, 12:53</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T02:59:06+00:00">07.01.09, 02:59</time></span><div class='quote '>4. Что ещё можно добавить убрать в этой схеме Энкодер-Контроллер-Нагрузка</div></div><br>
S силовых триодов подключить к земле, а<br>
 нагрузку подключить между +12V и D силовых триодов.<br>
<br>
 Если ты все-таки решил оставить емкостины для подавления<br>
 дребезга, включи последовательно с контактом небольшой<br>
 резистор 50-100 [ом].<br>
<br>
 Какой пиковый ток пойдет через контакт ?  ;) <br>
 5V/(сопротивление контакта и провода).<br>
 Так обгорают контакты. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>-Added <time class="tag-mergetime" datetime="2009-01-08T13:19:08+00:00">08.01.09, 13:19</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T02:59:06+00:00">07.01.09, 02:59</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160720'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2009-01-06T12:12:10+00:00">06.01.09, 12:12</time></span><div class='quote '>а между шинами питания запаять резистор</div></div><br>
Для чего он нужен?<br>
Мне кажется он будет просто &quot;греться&quot;, хотя могу ошибаться.<br>
К тому же на &quot;боевой&quot; схеме на выходе в стабилизаторе стоит делитель напряжения на 2 резисторах, тоесть по сути уже есть поротивление между плюм и землёй.</div></div><br>
Рассмотрим цепи R1,VD2,C7.<br>
VD2 без резистора между +5V и землей &quot;R5vgnd&quot;<br>
совершенно бесполезен.<br>
Он нужен для того, чтобы емкость C7 <br>
быстрее разряжалась при выключении питания<br>
по цепи VD2-&gt;&quot;R5vgnd&quot;.<br>
Не факт, что емкостина разрядится через<br>
источник питания.<br>
 Чтобы иметь возможность выключить питание<br>
и быстро включить ставят VD2 и &quot;R5vgnd&quot;.<br>
Если это точно не требуется на них можно сэкономить.]]></description>
        <author>ЫукпШ</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162161</guid>
        <pubDate>Thu, 08 Jan 2009 11:10:01 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2162161</link>
        <description><![CDATA[MeG: <strong class='tag-b'>KillerXX7</strong>, у тебя изначально переменная PWMValue двухбайтная, а контроллер восьмиразрядный, все операции с этой переменной делаются из нескольких инструкций, младший байт -- старший байт. используешь ты ее в прерываниях. Если прерывание происходит в момент когда обрабатывается эта переменная, то в ней оказывается не верное значение и в прерывании ты его считываешь. От этого и была у тебя проблема ошибочных значений шима. Я бы сделал эту переменную размером в байт, а в прерывании сдвигом получал бы нужную разрядность. Или на время работы с этой переменной включал глобальный запрет прерываний. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2009-01-08T11:22:34+00:00">08.01.09, 11:22</time></span></span><br>
в IAR-овских библиотеках есть специальный модификатор функций для работы в подобных ситуациях, то есть ты с этой переменной работаешь только внутри специально объявленных функций. Таким образом компилятор гарантирует атомарность работы с многобайтными переменными. Tсли память не изменяет, модификатор называется MONITOR.<br>
<br>
С другой стороны, gcc достаточно мудреный компилятор и мне сдается, что он должен был выдавать тебе варнинг на эту переменную, могу ошибаться.]]></description>
        <author>MeG</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2161549</guid>
        <pubDate>Wed, 07 Jan 2009 14:03:59 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2161549</link>
        <description><![CDATA[HardRock: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161338'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>medved_68 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T08:14:45+00:00">07.01.09, 08:14</time></span><div class='quote '>Технологически внутри смонтирована плавкая вставка - типа этого</div></div><br>
Интересная штука )))<br>
Нужно будет попробовать.]]></description>
        <author>HardRock</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2161388</guid>
        <pubDate>Wed, 07 Jan 2009 09:47:25 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2161388</link>
        <description><![CDATA[ElcnU: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T02:59:06+00:00">07.01.09, 02:59</time></span><div class='quote '>а судя по всему греются внутренние подтягивающие резисторы.</div></div><br>
внутренние подтягивающие резисторы порядка 18кОм и только когда порт на вход включен, и нужно сильно постараться, чтоб их зажарить<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T02:59:06+00:00">07.01.09, 02:59</time></span><div class='quote '>Резисторы конечно нужная штука, но в тестовую схему не стал их ставить.</div></div><br>
без них как равило вылетают светодиоды<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T02:59:06+00:00">07.01.09, 02:59</time></span><div class='quote '>5 вольт, снятых с красного провода MOLEX коннектора компьютера =))))</div></div><br>
отсюда резисторы(если диоды типа ал307) порядка 300 Ом, потомучто оптимальный ток свечения 10мА.<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T02:59:06+00:00">07.01.09, 02:59</time></span><div class='quote '>4. Стоит ли подтянуть Gate транзисторов к земле через резистор?</div></div><br>
обязательно, я так 3 DSPника по 40&#036; спалил  :)]]></description>
        <author>ElcnU</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2161338</guid>
        <pubDate>Wed, 07 Jan 2009 08:14:45 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2161338</link>
        <description><![CDATA[medved_68: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T02:59:06+00:00">07.01.09, 02:59</time></span><div class='quote '>Резистор в роле предохранителя? </div></div><br>
Технологически внутри смонтирована плавкая вставка - <a class='tag-url' href='http://cxem.net/sprav/sprav21.php' target='_blank'>типа этого</a><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T02:59:06+00:00">07.01.09, 02:59</time></span><div class='quote '>В каких случаях он может помочь?</div></div> В тех же случаях, что и предохранитель - отключение вышедшего из строя оборудования от источника питания при превышении предельного тока. :D <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2009-01-07T08:22:08+00:00">07.01.09, 08:22</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2161286'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-07T02:59:06+00:00">07.01.09, 02:59</time></span><div class='quote '>Железка эта предназначена для авто, поэтому питание берётся с бортовой сети.</div></div><br>
Хм...смотря что за авто. Я бы еще пересмотрел (на всякий случай) алгоритм прошивки, с применением сторожевого таймера (были случаи с помехами от ВЧ части авто - ПИК 16F84A работал нестабильно - пришлось &quot;перекраивать&quot; алгоритм, предусмотрев сброс контроллера). :D]]></description>
        <author>medved_68</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2161286</guid>
        <pubDate>Wed, 07 Jan 2009 02:59:06 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2161286</link>
        <description><![CDATA[HardRock: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160500'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ElcnU &#064; <time class="tag-quote__quoted-time" datetime="2009-01-06T06:10:46+00:00">06.01.09, 06:10</time></span><div class='quote '>какое напряжение питания контроллера? </div></div><br>
5 вольт, снятых с красного провода MOLEX коннектора компьютера =))))<br>
земля взята тамже, естественно с черного провода.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160500'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ElcnU &#064; <time class="tag-quote__quoted-time" datetime="2009-01-06T06:10:46+00:00">06.01.09, 06:10</time></span><div class='quote '>про емкость на сбросе сказали, а вот RC фильтра(10-100 Ом+0.1мкФ) по питанию нет....я ставлю 0805 или 0603 10 Ом, работает как предохранитель</div></div><br>
Резистор в роле предохранителя?  :huh: <br>
В каких случаях он может помочь?<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160720'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2009-01-06T12:12:10+00:00">06.01.09, 12:12</time></span><div class='quote '>3. Убрать конденсаторы с энкодера. Дребезг легко подавляется программно.<br>
В такой схеме потенциально возможно обгорание контактов.<br>
Ни к чему хорошему это не приведет.</div></div><br>
Вот именно на это самое программное подавление я и потратил целый день, прочитав похоже доводы против.<br>
Что только не пробовал, оно всёравно глючило. Поставил конденсаторы - глюки исчезли, а регулироание стало плавным.<br>
Обгарание контактов врятли будет, всётаки напряжение и ток довольно низкие, да и дребезг не очень продолжительный.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160720'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2009-01-06T12:12:10+00:00">06.01.09, 12:12</time></span><div class='quote '>5. резисторы последовательно со светодиодами &#33; ~1К0<br>
(Интересно,выгорели выводы 15,16 процессора или еще нет ?  )<br>
Возможно, это и есть причина разогрева контроллера.</div></div><br>
Резисторы конечно нужная штука, но в тестовую схему не стал их ставить.<br>
Нагревание явно не из-за &quot;перегруза&quot; светодиодами, а судя по всему греются внутренние подтягивающие резисторы.<br>
Тепло выделяется в верхней части МК, примерно между 1/3, 20/18 выводами и только при вращении ручки энкодера.<br>
<br>
<br>
Вот собсвтенно кусок схемы железки, которую собираю.<br>
При помощи двух энкодеров нужно управлять двумя &quot;высоковольными&quot; мощьными нагрузками.<br>
Одна нагрузка - электромотор, вторая - лампа (по факту скорее всего будет светодиодной)<br>
Железка эта предназначена для авто, поэтому питание берётся с бортовой сети. <br>
Для питания низковольной части схемы используется стабилизатор, поддерживающий на выходе от 4.8 до 5.2 вольт. Номинальное выходное напряжение 5.0 вольт. (данные из даташита)<br>
Номиналы керамических кондесаторов возле стабилизатора взяты также из даташита из примера использования, плюс добавлен конденсатор на 470мкФ и диод на входе.<br>
 <br>
Учел пожелания с диодом и конденсатором на сбросе.<br>
<br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160720'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2009-01-06T12:12:10+00:00">06.01.09, 12:12</time></span><div class='quote '>а между шинами питания запаять резистор</div></div><br>
Для чего он нужен?<br>
Мне кажется он будет просто &quot;греться&quot;, хотя могу ошибаться.<br>
<br>
К тому же на &quot;боевой&quot; схеме на выходе в стабилизаторе стоит делитель напряжения на 2 резисторах, тоесть по сути уже есть поротивление между плюм и землёй.<br>
<br>
<br>
Есть несколько вопросов по схеме:<br>
1. Нагрузки я защитил предохранителями, однако они стоят после транзисторов. Это правильно?<br>
2. Если использовать только внешние подтягивающие резисторы, то схема почемуто не работает, поэтому даже в тестовой схеме включал внутренние резисторы. В чем может быть проблема? Слишком большое сопротивление внешних?<br>
3. Стоит ли на выходы энкодера поставить диоды для ограничения возможного обратного тока?<br>
4. Стоит ли подтянуть Gate транзисторов к земле через резистор? (для исключения ситуации когда на нагрузко подано напряжение, а контроллер обесточен и Gate болтается в воздухе)<br>
4. Что ещё можно добавить убрать в этой схеме Энкодер-Контроллер-Нагрузка]]></description>
        <author>HardRock</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160720</guid>
        <pubDate>Tue, 06 Jan 2009 12:12:10 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160720</link>
        <description><![CDATA[ЫукпШ: Что бы я обязательно изменил в этой схеме:<br>
1. Добавил емкость 0.1 - 1.0 с RESET на землю (вывод 1 процессора).<br>
По-хорошему в такой схеме сброса надо еще зашунтировать резистор R2<br>
диодом в обратной полярности, а между шинами питания запаять резистор.<br>
По вкусу 1К0 - 10К0.<br>
2. Два конденсатора питание-земля.<br>
 0.1 и 10.0x10V<br>
3. Убрать конденсаторы с энкодера. Дребезг легко подавляется программно.<br>
 В такой схеме потенциально возможно обгорание контактов.<br>
 Ни к чему хорошему это не приведет.<br>
4. 3 нагрузочных резистора 1К0 - 10К0<br>
 на выводы 2,6,8 процессора к питанию.<br>
5. <span class='tag-u'>резисторы последовательно со светодиодами &#33;</span> ~1К0<br>
 (Интересно,выгорели выводы 15,16 процессора или еще нет ? :wacko: )<br>
 Возможно, это и есть причина разогрева контроллера.<br>
6. Это не обязательно, но светодиоды я предпочитаю включать логическим 0.<br>
Традиционно драйверы включения на землю у аппаратуры посильнее будут.<br>
7. Все свободные выводы пусть будут выходами.]]></description>
        <author>ЫукпШ</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160500</guid>
        <pubDate>Tue, 06 Jan 2009 06:10:46 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160500</link>
        <description><![CDATA[ElcnU: про емкость на сбросе сказали, а вот RC фильтра(10-100 Ом+0.1мкФ) по питанию нет....я ставлю 0805 или 0603 10 Ом, работает как предохранитель ;).<br>какое напряжение питания контроллера? просто нет резисторов на светиках, да и сами светики лучше развернуть, чтоб зажигать нулём гасить единицей. это чтоб уменьшить суммарную нагрузку на порты ввода вывода контроллера.]]></description>
        <author>ElcnU</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160401</guid>
        <pubDate>Mon, 05 Jan 2009 21:48:05 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160401</link>
        <description><![CDATA[HardRock: Сейчас реализовано так:<br>
<br>
Переписал работу с ШИМ TIMER1 на макросы и сделал изменение параметра заполнения канала в обработчике INT0, освободив тем самым ресурсы, потребляемые при обработке прерывания переполнения таймера (а оно очень часто происходит).<br>
Думаю полная синхнронизация по периуду мне тут не очен нужна т.к. внешняя нагрузка имеет доольно большую инерцию и попросту не заметит &quot;ломаного&quot; периуда длиной  несколько мс или нс.<br>
<br>
Без sleep_mode() сейчас также работает.<br>
<br>
Вывод - бороться с дребезгом нужно аппаратными методами, а конденсаторы  цепи механического энкодера просто необходимы, какие бы доводы не приводились против этого.<br>
При ёмкость 0.1 кмФ пропуски щелчков заметны только при очень быстром вращении ручки.<br>
Кстати чисто &quot;на глаз&quot; пропуски на большинстве заводских девайсах значительно больше не той же скорости. Похоже там ещё большее подавление дребезга.<br>
<br>
Собсвтенно код тестового проекта на 2 канала ШИМ таймера TIMER1<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;inttypes.h&#62;</div><div class="code_line">#include &#60;avr/io.h&#62;</div><div class="code_line">#include &#60;avr/interrupt.h&#62;</div><div class="code_line">#include &#60;avr/sleep.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">// ----------------------------------------------------------------------</div><div class="code_line">// - Каналы PWM</div><div class="code_line">#define PWM_CHANNEL_OC1A &nbsp; &nbsp;COM1A1</div><div class="code_line">#define PWM_CHANNEL_OC1B &nbsp; &nbsp;COM1B1</div><div class="code_line">&nbsp;</div><div class="code_line">#define TIMER1_TOP 1023 // - 10 bit PWM</div><div class="code_line">#define TIMER1_CLOCKSOURCE _BV(CS10)</div><div class="code_line">&nbsp;</div><div class="code_line">// --- Инициализация PWM</div><div class="code_line">#define TIMER1_PWM_INIT &nbsp; &nbsp; TCCR1A &nbsp;= _BV(WGM10) | _BV(WGM11)</div><div class="code_line">&nbsp;</div><div class="code_line">// --- Включение / Выключение PWM</div><div class="code_line">#define TIMER1_PWM_ENABLE &nbsp; TCCR1B &nbsp;|= TIMER1_CLOCKSOURCE</div><div class="code_line">#define TIMER1_PWM_DISABLE &nbsp;TCCR1B &nbsp;&amp;= ~TIMER1_CLOCKSOURCE</div><div class="code_line">&nbsp;</div><div class="code_line">// --- Подключение / Отключение каналов PWM для TIMER1</div><div class="code_line">#define TIMER1_PWM_ENABLE_CHANNEL(Channel) &nbsp; &nbsp; &nbsp;TCCR1A |= _BV(Channel)</div><div class="code_line">#define TIMER1_PWM_DISABLE_CHANNEL(Channel) &nbsp; &nbsp; TCCR1A &amp;= ~_BV(Channel)</div><div class="code_line">&nbsp;</div><div class="code_line">// --- Установка значения</div><div class="code_line">#define TIMER1_PWM_OC1A_SET_VALUE(Value) &nbsp; &nbsp; &nbsp; &nbsp;OCR1A = Value</div><div class="code_line">#define TIMER1_PWM_OC1B_SET_VALUE(Value) &nbsp; &nbsp; &nbsp; &nbsp;OCR1B = Value</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">// --- Функция установки состояния вывода для порта B</div><div class="code_line">void setPin(uint8_t Pin, uint8_t Enable){</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(Enable) PORTB |= _BV(Pin);</div><div class="code_line">&nbsp;&nbsp; &nbsp;else PORTB &amp;= ~_BV(Pin);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// -----------------------------------------------</div><div class="code_line">// --- Главная функция</div><div class="code_line">// -----------------------------------------------</div><div class="code_line">int main (void){</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Настройка ШИМ на TIMER1</div><div class="code_line">&nbsp;&nbsp; &nbsp;TIMER1_PWM_INIT; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;TIMER1_PWM_ENABLE_CHANNEL( PWM_CHANNEL_OC1A );</div><div class="code_line">&nbsp;&nbsp; &nbsp;TIMER1_PWM_ENABLE_CHANNEL( PWM_CHANNEL_OC1B );</div><div class="code_line">&nbsp;&nbsp; &nbsp;TIMER1_PWM_ENABLE;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// - Стартовое значение ШИМ для каналов</div><div class="code_line">&nbsp;&nbsp; &nbsp;PWMValue &nbsp; &nbsp;= 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;OCR1A &nbsp; &nbsp; &nbsp; = 0; &nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;OCR1B &nbsp; &nbsp; &nbsp; = TIMER1_TOP;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Обработка хуков настройки таймера</div><div class="code_line">&nbsp;&nbsp; &nbsp;#if defined(TIMER1_SETUP_HOOK)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;TIMER1_SETUP_HOOK();</div><div class="code_line">&nbsp;&nbsp; &nbsp;#endif</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Конфигурирование порта B на выход</div><div class="code_line">&nbsp;&nbsp; &nbsp;DDRB &nbsp; &nbsp;= 0xFF;</div><div class="code_line">&nbsp;&nbsp; &nbsp;PORTB &nbsp; = 0x00; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Конфигурирование порта D на вход</div><div class="code_line">&nbsp;&nbsp; &nbsp;DDRD &nbsp; &nbsp;= ~_BV(PD0) | ~_BV(PD2) | ~_BV(PD4); // - PD 0,2,4 на вход</div><div class="code_line">&nbsp;&nbsp; &nbsp;PORTD &nbsp; = _BV(PD0) | _BV(PD2) | _BV(PD4); &nbsp; // - Подтягивающие резисторы для PD 0,2,4</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Настройка прерывания INT0 по изменению состояния</div><div class="code_line">&nbsp;&nbsp; &nbsp;MCUCR &nbsp; |= &nbsp;_BV(ISC00);</div><div class="code_line">&nbsp;&nbsp; &nbsp;MCUCR &nbsp; &amp;= ~_BV(ISC01);</div><div class="code_line">&nbsp;&nbsp; &nbsp;GIMSK &nbsp; |= &nbsp;_BV(INT0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// - Разрешение прерываний</div><div class="code_line">&nbsp;&nbsp; &nbsp;sei();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(1){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// - Спим до следующего прерывания</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sleep_mode();</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return (0);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">// ---------------------------------------------------------------</div><div class="code_line">// --- Обработчик прерывания INT0</div><div class="code_line">// ---------------------------------------------------------------</div><div class="code_line">ISR (INT0_vect){</div><div class="code_line">&nbsp;&nbsp; &nbsp;static SHORT LastPWM; &nbsp; // - Предыдущее значение ШИМ</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Определяем направление вращения ручки</div><div class="code_line">&nbsp;&nbsp; &nbsp;if((((PIND) &amp; (1&#60;&#60;PD2)) == 0) &nbsp; ^ (((PIND) &amp; (1&#60;&#60;PD4)) == 0)){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// - Вращение вправо, увеличиваем яркость</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;PWMValue += 10;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}else{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;// - Вращение влево, уменьшаем яркость</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;PWMValue -= 10;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// - Проверка выхода за допустимые значения ШИМ</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(PWMValue &#60; 0) PWMValue = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(PWMValue &#62; TIMER1_TOP) PWMValue = TIMER1_TOP; &nbsp; &nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// - Если значение не изменилось то выходим</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(LastPWM == PWMValue) return;</div><div class="code_line">&nbsp;&nbsp; &nbsp;LastPWM = PWMValue;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// - Устанавливаем новое значение заполнения ШИМ</div><div class="code_line">&nbsp;&nbsp; &nbsp;TIMER1_PWM_OC1A_SET_VALUE( PWMValue );</div><div class="code_line">&nbsp;&nbsp; &nbsp;TIMER1_PWM_OC1B_SET_VALUE( TIMER1_TOP - PWMValue );</div><div class="code_line">&nbsp;</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
<br>
И схемка:<br>
<br>
<img class='tag-img' src='http://av-school.ru/up/userfiles/1/96.blogs.png' alt='user posted image'><br>
<br>
Работой энкодера доволен, вопрос можно считать решенным, всем спасибо&#33;<br>
<br>
Однако обсуждение и идеи по теме приветсвуются =) <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2009-01-05T21:55:16+00:00">05.01.09, 21:55</time></span></span><br>
На схеме не указано, но на кнопку также желательно вешать конденсатор.]]></description>
        <author>HardRock</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160338</guid>
        <pubDate>Mon, 05 Jan 2009 19:48:01 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160338</link>
        <description><![CDATA[ElcnU: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160159'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2009-01-05T15:43:30+00:00">05.01.09, 15:43</time></span><div class='quote '>Новый параметр нужно вводить в эксплуатацию только<br>
в момент окончания периода и начало нового периода ШИМ.</div></div><br>
<br>
судя по всему так и есть, изменения вступают в силу по прерыванию таймера(надеюсь таймера самого шима, а не запущенного рядом TCCR1B   ;) )<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160057'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-05T14:04:18+00:00">05.01.09, 14:04</time></span><div class='quote '><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">ISR (TIMER1_OVF_vect) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;static SHORT LastPWM;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(LastPWM == PWMValue) return;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;LastPWM = PWMValue;</div><div class="code_line">&nbsp;&nbsp; &nbsp;OCR = PWMValue;</div><div class="code_line">&nbsp;</div><div class="code_line">}</div></ol></div></div></div></div></div></div><br>
только проверки ИМХО тут излишние, потомучто TCNT(счетчик таймера) и так должен сбрасываться по прерыванию, на крайний случай его cамому нулить...<br>
да и не совсем поняткно к  какому OCR ты присваиваешь новое значение....их там вроде 3 для каждого таймера, а ШИМ ты стартуешь на TCCR1A. еще бы увидеть чему равен TIMER1_PWM_INIT, ну то есть сам инициализатор шима...]]></description>
        <author>ElcnU</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160159</guid>
        <pubDate>Mon, 05 Jan 2009 15:43:30 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160159</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160057'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-05T14:04:18+00:00">05.01.09, 14:04</time></span><div class='quote '>Что касается нагревания, то оно исчезает если подтянуть входы к плюсу через 10к резисторы на 0.25Вт. Похоже тепло излучают внутренние резисторы.</div></div><br>
Порт можно сконфигурировать как &quot;вход с подтяжками&quot;<br>
 или &quot;вход без подтяжек&quot;.<br>
 (Внутренние подтяжки ~100K-130K, те тоже не очень хорошо)<br>
 Если подтягивающие резисторы внутри отключены, а внешних<br>
 нет то получим вход вентиля с высоким входным сопротивлением.<br>
 Такое включение будет чувствительно к помехам.<br>
 Теоретически возможна неустойчивая работа и даже возбуждение <br>
 вентиля. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>-Added <time class="tag-mergetime" datetime="2009-01-05T15:45:52+00:00">05.01.09, 15:45</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160057'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-05T14:04:18+00:00">05.01.09, 14:04</time></span><div class='quote '>Похоже дело было всётаки в дребезге, только почему он приводил к зависанию контроллера - это непонятно.</div></div><br>
Если проблему удалось победить блокировками (по питанию), значит <br>
качество питания контроллера было не достаточным. ;) <br>
Без этого работа любого процессора будет не устойчивой.<br>
 Что и приводило контроллер к зависанию. <br>
Надо смотреть осциллографом. Тогда станет понятно, что происходит.<br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>-Added <time class="tag-mergetime" datetime="2009-01-05T15:51:43+00:00">05.01.09, 15:51</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160057'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-05T14:04:18+00:00">05.01.09, 14:04</time></span><div class='quote '><div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2159987'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2009-01-05T12:39:35+00:00">05.01.09, 12:39</time></span><div class='quote '>значение ШИМ я бы попытался менять синхронно с работой самого ШИМ-а.</div></div><br>
Это где/как и когда? Подробней плиз.</div></div><br>
<br>
 Смысл предложения простой.<br>
 У ШИМ есть некий период.<br>
 А желание поменять яркость возникает<br>
 в любой момент, т.е. асинхронно по отношению<br>
 к генерации ШИМ.<br>
 Если поменять параметр ШИМ в любой момент<br>
 может получиться &quot;рваный период&quot;.<br>
 Новый параметр нужно вводить в эксплуатацию только<br>
 в момент окончания периода и начало нового периода ШИМ.<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><br>
 (соблюдается это условие в данной программе или нет я<br>
 не разбирался)</span>]]></description>
        <author>ЫукпШ</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160057</guid>
        <pubDate>Mon, 05 Jan 2009 14:04:18 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160057</link>
        <description><![CDATA[HardRock: Поставил на энкодер конденцаторы между выводами C-A и C-B на 0.1 мкФ каждый<br>
плюс поменял код прерываний на<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">ISR (INT0_vect){</div><div class="code_line">&nbsp;&nbsp; &nbsp;if((((PIND) &amp; (1&#60;&#60;PD2)) == 0) &nbsp; ^ (((PIND) &amp; (1&#60;&#60;PD3)) == 0)){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;PWMValue+=50;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;setPin(PB0, 1); // - Отладка</div><div class="code_line">&nbsp;&nbsp; &nbsp;}else{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;PWMValue-=50;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;setPin(PB0, 0); // - Отладка</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(PWMValue &#60; 0)PWMValue = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(PWMValue &#62; TIMER1_TOP) PWMValue = TIMER1_TOP; &nbsp; &nbsp;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">ISR (TIMER1_OVF_vect) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;static SHORT LastPWM;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(LastPWM == PWMValue) return;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;LastPWM = PWMValue;</div><div class="code_line">&nbsp;&nbsp; &nbsp;OCR = PWMValue;</div><div class="code_line">&nbsp;</div><div class="code_line">}</div></ol></div></div></div></div><br>
как посоветовал <strong class='tag-b'>ЫукпШ</strong><br>
<br>
и... всё заработало правильно <img class='tag-img' src='http://www.vectra-club.ru/forum/images/smilies/icon_wink.gif' alt='user posted image'><br>
<br>
Отладочное включение / выключение светодиода на PB0 при увеличении / уменьшении значения соотвественно, показывает небольшой дребезг только при вращении ручки против часовой стрелки (уменьшение значения) на большой скорости.<br>
Обусловлено это недостаточной точностью фиксации ручки.<br>
<br>
Похоже дело было всётаки в дребезге, только почему он приводил к зависанию контроллера - это непонятно.<br>
Также странно что в обсуждениях в интернете, были мнения что конденцаторы не нужны.<br>
Сам сначала хотел поставить, но почитав по теме, отказался  :angry: <br>
<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2159987'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>ЫукпШ &#064; <time class="tag-quote__quoted-time" datetime="2009-01-05T12:39:35+00:00">05.01.09, 12:39</time></span><div class='quote '>значение ШИМ я бы попытался менять синхронно с работой самого ШИМ-а.</div></div><br>
Это где/как и когда? Подробней плиз.<br>
<br>
Что касается нагревания, то оно исчезает если подтянуть входы к плюсу через 10к резисторы на 0.25Вт. Похоже тепло излучают внутренние резисторы. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2009-01-05T14:11:22+00:00">05.01.09, 14:11</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2160044'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Prince &#064; <time class="tag-quote__quoted-time" datetime="2009-01-05T13:47:28+00:00">05.01.09, 13:47</time></span><div class='quote '>Ачто, если изменять OCR в обработчике int0. Ведь OCR и так &quot;защелкивается&quot; только в момент, когда таймер досчитает до TIMER1_TOP.<br>
Так что обработчик таймера в таком варианте лишний как бы. ИМХО.</div></div><br>
Попробовал так, работает.<br>
<br>
Кстати без sleep_mode тоже начал нормально работать.<br>
Получается что проблема была в аппаратной части.]]></description>
        <author>HardRock</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160044</guid>
        <pubDate>Mon, 05 Jan 2009 13:47:28 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2160044</link>
        <description><![CDATA[Prince: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Есть подозрение что глюки возникают при изменениии параметра заполнения т.к. если его не трогать, то контроллер ведёт себя стабильно. </div></div><br>
Ачто, если изменять OCR в обработчике int0. Ведь OCR и так &quot;защелкивается&quot; только в момент, когда таймер досчитает до TIMER1_TOP.<br>
Так что обработчик таймера в таком варианте лишний как бы. ИМХО.<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Ещё заметил странность что если убрать sleep_mode() из главного цикла то вообще всё рандомно начинает работать</div></div><br>
А если всё убрать из главного цикла?<br>
<br>
<br>
<div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <div class='quote '>Если только компилятор чтото черезчур оптимизирует... других мыслей пока нет. </div></div><br>
А как насчёт в эмуляторе погонять? Или этот код в AVRStudio никак не запихать?]]></description>
        <author>Prince</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2159987</guid>
        <pubDate>Mon, 05 Jan 2009 12:39:35 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2159987</link>
        <description><![CDATA[ЫукпШ: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2159727'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-04T23:55:50+00:00">04.01.09, 23:55</time></span><div class='quote '>RESET через 10к резистор подтянут на плюс.</div></div><br>
А емкостина на землю ? <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>-Added <time class="tag-mergetime" datetime="2009-01-05T12:41:58+00:00">05.01.09, 12:41</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2159855'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-05T10:34:23+00:00">05.01.09, 10:34</time></span><div class='quote '>Да, ещё такой момент. Когда крутишь ручку энкодера, то контроллер греется.</div></div><br>
Это что то аппаратное. :wacko: <br>
А блокировочные емкости имеются ? <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>-Added <time class="tag-mergetime" datetime="2009-01-05T12:49:56+00:00">05.01.09, 12:49</time></span></span><br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=261490&view=findpost&p=2159727'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>KillerXX7 &#064; <time class="tag-quote__quoted-time" datetime="2009-01-04T23:55:50+00:00">04.01.09, 23:55</time></span><div class='quote '>Ещё заметил странность что если убрать sleep_mode() из главного цикла то вообще всё рандомно начинает работать</div></div><br>
я не совсем понял, как все работает.<br>
 Но сам бы сделал так:<br>
- если произошло изменение кода, только тогда будем менять значение ШИМ.<br>
- значение ШИМ я бы попытался менять синхронно с работой самого ШИМ-а.]]></description>
        <author>ЫукпШ</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2159855</guid>
        <pubDate>Mon, 05 Jan 2009 10:34:23 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2159855</link>
        <description><![CDATA[HardRock: <strong class='tag-b'>Prince</strong>, да, это я задефайнил т.к. программлю под Windows в VisualStudio и привык к типам из windows.h :)<br>
<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">typedef uint8_t &nbsp; &nbsp; BYTE;</div><div class="code_line">typedef uint16_t &nbsp; &nbsp;WORD;</div><div class="code_line">typedef uint32_t &nbsp; &nbsp;DWORD;</div><div class="code_line">&nbsp;</div><div class="code_line">typedef int8_t &nbsp; &nbsp; &nbsp;CHAR;</div><div class="code_line">typedef int16_t &nbsp; &nbsp; SHORT;</div><div class="code_line">typedef int32_t &nbsp; &nbsp; LONG;</div><div class="code_line">&nbsp;</div><div class="code_line">typedef BYTE* &nbsp; PBYTE;</div><div class="code_line">typedef WORD* &nbsp; PWORD;</div><div class="code_line">typedef DWORD* &nbsp;PDWORD;</div><div class="code_line">&nbsp;</div><div class="code_line">typedef CHAR* &nbsp; PCHAR;</div><div class="code_line">typedef SHORT* &nbsp;PSHORT;</div><div class="code_line">typedef LONG* &nbsp; PLONG;</div></ol></div></div></div></div><br>
<br>
<strong class='tag-b'>Alexanbar</strong>, где  в программе это может происходить?<br>
<br>
TIMER1_TOP = 1023<br>
<br>
Тоесть заполнение может изменяться от 0 до 1023 включительно, что соотвествует 10-ти битному таймеру. (2^10-1)<br>
Если устаноить его в 0, то на выходе PD3 (OC1) установится постоянное низкое напряжение и наоборот, если установить 1023 то всегда будет высокое.<br>
<br>
Новое значение устанавливается в прерывании переполнения таймера.<br>
Границы проверяются ещё раньше.<br>
<br>
Если только компилятор чтото черезчур оптимизирует... других мыслей пока нет. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2009-01-05T10:39:52+00:00">05.01.09, 10:39</time></span></span><br>
Да, ещё такой момент. Когда крутишь ручку энкодера, то контроллер греется. <br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='7' style='font-size:7pt;'>Добавлено <time class="tag-mergetime" datetime="2009-01-05T11:25:16+00:00">05.01.09, 11:25</time></span></span><br>
Есть подозрение что глюки возникают при изменениии параметра заполнения т.к. если его не трогать, то контроллер ведёт себя стабильно.]]></description>
        <author>HardRock</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2159841</guid>
        <pubDate>Mon, 05 Jan 2009 10:01:39 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2159841</link>
        <description><![CDATA[Alexanbar: А может быть ширина импулься близка к периоду, а потом приосходит попытка увеличить её ещё больше? В результате старший разряд(ы) числа, которое хранит ширину импульса, игнорируются, и импульс получается опять коротким.]]></description>
        <author>Alexanbar</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2159840</guid>
        <pubDate>Mon, 05 Jan 2009 10:01:36 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2159840</link>
        <description><![CDATA[Prince: SHORT - он точно со знаком?]]></description>
        <author>Prince</author>
        <category>Микроконтроллеры</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2159727</guid>
        <pubDate>Sun, 04 Jan 2009 23:55:50 +0000</pubDate>
        <title>Какието непонятки с ШИМ + энкодер</title>
        <link>https://forum.sources.ru/index.php?showtopic=261490&amp;view=findpost&amp;p=2159727</link>
        <description><![CDATA[HardRock: Попробовал прикрутить энкодер к контроллеру ATTiny2313 и с его помошью изменять параметр заполнения ШИМ.<br>
Работает, но очень криво и что самое страшное - через некоторе время контроллер может зависнуть.<br>
<br>
Кривость работы заключается в том, что например если увеличивать заполнение ШИМ, то светодиод начинает светить ярче, как и положено, НО через некоторе время он может вообще потухнуть / мигнуть / включиться на максиммум и в целом вести себя неадекватно  :wacko: <br>
Или может начать моргать (как бы &quot;коротить&quot;) светодиод на другом порту, что ещё более странно.<br>
Можно было бы сослаться на дребезг, но это явно не он, т.к. пробовал подавлять его многими способами включая длительные задержки / флаги.<br>
Глюки практически не зависят от скорости вращения ручки.<br>
<br>
<br>
<strong class='tag-b'>Схема подключения</strong><br>
<br>
Энкодер:<br>
    Канал &quot;А&quot; : PORTD -&gt; PD2 (INT0)<br>
    Канал &quot;B&quot; : PORTD -&gt; PD3<br>
    Канал &quot;С&quot; : Земля<br>
    Кнопка : PORTD -&gt; PD0<br>
<br>
<br>
Светодиод ШИМ: PORTB -&gt; PB3 (OC1)<br>
Дополнительный светодиод: PORTB -&gt; PB0<br>
<br>
RESET через 10к резистор подтянут на плюс.<br>
<br>
Питание от +5 вольт с компьютера (красный/черный провода в молекс коннектора блока питания)<br>
<br>
<br>
Прошивка:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">#include &#60;inttypes.h&#62;</div><div class="code_line">#include &#60;avr/io.h&#62;</div><div class="code_line">#include &#60;avr/interrupt.h&#62;</div><div class="code_line">#include &#60;avr/sleep.h&#62;</div><div class="code_line">&nbsp;</div><div class="code_line">#include &quot;iocompat.h&quot;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">volatile SHORT &nbsp;PWMValue; &nbsp; // --- Переменная со значением ШИМ</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">void setPin(uint8_t Pin, uint8_t Enable){</div><div class="code_line">&nbsp;&nbsp; &nbsp;if(Enable) PORTB |= _BV(Pin);</div><div class="code_line">&nbsp;&nbsp; &nbsp;else PORTB &amp;= ~_BV(Pin);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">int main (void){</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Настройка ШИМ</div><div class="code_line">&nbsp;&nbsp; &nbsp;TCCR1A &nbsp; &nbsp; &nbsp;= &nbsp; TIMER1_PWM_INIT;</div><div class="code_line">&nbsp;&nbsp; &nbsp;TCCR1B &nbsp; &nbsp; &nbsp;|= &nbsp;TIMER1_CLOCKSOURCE;</div><div class="code_line">&nbsp;&nbsp; &nbsp;TIMSK &nbsp; &nbsp; &nbsp; = _BV (TOIE1); &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// - Прерывание по переполнению таймера</div><div class="code_line">&nbsp;&nbsp; &nbsp;OCR &nbsp; &nbsp; &nbsp; &nbsp; = 0; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;// - Стартовое значение ШИМ</div><div class="code_line">&nbsp;&nbsp; &nbsp;PWMValue &nbsp; &nbsp;= 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Обработка хуков настройки таймера</div><div class="code_line">&nbsp;&nbsp; &nbsp;#if defined(TIMER1_SETUP_HOOK)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;TIMER1_SETUP_HOOK();</div><div class="code_line">&nbsp;&nbsp; &nbsp;#endif</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Конфигурирование порта B на выход</div><div class="code_line">&nbsp;&nbsp; &nbsp;DDRB &nbsp; &nbsp;= _BV(PB0) | _BV(OC1);</div><div class="code_line">&nbsp;&nbsp; &nbsp;PORTB &nbsp; = 0x00; </div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Конфигурирование порта D на вход</div><div class="code_line">&nbsp;&nbsp; &nbsp;DDRD &nbsp; &nbsp;= ~_BV(PD0) | ~_BV(PD2) | ~_BV(PD3); &nbsp; &nbsp;// - PD 0,2,3 на вход</div><div class="code_line">&nbsp;&nbsp; &nbsp;PORTD &nbsp; = _BV(PD0) | _BV(PD2) | _BV(PD3); &nbsp; &nbsp; &nbsp; // - Подтягивающие резисторы для PD 0,2,3</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// --- Настройка прерывания INT0 по изменению состояния</div><div class="code_line">&nbsp;&nbsp; &nbsp;MCUCR &nbsp; |= &nbsp;_BV(ISC00);</div><div class="code_line">&nbsp;&nbsp; &nbsp;MCUCR &nbsp; &amp;= ~_BV(ISC01);</div><div class="code_line">&nbsp;&nbsp; &nbsp;GIMSK &nbsp; |= &nbsp;_BV(INT0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// - Разрешение прерываний</div><div class="code_line">&nbsp;&nbsp; &nbsp;sei();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;static uint8_t flag = 0;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;while(1){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(bit_is_clear(PIND, PD0) &amp;&amp; flag == 0){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;flag = 1;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;setPin(PB0, 1);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}else if(bit_is_set(PIND, PD0) &amp;&amp; flag == 1){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;flag = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;setPin(PB0,0);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;sleep_mode();</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">&nbsp;&nbsp; &nbsp;return (0);</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">//! Обработчик прерывания переполнения таймера</div><div class="code_line">ISR (TIMER1_OVF_vect) {</div><div class="code_line">&nbsp;&nbsp; &nbsp;OCR = PWMValue;</div><div class="code_line">}</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;</div><div class="code_line">//! Обработчик прерыания INT0</div><div class="code_line">/* первоначальный вариант</div><div class="code_line">ISR (INT0_vect){</div><div class="code_line">&nbsp;&nbsp; &nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;static char A_State; &nbsp; &nbsp;// - Предыдущее значение канала А</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GIMSK &nbsp; &amp;= &nbsp;~_BV(INT0);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// - Получаем текущее состояние каналов энкодера</div><div class="code_line">&nbsp;&nbsp; &nbsp;char _A = bit_is_clear(PIND, PD2);</div><div class="code_line">&nbsp;&nbsp; &nbsp;char _B = bit_is_clear(PIND, PD3);</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// - Если предыдущее значение канала А сопадает то выходим</div><div class="code_line">&nbsp;&nbsp; &nbsp;if (A_State == _A ) return;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;A_State = _A;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;// - Обработка направления вращения</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ((_B != _A)) PWMValue ++;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if ((_B == _A)) PWMValue --;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;GIMSK &nbsp; |= &nbsp;_BV(INT0);</div><div class="code_line">}</div><div class="code_line">*/</div><div class="code_line">&nbsp;</div><div class="code_line">ISR (INT0_vect){</div><div class="code_line">&nbsp;&nbsp; &nbsp;volatile SHORT Value = PWMValue;</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;if((((PIND) &amp; (1&#60;&#60;PD2)) == 0) &nbsp; ^ (((PIND) &amp; (1&#60;&#60;PD3)) == 0)){</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Value++;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(Value &#62; TIMER1_TOP) PWMValue = TIMER1_TOP;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else PWMValue = Value;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}else{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Value--;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;if(Value &#60; 0) PWMValue = 0;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;else PWMValue = Value;</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div><div class="code_line">}</div></ol></div></div></div></div><br>
<br>
Компилятор - WinAVR (avr-gcc)<br>
<br>
Параметры компиляции:<br>
<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">avr-gcc -g -Os -mmcu=attiny2313 -c main.c</div><div class="code_line">avr-gcc -g -mmcu=attiny2313 -o main.elf main.o</div><div class="code_line">avr-objcopy -j .text -j .data -O ihex main.elf main.hex</div></ol></div></div></div></div><br>
<br>
Ещё заметил странность что если убрать sleep_mode() из главного цикла то вообще всё рандомно начинает работать :wacko: <br>
<br>
Если изменять значение PWMValue внутри прерывания таймера, например инкрементировать от нуля до TIMER1_TOP и декрементировать обратно, то всё работает стабильно. Чудеса начинаются при обработке INT0 прерываний.<br>
<br>
Какие есть идеи как это исправить?]]></description>
        <author>HardRock</author>
        <category>Микроконтроллеры</category>
      </item>
	
      </channel>
      </rss>
	