<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-3939997793016329956</atom:id><lastBuildDate>Tue, 19 Dec 2017 12:50:35 +0000</lastBuildDate><category>Интернет</category><category>Общее</category><category>Электроника</category><category>Блог</category><category>Комплектующие</category><category>Разное</category><category>Soft</category><category>Atmel</category><category>Ubuntu</category><category>XMEGA</category><category>Python</category><category>Фото</category><category>Модули с Китая</category><category>ARM</category><category>Keil</category><category>STM32</category><category>Авто</category><category>Вирусы</category><title>Reason89 &amp; Nosaer</title><description>Лучше промолчать и показаться дураком, чем открыть рот и развеять все сомнения.</description><link>http://reason89.ru/</link><managingEditor>noreply@blogger.com (Reason89)</managingEditor><generator>Blogger</generator><openSearch:totalResults>164</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-3924642402415397237</guid><pubDate>Sun, 23 Apr 2017 09:43:00 +0000</pubDate><atom:updated>2017-04-23T14:44:16.384+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ARM</category><category domain="http://www.blogger.com/atom/ns#">Keil</category><category domain="http://www.blogger.com/atom/ns#">STM32</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Вывод информации через SWO в KEIL(STM32)</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Обычно я для подобных нужд использовал один из UART&#39;ов. А здесь наткнулся на подобное в одном из вебинаров, и решил записать в качестве заметки.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Выводить информацию в STM32 можно через&amp;nbsp;специальный вывод SWO программного интерфейса SWD.&lt;br /&gt;&amp;nbsp;В первую очередь необходимо настроить отладчик в самом Keil, согласно скриншотам:&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-tvSsBQ9IOh0/WPxt8PFumWI/AAAAAAAAAws/UfZ45YDeGMUZgzCPYrGORzQwZ8Qe5KOfACLcB/s1600/opt.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;297&quot; src=&quot;https://2.bp.blogspot.com/-tvSsBQ9IOh0/WPxt8PFumWI/AAAAAAAAAws/UfZ45YDeGMUZgzCPYrGORzQwZ8Qe5KOfACLcB/s400/opt.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-hkxGvibp_-4/WPxt8dCkb4I/AAAAAAAAAww/twVs7AD_0xIq8EaX_aaHgwe43ZVJDS2AACLcB/s1600/opt1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;281&quot; src=&quot;https://4.bp.blogspot.com/-hkxGvibp_-4/WPxt8dCkb4I/AAAAAAAAAww/twVs7AD_0xIq8EaX_aaHgwe43ZVJDS2AACLcB/s400/opt1.jpg&quot; width=&quot;400&quot; /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&amp;nbsp;&lt;a href=&quot;https://3.bp.blogspot.com/-nY4cMG69QE4/WPxt8STkv-I/AAAAAAAAAw0/sVpob8VfyYAO7hbR1aEuc5MXNCUcmgL7ACLcB/s1600/opt2.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;275&quot; src=&quot;https://3.bp.blogspot.com/-nY4cMG69QE4/WPxt8STkv-I/AAAAAAAAAw0/sVpob8VfyYAO7hbR1aEuc5MXNCUcmgL7ACLcB/s400/opt2.jpg&quot; width=&quot;400&quot; /&gt;&amp;nbsp;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&amp;nbsp; &amp;nbsp; Стоит обратить внимание на использование SW, вместо JTAG. И на последнем скриншоте необходимо выставить частоту на которой работает процессор, а не&amp;nbsp; какой кварц используется. И соответственно выставить какой порт будет использоваться . Обычно ставят P0, но здесь особой разницы в принципе нет.&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Добавляем в проект, между &lt;i&gt;/* USER CODE BEGIN Includes */ и /* USER CODE END Includes */:&lt;/i&gt;&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;#include &lt;stdio .h=&quot;&quot;&gt;&lt;br /&gt;#define ITM_Port8(n)    (*((volatile unsigned char *)(0xE0000000+4*n)))&lt;br /&gt;#define ITM_Port16(n)   (*((volatile unsigned short*)(0xE0000000+4*n)))&lt;br /&gt;#define ITM_Port32(n)   (*((volatile unsigned long *)(0xE0000000+4*n)))&lt;br /&gt;#define DEMCR           (*((volatile unsigned long *)(0xE000EDFC)))&lt;br /&gt;#define TRCENA          0x01000000&lt;br /&gt;&lt;br /&gt;struct __FILE { int handle; /* Add whatever you need here */ };&lt;br /&gt;FILE __stdout;&lt;br /&gt;FILE __stdin;&lt;br /&gt;int fputc(int ch, FILE *f)&amp;nbsp;&lt;/stdio&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (DEMCR &amp;amp; TRCENA) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (ITM_Port32(0) == 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ITM_Port8(0) = ch;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return(ch);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/pre&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Затем в проекте в необходимых местах выводим необходимую нам информацию. Главное использовать после функции&lt;i&gt; SystemClock_Config();&lt;/i&gt;, В противном случае будем получать иерголифы:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;printf(&quot;Start Init\n&quot;); // Для вывода текста&lt;br /&gt;printf(&quot;%d\n&quot;,a);       // Для вывода значений переменных&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Для самой отладки необходимо&amp;nbsp; перейти View -&amp;gt; Serial Windows -&amp;gt; Debug printf() Viewer, затем нажимаем Run(F5). И наблюдаем в появившемся окне все то, что прописали на вывод.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Почему то во всех источниках предлагают использовать &lt;u&gt;STM32 ST-LINK Utility. &lt;/u&gt;Чтоб им воспользоваться необходимо точно так же запустить процесс отладки в Keil, потом закрыть его, открыть ST-LINK Utility, настроить его на тот же Port и частоту, что настраивали Keil и нажать Connect.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-TJebv9rU38E/WPxzixjYwlI/AAAAAAAAAxE/VsZ3K-hjUXs-AsYLIUO2lcSn7rKBMX2WwCLcB/s1600/002a23485079d579e0fa0cbf9d2246b3.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;335&quot; src=&quot;https://2.bp.blogspot.com/-TJebv9rU38E/WPxzixjYwlI/AAAAAAAAAxE/VsZ3K-hjUXs-AsYLIUO2lcSn7rKBMX2WwCLcB/s400/002a23485079d579e0fa0cbf9d2246b3.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;</description><link>http://reason89.ru/2017/04/swo-keilstm32.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-tvSsBQ9IOh0/WPxt8PFumWI/AAAAAAAAAws/UfZ45YDeGMUZgzCPYrGORzQwZ8Qe5KOfACLcB/s72-c/opt.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-8052897961959444656</guid><pubDate>Sat, 15 Apr 2017 05:12:00 +0000</pubDate><atom:updated>2017-04-15T10:13:43.586+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Авто</category><category domain="http://www.blogger.com/atom/ns#">Комплектующие</category><title>Обзор видеорегистратора Xiaomi Yi 1080P Car WiFi DVR</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-4O2F__kSx0Y/WPGqVvWmxvI/AAAAAAAAAwc/iH34i5gG_YcGrwUXYklqjU1RcHFbuPerQCEw/s1600/f7ae38es-960.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;282&quot; src=&quot;https://2.bp.blogspot.com/-4O2F__kSx0Y/WPGqVvWmxvI/AAAAAAAAAwc/iH34i5gG_YcGrwUXYklqjU1RcHFbuPerQCEw/s400/f7ae38es-960.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Приобрел по принципу наилучшее соответствие цена-качество. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://goo.gl/dFwioL&quot;&gt;Покупался за 3500р&lt;/a&gt;., как выяснилось позже, можно было найти и дешевле, но я решил взять у проверенного продавца.&lt;br /&gt;Характеристики за такие деньги просто сумасшедшие:&lt;br /&gt;&lt;i&gt;- Производитель Xiaomi&lt;br /&gt;- Материал PC / ABS&lt;br /&gt;- Размер 74 × 52.4 ×19.4 мм&lt;br /&gt;- Вес 74 г&lt;br /&gt;- Фиксация С помощью присосок на стекло&lt;br /&gt;- Источник питания Автомобильный прикуриватель (12-24В)&lt;br /&gt;- Фотообъектив F1.8 большая апертура, 165° ультра-широкоугольный объектив&lt;br /&gt;- Процессор изображения YI A 12 двухъядерный + DSP чип, 3D шумоподавление&lt;br /&gt;- Датчик изображения 1/2.7 дюйма, 3,0 × 3.0μm (микрометра), 4000mV / lux — s (ультра-чувствительный датчик изображения)&lt;br /&gt;- Экран 2,7 дюймовый ЖК (TFT) дисплей, соотношение сторон экрана — 16:9, разрешение 960x240&lt;br /&gt;- WDR (технология широкого динамического диапазона) 2-го поколения, e-HDR&lt;br /&gt;- Емкость аккумулятора 240 мАч (литий-полимерный)&lt;br /&gt;- Общая потребляемая мощность ≤ 4.0 Вт&lt;br /&gt;- Длина кабеля питания 3,5 м&lt;br /&gt;- Интерфейс питания Micro USB (5V / 1A)&lt;br /&gt;- Датчик силы тяжести Встроенный высокоточный датчик с тремя осями&lt;br /&gt;- Видео кодирование Кодирование H.264, MP4 формат&lt;br /&gt;- Поддержка дополнительной памяти MicroSD карты 8 — 64 Гб&lt;br /&gt;- Звук Встроенный высококачественный микрофон и динамик&lt;br /&gt;- Сеть Wi-Fi 802.11n, поддержка беспроводных стандартов безопасности&lt;br /&gt;- Беспроводной шифрование WEP / WPA / WPA2&lt;br /&gt;- Поддержка платформ Android 4.1 или более поздние версии и IOS 7.0 или более поздние версии&lt;/i&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-ogoO7p-gLes/WPGqVSMkh_I/AAAAAAAAAwY/nahWXda7WjYTcLaARAVqXQgC19grP4GJQCEw/s1600/6a2e38es-960.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;282&quot; src=&quot;https://2.bp.blogspot.com/-ogoO7p-gLes/WPGqVSMkh_I/AAAAAAAAAwY/nahWXda7WjYTcLaARAVqXQgC19grP4GJQCEw/s400/6a2e38es-960.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;i&gt;&amp;nbsp;&lt;/i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Посылку принес курьер СДЭК, прямо до двери.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Интерфейс на китайском, но это лечится перепрошивкой. Да и нет нужды в этом, по картинкам все интуитивно понятно. Плюс есть русифицированная программа для телефона(об этом ниже).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Попытка вставить в него флешку с телефона не увенчалась успехом, чудо китайской промышленности вывело сообщение, что с такими медленными флешками работать не будет. И попросил приобрести флешку классом не ниже 10 и со скоростью записи 80Мб/с(говорят при 45мб/с тоже работает).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Поехал в магазин, купил Kingston microSDHC/SDXC UHS-I U3 90R/80W 32Гб, как выяснилось позже последнее поколение и самые шустрые у них в линейке. Смысл таких манипуляций в том, что регистратор способен писать на разрешении 2304*1296 30к/с. Весит такое видео не хило, и его нужно постоянно пихать на флешку, потому и такие требования.&amp;nbsp;&amp;nbsp; Сразу стоит отметить, что снимать лучше при 1920*1080 60к/с, так как видео качеством выше не каждый компьютер в состоянии открыть, а тот который смог проигрывал с малозаметными тормозами.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-Ctu9IMsJZdI/WPGqVYtQacI/AAAAAAAAAwU/IMVpul_89fk7Qb4F5_JoLL8y41dTeFDXgCEw/s1600/4fae38es-960.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;282&quot; src=&quot;https://4.bp.blogspot.com/-Ctu9IMsJZdI/WPGqVYtQacI/AAAAAAAAAwU/IMVpul_89fk7Qb4F5_JoLL8y41dTeFDXgCEw/s400/4fae38es-960.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Из плюсов стоит отметить очень большой угол обзора. Как сказал один мой товарищ, если бы не стойки, то он бы еще и зеркала твои заснял.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Очень хорошее качество звука, никакого шипения, кряхтения и шумов.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Есть система ADAS, которая контролирует разметку дороги и материт вас на китайском если вы начинаете съезжать на обочину или на встречку . Эта опция отключается, так как явно не для наших дорог.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Теперь касаемо Wi-Fi:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Есть &lt;a href=&quot;http://4pda.ru/forum/index.php?showtopic=729146&quot;&gt;специальная программа&lt;/a&gt;, переведенная на русский язык. Устанавливаете ее, там интуитивно понятный интерфейс и куча видеомануалов по настройке, установке регистратора и.т.д. С помощью программы можно настраивать регистратор, есть настройки, которых нет в самом регистраторе. например не отображать на видеозаписи дату, время или марку регистратора.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Можно подключиться к нему и смотреть через телефон то, что он видит записывать это и фотографировать. Сомнительная опция в плане полезности, но таких там много))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Порадовал адаптер, который вставляется в розетку. Он на два выхода USB, вроде бы мелочь, а приятно. Раньше там стоял обычный адаптер через который я заряжал телефон. А теперь с одного и телефон в дороге заряжать могу и ведеорегистратор подключени.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В общем покупкой доволен и всем рекомендую.&lt;br /&gt;На просторах интернета найти видеозаписи для просмотра качества видео вообще не проблема.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Дополнительно к регистратору можно докупить &lt;a href=&quot;https://goo.gl/e4UJCs&quot;&gt;переходное кольцо&lt;/a&gt; и &lt;a href=&quot;https://goo.gl/AKh9T7&quot;&gt;ультрафиолетовый фильтр&lt;/a&gt;. Чтоб на солнце картинка было более четкой.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;https://goo.gl/dFwioL&quot;&gt;Покупался здесь. Продавец проверенный, так что рекомендую.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://reason89.ru/2017/04/xiaomi-yi-1080p-car-wifi-dvr.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-4O2F__kSx0Y/WPGqVvWmxvI/AAAAAAAAAwc/iH34i5gG_YcGrwUXYklqjU1RcHFbuPerQCEw/s72-c/f7ae38es-960.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-1036226780811584237</guid><pubDate>Fri, 14 Apr 2017 09:37:00 +0000</pubDate><atom:updated>2017-04-14T14:38:03.959+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Комплектующие</category><category domain="http://www.blogger.com/atom/ns#">Модули с Китая</category><title>Обзор Xiaomi Power Bank 2,  20000 Ач</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&amp;nbsp;&lt;a href=&quot;https://3.bp.blogspot.com/-6dvwcWAre4c/WPCWjJw-ZXI/AAAAAAAAAv8/6vqp3SRVu4UxWb9EtzvYgsDC0F30AmtpgCLcB/s1600/qYVqkyurthE.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://3.bp.blogspot.com/-6dvwcWAre4c/WPCWjJw-ZXI/AAAAAAAAAv8/6vqp3SRVu4UxWb9EtzvYgsDC0F30AmtpgCLcB/s400/qYVqkyurthE.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Не так давно обзавелся Full HD видеокамерой Panasonic HC-V770. Родного аккумулятора хватает на 1,5 часа непрерывной съемки. В связи с чем решил докупить к камере PowerBank.&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Выбор пал на проверенную фирму Xiaomi.  &lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Собственно купил &lt;a href=&quot;https://goo.gl/TrQymN&quot;&gt;Xiaomi Power Bank 2 на 20000 Ампер часов&lt;/a&gt;.&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;Вторая версия от первой отличается наличием QC 3.0, у предыдущей версии QC 2.0. Плюс в довесок добавилась кое какая защита.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-iJqRDl6ntgU/WPCWpC6UzfI/AAAAAAAAAwA/terZRIUyOswZzVpHiPD_tICiG9MOiuohQCLcB/s1600/0ZU_2w-94t4.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;282&quot; src=&quot;https://1.bp.blogspot.com/-iJqRDl6ntgU/WPCWpC6UzfI/AAAAAAAAAwA/terZRIUyOswZzVpHiPD_tICiG9MOiuohQCLcB/s400/0ZU_2w-94t4.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Имеется:&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;- 2 USB выхода, что позволяет заряжать сразу 2 устройства одновременно.  &lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;- светодиодная индикация, в виде 4 светодиодов, которое показывает остаточную емкость аккумулятора.&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp;-совместимость с QC3.0 устройствами при использовании одного USB-порта&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;- есть такая интересная особенность как 2 часовая зарядка маленьким током. Для перехода в режим нужно нажать 2 раза функциональную кнопку. Данный режим позволяет заряжать Bluetooth гарнитуру и умный браслет от Xiaomi.&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;- предусмотрено 9 всевозможных режимов защиты, таких как от короткого замыкания, температуры, полного разряда или перезаряда и.т.д.&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-ZTsitTyhVRs/WPCWtisJiOI/AAAAAAAAAwE/nrTbGbJgeEcF6Gm3_Anq3oOQ98zdr_lmACLcB/s1600/BkwaoJ1sdzE.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;282&quot; src=&quot;https://4.bp.blogspot.com/-ZTsitTyhVRs/WPCWtisJiOI/AAAAAAAAAwE/nrTbGbJgeEcF6Gm3_Anq3oOQ98zdr_lmACLcB/s400/BkwaoJ1sdzE.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Дизайн и эргономика у продукта Xiaomi как всегда на высоте.В руках приятно держать, даже не смотря на то, что он очень увесистый.&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В комплекте шел короткий кабель micro usb, ми инструкция на китайском.&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Емкость&amp;nbsp; соответствует заявленной.&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Из таких явных минусов разве что, наличие только одной расцветки. Белый корпус очень маркий, поэтому &lt;a href=&quot;https://goo.gl/uHJQas&quot;&gt;пришлось докупить ещеи силиконовый чехол&lt;/a&gt;.&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp; &amp;nbsp; После покупки, проверил на официальном сайте на оригинальность. Все  бьется и сходится.&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;&amp;nbsp; &amp;nbsp; Покупкой полностью доволен. К тому же доставка была весьма быстрой, со склада в Москве.&amp;nbsp;&lt;/div&gt;&lt;div style=&quot;line-height: 100%; margin-bottom: 0cm;&quot;&gt;Покупал &lt;a href=&quot;https://goo.gl/TrQymN&quot;&gt;здесь&lt;/a&gt;.&lt;/div&gt;&lt;/div&gt;</description><link>http://reason89.ru/2017/04/xiaomi-power-bank-2-20000.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-6dvwcWAre4c/WPCWjJw-ZXI/AAAAAAAAAv8/6vqp3SRVu4UxWb9EtzvYgsDC0F30AmtpgCLcB/s72-c/qYVqkyurthE.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-7007699473896991847</guid><pubDate>Sun, 15 Jan 2017 04:27:00 +0000</pubDate><atom:updated>2017-01-15T09:28:21.959+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Модули с Китая</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>8-канальный логический анализатор Saleae Logic.</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-4eaj95cQrvg/WHr6ChI_VmI/AAAAAAAAAvg/3Z-4bOIQlU47aurC7rP2IbYfriWcA0MhACLcB/s1600/-TURTTb5ST8.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;225&quot; src=&quot;https://1.bp.blogspot.com/-4eaj95cQrvg/WHr6ChI_VmI/AAAAAAAAAvg/3Z-4bOIQlU47aurC7rP2IbYfriWcA0MhACLcB/s400/-TURTTb5ST8.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &amp;nbsp; В Китае был приобретен &lt;a href=&quot;https://goo.gl/BTrAVm&quot;&gt;8 канальный Логический анализатор&lt;/a&gt; в качестве настольного инструмента для отслеживания сигналов. Шикарная вещь, для людей, который часто работают с цифровыми протоколами передачи данных.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Когда заказывал даже не представлял о возможностях, которые он в себе содержит.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Начинка стандартная, тот же контроллер&amp;nbsp;CY7C68012A, что и стоит во всех подобных анализаторах. Буфер на микросхеме&amp;nbsp;LVC245A и память&amp;nbsp;ATMLH53602.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Поддерживает огромное количество цифровых протоколов, принимает обрабатывает и расшифровывает то, что передается по линии. Вполне наглядно можно видеть, какая посылка на &amp;nbsp;передается по линии, когда у нас что то не работает. Вплоть до скорости обмена.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Вроде как у оригинального анализатора, который скопировали в поднебесной на плате еще установлена всевозможная защита по каналам и.т.д. Но ценник у него чуть ли не в 10 раз больше. &amp;nbsp;А возможности одинаковые.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-AB3B_NyYiJk/WHr4tXa_g9I/AAAAAAAAAvM/_clSgmfoXiQ_P7Utc-FEDUnzX5gxgx7bwCLcB/s1600/-TURTTb5ST8.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;300&quot; src=&quot;https://2.bp.blogspot.com/-AB3B_NyYiJk/WHr4tXa_g9I/AAAAAAAAAvM/_clSgmfoXiQ_P7Utc-FEDUnzX5gxgx7bwCLcB/s400/-TURTTb5ST8.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &amp;nbsp; В комплекте сам анализатор, USB шнурок для питания и шлейф для подключения к плате. &amp;nbsp;Вскрывается легко, пайка хорошая, плата чистая(никаких следов флюса не обнаружено). Но плата в корпусе сидит не жестко, поэтому желательно в нескольких точках зафиксировать ее герметиком.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Работать должен с такими программами как&amp;nbsp;&lt;a href=&quot;https://www.saleae.com/&quot;&gt;Saleae Logic&lt;/a&gt; и USBee Suite, но я пробовал только с первой, до второй руки так и не дошли, так как и с первой меня все более чем устроило. При подключении анализатора к ПК, он сам устанавливает все необходимые драйвера.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://1.bp.blogspot.com/-VfJ0ZHjSgMI/WHr5weWUnaI/AAAAAAAAAvY/hTNpsdlGVzIXvlpWDmyRrQE8d5YeGZtegCLcB/s1600/-TURTTb5ST8.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;217&quot; src=&quot;https://1.bp.blogspot.com/-VfJ0ZHjSgMI/WHr5weWUnaI/AAAAAAAAAvY/hTNpsdlGVzIXvlpWDmyRrQE8d5YeGZtegCLcB/s400/-TURTTb5ST8.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &amp;nbsp; В программе&amp;nbsp;Saleae Logic все просто, выставляет время замера, у каждого канала выставляем назначение вывода, который мы к нему подцепили SCL, SDA, TX, RX и.т.д. Если не назначать, то он все так же прекрасно покажет, но уже не будет наглядной расшифровки передаваемых посылок. Выставлять по какому фронту срабатывать ну и много много других настроек. Частота дискретизации 24МГц, что в 99% случаев за глаза хватает. Ну и нажимаем Start.&lt;br /&gt;&lt;a href=&quot;https://goo.gl/BTrAVm&quot;&gt;Купить 8 Канальный логический анализатор Saleae Logic&lt;/a&gt;&lt;/div&gt;</description><link>http://reason89.ru/2017/01/8-saleae-logic.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://1.bp.blogspot.com/-4eaj95cQrvg/WHr6ChI_VmI/AAAAAAAAAvg/3Z-4bOIQlU47aurC7rP2IbYfriWcA0MhACLcB/s72-c/-TURTTb5ST8.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-932274709249747771</guid><pubDate>Fri, 13 Jan 2017 12:23:00 +0000</pubDate><atom:updated>2017-01-13T17:24:22.299+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Комплектующие</category><category domain="http://www.blogger.com/atom/ns#">Модули с Китая</category><title>Xmega &amp; MAX6633 (TWI)</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&amp;nbsp; &amp;nbsp; MAX6633 - интегральный датчик температуры с I2C интерфейсом, либо TWI кому как удобно.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Микросхема простая до невозможности, на запрос температуры присылает &amp;nbsp;2 байта информации. Сдвигаем на три бита вправо, получаем 12 битное значение температуры плюс 1 знак(+/-).&lt;br /&gt;&amp;nbsp; &amp;nbsp; 1 бит это 0,0625 градуса. Мне точность важна не так сильно, потому я просто полученное значение делил на 16 и получал уже температуру в привычных градусах.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Теперь относительно TWI &amp;nbsp;в Xmega, на первый взгляд кажется дремучим лесом. Но на деле, все не так сложно. Для начала лучше всего изучить теорию TWI(I2C), если усвоить алгоритм работы протокола, то вопросов в разы будет меньше.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;Я надолго завис над одной проблемой, когда при чтении старшего байта температуры получал NAK в конце посылки. При более детальном изучении теории, я понял, что оказывается при чтении я формирую ответ, а не ведомой устройство.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-BSgqbZVNe9A/WHjEX8JbjXI/AAAAAAAAAuw/UjhhKTfy2EAz2wKri1Jo7eN58q-ZIhyawCLcB/s1600/2017-01-12_08-08-26.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;95&quot; src=&quot;https://3.bp.blogspot.com/-BSgqbZVNe9A/WHjEX8JbjXI/AAAAAAAAAuw/UjhhKTfy2EAz2wKri1Jo7eN58q-ZIhyawCLcB/s400/2017-01-12_08-08-26.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &amp;nbsp; Проблему удалось быстро решить благодаря &lt;a href=&quot;https://goo.gl/JVWegT&quot;&gt;Логическому анализатору&lt;/a&gt;. Подпаялся к SCL и к SDA, поймал посылку. Программа, которая шла в комплекте сразу расшифровала посылку и я увидел в чем была моя проблема. Потому если у вас еще нет такого помощника, &lt;a href=&quot;https://goo.gl/JVWegT&quot;&gt;обязательно заказывайте у проверенного продавца&lt;/a&gt;.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-X8swaXxnzfM/WHjGKaTVumI/AAAAAAAAAu8/kRq45lOr8yYj3LdCY3MNPgt1N-6nANCfwCLcB/s1600/%25D0%25A1%25D0%25BA%25D1%2580%25D0%25B8%25D0%25BD%25D1%2588%25D0%25BE%25D1%2582%2B2017-01-13%2B16.06.17.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;113&quot; src=&quot;https://2.bp.blogspot.com/-X8swaXxnzfM/WHjGKaTVumI/AAAAAAAAAu8/kRq45lOr8yYj3LdCY3MNPgt1N-6nANCfwCLcB/s400/%25D0%25A1%25D0%25BA%25D1%2580%25D0%25B8%25D0%25BD%25D1%2588%25D0%25BE%25D1%2582%2B2017-01-13%2B16.06.17.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &amp;nbsp; Ну и собственно исходный код инициализации и приема передачи. Делал без прерываний, так как в них не было необходимости:&lt;/div&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;// Инициализация TWI&lt;br /&gt;void TWIC_init(void)&lt;br /&gt;{&lt;br /&gt; TWIC.CTRL = 0;&lt;br /&gt; TWIC.MASTER.BAUD = 0x23;     // При 8 Мгц, на 100кГц = 35(0x23)&lt;br /&gt; TWIC.MASTER.CTRLA = TWI_MASTER_ENABLE_bm;&lt;br /&gt; TWIC.MASTER.CTRLB = 0;&lt;br /&gt; TWIC.MASTER.CTRLC = 0;&lt;br /&gt; TWIC.MASTER.STATUS = TWI_MASTER_RIF_bm | TWI_MASTER_WIF_bm | TWI_MASTER_ARBLOST_bm | TWI_MASTER_BUSERR_bm | TWI_MASTER_BUSSTATE0_bm;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;// Отправка данных по TWI&lt;br /&gt;void TWIC_Transiver()&lt;br /&gt;{&lt;br /&gt; TWIC.MASTER.ADDR = MAX_ADDR | MAX_WRITE ;   // Отправляю адрес с командой на запись 0b10000000 &lt;br /&gt; while (!(TWIC.MASTER.STATUS &amp;amp; TWI_MASTER_WIF_bm));&lt;br /&gt;    &lt;br /&gt; TWIC.MASTER.DATA = MAX_Command;     // Отправляю команду 0b00000000&lt;br /&gt; while(!(TWIC.MASTER.STATUS &amp;amp; TWI_MASTER_WIF_bm));&lt;br /&gt; &lt;br /&gt; TWIC.MASTER.ADDR = MAX_ADDR | MAX_READ ;   // Еще раз отправляю адрес с командой на чтение 0b10000001&lt;br /&gt; &lt;br /&gt; while(!(TWIC.MASTER.STATUS &amp;amp; TWI_MASTER_RIF_bm));  // Считываю старший байт температуры&lt;br /&gt; MSB_temp = TWIC.MASTER.DATA;&lt;br /&gt; &lt;br /&gt; TWIC.MASTER.CTRLC = 0x02;     // Выставляю ACK на линии&lt;br /&gt; &lt;br /&gt; while(!(TWIC.MASTER.STATUS &amp;amp; TWI_MASTER_RIF_bm));  // Считываю младший байт температуры&lt;br /&gt; LSB_temp = TWIC.MASTER.DATA;&lt;br /&gt; &lt;br /&gt; TWIC.MASTER.CTRLC = TWI_MASTER_ACKACT_bm | TWI_MASTER_CMD_STOP_gc;// Отправляю стоп бит&lt;br /&gt; TWIC.MASTER.CTRLC = 0;      // Обнуляю регистр NAC-ACK&lt;br /&gt; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;</description><link>http://reason89.ru/2017/01/xmega-max6633-twi.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://3.bp.blogspot.com/-BSgqbZVNe9A/WHjEX8JbjXI/AAAAAAAAAuw/UjhhKTfy2EAz2wKri1Jo7eN58q-ZIhyawCLcB/s72-c/2017-01-12_08-08-26.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-2536852392894495422</guid><pubDate>Tue, 20 Sep 2016 13:34:00 +0000</pubDate><atom:updated>2017-01-25T11:41:25.223+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Комплектующие</category><category domain="http://www.blogger.com/atom/ns#">Модули с Китая</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Переходник USB-RS485</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Постепенно начал обзаводиться всевозможными электронными модулями с Китая.&lt;br /&gt;Соответственно буду выкладывать не большие обзоры по работе с ними и разбор, когда как.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Данный адаптер USB-RS485 приобретал &lt;a href=&quot;http://alipromo.com/redirect/cpa/o/oab5i4quisn8epwmj8fqre0bsfa73exr/?material=cb-p-chrome&amp;amp;to=https%3A%2F%2Fru.aliexpress.com%2Fitem%2FHOT-SALE-2pcs-lot-USB-to-RS485-485-Converter-Adapter-Support-Win7-XP-Vista-Linux-Mac%2F1699271296.html%3Fspm%3D2114.13010608.0.0.dYJpeg%26aff_platform%3Daaf%26cpt%3D1485326452491%26sk%3Deub6yrrBy%26aff_trace_key%3D936a4acb319b47e89b542324538d7161-1485326452491-00495-eub6yrrBy&quot;&gt;здесь&lt;/a&gt;. Доставка быстрая, качество меня вполне устроило. Оба переходника пришли рабочими. Вполне компактные и удобные в обращении.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Сам испробовал работу на скорости 1000000 бод/с(больше необходимости не было) все прекрасно работает.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-_1hIKdolDKY/V-E6mECMM8I/AAAAAAAAApM/U4Mhc-7skUw_yf74VNijZqaStHfpWYBMwCLcB/s1600/IMG_2016-09-20_094611.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;241&quot; src=&quot;https://4.bp.blogspot.com/-_1hIKdolDKY/V-E6mECMM8I/AAAAAAAAApM/U4Mhc-7skUw_yf74VNijZqaStHfpWYBMwCLcB/s400/IMG_2016-09-20_094611.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Вскрытие показало, что работает на микросхеме MAX485. Качество пайки добротное. Кому необходима более детальная информация по скоростям работы, то можете открыть даташит на нее, и увидите все характеристики.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Для работы удобно пользоваться&lt;a href=&quot;https://sites.google.com/site/terminalbpp/&quot;&gt; терминалом от Br@y++&lt;/a&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; С драйверами под Windows никаких проблем не возникало. Грубо говоря все работает с коробки.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; На момент покупки цена была 55р. за штуку. В наших магазинах электроники, микросхемы RS485 стоят от 80 р., причем это без USB контроллера. Поэтому считаю что дешевле купить и не заморачиваться.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Из минусов, разве что могли что нибудь по солиднее этого зеленого терминала придумать.&lt;/div&gt;</description><link>http://reason89.ru/2016/09/usb-rs485.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://4.bp.blogspot.com/-_1hIKdolDKY/V-E6mECMM8I/AAAAAAAAApM/U4Mhc-7skUw_yf74VNijZqaStHfpWYBMwCLcB/s72-c/IMG_2016-09-20_094611.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-2564294840379418563</guid><pubDate>Mon, 19 Sep 2016 18:15:00 +0000</pubDate><atom:updated>2016-09-19T23:22:40.591+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Xmega: АЦП(ADC)</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-NXLm24JuZ6k/Vqb9zMH4O8I/AAAAAAAAAlw/LxKeMYw3THY/s1600/adc.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;176&quot; src=&quot;https://2.bp.blogspot.com/-NXLm24JuZ6k/Vqb9zMH4O8I/AAAAAAAAAlw/LxKeMYw3THY/s400/adc.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В микроконтроллерах Xmega используется 12 разрядный АЦП, который позволяет делать нескольких сигналов одновременно. Так же в&amp;nbsp; АЦП есть усилитель, который можно использовать с целью измерения маленьких напряжений в дифференциальном режиме.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Преобразование может производиться как в знаковом, так и без знаковом режиме.&amp;nbsp; Стоит помнить, что если АЦП использует дифференциальные входы, то должен использоваться знаковый режим, а с входами других типов можно использовать оба режима, как знаковый, так и без знаковый.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Из таких явных неудобств, стоит обратить внимание на то, что&lt;span style=&quot;background-color: white; color: #303030; display: inline; float: none; font-family: &amp;quot;verdana&amp;quot; , sans-serif; font-size: 12.16px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: 20.672px; text-align: justify; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;&quot;&gt; &lt;/span&gt;режим преобразования устанавливается на весь АЦП, а не индивидуально для каждого канала. То есть когда один из каналов использует дифференциальный вход, АЦП должен быть введен в знаковый режим.&lt;br /&gt;&amp;nbsp; &amp;nbsp; На входе АЦП стоит мультиплексор, который позволяет нам оцифровывать 4 внутренних сигнала, таких как: датчик температуры, выход ЦАП, деленное на 10 напряжение питания VCC и источник опорного напряжения, плюс 16 внешних сигналов. В AVR такого и близко не было.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Преобразование АЦП может быть запущено либо программно, запись в определенный регистр заданного значения, либо через систему событий.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Можно использовать 4 режима измерения:&lt;br /&gt;- дифференциальный вход&lt;br /&gt;- дифференциальный вход с усилением &lt;br /&gt;- несимметричный вход&lt;br /&gt;- внутренний вход &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; В качестве опорного напряжения АЦП (VREF) можно выбрать следующие напряжения:&lt;br /&gt;- Точное внутреннее напряжение INT1V 1В.&lt;br /&gt;- Внутреннее напряжение INTVCC VCC/1.6В.&lt;br /&gt;- Внешнее напряжение, поданное на вывод AREF порта А.&lt;br /&gt;- Внешнее напряжение, поданное на вывод AREF порта B.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; Описание всех регистров можно найти в документации на Xmega. Настроек на самом деле огромное количество. В сравнении с предыдущими поколениями, Xmega&amp;nbsp; позволяет настраивать все более тонко, соответственно и количество регистров здесь гораздо больше.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Привожу функцию инициализации АЦП:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;void ADC_init()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ADCA.CTRLB = ADC_RESOLUTION_12BIT_gc;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// 12 бит дискретизация&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ADCA.CH0.CTRL = ADC_CH_INPUTMODE_SINGLEENDED_gc;&amp;nbsp; // CH0 настроен на внешний нессимметричный вход&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ADCA.PRESCALER =ADC_PRESCALER_DIV32_gc;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Переферийная частота работы АЦП&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ADCA.REFCTRL = ADC_REFSEL_INT1V_gc | 0x02;&amp;nbsp;       // Опорное напряжение 1 В.&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ADCA.CH0.MUXCTRL = ADC_CH_MUXPOS_PIN3_gc; &amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Настраиваем как положительный вывод порта для АЦП&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ADCA.CTRLA = ADC_ENABLE_bm;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Активирую АЦП&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;</description><link>http://reason89.ru/2016/09/xmega-adc.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-NXLm24JuZ6k/Vqb9zMH4O8I/AAAAAAAAAlw/LxKeMYw3THY/s72-c/adc.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-207334756212312708</guid><pubDate>Mon, 19 Sep 2016 18:09:00 +0000</pubDate><atom:updated>2016-09-19T23:31:42.432+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Xmega: AWEX</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://4.bp.blogspot.com/-vl3juLWHqt4/V-Ag8ThxuWI/AAAAAAAAAo8/53e_ZQ5M0RM_U4MQm5foxCwRHZZOnLnCQCLcB/s1600/pg.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;218&quot; src=&quot;https://4.bp.blogspot.com/-vl3juLWHqt4/V-Ag8ThxuWI/AAAAAAAAAo8/53e_ZQ5M0RM_U4MQm5foxCwRHZZOnLnCQCLcB/s400/pg.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Прежде чем начать работать с модулем AWEX, изучите его наличие в вашем микроконтроллере. Когда я начинал изучать AWEX я столкнулся с тем, что документация на ATXmega256A3 разнилась, в одном документе было написано что их два, на PORTC и на PORTE. После того, как мои попытки завести AWEX на PORTE не увенчались успехом. Я нашел другой доумент, где было написано, что AWEX есть только на PORTC.&lt;br /&gt;&amp;nbsp; AWEX это некое расширение модуля таймера-счетчика. Используется для аппаратной генерации импульсов. Очень удобно использовать для генерации ШИМ сигнала для управления инверторами и шаговыми двигателями. Имеется возможность вставлять паузу мертвого времени и.т.д.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Собственно простой пример:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;int main(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ClockExt8MHz();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC.DIRSET = 0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC.OUTCLR = 0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.CTRLB&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; = TC_WGMODE_SS_gc | TC0_CCAEN_bm;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.PER&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = 512;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.CCA&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; = 256;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.CTRLA&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; = TC_CLKSEL_DIV1_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AWEXC.CTRL&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; = AWEX_DTICCAEN_bm;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AWEXC.DTBOTH&amp;nbsp;&amp;nbsp;&amp;nbsp; = 48;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; AWEXC.OUTOVEN&amp;nbsp;&amp;nbsp; = 0x03;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;while (1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/pre&gt;&lt;i&gt;&lt;b&gt;AWEXC.CTRL = AWEX_DTICCAEN_bm&lt;/b&gt;&amp;nbsp; - здесь разрешаем использование на канале А, паузы неперекрытия.&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;AWEXC.DTBOTH&lt;/b&gt; - Общий регистр паузы неперекрытия&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;AWEXC.DTHS и AWEXC.DTLS&lt;/b&gt; Регистры паузы неперекрытия верзнего и нижнего уровня&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;AWEXC.OUTOVEN&lt;/b&gt; - Регистр разрешения перекрытия выходов&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;b&gt;TCC0.CTRLB&amp;nbsp; =&amp;nbsp; TC_WGMODE_SS_gc | TC0_CCAEN_bm&lt;/b&gt; - запускаем режим генерации импульсов с однонаправленным счетом и активируем канал A.&lt;/i&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Данный пример управляет с помощью PORTC.0 и PORTC.1 двумя транзисторами в плечах преобразователя.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Так как MOSFET транзисторы запираются не сразу, и не возникло ситуации, когда оба транзистора открыты. Необходимо выставлять паузы неперекрытия, чтобы транзистор наверняка&amp;nbsp; заперся.&lt;br /&gt;&lt;a href=&quot;http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh_xmega_a/15.htm&quot;&gt;Больше технической русскоязычной документации здесь&lt;/a&gt;&lt;/div&gt;</description><link>http://reason89.ru/2016/09/xmega-awex.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://4.bp.blogspot.com/-vl3juLWHqt4/V-Ag8ThxuWI/AAAAAAAAAo8/53e_ZQ5M0RM_U4MQm5foxCwRHZZOnLnCQCLcB/s72-c/pg.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-7388456349910708415</guid><pubDate>Wed, 20 Jul 2016 17:16:00 +0000</pubDate><atom:updated>2016-07-20T22:17:37.541+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Интернет</category><category domain="http://www.blogger.com/atom/ns#">Общее</category><category domain="http://www.blogger.com/atom/ns#">Разное</category><title>Самый лучший сервис для получения Кэшбэка с Online покупок.</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В последнее время все больше людей начинают совершать онлайн покупки. Мало того, что это весьма удобно, так еще и можно найти именно то, что ты хочешь и по более низкой цене.&lt;br /&gt;Онлайн магазинов сейчас огромное количество, самые знаменитые это Ebay и Aliexpress. Существуют и отечественные площадки, но на них цены немного больше китайских и почти всегда приходится платить за доставку.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Люди&amp;nbsp; с Китая заказывают все, начиная от резинки для волос и заканчивая топовыми телефонами и компьютерами. Если взглянуть на те же социальные сети, то там появилось огромное количество групп связанных с покупками на Aliexpress. Обычно выкладывается изображение товара, один из хороших комментариев к нему и ссылка по которой люди переходят и добавляют товар в корзину.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Мало кто догадывается, что ссылки на эти товары являются некой CPA рекламой. Если вы приобретаете этот товар, то человек, который разместил данную ссылку получает определенный процент за то, что привел вас на сайт. Процент может быть разнообразным, вплоть до 15%, зависит от продавца.&lt;br /&gt;&amp;nbsp;&amp;nbsp; Подобные отчисления называются &quot;CashBack&quot;, т.е. это награда за то, что покупателя привели на сайт.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Но не каждый знает, что он может сам получать этот самый Кэшбэк. Существует много сайтов, на которых нужно зарегистрироваться, заходить туда перед покупкой. Вбивать ссылку на товар и получать новую, по которой и будет совершаться покупка. А деньги в итоге можно вывести только на WebMoney или ЯндексДеньги. На мой взгляд это крайне не удобно. Плюс ко всему, не видно распространяется ли акция на данный товар.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В итоге, из всего многообразия подобных сайтов &lt;a href=&quot;https://cashback.epn.bz/?inviter=013dd&quot;&gt;я выбрал на мой взгляд самый удобный сервис&lt;/a&gt;.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-GDsrwhQzv3g/V4-xPveVtDI/AAAAAAAAAok/FtdhqR-ZG14c-siyBzyw9SMt8F18FCwNQCLcB/s1600/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;270&quot; src=&quot;https://2.bp.blogspot.com/-GDsrwhQzv3g/V4-xPveVtDI/AAAAAAAAAok/FtdhqR-ZG14c-siyBzyw9SMt8F18FCwNQCLcB/s400/1.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Этот сервис предлагает после регистрации &lt;a href=&quot;https://cashback.epn.bz/plugin/install?i=013dd&quot;&gt;установить плагин в браузер&lt;/a&gt;. И когда вы будете посещать какой либо онлайн магазин, плагин будет вам показывать возможную скидку для вас. Если брать самый популярный китайский онлайн магазин(Aliexpress), то там CashBack составит порядка 7%(т.е. с 1000 потраченных рублей, на счет телефона можно будет вернуть 70).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Вам нужно всего лишь на странице с товаром щелкнуть по плагину и нажать по кнопке &quot;Перейти к покупке&quot;. После этого страница обновится и вы можете покупать товар. &lt;br /&gt;Позже зайдя на &lt;a href=&quot;https://cashback.epn.bz/?inviter=013dd&quot;&gt;сайт сервиса&lt;/a&gt;, на вкладке статистика, вы увидите номер операции и отчисления, которые вам положены.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-95tpBagHBYY/V4-xWZlH2tI/AAAAAAAAAoo/1sLKBF8G2LAOFHFirpD15OojJYR47HhfgCLcB/s1600/2.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;291&quot; src=&quot;https://3.bp.blogspot.com/-95tpBagHBYY/V4-xWZlH2tI/AAAAAAAAAoo/1sLKBF8G2LAOFHFirpD15OojJYR47HhfgCLcB/s400/2.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Все деньги полученные вами от покупок можно переводить как на счет телефона, интернет кошельки или на карты Visa или MasterCard.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В общем если вы часто покупаете товары в интернете, вам стоит задуматься о том, какие деньги вы упускаете.&lt;/div&gt;</description><link>http://reason89.ru/2016/07/online.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-GDsrwhQzv3g/V4-xPveVtDI/AAAAAAAAAok/FtdhqR-ZG14c-siyBzyw9SMt8F18FCwNQCLcB/s72-c/1.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-7258754429494820953</guid><pubDate>Sun, 01 May 2016 11:53:00 +0000</pubDate><atom:updated>2017-03-28T22:41:10.281+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Xmega: Работа с дисплеем Winstar WH1602 на контроллере HD44780</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&amp;nbsp;&lt;a href=&quot;https://4.bp.blogspot.com/-st9zo6mOfr0/VyXqNXVaauI/AAAAAAAAAoI/PnmH4mkE-8cSnA9swfZ2i6BY2xVg5Et0gCLcB/s1600/DSC03335.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;267&quot; src=&quot;https://4.bp.blogspot.com/-st9zo6mOfr0/VyXqNXVaauI/AAAAAAAAAoI/PnmH4mkE-8cSnA9swfZ2i6BY2xVg5Et0gCLcB/s400/DSC03335.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Разъяснять о дисплее ничего не буду, информации в сети просто уйма. Самый распространенный контроллер для LCD. Дисплее встретить можно везде и повсеместно. На момент подписания подобные дисплее 16х2 можно с китая заказать за 90 рублей за штуку.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Подключаются все практически однотипно, единственный косяк есть в том что у некоторых моделей VCC и GND поменяны местами, если перепутать сгорает моментально.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Изучал подобный дисплей еще в универе, тогда было проще) Макетка заранее настроена, все библиотеки подключены, печатаешь все согласно методичке и все работает)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Решил подключить сей девайс к Xmega. Как подключать, включать подсветку, настраивать контрастность и выводить кириллицу найти не проблема.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Моя первая и главная ошибка была в том, что я много времени убил на поиск готовой библиотеки, которых на самом деле не мало. Нашел даже &lt;a href=&quot;http://www.leon-instruments.pl/2013/12/kurs-xmega-wyswietlacz-lcd-05.html&quot;&gt;для контроллеров Xmega&lt;/a&gt; Но любые попытки подключить уже что то готовое разбивались в пух и прах. То компилятору что то не нравилось, то не хватало какой то библиотеки и.т.д. В итоге плюнул, освоил с нуля документацию и начал писать сам. Совету вчитаться в команды и расшифровать их, а не в лоб использовать готовые.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-s7vxv6NLi3Y/VyXqbU_a6EI/AAAAAAAAAoM/5-DqpAxxap01nTO8BIEppnndlgB2HFniQCLcB/s1600/1.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;147&quot; src=&quot;https://3.bp.blogspot.com/-s7vxv6NLi3Y/VyXqbU_a6EI/AAAAAAAAAoM/5-DqpAxxap01nTO8BIEppnndlgB2HFniQCLcB/s400/1.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&amp;nbsp;&lt;a href=&quot;https://2.bp.blogspot.com/-LmCJcyNptXA/VyXqbRbcYMI/AAAAAAAAAoQ/kKe3SBmhxOE5vV6TE5Yn9HOeHCTcETrVgCLcB/s1600/2.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;163&quot; src=&quot;https://2.bp.blogspot.com/-LmCJcyNptXA/VyXqbRbcYMI/AAAAAAAAAoQ/kKe3SBmhxOE5vV6TE5Yn9HOeHCTcETrVgCLcB/s400/2.JPG&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Второе на что следует обратить внимание это то, что дисплей мягко говоря заторможен. После любой отправленной ему команды необходимо выдерживать приличную паузу.&lt;br /&gt;Смотрите даташит и ставите с запасом и не прогадаете.&lt;br /&gt;Ну и собственно несколько функций для приятной работы по 8 битной шине данных:&lt;br /&gt;&lt;a href=&quot;http://mobgame.moy.su/hz/reason89/LCD_XMEGA.txt&quot;&gt;Пытался выложить по как обычно через виджет, но он исковеркал код до неузнаваемости, итого выложу так. &lt;/a&gt;&lt;/div&gt;</description><link>http://reason89.ru/2016/05/xmega-winstar-wh1602-hd44780.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://4.bp.blogspot.com/-st9zo6mOfr0/VyXqNXVaauI/AAAAAAAAAoI/PnmH4mkE-8cSnA9swfZ2i6BY2xVg5Et0gCLcB/s72-c/DSC03335.jpg" height="72" width="72"/><thr:total>1</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-3382718939877427860</guid><pubDate>Sun, 01 May 2016 06:30:00 +0000</pubDate><atom:updated>2016-05-01T17:10:06.606+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">Soft</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Включение преобразований c типом float в Atmel Studio</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-ccyQaRU7J2Q/VyWig-C6tQI/AAAAAAAAAn0/_sTP4f8RP1EACkd7AvKtTngG8JGZeU2XgCLcB/s1600/WH1602J.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;220&quot; src=&quot;https://2.bp.blogspot.com/-ccyQaRU7J2Q/VyWig-C6tQI/AAAAAAAAAn0/_sTP4f8RP1EACkd7AvKtTngG8JGZeU2XgCLcB/s400/WH1602J.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; На днях столкнулся с проблемой вывода числа с плавающей запятой на LCD дисплей WH1602.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; При преобразовании обычного десятичного числа, на LCD выводилось все как нужно.&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;long int Temp = 0x7777;&lt;br /&gt;char st_Temp[6] = &quot;&quot;;&lt;br /&gt;itoa(Temp, st_Temp, 10);&lt;br /&gt;LCD_Data(st_Temp[0]);&lt;br /&gt;LCD_Data(st_Temp[1]);&lt;br /&gt;LCD_Data(st_Temp[2]);&lt;br /&gt;LCD_Data(st_Temp[3]);&lt;br /&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; После преобразования в число с плавающей&amp;nbsp; запятой на WH1602 выводился знак вопроса и ряд пробелов.&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;long int Temp = 0x7777;&lt;br /&gt;char st_Temp[10] = &quot;&quot;;&lt;br /&gt;float Temp_float = 0;&lt;br /&gt;Temp_float = (float)Temp / 100; &lt;br /&gt;sprintf(st_Temp, &quot;%01.2f&quot;, Temp_float );&lt;br /&gt;LCD_Data(st_Temp[0]);&lt;br /&gt;LCD_Data(st_Temp[1]);&lt;br /&gt;LCD_Data(st_Temp[2]);&lt;br /&gt;LCD_Data(st_Temp[3]);&lt;br /&gt;LCD_Data(st_Temp[4]);&lt;br /&gt;LCD_Data(st_Temp[5]);&lt;br /&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; После долгих поисков проблемы, скачал DEV C++ и скомпилировал проект там с выводом в консоль. Все вывелось, как и было задумано.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Получается проблема была в компиляторе Atmel Studio. Версия была у меня 6.0.1703&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Так как контроллеры Atmel сами по себе не умеют работать с числами с плавающей запятой, то такие преобразования выполняются сугубо программно. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Функции преобразования типа float, такие как sprintf, ftoa, snprintf и.т.д. отнимают много ресурсов контроллера от того их использовать не рекомендуется и они по умолчанию отключены в Atmel Studio.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Можно&amp;nbsp; постоянно делить число 10, и проверять результат деления больше или меньше он 10. Чтобы своевременно самому выставить запятую, но для этого нужно городить несколько циклов и условий, а в ресурсах МК я не был ограничен.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://3.bp.blogspot.com/-ASOKmAeVB5E/VyWiNSr_1kI/AAAAAAAAAnw/YITqNRXIlugMrzc_60-ao_qDzMLjC9hawCKgB/s1600/FloatingpointSupportAtmelStudio21.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;195&quot; src=&quot;https://3.bp.blogspot.com/-ASOKmAeVB5E/VyWiNSr_1kI/AAAAAAAAAnw/YITqNRXIlugMrzc_60-ao_qDzMLjC9hawCKgB/s400/FloatingpointSupportAtmelStudio21.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Потому для решения проблемы я скачал Atmel Studio 6.2( в 6.0.1703 такие опции я не нашел).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Переходим на вкладку параметров проекта ALT+F7.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В меню AVR/GNU linker- General клацаем галочку на против Use vprintf library&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://2.bp.blogspot.com/-A_uuljS2tg4/VyWiNKGWEsI/AAAAAAAAAns/bhVouJx-tYUUngGJ1yxTtZewZGi8ADviwCKgB/s1600/FloatingpointSupportAtmelStudio.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;193&quot; src=&quot;https://2.bp.blogspot.com/-A_uuljS2tg4/VyWiNKGWEsI/AAAAAAAAAns/bhVouJx-tYUUngGJ1yxTtZewZGi8ADviwCKgB/s400/FloatingpointSupportAtmelStudio.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Затем в AVR/GNU linker- Library добавляем 2 библиотеки: printf_flt и scanf_flt&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Компилируем проект, получаем пару предупреждений об использовании типа float и собственно все. На LCD результат выводит с плавающей запятой.&lt;/div&gt;</description><link>http://reason89.ru/2016/05/lcd-wh1602.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://2.bp.blogspot.com/-ccyQaRU7J2Q/VyWig-C6tQI/AAAAAAAAAn0/_sTP4f8RP1EACkd7AvKtTngG8JGZeU2XgCLcB/s72-c/WH1602J.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-6209307132648910055</guid><pubDate>Tue, 22 Dec 2015 17:21:00 +0000</pubDate><atom:updated>2016-03-17T16:57:56.695+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Счетчик реального времени(RTC) в Xmega.</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-7lzzr05U_H8/VnmGRxWcdoI/AAAAAAAAAio/5AMd__axUcI/s1600/Q4Yyaaq0SJ0.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;265&quot; src=&quot;http://2.bp.blogspot.com/-7lzzr05U_H8/VnmGRxWcdoI/AAAAAAAAAio/5AMd__axUcI/s400/Q4Yyaaq0SJ0.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В микроконтролерах Xmega используется 16 битный счетчик реального времени(RTC) с одним каналом сравнения. Счетчик реального времени обычно используется в экономичных режимах работы МК с целью сохранения счета времени и возобновления активной работы МК через регулярные интервалы времени. Максимальное время отсчета  счетчика 18 с лишним часов. Счетчик реального времени имеет предмасштабирование, с максимальным  коэффициентом 1024. Коэффициент предмасштабирования можно задать в  регистре CTRL.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RTC - асинхронный модуль. Он синхронизируется от отдельного источника, который никак не связан с сигналом основной системной синхронизации и другими производными от него сигналами.&amp;nbsp; RTC может тактироваться от: внутреннего RC-генератора ультранизкой  мощности на 32 кГц, внутренний подстраиваемый RC-генератор на 32 кГц(  более точный, но и более прожорливый), внешний кварцевый генератор на  32.768 кГц (самый точный).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; RTC формирует событие или прерывание по достижению определенного или максимального значения(т.е. по переполнению). Счетчик реального времени может генерировать прерывания, по переполнению и по сравнению.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Прерывание по переполнению имеют постоянную частоту при постоянном значении периода (PER). Регистр сравнения (COMP) позволяет изменять частоту прерываний без изменения периода или перезапуска регистра счетчика (CNT).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Система событий не работает в спящих режимах глубже нерабочего режима (Idle). &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Векторы прерываний RTC: &lt;br /&gt;OVF_vect Вектор прерывания по переполнению счетчика реального времени&lt;br /&gt;PER_vect Вектор прерывания по совпадению в счетчике реального времени&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Функция инициализации RTC: &lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;void RTC_init()&lt;br /&gt;{&lt;br /&gt;    CLK.RTCCTRL = CLK_RTCEN_bm+CLK_RTCSRC_RCOSC_gc;    // Включение и настройка на частоту 1кГц от внутреннего генератора 32кГц&lt;br /&gt;    RTC.PER = 264;                                    // Заносим значение вершины счета.(До какого значения считать)&lt;br /&gt;    RTC.CNT = 0;                                    // Обнуляем счетчик. В этом регистре хранится значение счетчика реального времени.&lt;br /&gt;    RTC.INTCTRL = 0x03;                                // Включаем прерывания. Уровень прерываний высокий&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;RTC.CTRL = 0x01;                                    // Включение счетчика реального времени без предделителя, при 0x00 RTC выключен&lt;br /&gt;                                                    // В этот регистр заносится коэффициент деления при включении RTC&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;</description><link>http://reason89.ru/2015/12/rtc-xmega.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-7lzzr05U_H8/VnmGRxWcdoI/AAAAAAAAAio/5AMd__axUcI/s72-c/Q4Yyaaq0SJ0.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-957310307688407035</guid><pubDate>Sun, 01 Nov 2015 18:26:00 +0000</pubDate><atom:updated>2016-03-17T16:57:56.702+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Прерывания в Xmega</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-DGAm7xyVj0I/VjZYnSqBGpI/AAAAAAAAAiI/aie-1s16WRM/s1600/xmegaC_MicrositeBanner_980x352.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;141&quot; src=&quot;http://1.bp.blogspot.com/-DGAm7xyVj0I/VjZYnSqBGpI/AAAAAAAAAiI/aie-1s16WRM/s400/xmegaC_MicrositeBanner_980x352.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    В семейсте Xmega добавлена разветвленная система прерываний. Дл каждого прерывания может быть задано 4 уровня приоритета прерываний(High (высокий), Medium (средний),Low (низкий) и Off (выключенный). Плюс есть несколько не маскируемых прерываний, на вроде отказа внешней частоты. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    При поступлении запроса на обслуживание прерывания с более высоким уровнем приоритета процесс обработки прерывания с более низким уровнем приостанавливается, и процессор начинает обрабатывать более значимый запрос. Запросы на прерывание, которым присвоен статус High, обслуживаются немедленно после поступления, даже если центральный процессор сильно загружен. Чтобы не пропал ни один из запросов, и все они были обслужены, пусть даже и с задержкой есть специальная процедура Round Robin , этакий своеобразный циклический алгоритм диспетчеризации. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Общая команда для включения всех прерываний осталась неизменной:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;sei();&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Далее необходимо включить все три уровня прерываний:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;PMIC.CTRL |= PMIC_LOLVLEN_bm | PMIC_MEDLVLEN_bm | PMIC_HILVLEN_bm;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Соответственно если нужно включить только низкий уровень прерываний, то код упрощается:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;PMIC.CTRL |= PMIC_LOLVLEN_bm&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; О более конкретной настройке PMIC.CTRL можно прочесть в &lt;a href=&quot;http://www.atmel.com/Images/doc8077.pdf&quot; rel=&quot;nofollow&quot;&gt;мануале&lt;/a&gt;.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Для всех переферийных прерываний уровень приоритета выставляется отдельно, в соответствующем регистре. В качестве примера назначи прерыванию по таймеру TCC0, самый высокий уровень прерываний:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;TCC0.INTCTRLA = 0x03;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; а для внешнего прерывания на порт ввода-вывода поставим самый низкий уровень прерываний:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;PORTA.INTCTRL = 0x01;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Для каждого порта может быть объявленно только 2 прерывания, int0 и int1:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;PORTA.DIR = 0x00;&lt;br /&gt;PORTA.INT0MASK = 0x01;&lt;br /&gt;PORTA.INT1MASK = 0x02;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Далее для корректной работы прерываний, необходимо подтянуть вывод порта:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;PORTA.PIN1CTRL= PORT_OPC_WIREDANDPULL_gc;&lt;br /&gt;PORTA.PIN2CTRL= PORT_OPC_WIREDANDPULL_gc;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Так же можно настроить по какому из фронтов будет срабатывать прерывание, в качестве примера приведем срабатывание по заднему фронту:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;PORTA.PIN1CTRL = PORT_ISC_FALLING_gc;&lt;br /&gt;PORTA.PIN2CTRL = PORT_ISC_FALLING_gc;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; После того, как правильно настроили работу прерываний, необходимо написать обработчки этого прерывания:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;ISR(PORTA_INT0_vect)&lt;br /&gt;{&lt;br /&gt;   //Code&lt;br /&gt;}&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В Xmega огромное количество всевозможных прерываний, как по приему и передаче данных по всевозможным протоколам, так и по переполнению и совпаднию таймеров. Гибкая настройка позволяет реализовать практически любые свои потребности.&lt;/div&gt;</description><link>http://reason89.ru/2015/11/xmega.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-DGAm7xyVj0I/VjZYnSqBGpI/AAAAAAAAAiI/aie-1s16WRM/s72-c/xmegaC_MicrositeBanner_980x352.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-5556636788894229079</guid><pubDate>Sun, 01 Nov 2015 14:30:00 +0000</pubDate><atom:updated>2016-03-17T16:57:56.693+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>ЦАП в XMEGA(DAC)</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-Q91jtGuwV1o/VjYgQ_NeO-I/AAAAAAAAAh4/Tft6nyqQMyg/s1600/DAC-Internal-Block-Diagram.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;202&quot; src=&quot;http://2.bp.blogspot.com/-Q91jtGuwV1o/VjYgQ_NeO-I/AAAAAAAAAh4/Tft6nyqQMyg/s400/DAC-Internal-Block-Diagram.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В микроконтроллерах есть высокоскоростные 12-разрядные аналоговые модули. В дополнении к АЦП и аналоговым компараторам, есть еще и высокопроизводительные  цифроаналогвые преобразователи.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Разрядность ЦАПа XMEGA 12 бит, скорость преобразования — до 1 Мбит/с. ЦАП получает частоту с периферийной тактовой частоты, запуск на преобразование могут осуществлять различные периферийные модули, подключенные к системе событий(Event System). Есть функция формирования нулевого выходного напряжения. Обычно все ЦАПы не отличаются линейностью, когда выходное напряжение в районе нуля. Для этого в&amp;nbsp; XMEGA есть два регистра, в которые можно записывать 7-битные калибровочные данные, для более точного выставления напряжения. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Преобразования ЦАП инициируется либо записью значения во входные регистры ЦАП, либо поступлением события от Event System. Данные для преобразования во входные регистры можно записывать как из программы, так и через  DMA. Выход с ЦАП может быть выполнен двумя способами. В одном случае один линейный выход на выводе микроконтроллера. В другом два независимых выхода на двух выводах микроконтроллера. В результате два канала ЦАП могут работать независимо друг от друга и выдавать два аналоговых сигнала, различающихся как по амплитуде, так и по частоте. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В XMEGA отдельные регистры для записи входных данных на выдачу в оба канала. Выход ЦАП можно подключать внутри кристалла к другим узлам, таким как АЦП или к компаратору.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Привожу самый простой пример работы ЦАПа, программа для микроконтроллера atxmega32a4. Пример просто выводит на вывод микроконтроллера половину питания AVCC. &lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;&lt;br /&gt;volatile int Voltage = 0x7F;&lt;br /&gt;&lt;br /&gt;void dac_init()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DACB.CTRLC = ( DACB.CTRLC &amp;amp; ~DAC_REFSEL_gm) | DAC_REFSEL_AVCC_gc; // Используем AVCC&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DACB.CTRLB = ( DACB.CTRLB &amp;amp; ~DAC_CHSEL_gm ) | DAC_CHSEL_SINGLE_gc; // Используем один канал ЦАП&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DACB.CTRLA = DAC_CH0EN_bm | DAC_ENABLE_bm;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void DACB_out(int Voltage)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; //DACB.CH0DATA = Voltage;&amp;nbsp; // Можно выводить значение из этой переменной&lt;br /&gt;&amp;nbsp;&amp;nbsp; DACB.CH0DATAH = 0x0F;&amp;nbsp;&amp;nbsp;&amp;nbsp; // А можно в ручную заполнять значения регистров&lt;br /&gt;&amp;nbsp;&amp;nbsp; DACB.CH0DATAL = 0xFF;&lt;br /&gt;&amp;nbsp;&amp;nbsp; while (!DACB.STATUS &amp;amp; DAC_CH0DRE_bm);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;void dac_init();&lt;br /&gt;void DACB_out(int Voltage);&lt;br /&gt;&lt;br /&gt;int main(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTB.DIR = 0xFF;//0x08;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTB.PIN3CTRL = PORT_ISC_INPUT_DISABLE_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; dac_init();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; while(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; DACB_out(Voltage);&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В регистре CTRLC настраивается источник опорного напряжения:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;DACB.CTRLC = ( DACB.CTRLC &amp;amp; ~DAC_REFSEL_gm) | DAC_REFSEL_AVCC_gc;&lt;/pre&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-u7W7Zj-DPU0/VjZdjNF5pAI/AAAAAAAAAiY/BeGV_iL1_1E/s1600/CTRLC.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;271&quot; src=&quot;http://1.bp.blogspot.com/-u7W7Zj-DPU0/VjZdjNF5pAI/AAAAAAAAAiY/BeGV_iL1_1E/s400/CTRLC.png&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В регистре CTRLA необходимо разрешить канал или каналы, который мы будем использовать, и включить сам ЦАП&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;DACB.CTRLA = DAC_CH0EN_bm | DAC_ENABLE_bm;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; В регистре CTRLB выбирается режим, в котором будет работать ЦАП, т.е. однолинейный или двухлинейный.&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;DACB.CTRLB = ( DACB.CTRLB &amp;amp; ~DAC_CHSEL_gm ) | DAC_CHSEL_SINGLE_gc;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Соответственно регистры в которые заносится значение. Не стоит забывать, что ЦАП 12 разрядный.&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;DACB.CH0DATAH = 0x0F; &lt;br /&gt;DACB.CH0DATAL = 0xFF;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; И в завершении не стоит забывать отключать от порта цифровой вывод.&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;PORTB.PIN3CTRL = PORT_ISC_INPUT_DISABLE_gc;&lt;/pre&gt;&lt;/div&gt;</description><link>http://reason89.ru/2015/11/xmegadac.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-Q91jtGuwV1o/VjYgQ_NeO-I/AAAAAAAAAh4/Tft6nyqQMyg/s72-c/DAC-Internal-Block-Diagram.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-372977808732267625</guid><pubDate>Sun, 01 Nov 2015 12:47:00 +0000</pubDate><atom:updated>2015-11-02T00:05:04.021+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Ubuntu</category><title>Пропадает звук в Windows при перезагрузке с Ubuntu</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-IAoxqQDhnlQ/VjYLvAqR6yI/AAAAAAAAAho/tPS66KiTQ_4/s1600/ubuntu_ubuntu_os_os_krasnyy_oranzhevyy_krug_1280x1024.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;http://1.bp.blogspot.com/-IAoxqQDhnlQ/VjYLvAqR6yI/AAAAAAAAAho/tPS66KiTQ_4/s400/ubuntu_ubuntu_os_os_krasnyy_oranzhevyy_krug_1280x1024.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Держу на своем компьютере по старинке две операционки. Одна Ubuntu другая Windows, не так давно перешел с семерки на десятку. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; При перезагрузке с Ubuntu в Windows пропадает звук в наушниках. Долго рылся в настройках и параметрах, но так ничего и не нашел. Realtek корректно определяет, что наушники подключены, но звука никакого нет. При отключении наушников, встроенные колонки свободно воспроизводят звук. Откат драйверов так же не принес результатов. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; На форумах натыкался на записи, что при перезагрузке, нужно вытаскивать наушники из гнезда, и тогда при загрузке Windows звук появляется. Но у меня такая фишка не прокатила) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Проблема кстати давольно часто появляется на ноутбуках Asus, Aser, Toshiba и.т.д. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В итоге решение было найдено. Вроде как драйвер snd_hda_intel в Ubuntu не совсем корректно останавливают звуковую карту, и при загрузке Windows звуковая карта включается некорректно. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Для того чтобы звук появился необходимо немного иначе перезагружать компьютер, нежели он делает это по умолчанию. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Для этого, с правами root, редактируем файл&lt;u&gt;&lt;i&gt; /etc/init.d/reboot&lt;/i&gt;&lt;/u&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Находим там функцию &lt;u&gt;&lt;i&gt;&quot;do_stop ()&quot;&lt;/i&gt;&lt;/u&gt;, и заменяем строчку &lt;u&gt;&lt;i&gt;&quot;reboot -d -f -i&quot;&lt;/i&gt;&lt;/u&gt;, на последовательность команд: &lt;br /&gt;&lt;pre class=&quot;brush: shell&quot;&gt; sync &lt;br /&gt; echo u &amp;gt; /proc/sysrq-trigger &lt;br /&gt; sleep 1s &lt;br /&gt; echo b &amp;gt; /proc/sysrq-trigger &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&amp;nbsp; &amp;nbsp; И собственно все, можно наслаждаться любимыми композициями. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Небольшая подобная проблема есть и при перезагрузке с Ubuntu в Windows. Проблема в том, что при выключении Windows в версиях выше Windows 7, windows не выключается, а переходит в нечто подобное спящему режиму. А жесткие диски в таком режиме не отключаются. В результате чего, доступ к жестким дискам под Ubuntu не возможен. Нужно в настройках электропитания поставить именно выключение компьютера. А не переход в режим гибернации или еще чего. &lt;/div&gt;</description><link>http://reason89.ru/2015/11/blog-post.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-IAoxqQDhnlQ/VjYLvAqR6yI/AAAAAAAAAho/tPS66KiTQ_4/s72-c/ubuntu_ubuntu_os_os_krasnyy_oranzhevyy_krug_1280x1024.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-1738669696900794257</guid><pubDate>Sat, 02 May 2015 13:59:00 +0000</pubDate><atom:updated>2016-03-17T16:57:56.681+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Прием и передача данных через USART XMEGA</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-PStVoj-ybSE/VUTYAoOWCMI/AAAAAAAAAbk/tlqdpd2L9v0/s1600/1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-PStVoj-ybSE/VUTYAoOWCMI/AAAAAAAAAbk/tlqdpd2L9v0/s1600/1.jpg&quot; height=&quot;303&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В передаче данных по USART нет ничего сложного. Сначала вы ждете пока регистр данных опустошится, а предыдущие данные будут отправлены. А потом просто подставляете в регистр передачи данных, новую посылку.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Флаг DREIF оповещает о наличии данных в регистре передачи данных. Этот бит находится в регистре состояния USART. Более подробно об этом вы можете узнать на странице 278 в руководстве к МК XMEGA. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Код для отправки одного символа, довольно прост:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;void sendChar(char c)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while( !(USARTC0_STATUS &amp;amp; USART_DREIF_bm) ); //Wait until DATA buffer is empty&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USARTC0_DATA = c;&lt;br /&gt;&lt;/pre&gt;Если нужно отправить строку из символов:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;void sendString(char *text)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(*text)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendChar(*text++);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;В качестве примера: &lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;int main(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; setUpSerial();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _delay_ms(3000);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; sendString(&quot;Hello World!\n\r&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;Для чтения данных по USART осуществляется практически так же. Используется тот же регистр данных, только необходимо проверять другой бит в регистре STATUS:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;char usart_receiveByte()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while( !(USARTC0_STATUS &amp;amp; USART_RXCIF_bm) ); //Interesting DRIF didn&#39;t work.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return USARTC0_DATA;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Обычно используют прерывания, для получения данных.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; При передаче данных полезно делать проверку на ошибки:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;//Биты Регистра STATUS&lt;br /&gt;//#define USART_FERR_bm&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Флаг ошибки в посылке&lt;br /&gt;//#define USART_PERR_bm&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Ошибка паритета&lt;br /&gt;//#define USART_BUFOVF_bm&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Флаг переполнения буфера&lt;br /&gt;//#define USART_DREIF_bm&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; Флаг прерывания по опустошению буфера&lt;br /&gt;//USART_RXCIF_bm&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Флаг по завершению передачи&lt;br /&gt;char getChar0(void)&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; char buffer0;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while (1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; while( !(USARTC0_STATUS &amp;amp; USART_RXCIF_bm) );&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; buffer0=USARTC0_DATA;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; if ((USARTC0_STATUS &amp;amp; (USART_FERR_bm | USART_PERR_bm | USART_BUFOVF_bm))==0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return buffer0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; };&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Общий код с функцией инициализации и функциями приема передачи, у меня выглядит так:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;&amp;nbsp;// Функция включения USART_C0, cкорость 115200 bod&lt;br /&gt;void StartUsartC0()&lt;br /&gt;{&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;USARTC0_BAUDCTRLB = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;USARTC0_BAUDCTRLA = 0x04;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USARTC0_CTRLA = 0; //Отключение прерываний&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USARTC0_CTRLC = USART_CHSIZE_8BIT_gc; //8 data bits, no parity and 1 stop bit &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USARTC0_CTRLB = USART_TXEN_bm | USART_RXEN_bm; //Включение приема передатчика&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC_OUTSET = PIN3_bm; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;PORTC_DIRSET = PIN3_bm; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;PORTC_OUTCLR = PIN2_bm;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;PORTC_DIRCLR = PIN2_bm;&lt;br /&gt;}&lt;br /&gt;// Функция получения данных USART_C0.&lt;br /&gt;char getChar0(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;char buffer0;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while (1)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;while( !(USARTC0_STATUS &amp;amp; USART_RXCIF_bm) );&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;buffer0=USARTC0_DATA;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if ((USARTC0_STATUS &amp;amp; (USART_FERR_bm | USART_PERR_bm | USART_BUFOVF_bm))==0)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return buffer0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;};&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;// Фунуция передачи данных USART_C0&lt;br /&gt;void sendChar0(char c0)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;while( !(USARTC0_STATUS &amp;amp; USART_DREIF_bm) );&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;USARTC0_DATA = c0;&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;</description><link>http://reason89.ru/2015/05/usart-xmega_2.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-PStVoj-ybSE/VUTYAoOWCMI/AAAAAAAAAbk/tlqdpd2L9v0/s72-c/1.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-8873853111770616551</guid><pubDate>Sat, 02 May 2015 13:11:00 +0000</pubDate><atom:updated>2016-03-17T16:57:56.700+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Инициализация USART в XMEGA</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Большинство проектов на МК подразумевают связь между ПК и устройством. Либо передача данных между двумя устройствами.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Вдаваться в то, что такое USART и по какому принципу я не буду, в интернете информации и без того хватает.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В свою очередь, я приведу примеры работы и настройки модуля USART для МК XMEGA.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;u&gt;Инициализация USART&lt;/u&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Для начала работы необходимо инициализировать модуль. В качестве примера буду использовать 32 МГц.В Datasheet на странице 284 есть таблица для работы скорости. &lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-jqXsbuAfbDI/VUTBhmkjTTI/AAAAAAAAAac/qWqLqXtt2X8/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-jqXsbuAfbDI/VUTBhmkjTTI/AAAAAAAAAac/qWqLqXtt2X8/s1600/1.png&quot; height=&quot;235&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Предположим нам необходима скорость передачи 9600 bod, на мой взгляд самая распространенная. Я стараюсь не использовать умножение скорости передачи(CLK2X = 0), кроме того стараюсь так же не использовать BSCALE. За счет этого расчет скорости упрощается. BSCALE может быть задан от -7 до +7. Его обычно используют, для подстройки скорости, как можно ближе к заданной.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-YPYJFQPL6wQ/VUTCBeDjdbI/AAAAAAAAAak/OEh0mRGRyZU/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-YPYJFQPL6wQ/VUTCBeDjdbI/AAAAAAAAAak/OEh0mRGRyZU/s1600/1.png&quot; height=&quot;53&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Слишком тонкая настройка здесь не нужна, во всяком случае как следует из документации. погрешность бывает до 13%.&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-6DLLljazWlQ/VUTJYxtKhJI/AAAAAAAAAa0/sy2WlLQMCqA/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-6DLLljazWlQ/VUTJYxtKhJI/AAAAAAAAAa0/sy2WlLQMCqA/s1600/1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Мы в праве использовать для настройки только целые числа, поэтому округляем до 207 и проверяем что из этого вышло.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-fnIqbxHmhPE/VUTJifV57GI/AAAAAAAAAa8/Da27Hn47_O8/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-fnIqbxHmhPE/VUTJifV57GI/AAAAAAAAAa8/Da27Hn47_O8/s1600/1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Получили довольно близкое значение, с погрешностью меньше 1%. В итоге BSCALE = 0, BSEL = 207. Группа этих битов находится в регистрах BAUDCTRLA и BAUDCTRLB. &lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;USARTC0_BAUDCTRLB = 0;&amp;nbsp;&amp;nbsp; // BSCALE = 0&lt;br /&gt;USARTC0_BAUDCTRLA = 0xCF;&amp;nbsp;&amp;nbsp; // BSEL = 207 &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; После того как настроили скорость, нужно задать все остальные настройки, такие как размер посылки, стоп бит и бит четности. Это все задается в регистре CTRLC. Я буду использовать в примере 8 бит данных, асинхронный режим с одни стоп битом и без бита четности&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;USARTC0_CTRLC = USART_CHSIZE_8BIT_gc; &lt;br /&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Заключительным этапом в настройке является заполнение регистра CTRLB.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-UrFPprt4zsM/VUTJ3zaDScI/AAAAAAAAAbE/hU8U-eeaO8Y/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-UrFPprt4zsM/VUTJ3zaDScI/AAAAAAAAAbE/hU8U-eeaO8Y/s1600/1.png&quot; height=&quot;65&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Теперь нас интересуют&amp;nbsp; два бита RXEN и TXEN, которые включают приемник и передатчик.&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;// Разрешить принимать и передавать&lt;br /&gt;&amp;nbsp;USARTC0_CTRLB = USART_TXEN_bm | USART_RXEN_bm;&lt;br /&gt;&lt;/pre&gt;По умолчанию USART настроен на асинхронную передачу данных, то есть работает в режиме UART.&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;void setUpSerial()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Baud rate selection&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // BSEL = (32000000 / (2^0 * 16*9600) -1 = 207.333 -&amp;gt; BSCALE = 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // FBAUD = ( (32000000)/(2^0*16(207+1)) = 9615.384 -&amp;gt; it&#39;s alright&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USARTC0_BAUDCTRLB = 0; //Just to be sure that BSCALE is 0&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USARTC0_BAUDCTRLA = 0xCF; // 207&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Disable interrupts, just for safety&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USARTC0_CTRLA = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //8 data bits, no parity and 1 stop bit &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USARTC0_CTRLC = USART_CHSIZE_8BIT_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Enable receive and transmit&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; USARTC0_CTRLB = USART_TXEN_bm | USART_RXEN_bm; // And enable high speed mode&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Отличительной особенностью XMEGA является то, что порты можно переназначать под себя.&amp;nbsp; По умолчанию TX и RX занимают PC3 и PC2. В более новых версиях Xmega их можно заменить на PC7 и PC6. Более наглядно это представлено в таблице:&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-4ex5bAeX_nM/VUTKTvqB4ZI/AAAAAAAAAbM/B9iJWo6La4k/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-4ex5bAeX_nM/VUTKTvqB4ZI/AAAAAAAAAbM/B9iJWo6La4k/s1600/1.png&quot; height=&quot;142&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; В каждой группе портов есть регистр REMAP, где можно переключаться между альтернативными выводами.&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-dbgE4SeZuAY/VUTKddBgriI/AAAAAAAAAbU/MGmLrFUW_G4/s1600/1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-dbgE4SeZuAY/VUTKddBgriI/AAAAAAAAAbU/MGmLrFUW_G4/s1600/1.png&quot; height=&quot;116&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Если в вкратце, то вы просто должны установить бит USART0 в 1, тогда будут использоваться альтернативные выводы.&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;// Ради примера, я просто переназначил выводы USART с PC3 и PC2 в PC7 и PC6&lt;br /&gt;&amp;nbsp;PORTC_REMAP | = 0x16;&amp;nbsp; // Стр 152 в спецификации, перераспределяет USART0&lt;br /&gt;&amp;nbsp;PORTC_OUTSET = PIN7_bm;&amp;nbsp; &lt;br /&gt;&amp;nbsp;PORTC_DIRSET = PIN7_bm;&amp;nbsp; &lt;br /&gt;&amp;nbsp;PORTC_OUTCLR = PIN6_bm;&lt;br /&gt;&amp;nbsp;PORTC_DIRCLR = PIN6_bm;&amp;nbsp; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt; &lt;a href=&quot;https://dl.dropboxusercontent.com/u/18981043/S/Baudrate_Calculations.xls&quot;&gt;Файл Excel для автоматического расчета скорости&lt;/a&gt;</description><link>http://reason89.ru/2015/05/usart-xmega.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-jqXsbuAfbDI/VUTBhmkjTTI/AAAAAAAAAac/qWqLqXtt2X8/s72-c/1.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-2405753190415223568</guid><pubDate>Mon, 26 Jan 2015 13:36:00 +0000</pubDate><atom:updated>2016-03-17T16:57:56.689+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>XMEGA - таймер/счетчик.</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-lOmxSkweUpI/VMYqY5KutdI/AAAAAAAAAUM/8slbZarcjVE/s1600/banner_xmega.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;151&quot; src=&quot;http://4.bp.blogspot.com/-lOmxSkweUpI/VMYqY5KutdI/AAAAAAAAAUM/8slbZarcjVE/s1600/banner_xmega.jpg&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;    XMEGA содержит несколько 16-битных таймеров-счетчиков с четырьмя каналами захвата/сравнения в первом и двумя каналами захвата/сравнения во втором, в зависимости отмодификации. Каждый из каналов помимо основного регистра счета, имеет буферный регистр, откуда удобно считывать данные на случай если в процессе считывания значения в основном регистре все время обновляются.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Таймер-счетчик может быть в двух исполнениях: таймер-счетчик 0, который  содержит четыре CCx-канала, и таймер-счетчик 1 с двумя CCx-каналами. Таким  образом, упоминаемые далее регистры и биты регистров CCx-каналов 3 и 4  имеются только у таймера-счетчика 0. Блок AWeX доступен только у  таймера-счетчика 0, а блок Hi-Res имеется у всех таймеров-счетчиков.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Таймеры-счетчики в XMEGA содержат полный набор функций, позволяют реализовать генерацию: прямоугольных импульсов, широтно-импульсную модуляцию с одно- и двунаправленным счетом и частотных импульсов. Входной 32-битный захват имеет возможности шумоподавления, захвата частоты и длительности импульсов. Таймеры имеют возможности генерации событий/прерываний по переполнению, по совпадению или захвату и по ошибке. Также имеет возможность использовать поддержку DMA.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Для осуществления более сложных и специализированных генераторов импульсов предусмотрена возможность совместной работы таймеров-счетчиков с блоками расширения разрешающей способности (Hi-Res) с возможностью увеличения разрешающей способности на 2 бита (в 4 раза) и расширения возможностей генерации импульсов (AWeX) включающих в себя: 4 блока генерации мертвого времени (DT) с отдельными настройками для включения и отключения сигнала, событие контролирующие защиту от повреждения, одноканальная работа с несколькими выходами и образцовый генератор.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Таймер-счетчик состоит из основного счетчика и нескольких каналов сравнения или захвата (CCx-каналов). Основной счетчик может использоваться для счета импульсов синхронизации или событий. Предусмотрена возможность задания направления и периода счета. CCx-каналы могут использоваться для реализации функций управления по условию совпадения счетчика с заданным значением, для генерации импульсов (частота или ШИМ) или для измерения параметров импульсного сигнала.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Функции захвата и сравнения нельзя выполнять одновременно, т.е. таймер-счетчик не может одновременно выполнять и генерацию, и захват импульсов. Когда CCx-канал используется для выполнения операций сравнения, его называют каналом сравнения. Если же CCx-канал используется для захвата, то его называют каналом захвата.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Удобная система прерываний, которые гененрируются&amp;nbsp; отдельно по каждому каналу в с следующих случаях:&amp;nbsp; переполнение таймера, ошибка таймер, захват или сравнения.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Не большой пример по работе с таймером счетчиком по переполнению&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt; &lt;br /&gt;&amp;nbsp;//Переменные&lt;br /&gt;volatile int timer_blink = 500; // Начальное значение переменной&lt;br /&gt;//Инициализация&lt;br /&gt;void initialization(void)&lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;cli(); // Запрещаем прерывания&lt;br /&gt;&amp;nbsp;//Настройка таймера (TimerC0 в 1Khz)&lt;br /&gt;&amp;nbsp;TCC0.CTRLA = TC_CLKSEL_DIV1024_gc; // Presacler 1024&lt;br /&gt;&amp;nbsp;TCC0.CTRLB = 0x00; // Выбираем режим: Normal&lt;br /&gt;&amp;nbsp;TCC0.PER = 32; // Верхнее значение счетчика 1000 Hz &lt;br /&gt;&amp;nbsp;TCC0.CNT = 0x00; // Сбрасываем счетчик&lt;br /&gt;&amp;nbsp;TCC0.INTCTRLA = 0b00000011; // Даем высокий уровень для прерываний&lt;br /&gt;&amp;nbsp;//Определение всех &lt;br /&gt;&amp;nbsp;PMIC.CTRL |= PMIC_HILVLEN_bm |PMIC_MEDLVLEN_bm|PMIC_LOLVLEN_bm; &lt;br /&gt;&amp;nbsp;sei(); // Активируем прерывания&lt;br /&gt;}&lt;br /&gt;//Прерывания по переполнению&amp;nbsp; TimerC0 в 1Khz &lt;br /&gt;ISR(TCC0_OVF_vect) &lt;br /&gt;{&lt;br /&gt;// По прерыванию уменьшаем значение переменной на 1&lt;br /&gt;&amp;nbsp;timer_blink--; if (timer_blink &lt;0 br=&quot;&quot; timer_blink=&quot;0;}&quot;&gt;}&lt;br /&gt;int main (void) &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;initialization();&lt;br /&gt;&amp;nbsp;while(1) &lt;br /&gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;if (timer_blink &amp;lt;= 0) &lt;br /&gt;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;// Сюда вставляем инструкцию, которую необходимо выполнить по достижению переменной 0&lt;br /&gt;&amp;nbsp;timer_blink=500; // Затем вновь возвращаем переменной начальное значение.&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;} &lt;br /&gt;}&lt;!--0--&gt;&lt;br /&gt;&lt;br /&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;!--0--&gt;&lt;/0&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В следующей программе настраиваются три таймер счетчика на захват. Запускаются и останавливаются таймера по внешним прерываниям. При переполнении таймера на определенные выводы для индикации подается короткий сигнал. т.е. вы можете сравнить значения поступающие по разным каналам на микроконтроллер, за один промежуток времени. &lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt; &lt;br /&gt;void StartTimers(void) // Запускаем режим захвата по трем каналам таймера&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.CTRLA = TC_CLKSEL_EVCH0_gc; // Выбираем источником тактов нулевой канал порта&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCD0.CTRLA = TC_CLKSEL_EVCH1_gc;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCE0.CTRLA = TC_CLKSEL_EVCH2_gc;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.CTRLB = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;  // Выбрали режим: Normal&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCD0.CTRLB = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCE0.CTRLB = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.INTCTRLA = 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;  // Разрешаем прерывания низкого уровня по переполнению&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCD0.INTCTRLA = 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // 0x01 - низкий уровень; 0x02 - средний; 0x03- высокий уровень...&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCE0.INTCTRLA = 0x01;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;void StopTimers(void)&amp;nbsp; // Останавливаем работу таймеров&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.CTRLA = TC_CLKSEL_OFF_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCD0.CTRLA = TC_CLKSEL_OFF_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCE0.CTRLA = TC_CLKSEL_OFF_gc;&lt;br /&gt;}&lt;br /&gt;ISR(PORTD_INT0_vect) // Обработка команды на начало Счета&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.CCA = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Обнуляем регистры захвата&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCD0.CCA = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCE0.CCA = 0;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StartTimers();&amp;nbsp;&amp;nbsp; // Запускаем таймеры&lt;br /&gt;}&lt;br /&gt;ISR(PORTE_INT0_vect)&amp;nbsp; // Обработка команды по Сбросу&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; StopTimers();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// Останавливаем таймеры&lt;br /&gt;}&lt;br /&gt;ISR(TCC0_OVF_vect)&amp;nbsp;&amp;nbsp; // Обработка прерывания по переполнению таймера&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC.OUTSET =0x04;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC.OUTCLR =0x04;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;ISR(TCD0_OVF_vect)&amp;nbsp; // Обработка прерывания по переполнению таймера&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC.OUTSET =0x04;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC.OUTCLR =0x04;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;}&lt;br /&gt;ISR(TCE0_OVF_vect) // Обработка прерывания по переполнению таймера&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC.OUTSET =0x04;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; asm(&quot;NOP&quot;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC.OUTCLR =0x04;&lt;br /&gt;}&lt;br /&gt;int main(void)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Настройка работы от внешнего кварца в 4МГц&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; cli();&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; // Отключение прерываний&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OSC.XOSCCTRL = 0x4B;&amp;nbsp; // 2-9 МГц&amp;nbsp; без режима сбережения и со стабильной частотой во время запуска (01001011)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OSC.CTRL = 0x08;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp; // Разрешение работы внешнего генератора&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((OSC.STATUS &amp;amp; 0x08) == 0);&amp;nbsp; // Ожидание сигнала о включении внешнего генератора&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Настройка портов&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTC.DIR = 0x1C;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// PC0 - T/C-X; PC2, PC3, PC4 - Для индикации переполнения таймера &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD.DIR = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// PD0 - T/C-Y; PD1 - Прерывание на начало Счета &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTE.DIR = 0x00;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// PE0 - T/C-Y; PE1 - Прерывание на Сброс счетчиков  &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; //Разрешаем внешнии прерывания&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Установка маски прерываний на PIN1&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD.INT0MASK = 0x02;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTE.INT0MASK = 0x02;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Установка чувствительности по заднему фронту&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD.PIN1CTRL = PORT_OPC_WIREDORPULL_gc | PORT_ISC_FALLING_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTE.PIN1CTRL = PORT_OPC_WIREDORPULL_gc | PORT_ISC_FALLING_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD.PIN3CTRL = PORT_OPC_PULLDOWN_gc | PORT_ISC_FALLING_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD.PIN5CTRL = PORT_OPC_PULLDOWN_gc | PORT_ISC_FALLING_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EVSYS.CH0MUX = EVSYS_CHMUX_PORTD_PIN3_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EVSYS.CH1MUX = EVSYS_CHMUX_PORTD_PIN4_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; EVSYS.CH2MUX = EVSYS_CHMUX_PORTD_PIN5_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.CTRLD = TC_EVACT_CAPT_gc | TC_EVSEL_CH0_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCD0.CTRLD = TC_EVACT_CAPT_gc | TC_EVSEL_CH1_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCE0.CTRLD = TC_EVACT_CAPT_gc | TC_EVSEL_CH2_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Настройка высокого уровня прерываний&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTD.INTCTRL = PORT_INT0LVL_HI_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; PORTE.INTCTRL = PORT_INT0LVL_HI_gc;&lt;br /&gt;// Разрешаем все уровни прерываний&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;PMIC.CTRL|=PMIC_HILVLEN_bm|PMIC_MEDLVLEN_bm|PMIC_LOLVLEN_bm; &amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; sei(); // Включение прерываний&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Код программы&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Так же Xmega стандартно позволяет&amp;nbsp; считать на таймере счетчике количество тактов,&amp;nbsp; с делителем от 2 до 1024. В данном случае необходимости использовать систему событий не возникает:&lt;br /&gt;&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;void StartTimer()&lt;br /&gt;&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.PER = 16384; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.INTCTRLA = 0x03;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TCC0.CTRLA = TC_CLKSEL_DIV1024_gc;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ISR(TCC0_OVF_vect)                                                    &lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Подпрограмма обработки данных по переполнению&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;В регистр PER заносится значение до которого будет считать таймер счетчик.&lt;br /&gt;В регистре CTRLA разрешаем работу таймера счетчик с частотой поделенной на 1024.&lt;br /&gt;По достижению 16384, таймер счетчик сгенерирует прерывание высокого уровня и уйдет на его обработку.&lt;br /&gt;&amp;nbsp;&lt;a href=&quot;http://www.atmel.com/Images/doc8045.pdf&quot;&gt;Документация AVR по работе с таймерами.&lt;/a&gt;&lt;br /&gt;&lt;a href=&quot;http://www.atmel.com/Images/AVR1306.zip&quot;&gt;Материал к документации &lt;/a&gt;&lt;/div&gt;</description><link>http://reason89.ru/2015/01/xmega_26.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-lOmxSkweUpI/VMYqY5KutdI/AAAAAAAAAUM/8slbZarcjVE/s72-c/banner_xmega.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-2407604309981666328</guid><pubDate>Fri, 23 Jan 2015 14:02:00 +0000</pubDate><atom:updated>2016-03-17T16:57:56.691+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>Тактирование Xmega и настройка внешнего генератора</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; По сравнению с семьей Atmega, в микроконтроллерах Xmega задание частоты тактирования задается не Fuse битами, а программно. На первый взгляд это выглядит немного сложнее, но имеет в целом большое преимущество, так как вы в процессе работы можете изменять частоту тактирования, нет нужды делать отдельную аппаратную&amp;nbsp; установку и больше не заблокируете контроллер, когда установите Fuse биты не правильно. К тому же появилось такое нововведение, как в случае отсутствия внешнего сигнала тактирования. микроконтроллер по прерыванию перейдет на внутренний генератор с частотой в 2 МГц.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Появилась возможность использовать внутренние генератор на 32 кГц, 2 МГц или 32MHz, подключать сторожевой таймер и для получения широкого спектра частот ииспользовать блок фазовой подстройки частоты PLL с множителем x1-x31. Кроме того, микроконтроллер может также работать с&amp;nbsp; внешним кварцем от 0,4МГц&amp;nbsp; до 16 МГц. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; После выбора тактовой частоты, она может делиться коэффициентом 2, 4, 8, ..., и в итоге быть уменьшена в 2048 раз. Внутренний генератор может быть откалиброван для более высокой точности в процессе работы. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Но лучше опустить все то, что можно и так найти в документации и показать настройку на примере.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Начнем с самого простого, настройка работы от внешнего кварца в 4МГц &lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;    &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // 2-9 МГц  без режима сбережения и со стабильной частотой во время запуска&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OSC.XOSCCTRL = 0x4B;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Разрешение работы внешнего генератора&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; OSC.CTRL = 0x08;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Ожидание сигнала о включении внешнего генератора&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; while((OSC.STATUS &amp;amp; 0x08) == 0);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CCP = CCP_IOREG_gc;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CLK.CTRL = CLK_SCLKSEL_XOSC_gc;  &lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Программа настройки основной частоты синхронизации на 3-х кратную частоту внешнего генератора. При частоте генератора 12-16 МГц имеем частоту в 36-48 МГц. &lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;   &lt;br /&gt;   // выбор внешнего генератора с временем запуска 16 тыс. CLK и частотой 12-16 МГц&lt;br /&gt;   OSC.XOSCCTRL = 0xCB;&lt;br /&gt;   // разрешение работы внешнего генератора                &lt;br /&gt;   OSC.CTRL = 0x08;&lt;br /&gt;   // ожидание появления в регистре статуса бита включения синхронизации от внешнего генератора                   &lt;br /&gt;   while((OSC.STATUS &amp;amp; 0x08) == 0 ) ;&lt;br /&gt;   // настройка блока PLL на синхронизацию от внешнего источника и 3-х кратоное умножение&lt;br /&gt;   OSC.PLLCTRL = 0xC3;&lt;br /&gt;   // разрешение работы блока PLL                   &lt;br /&gt;   OSC.CTRL = OSC.CTRL | 0x10;&lt;br /&gt;   // ожидание появления в регистре статуса бита включения блока PLL        &lt;br /&gt;   while((OSC.STATUS &amp;amp; 0x10) == 0 ) ;&lt;br /&gt;   // включение защиты от изменения регистров ввода-вывода на время изменения синхронизации&lt;br /&gt;   CCP = 0xD8;&lt;br /&gt;   // настройка системной синхронизации от блока PLL                        &lt;br /&gt;   CLK.CTRL = 0x04;&lt;br /&gt;   // отключение системной синхронизации от внутреннего RC-генератора частотой 2 МГц&lt;br /&gt;   OSC.CTRL = OSC.CTRL &amp;amp; 0xFE;       &lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Как вариант можете прочесть перевод &lt;a href=&quot;http://microcontrollerov.net/microcontrolleri/xmega/AVR1003-Ispolzovanie-sistemy-taktirovanija-mikrokontrollerov-XMEGA&quot;&gt;документации AVR1003&lt;/a&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Сам &lt;a href=&quot;http://www.atmel.com/images/doc8072.pdf&quot;&gt;источник&lt;/a&gt; и &lt;a href=&quot;http://www.atmel.com/Images/AVR1003.zip&quot;&gt;архив&lt;/a&gt; к нему&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Он предлагает использовать библиотеку&amp;nbsp;clksys_driver.h для настройки XMEGA&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ну и соответственно не большой пример:&lt;br /&gt;&lt;pre class=&quot;brush: cpp&quot;&gt;#include &quot;clksys_driver.h&quot;&lt;br /&gt;... &lt;br /&gt;void init_clock( void )&lt;br /&gt;{&lt;br /&gt; //Настройка источников таковых импульсов&lt;br /&gt; CLKSYS_XOSC_Config(OSC_FRQRANGE_12TO16_gc,false,OSC_XOSCSEL_XTAL_16KCLK_gc);&lt;br /&gt; // Включаем источник синхронизации&lt;br /&gt; CLKSYS_Enable( OSC_XOSCEN_bm );&lt;br /&gt; // Настраиваем PLL для синхронизации&lt;br /&gt; CLKSYS_PLL_Config( OSC_PLLSRC_XOSC_gc, 2 ); &lt;br /&gt; // Включаем ЗДД&lt;br /&gt; CLKSYS_Enable( OSC_PLLEN_bm );&lt;br /&gt; // Настраиваем делитель частоты&lt;br /&gt; CLKSYS_Prescalers_Config( CLK_PSADIV_1_gc, CLK_PSBCDIV_1_1_gc );&lt;br /&gt; // Ждем включения &lt;br /&gt; do {} while ( CLKSYS_IsReady( OSC_PLLRDY_bm ) == 0 );&lt;br /&gt; // Выбираем новый источник для синхронизации&lt;br /&gt; CLKSYS_Main_ClockSource_Select( CLK_SCLKSEL_PLL_gc );&lt;br /&gt; // Выключаем внутренний генератор&lt;br /&gt; CLKSYS_Disable( OSC_XOSCEN_bm );&lt;br /&gt;} &lt;/pre&gt;&lt;/div&gt;</description><link>http://reason89.ru/2015/01/xmega_23.html</link><author>noreply@blogger.com (Reason89)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-2221003195730305653</guid><pubDate>Wed, 21 Jan 2015 11:42:00 +0000</pubDate><atom:updated>2016-03-17T16:57:56.683+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Atmel</category><category domain="http://www.blogger.com/atom/ns#">XMEGA</category><category domain="http://www.blogger.com/atom/ns#">Электроника</category><title>XMEGA - Первые шаги.</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-vt008xqaZI4/VL-NuA86T3I/AAAAAAAAAT0/yFdkCYXT7Ew/s1600/2009603-1.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-vp_LmD6Qlhk/VL-O7jDi-4I/AAAAAAAAAT8/iP_6NmiEwk0/s1600/xmega_title_pdi.gif&quot; height=&quot;146&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Начинаю цикл статей, как небольшой мануал по AVR микроконтроллерам семейства XMEGA фирмы Atmel в языке программирования &quot;C&quot;. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Структура этого семейства контроллеров структурирована иначе, нежели ATmega. Тем не менее, общий принцип работы с ними понять на много легче, если есть хоть какие то познания в AVR, к тому же все порты и функции структурированы примерно однотипно. Плюс ко всему, имена регистров для базовых функций, таких как таймеры, АЦП, прерывания и.т.д. для каждого порта аналогичны и отличаются только конкретным обозначением для каждого порта. Atmel повсеместно устраняет хаос в названиях регистров, что наглядно видно в новых Xmega. Имена регистров на каждом микроконтроллере XMEGA одни и те же.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Xmega имеет иной принцип программирования, нежели предыдущие семейства. Например в Atmega и в семействе Attiny используется интерфейс ISP, так называемый &quot;интерфейс программирования и отладки&quot;, в Xmega используется двухпроводной PDI. Этот интерфейс требует всего две линии  (PDI_CLK и PDI_Data). Поскольку интерфейс все еще является относительно новым, он поддерживается далеко не каждым программатором. Таким образом, перед изучением вы должны убедиться, что ваш программатор поддерживает PDI. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Я использую программатор от Atmel &quot;Atmel AVR ISP MKII&quot;.&lt;br /&gt;&lt;br /&gt; &lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-vt008xqaZI4/VL-NuA86T3I/AAAAAAAAAT0/yFdkCYXT7Ew/s1600/2009603-1.jpg&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-vt008xqaZI4/VL-NuA86T3I/AAAAAAAAAT0/yFdkCYXT7Ew/s1600/2009603-1.jpg&quot; height=&quot;249&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; При программировании Xmega, Я рекомендую использовать последнюю версию AVR Studio. Начиная с 5 версии, используется оболочка на основе Microsoft Visual Studio, которая предлагает очень высокий уровень комфорта для каждого программиста. В качестве микроконтроллера  в примерах я использую XMega128A3. Но, т.к. основные функции и регистры Xmega совместимы друг с другом, программы должны работать на всех других контроллерах всего семейства без особых изменений.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В какой то мере можно даже сказать, что серия Xmega практически не имеет общего с предыдущими микроконтроллерами ATmega AVR.&amp;nbsp; В связи с этим не возможно использовать программы, написанные для ATmega, в микроконтроллерах Xmega без существенных изменений. Это также относится и к самым простым программ на вроде мигания светодиодом.&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Не смотря на то, что на первый взгляд это очень сложно, изучение этого семейства после более близкого знакомства принесет вам много пользы и удовольствия. &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Много интересной информации для начала можно черпать из &lt;a href=&quot;http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh_xmega_a&quot;&gt;перевода официальной документации на это семейство. &lt;/a&gt;Выкладывать сюда все эти таблицы с именами регистров и архитектурой не вижу смысла.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; И обратите внимание на цикл статей в журнале Компоненты и технологии за 2008 год, начиная с 3 номера.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;</description><link>http://reason89.ru/2015/01/xmega.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-vp_LmD6Qlhk/VL-O7jDi-4I/AAAAAAAAAT8/iP_6NmiEwk0/s72-c/xmega_title_pdi.gif" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-7084515795131532099</guid><pubDate>Sun, 02 Nov 2014 12:30:00 +0000</pubDate><atom:updated>2014-11-02T17:31:43.402+05:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Soft</category><category domain="http://www.blogger.com/atom/ns#">Интернет</category><title>Штирлиц IV vs Notepad++</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href=&quot;http://3.bp.blogspot.com/-8rq58dea0SI/VFYkI1VFjQI/AAAAAAAAATM/fp25MJxM3Lo/s1600/4364.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-8rq58dea0SI/VFYkI1VFjQI/AAAAAAAAATM/fp25MJxM3Lo/s1600/4364.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Когда то при переустановки системы, у меня на ПК&amp;nbsp; дежурно устанавливалась программа Штирлиц IV. Удобная, легковесная софтина, которая зачастую приходила на помощь.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Программа способна расшифровывать практически любые тексты, написанные в различных кодировках, транслитерации, а также отобразить двоичные данные, зашифрованные в текстовой форме или тексты, которые подверглись смешанному перекодированию.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Но к всеобщему сожалению проект в 2001 был закрыт. А если программка с обновлениями периодически не пестрит на экране, то о ней разумеется забывают.&lt;br /&gt;&amp;nbsp;&amp;nbsp; Я даже в одно время начал пользоваться &lt;a href=&quot;http://www.artlebedev.ru/tools/decoder/advanced/&quot;&gt;Online кодировщиком Артемия Лебедева.&lt;/a&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; Сегодня наткнулся на ссылку о том, что автор Штирлица в этом году выпустил плагин для всеми любимого редактора Notepad++ . Сразу оговорюсь. что новые версии редактора к плагину отнеслись как то с неохотой и он у меня не встал, но к старым версиям цепляется нормально. Ну а так, функционал в принципе тот же, что&amp;nbsp; и раньше.&lt;/div&gt;</description><link>http://reason89.ru/2014/11/iv-vs-notepad.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-8rq58dea0SI/VFYkI1VFjQI/AAAAAAAAATM/fp25MJxM3Lo/s72-c/4364.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-1492917284249880689</guid><pubDate>Fri, 08 Aug 2014 08:34:00 +0000</pubDate><atom:updated>2014-08-08T14:35:36.868+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Общее</category><title>DuoLingo - бесплатный способ изучения иностранных языков</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&amp;nbsp;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://media.tumblr.com/c610b8ffc4dae56edf900e8339475e39/tumblr_inline_mxnry2H6Ke1sooq6j.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://media.tumblr.com/c610b8ffc4dae56edf900e8339475e39/tumblr_inline_mxnry2H6Ke1sooq6j.png&quot; height=&quot;200&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp; &amp;nbsp; Все прекрасно понимают, как в наше время важно знать английский язык. Будь то поездка за границу, или просто инструкция или документация к какому нить забугорному устройству, без знания основ языка не разберешься. Какие то базовые основы языка всегда необходимы.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Уровень преподавания в школе, на мой взгляд совершенно недостаточен. Да и желания если честно на тот момент учить не было, как и в университете. Лишь с годами осознаешь всю важность и остроту проблемы.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Многие мои друзья ходят на какие то курсы, к репетиторам. Мне же откровенно говоря жалко тратить на это деньги. К тому же во всей этой суматохе повседневных дней, сложно подстраиваться под какие то там коллективные занятия.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Все мануалы направленные на изучение языка, ясно дают понять что без практики в этом деле никак. Кто то покупает художественную литературу на английском, кто то скачивает с торрентов фильмы с субтитрами и без озвучки, чтобы привыкать к английской речи и улавливать слова на слух.&lt;br /&gt;Огромное количество аудио и видео уроков. Не говоря уже о целых циклах статей и книг, но ко всему этому я так и не прижился.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Наткнулся на &lt;a href=&quot;https://www.duolingo.com/&quot;&gt;DuoLingo&lt;/a&gt;, сервис понравился тем, что есть как веб форма для изучения, так и приложение под телефон.&amp;nbsp; Плюс полная синхронизация между площадками, через аутентификацию с помощью Google.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; история сервиса довольна таки интересная, основали в мае прошлого года. И моментально он набрал популярность. Больше всего удивляет почему я давно на него не наткнулся, а какое то время мучался с его аналогом Lingualeo. Где нужно тратиться на какие то тефтельки)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Разнообразные задания, где необходимо переводить предложения как на слух, так и в письменном виде. Плюс произносить самому, но мою дикцию&amp;nbsp; Duolingo не понимает, поэтому этот вид заданий я отключил=)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Все происходит в какой то степени в виде игры. Если ошибаешься, пропадает жизнь. Если прошел все 20 вопросов, переходишь на следующий уровень. Если ошибся, то возможно посмотреть описание своей ошибки, либо задать какие либо вопросы и тебе ответят.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; И что больше всего понравилось, так это то, что периодически приходится возвращаться на предыдущие уровни, для закрепления уроков. Чтоб рейтинг был постоянно полным и тем самым не забывать пройденное.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В общем к использованию рекомендую.&lt;/div&gt;</description><link>http://reason89.ru/2014/08/blog-post.html</link><author>noreply@blogger.com (Reason89)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-734723455072149738</guid><pubDate>Tue, 10 Jun 2014 07:08:00 +0000</pubDate><atom:updated>2014-06-10T13:08:00.786+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Общее</category><category domain="http://www.blogger.com/atom/ns#">Разное</category><title>Система управления личными финансами EasyFinance.ru</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-wJkZ-HfX6J4/U5QMkNNCStI/AAAAAAAAARk/m0u5VcTSTvU/s1600/0006.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-wJkZ-HfX6J4/U5QMkNNCStI/AAAAAAAAARk/m0u5VcTSTvU/s1600/0006.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Долгое время я рыскал в поисках нормальной системы управления своими деньгами, чтобы под конец месяца открыв кошелек не чесать затылок и не пытаться вспомнить на что я все потратил.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; А подобные сайты(программы, приложения) помогают быть более менее в курсе всех своих расходов, и как то контролировать свой денежный поток.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Большинство сервисов платные, либо нет веб интерфейса, отсутствует приложение под телефон, невозможна синхронизация с веб интерфейсами и многое, многое другое. В общем, нет ничего идеального.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Ранее использовал&amp;nbsp; RiseMoney, ДребеДеньги, Family Finance, Домашняя бухгалтерия и т.д. Все как то не то.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; После регистрации на EasyFinance, первые впечатления были немного унылыми. Невзрачный и с виду простой интерфейс, как то всюду все разбросано. Один индикатор в одном углу, второй в другом и т.д. После не продолжительного использования, весь этот минимализм даже приглянулся. И как в последующим выяснилось не такой уж он и минималистический. А напротив, очень даже гибкая система&amp;nbsp; управления.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Система показывает примерный уровень финансовой независимости. Подсказывает, какие расходы и насколько уменьшить. Дает всякого рода подсказки. Но все это в большинстве своем начинает корректно работать после нескольких месяцев использования. Когда, как я понял,&amp;nbsp; EasyFinance соберет более менее определенную статистику о владельце аккаунта.&lt;br /&gt;Сервис к сожалению не бесплатный, но сейчас там действует акция. Приведи 24 друга и получи полный бесплатный тариф на год. Годовая стоимость около 1800 р. Я же, нашел 24 друга потратив на wmzona.ru около 3$. Никто же не оговаривал, что эти друзья потом должны пользоваться данным сервисом=).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Как обычно присутствует возможно экспорта в виде разных отчетов. Можно наглядно смотреть все в виде всякого рода диаграмм и графиков. В целом, все как обычно.&lt;br /&gt;Приложение под Android немного на мой взгляд не удачное. Во всяком случае мне не нравится, что для того чтобы что то изменить нужно 2 раза бить пальцем по табу, своеобразный двойной щелчок мышкой. Ну и на моем HTC EVO приложение немного подвисает, и при повороте экрана не слишком красиво адаптируется.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Порадовала возможность создания всякого рода финансовых целей, будь то покупка квартиры, погашение ипотеки и т.д. Система вежливо намекает, сколько тебе нужно примерно откладывать ежемесячно, чтобы достичь своей цели к определенному моменту в твоей жизни.&amp;nbsp; И все это наглядно.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Полная синхронизация с веб версией. И нет необходимости делать бэкапы. Сервис занимается этим самостоятельно. И позволяет откатиться к любой предыдущей точке.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; На мой взгляд,&amp;nbsp; довольно таки удобный сервис, который рекомендую к использованию.&lt;br /&gt;&lt;/div&gt;</description><link>http://reason89.ru/2014/06/easyfinanceru.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/-wJkZ-HfX6J4/U5QMkNNCStI/AAAAAAAAARk/m0u5VcTSTvU/s72-c/0006.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-6427071681095257991</guid><pubDate>Sat, 07 Jun 2014 17:20:00 +0000</pubDate><atom:updated>2014-06-07T23:38:03.038+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Комплектующие</category><title>Устройство видеозахвата EzCap Video Capture Adapter</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-AitWXFstT58/U5NH2hndCrI/AAAAAAAAARM/z9KdFKP_Brs/s1600/UT8DSWbXkdXXXagOFbXn.jpg&quot; imageanchor=&quot;1&quot; rel=&quot;lightbox[EzCap]&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot; title=&quot;Year&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-AitWXFstT58/U5NH2hndCrI/AAAAAAAAARM/z9KdFKP_Brs/s1600/UT8DSWbXkdXXXagOFbXn.jpg&quot; height=&quot;300&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Во время очередной&amp;nbsp; уборки, наткнулся на старые видеокассеты с личными записями. При просмотре выяснилось, что время по отношению к ним беспощадно. Кассеты изрядно потеряли в качестве. Рябь, шумы, где то и вовсе уже не&amp;nbsp; читается.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Было принято решение срочно оцифровать все это дело. В конторках, которые занимаются этим &quot;профессионально&quot; за каждый час оцифрованного видео просят 150 р.&lt;br /&gt;Выкладывать за каждую трехчасовую кассету, по 450 р, откровенно говоря жаба задушила.&lt;br /&gt;Найти устройство видеозахвата в магазинах почему то сейчас сложно. Все прилавки пусты. Можно наткнуться разве что на всякие TV тюнеры с функцией захвата за&amp;nbsp; 2-3000 рублей. И те по отзывам хромают. На форумах же узкой тематики, все советуют в качестве бюджетного варианта устройство видеозахвата EzCap.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Как я понял из предыстории, раньше была не большая конторка,&amp;nbsp; которая занималась их изготовлением и продажами. Как только пришла популярность и слава, появилась и куча китайских аналогов в такой же упаковке и с таким же названием. Найти сейчас оригинал практически не реально. В сети цены колеблются от 270 до 4000р.&lt;br /&gt;Вскрытие показывает, что в каждом «брелке» стоит новый контроллер. Отсюда и разнящиеся отзывы, то картинка снизу и боков&amp;nbsp; режется, то шумы, то звука нет. Либо, что самое популярное драйвера на Windows не встают как нужно. Всюду бесконечные споры, о том кому все-таки достался оригинальный EzCap. О том, что шрифт должен быть курсивом, а на диске должна быть указана такая - то версия и т.д.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; В общем, после долгих поисков, и чтения комментариев и отзывов. Наткнулся на ссылку, где владелец хвастается, что ему повезло с покупкой и он купил вполне рабочий девайс. Плюнул на все и заказал там же. Дабы 10$ не такая большая сумма, что бы расстраиваться из-за не удачной покупки.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Теперь мой вердикт:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Девайс вполне рабочий. В плане качества сравнивать особо не с чем. Но я видел картинку с профессиональной платы видеозахвата&amp;nbsp; годов этак 2007, плюс картинка на самом телевизоре. В общем,&amp;nbsp; мой глаз разницы не видит=).&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Единственное с чем действительно столкнулся, так это то, что на моей 64 битной Windows 7 драйвера так и не прижились. Благо была под рукой машинка с Windows XP, где все работает на Ура!&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Позже пробовал на другом компьютере с Windows 7, там все отлично заработало. Так что, драйвера немного сыроваты. На диске, что пришел в комплекте, драйвера есть вплоть до Windows 8. Там же, на диске, есть и программа ArsSoft ShowBiz 3.5 для видеозахвата, с ключом в комплекте . Настроек по минимуму, есть кое какие функции редактирования, но без изысков. Выходной формат видео MPEG2. Различные выводы на видеомагнитофон,&amp;nbsp; и как ни странно все рабочии.=)&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-dRaQRZujzvM/U5NIDvmd26I/AAAAAAAAARU/Wn_I7Duij0g/s1600/UT8KIl.XlhbXXagOFbXH.jpg&quot; imageanchor=&quot;1&quot; rel=&quot;lightbox[EzCap]&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot; title=&quot;Year&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-dRaQRZujzvM/U5NIDvmd26I/AAAAAAAAARU/Wn_I7Duij0g/s1600/UT8KIl.XlhbXXagOFbXH.jpg&quot; height=&quot;345&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Для чего на нем есть кнопка, я так и не понял. По началу думал, что она  для сброса в случае зависания. По описанию вроде вообще скриншоты  делает. Так или иначе, сколько я ее не нажимал, изменений не  происходило.&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; В целом, сам покупкой доволен и вам советую. Мой EzCap уже пошел по рукам знакомых, и . Вот собственно и сам &lt;a href=&quot;http://www.aliexpress.com/snapshot/6055645240.html&quot;&gt;линк&lt;/a&gt; на продавца.&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Вот всякого рода характеристики от того же продавца, снизу даже написанно, что поддерживаются только 32 битные системы. Хотя на диске есть папочки и под 64. ;-)&lt;br /&gt;&lt;div style=&quot;text-align: center;&quot;&gt;EzCap USB 2.0 Video Capture Adapter for Windows XP Vista 7 DVR card K0091A: &lt;/div&gt;&lt;blockquote class=&quot;tr_bq&quot;&gt;1. It can capture High-quality video and audio file directly by USB 2.0 without sound card.the installation is very easy&lt;br /&gt;2. This item has a snapshot button that allows you to take still photos.&lt;br /&gt;3. This item includes a professional video editing and converting software-&quot;ArsSoft ShowBiz 3.5&quot;. It can provide best editing and converting function for you.ShowBiz 3.5 is a video editing and converting software that makes editing your videos as fun as shooting them, ShowBiz 3.5 helps novice users finish stylish movies in only few steps, share finished projects on DVD, tape, the WEB, and moblie devices.&lt;br /&gt;4. The converting function, it help you to convert the vedio file you recorded as MPEG4, AVI, and other file format, then you can send converted video to your iPod, PSP, 3GP Mobile Phone, or other vedio device.&lt;br /&gt;Features:&lt;br /&gt;1. Full screen for previewing video programs.&lt;br /&gt;2. Transfer the video file for iPod, iPod touch, Apple TV, PSP, PS3, XBOX, Mobile Phone.&lt;br /&gt;3. Support HD video file input.&lt;br /&gt;4. Support almost format audio and image file input.&lt;br /&gt;5. Upload video to Youtube.&lt;br /&gt;Specifications:&lt;br /&gt;1. Item name: USB 2.0 Video Capture&lt;br /&gt;2. Interface: USB 2.0 standard&lt;br /&gt;3. The advanced design keeps optical speeds when using multiple USB devices simultaneously.&lt;br /&gt;4. TV System: PAL, NTSC&lt;br /&gt;5. Recording format: MPEG 2&lt;br /&gt;6. Convering format: Apple TV, iphone, iPod classic, iPod nano, iPod touch, WMA, ASF, MPEG1, MPEG2, WMV&lt;br /&gt;7. Input: Composite Video (RCA), S-Video (miniDIN 4pin), Audio L/R (RCA)&lt;br /&gt;8. Resolution: NTSC 160x120~720x480; PAL 160x120~720X576&lt;br /&gt;9. Rate: NTSC 30fps, PAL 25fps&lt;br /&gt;10. Power Supply: USB Bus&lt;br /&gt;11. Consumed Power: &amp;lt;=1.5W&lt;br /&gt;12. Editing Software: ArcSoft ShowBiz 3.5&lt;br /&gt;13. Dimension/: 90 x 44 x 28 mm (LxWxH)&lt;br /&gt;14.Cable Length: 80cm (USB), 7cm (Video/Audio)&lt;br /&gt;15. Weight: 72g&lt;br /&gt;System requirements: &lt;br /&gt;1. Pentium IV 1.7GHz CPU or above&lt;br /&gt;2. 512MB RAM or above&lt;br /&gt;3. Graphics card supports DirectX 9.0C&lt;br /&gt;4. 1GB free HDD space&lt;br /&gt;5. VGA card with 32MB memory&lt;br /&gt;6. Compatible Windows-sound card&lt;br /&gt;7. Support windows XP/Vista 32Bit &lt;/blockquote&gt;&amp;nbsp;&amp;nbsp; &lt;/div&gt;</description><link>http://reason89.ru/2014/06/ezcap-video-capture-adapter.html</link><author>noreply@blogger.com (Reason89)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-AitWXFstT58/U5NH2hndCrI/AAAAAAAAARM/z9KdFKP_Brs/s72-c/UT8DSWbXkdXXXagOFbXn.jpg" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-3939997793016329956.post-4847882896482939928</guid><pubDate>Sun, 01 Jun 2014 17:29:00 +0000</pubDate><atom:updated>2014-06-07T23:35:45.718+06:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Python</category><title>Python : Массовое переименование файлов</title><description>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; При работе с музыкой самое удобное когда все отсортированно по алфавиту. Потому немного напрягает, когда перед названием песни стоит набор цифр по порядку. Написал несколько строчек для массового переименования файлов по маске.&lt;br /&gt;&lt;pre class=&quot;brush: python&quot;&gt;import os&lt;br /&gt;path = raw_input(&quot;The path to the folder: &quot;)&lt;br /&gt;ListFiles = os.listdir(path)&lt;br /&gt;LenList = len(ListFiles)&lt;br /&gt;for i in range(0, LenList):&lt;br /&gt; NewName = ListFiles[i]&lt;br /&gt; NewName = NewName[3:]&lt;br /&gt; os.rename(path+ListFiles[i], path+NewName)&lt;/pre&gt;&lt;/div&gt; Таким образом хоть вспомнил как включается интерпретатор =)</description><link>http://reason89.ru/2014/06/python.html</link><author>noreply@blogger.com (Reason89)</author><thr:total>0</thr:total></item></channel></rss>