<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>hamster&#039;s Envi-Light</title>
	<atom:link href="http://fat-hamster.info/wp/feed/" rel="self" type="application/rss+xml" />
	<link>http://fat-hamster.info/wp</link>
	<description>Место, где хомяк освещает свою нору...</description>
	<lastBuildDate>Mon, 18 Oct 2010 08:24:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Epic fail..</title>
		<link>http://fat-hamster.info/wp/epic-fail-2/</link>
		<comments>http://fat-hamster.info/wp/epic-fail-2/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 08:24:02 +0000</pubDate>
		<dc:creator>Fat.Hamster</dc:creator>
				<category><![CDATA[Software]]></category>

		<guid isPermaLink="false">http://fat-hamster.info/wp/?p=202</guid>
		<description><![CDATA[Это просто ппц, как у меня все разошлось с планами То лето, море, потом на мак пересел, допиливал игру для iPhone, портировал ее для IPad-а, грызу дальше гранит мак-оси с ее какавами и обж-си :( В финале еще и поиграться попробовал на htpc поставить убунту и xbmc, да так понравилось, что стоит теперь стационарно (против [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2Fepic-fail-2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2Fepic-fail-2%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Это просто ппц, как у меня все разошлось с планами</p>
<p>То лето, море, потом на мак пересел, допиливал игру для iPhone, портировал ее для IPad-а, грызу дальше гранит мак-оси с ее какавами и обж-си :(</p>
<p>В финале еще и поиграться попробовал на htpc поставить убунту и xbmc, да так понравилось, что стоит теперь стационарно (против всех минусов скорость загрузки в 35 сек, не попрешь)</p>
<p>И когда в очередной раз попались на глаза недоделанные железки мои &#8211; дошло, что клиент то у меня виндовый, и что теперь мне делать.. одно уныние короче</p>
<p>От так от&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://fat-hamster.info/wp/epic-fail-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Стыдно, стыдно..</title>
		<link>http://fat-hamster.info/wp/%d1%81%d1%82%d1%8b%d0%b4%d0%bd%d0%be-%d1%81%d1%82%d1%8b%d0%b4%d0%bd%d0%be/</link>
		<comments>http://fat-hamster.info/wp/%d1%81%d1%82%d1%8b%d0%b4%d0%bd%d0%be-%d1%81%d1%82%d1%8b%d0%b4%d0%bd%d0%be/#comments</comments>
		<pubDate>Mon, 14 Jun 2010 06:18:07 +0000</pubDate>
		<dc:creator>Fat.Hamster</dc:creator>
				<category><![CDATA[Firmware]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[i2c]]></category>

		<guid isPermaLink="false">http://fat-hamster.info/wp/%d1%81%d1%82%d1%8b%d0%b4%d0%bd%d0%be-%d1%81%d1%82%d1%8b%d0%b4%d0%bd%d0%be/</guid>
		<description><![CDATA[Так сложилось – ничего не делаю :( Нашелся новый внешний раздражитель – телефон с андроидом; понятно, что еще не наигрался: перепрошиваю туда-сюда, играюсь с новыми фичами, читаю умные книжки про яву и собственно андроид, хочется ж чего-то напрограммировать (даже есть 2 идеи реально мне полезных программ) Хотя перечитал еще раз доки про i2c и вроде [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2F%25d1%2581%25d1%2582%25d1%258b%25d0%25b4%25d0%25bd%25d0%25be-%25d1%2581%25d1%2582%25d1%258b%25d0%25b4%25d0%25bd%25d0%25be%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2F%25d1%2581%25d1%2582%25d1%258b%25d0%25b4%25d0%25bd%25d0%25be-%25d1%2581%25d1%2582%25d1%258b%25d0%25b4%25d0%25bd%25d0%25be%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Так сложилось – ничего не делаю :(</p>
<p>Нашелся новый внешний раздражитель – телефон с андроидом; понятно, что еще не наигрался: перепрошиваю туда-сюда, играюсь с новыми фичами, читаю умные книжки про яву и собственно андроид, хочется ж чего-то напрограммировать (даже есть 2 идеи реально мне полезных программ)</p>
<p>Хотя перечитал еще раз доки про i2c и вроде начало доходить, как мне его прикрутить себе в железки; не придумаю толком, как это отлаживать, когда бага может быть как в мастере, так и в приемнике.. и протеус ничего не показывает в теоретически рабочем примере</p>
<p>И еще был на море – там хорошо :)</p>
]]></content:encoded>
			<wfw:commentRss>http://fat-hamster.info/wp/%d1%81%d1%82%d1%8b%d0%b4%d0%bd%d0%be-%d1%81%d1%82%d1%8b%d0%b4%d0%bd%d0%be/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Что-то я застрял с i2c..</title>
		<link>http://fat-hamster.info/wp/i2c-troubles/</link>
		<comments>http://fat-hamster.info/wp/i2c-troubles/#comments</comments>
		<pubDate>Mon, 31 May 2010 14:25:16 +0000</pubDate>
		<dc:creator>Fat.Hamster</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://fat-hamster.info/wp/%d1%87%d1%82%d0%be-%d1%82%d0%be-%d1%8f-%d0%b7%d0%b0%d1%81%d1%82%d1%80%d1%8f%d0%bb-%d1%81-i2c/</guid>
		<description><![CDATA[За выходные сделал 2-ю плату, почитал про i2c для связи между контроллерами, пока почти ничего не понял, а &#171;вкуривать&#187; &#8211; не шло Когда паял плату, соорудил себе приспособу для зажима платы: у меня есть тиски небольшие, удобно, но не всегда &#8211; а с 2-я кусками провода зажал плату, вот так: Собственно из картинки все понятно. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2Fi2c-troubles%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2Fi2c-troubles%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>За выходные сделал 2-ю плату, почитал про i2c для связи между контроллерами, пока почти ничего не понял, а &laquo;вкуривать&raquo; &#8211; не шло</p>
<p>Когда паял плату, соорудил себе приспособу для зажима платы: у меня есть тиски небольшие, удобно, но не всегда &#8211; а с 2-я кусками провода зажал плату, вот так:</p>
<p><a href="http://fat-hamster.info/wp/wp-content/uploads/2010/05/DSC00719.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="DSC00719" src="http://fat-hamster.info/wp/wp-content/uploads/2010/05/DSC00719_thumb.jpg" border="0" alt="DSC00719" width="644" height="484" /></a></p>
<p><a href="http://fat-hamster.info/wp/wp-content/uploads/2010/05/DSC00720.jpg"><img style="display: block; float: none; margin-left: auto; margin-right: auto; border: 0px;" title="DSC00720" src="http://fat-hamster.info/wp/wp-content/uploads/2010/05/DSC00720_thumb.jpg" border="0" alt="DSC00720" width="644" height="484" /></a></p>
<p>Собственно из картинки все понятно. Нереально удобно; ну да, опереться сильно на плату нельзя конечно рукой, когда придерживаешь детальку, но нечего наваливаться :)</p>
]]></content:encoded>
			<wfw:commentRss>http://fat-hamster.info/wp/i2c-troubles/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>И про планы&#8230;</title>
		<link>http://fat-hamster.info/wp/plan2/</link>
		<comments>http://fat-hamster.info/wp/plan2/#comments</comments>
		<pubDate>Wed, 26 May 2010 14:34:18 +0000</pubDate>
		<dc:creator>Fat.Hamster</dc:creator>
				<category><![CDATA[Software]]></category>
		<category><![CDATA[мысли]]></category>

		<guid isPermaLink="false">http://fat-hamster.info/wp/?p=191</guid>
		<description><![CDATA[Обновил заодно планы/повычеркивал готовые пункты Ненавижу/не умею писать планы; чтобы точно сказать, сколько займет что-то, мне приходится практически сделать это и поставить цифру &#171;потратил столько то&#187; Надо уже думать над программой на хосте.. какими бы фичами ее нагрузить..]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2Fplan2%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2Fplan2%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Обновил заодно планы/повычеркивал готовые пункты</p>
<p>Ненавижу/не умею писать планы; чтобы точно сказать, сколько займет что-то, мне приходится практически сделать это и поставить цифру &laquo;потратил столько то&raquo;</p>
<p>Надо уже думать над программой на хосте.. какими бы фичами ее нагрузить..</p>
]]></content:encoded>
			<wfw:commentRss>http://fat-hamster.info/wp/plan2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>2-я половина..</title>
		<link>http://fat-hamster.info/wp/second-part/</link>
		<comments>http://fat-hamster.info/wp/second-part/#comments</comments>
		<pubDate>Wed, 26 May 2010 13:34:28 +0000</pubDate>
		<dc:creator>Fat.Hamster</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[unsuccess story]]></category>
		<category><![CDATA[мысли]]></category>
		<category><![CDATA[схемы]]></category>

		<guid isPermaLink="false">http://fat-hamster.info/wp/?p=184</guid>
		<description><![CDATA[Вчера приехал домой с распечатанной платой и кучкой деталей и выяснил, что у меня закончился текстолит (неудивительно, учитывая, что я 2 готовые протравленные и посверленные (!) платы выкинул из-за кривых рук) Вторую плату &#171;передумал&#187;: я уже рисовал в уме поезд из контроллеров, 2 и дальше платки должны были содержать тини2313; так вот и подумал &#8211; [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2Fsecond-part%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2Fsecond-part%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Вчера приехал домой с распечатанной платой и кучкой деталей и выяснил, что у меня закончился текстолит (неудивительно, учитывая, что я 2 готовые протравленные и посверленные (!) платы выкинул из-за кривых рук)</p>
<p>Вторую плату &laquo;передумал&raquo;: я уже рисовал в уме поезд из контроллеров, 2 и дальше платки должны были содержать тини2313; так вот и подумал &#8211; а зачем изобретать, если можно взять сделать <strong>еще одну такую-же</strong> плату, как та, что уже успешно мигает на мониторе, только не подключать ее к сом-порту (соотв. выкинув эту часть из прошивки; один из аргументов за эту идею &#8211; 3 штуки мег16, которые у меня в запасах)</p>
<p>Теперь получается, что там 9 источников света, тут 9 == 18, + удвоить светодиоды по углам &#8211; и 22: как раз столько, сколько у меня их было куплено (2 на тесты и 20 на конструкцию). Распределю немного по другому по периметру и все!</p>
<p>Итак, вторая плата &#8211; точная копия первой, только разьемы для светодиодов слегка сместились и добавилась микросхема мах232 с обвязкой (потому что подключать буду таки к сом-порту &#8211; если он там есть, то я за него заплатил, а значит надо его использовать, иначе &#8211; неэкономно :) )</p>
<p>Идея следующая: нахожу планку с усб-разьемами, которой выводятся наружу из компьютера усб-порты, которые на &laquo;маме&raquo;; питание к этой планке подвожу с молексного разьема внутри компа (заодно решая проблему с током: 22 * 3 * 0.02 = 1.3 А), к средним контактам усб-разьема подключаю Rx/Tx с сом-порта на &laquo;маме&raquo;</p>
<p>Т.е. на компьютере &#8211; с виду обычный усб-разьем (надо его пометить как-то, чтобы не сунуть, чего не стоит совать); на моей плате тоже обычный усб-разьем, от которого идет питание на плату и на подключенную к ней вторую плату, данные идут на мах232 и дальше &#8211; на вторую плату; т.е. конструктивно вроде все получается неплохо, мне так кажется по крайней мере :)</p>
<p>Сегодня хорошо бы успеть плату сделать, потом &#8211; читать про i2c/twi и что-то пробовать..</p>
]]></content:encoded>
			<wfw:commentRss>http://fat-hamster.info/wp/second-part/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Видео для привлечения внимания..</title>
		<link>http://fat-hamster.info/wp/180510/</link>
		<comments>http://fat-hamster.info/wp/180510/#comments</comments>
		<pubDate>Tue, 18 May 2010 06:05:46 +0000</pubDate>
		<dc:creator>Fat.Hamster</dc:creator>
				<category><![CDATA[Firmware]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[success story]]></category>
		<category><![CDATA[видео]]></category>

		<guid isPermaLink="false">http://fat-hamster.info/wp/?p=179</guid>
		<description><![CDATA[Диодам не хватает яркости; раньше заметил, что они достаточно ощутимо грелись, выяснилось, что блок питания выдавал 6 вольт (а резисторы то расчитаны на 5), добавил крен-ку; теперь рылся в коде, искал ошибку, потом додумался померять напряжение &#8211; а там 4 вольта всего.. 6 В было, когда подключал всего пару rgb-светодиодов, а когда 9 штук (да [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2F180510%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2F180510%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: center;"><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="405" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/rAq_ygeMjVs&amp;hl=ru_RU&amp;fs=1&amp;rel=0&amp;border=1" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="500" height="405" src="http://www.youtube.com/v/rAq_ygeMjVs&amp;hl=ru_RU&amp;fs=1&amp;rel=0&amp;border=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Диодам не хватает яркости; раньше заметил, что они достаточно ощутимо грелись, выяснилось, что блок питания выдавал 6 вольт (а резисторы то расчитаны на 5), добавил крен-ку; теперь рылся в коде, искал ошибку, потом додумался померять напряжение &#8211; а там 4 вольта всего..</p>
<p>6 В было, когда подключал всего пару rgb-светодиодов, а когда 9 штук (да * 3 канала)  &#8211; ток большой, а блок питания всего 350 мА обещает, вот напряжение и проседает.. Есть старый АТ-блок питания комповый небольшой, с ним светится веселее, но он неудобный..</p>
<p>Нашел пару очепяток в прошивке, цвета путались.. нашел ошибку в коде управляющей программы, цвета более адекватно определятся стали (и одинаково слева и справа экрана.. а то было &#8211; на фаре в фул-скрине с одной стороны цвет синий, с другой &#8211; черти что..)</p>
<p>Чувствую много мороки будет с этим определением цвета.. если цвет превалирует на картинке, то и светодиоды подсвечиваются адекватно, но если цвет средний &laquo;ни вашим, ни нашим&raquo;, то светодиод светит &laquo;серым&raquo;, вроде правильно, но визуально некрасиво.. Есть мысль &#8211; брать тройку цветов, определять &laquo;сильнейший&raquo; и усиливать его искусственно.. но надо пробовать. Надо еще развернуть светодиоды назад, когда они в глаза светят &#8211; оно не то; но проблема, у меня монитор в углу стоит, соотв. назад светить не на что.. А на телевизор цеплять рано еще &#8211; он в другой комнате, а програмить/отлаживать еще много..</p>
]]></content:encoded>
			<wfw:commentRss>http://fat-hamster.info/wp/180510/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Картинка для привлечения внимания..</title>
		<link>http://fat-hamster.info/wp/170510/</link>
		<comments>http://fat-hamster.info/wp/170510/#comments</comments>
		<pubDate>Mon, 17 May 2010 06:21:03 +0000</pubDate>
		<dc:creator>Fat.Hamster</dc:creator>
				<category><![CDATA[Firmware]]></category>
		<category><![CDATA[source code]]></category>
		<category><![CDATA[success story]]></category>
		<category><![CDATA[протокол]]></category>
		<category><![CDATA[Си]]></category>

		<guid isPermaLink="false">http://fat-hamster.info/wp/?p=169</guid>
		<description><![CDATA[На картинке – результат работ, проведенных на выходных – мой домашний монитор, облепленный 9-ю светодиодами, изображающем “как все будет замечательно когда-нибудь” (светодиоды приклеены скотчем, назад к плате идут провода, жена сказала, что похоже, что монитор подключен к аппаратуре жизнеобеспечения.. обсмотрелись хауса :) ) За выходные доделал все, что касалось “железячной” части – сделал все микроплатки, [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2F170510%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2F170510%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://fat-hamster.info/wp/wp-content/uploads/2010/05/reed-e1274077120679.jpg"><img class="aligncenter size-full wp-image-168" title="reed" src="http://fat-hamster.info/wp/wp-content/uploads/2010/05/reed-e1274077120679.jpg" alt="" width="600" height="450" /></a></p>
<p>На картинке – результат работ, проведенных на выходных – мой домашний  монитор, облепленный 9-ю светодиодами, изображающем “как все будет замечательно  когда-нибудь” (светодиоды приклеены скотчем, назад к плате идут провода, жена  сказала, что похоже, что монитор подключен к аппаратуре жизнеобеспечения..  обсмотрелись хауса :) )</p>
<p>За выходные доделал все, что касалось “железячной” части – сделал все  микроплатки, допаял все разьемы и т.д. и т.п. и хорошенько занялся прошивкой;  мой на бумаге хорошо выглядящий протокол на самом деле сократился до 3-х  пунктов: самопроверка при старте (нужна по крайней мере сейчас, чтобы заметить,  если где-то что-то оторвалось/отпаялось), отключение света (потому что для  тестирования как минимум хорошо выключать свет, когда он не нужен, чтобы не  светил в глаза) и собственно работа</p>
<p><span id="more-169"></span>Протокол дополнился все таки стартовым байтом (0xFF), вкупе с crc это дает  отличную дуракоустойчивость, слать в сом-порт можно что попало, как попало,  сколько попало, дивайс с ума не сходит; этому способствует и двойной буфер для  данных (после опытов и тестов с тини 2313 16 килобайт памяти и сколько-то там  оперативки – это почти бесконечность, сейчас прошивка занимает 8% памяти, под  переменные используется 9%)</p>
<p>В общем, прошивка сейчас выглядит так:</p>
<pre class="brush: cpp; title: ; notranslate">
#include &lt;avr/io.h&gt;
#include &lt;avr/interrupt.h&gt;

#include &quot;hardware.h&quot;
// в hardware.h: дефайны - что куда подключено, типа
//  #define L1_R PORTB, 0
//  #define L1_G PORTB, 1
//  #define L1_B PORTB, 2
// макрос для зажигания нужного канала
//  #define set(x,p)     ((x)?(sbi(p)):(cbi(p)))
// константы.. короче все, что касается конкретной железяки

#include &quot;avrlibtypes.h&quot;
#include &quot;avrlibdefs.h&quot;
#include &quot;delay.h&quot;
#include &quot;crc8.h&quot;
// в crc8 функция для расчета контрольной суммы блока данных

// 2 буфера для приема, один из которых - валидный, второй - принимает данные
// идея в том, что есть буфер с валидными данными, визуализация делается по этим данным
// и есть рабочий буфер - все, что приходит от компьютера, складывается сюда, но
// обновятся данные для визуализации только после подтверждения, что все нормально
// (после пересчета контрольной суммы), иначе ничего не произойдет
volatile u08 data[2][lights * 3];
u08 * work_ptr;
u08 work_buf, valid_buf; // номера соотв. валидного и рабочего буферов

// возможные состояния устройства
#define state_selftest       0
#define state_working        state_selftest + 1
#define state_off            state_working + 1

// переменная, хранящая текущее состояние
// при старте - самотестирование, смотрим обрыв проводов etc
volatile u08 state = state_selftest;

// счетчик для soft-pwm
// max pначение счетчика - 64
u08 counter = 0;

// константы для машины состояний чтения данных от компьютера
// ждем посылку (стартовый байт 0xFF)
#define rx_waiting          0
// состояние ожидания команды из rs232
#define rx_ready            rx_waiting + 1
// прием размера пакета
#define rx_receiving_size   rx_ready + 1
// прием данных
#define rx_receiving_data   rx_receiving_size + 1
// прием crc
#define rx_receiving_crc    rx_receiving_data + 1

/// процедура инициализации
void init(void)
{
// я использую AVR IO Designer для инициализации контроллера; эта программа
// генерирует 2 файла, разные дефайны в один и код инициализации контроллера в другой
// код инициализации у меня записывается в generated.inc (можно и прямо в main.c,
// но тогда проблемы с русскими комментариями, теряется кодировка)
// в generated.inc собственно настройка портов, таймеров и uart-а
  #include &quot;generated.inc&quot;

  sei();
}

// таймер0 настроен на срабатывание каждые 100 мкс;срабатывая, вызывается следующий
// обработчик, в котором:
ISR(TIMER0_COMP_vect)
{
  // получаем указатель на валидные на сейчас данные
  u08 * value = (u08 *)&amp;data[valid_buf][0];

// значение переменной counter постоянно пробегает интервал от 0 до 64
// макрос включает или выключает один канал светодиода в зависимости от того,
// какое значение пришло от компьютера; если там 0, то светодиод будет все время
// потушен, если 65 - будет все время гореть, если 32 - то 32 * 100 = 3,2 мс он будет
// гореть, затем 3,2 мс будет потушен, на глаз это будет выглядеть как уменьшение
// яркости наполовину (ну не наполовину вообще говоря, но пока забить)

// data -это массив байтов где-то в &quot;оперативной&quot; памяти, value - это указатель на первый
// элемент этого массива (т.е. ячейка, которая хранит адрес первого элемента)
// операция *value дает содержимое ячейки, адрес которой находится в value
// а ++ увеличит значение value на 1, т.е. после этого value будет показывать на следующий
// элемент массива; запись *value++ просто сокращает количество букв, которые надо
// написать, чтобы все это проделать
  set((*value++) &gt; counter, L1_R); // подразумевается, что в массиве данные хранятся как rgbrgbrg..
// todo: место для оптимизации: при работе с памятью захваченного кадра с экрана
// байты идут в порядке bgr - соотв. в классе TAmbiReader они так и хранятся
// поск. здесь нет никакой разницы, в каком порядке зажигать каналы, то логично
// поменять порядок именно здесь, чтобы минимизировать операции &quot;вращения&quot; байтов..
  set((*value++) &gt; counter, L1_G);
...
  set((*value++) &gt; counter, L9_B);

  if (counter++ &gt; 64)
    counter = 0;
}

// переменные, необходимые для чтения данных из компьютера
volatile u08 rx_state;
static u08 rx_size, rx_remain, rx_command;

ISR(USART_RXC_vect)
{
  u08 x; // todo: optimize me
// кажется это называется &quot;машина состояний&quot;; в зависимости от текущего состояния возможно
// только определенное действие как реакция на событие (в данном случае - на чтение
// байта из rs232).. или это называется конечный автомат?.. как бы оно не называлось, работает..

// в зависимости от текущего состояния:
  switch (rx_state) {
  // если мы ждем синхронизацию..
    case rx_waiting:
      x = UDR;
      // мне нужна была переменная для отладки, поэтому использую х чтоб не пропадала зря
      if (x == 0xFF)
        rx_state = rx_ready; // переходим к ожиданию комманды

      break;
    // если ждем комманду..
    case rx_ready:
      rx_command = UDR;
      rx_state = rx_receiving_size; // принимаем и переходим в режим ожидания остатка пакета

      break;
    // согл. протоколу после команды всегда идет размер данных..
    // todo: проверка переполнения..
    case rx_receiving_size:
      rx_size = UDR;
      rx_remain = rx_size;
      work_ptr = (u08 *)&amp;data[work_buf][0]; // дальше пойдут данные - будем складывать их
      // в рабочий буффер

      if(rx_remain)
        rx_state = rx_receiving_data;
      else
        rx_state = rx_receiving_crc;
      // но данных может и не быть (напр. надо просто отключить все диоды)
      // тогда сразу переходим к ожиданию контрольной суммы

      break;
    // мы уже знаем, сколько данных принять (точнее - сколько осталось принять)..
    case rx_receiving_data:
    // принимаем данные пакета в рабочий буфер
      *work_ptr++ = UDR; // опять хитропопый маневр - данные из регистра UDR
    // запишуться в массив, в элемент, на который указывает work_ptr, после чего
    // указатель сдвинется на следующий элемент
      rx_remain--;
      if (!rx_remain)
        rx_state = rx_receiving_crc; // если получили столько, сколько надо - ждем crc

      break;
    // и в финале получаем crc от хоста, вычисляем свой crc, если все сходится -
    // значит принятые данные становятся валидными и их будем визуализировать
    // если что-то не так - ничего не делаем, ждем стартовый байт, чтобы начать все заново
    case rx_receiving_crc:
      x = UDR;

      if (crc8 ((u08 *)&amp;data[work_buf][0], rx_size) == x)
      {
        valid_buf = work_buf;
        if (work_buf)
          work_buf = 0;
        else
          work_buf = 1;

        state = rx_command;
      } else {
        state = state_working;
      }
    // чем бы ни закончилась проверка crc - ждем стартовый байт следующего пакета
    default:
      rx_state = rx_waiting;

      break;
  }
}

int main(void)
{
  u08 i;

  valid_buf = 0;
  work_buf = 1;

  init();

  while(1)
  {
    // своя машина состояний
    switch (state) {
    // самопроверка - зажигаю плавно по очереди все светодиоды, потом гашу их
      case state_selftest:
        for (i=0; i&lt;local_lights; i++)
          test_light(i);

        state = state_off;

        break;
      case state_working:
      // в режиме собственно работы собственно ничего не делаем:
      // по прерыванию по Rx принимаются данные и складываются
      // по полочкам, по прерыванию по Cnt0 обновляется светимость
      // диодов..
        break;
      // обнуляю валидный буфер да и все..
      case state_off:
        for (i=0; i&lt;local_channels; i++)
          data[valid_buf][i] = 0;

        state = state_working;

        break;
      default:
        break;
    }
  }

  return 0;
}
</pre>
<p>Слегка монструозно, но главное &#8211; работает; я поздно сообразил, что на плате надо было предусмотреть кнопку Reset, а тыкать перемычкой в ножку микросхемы очень неудобно</p>
<p>А тыкать приходилось часто, когда плата &laquo;задумывалась&raquo; о чем-то своем, если я косячил на стороне компьютера, экспериментируя с передачей в сом-порт; но с такой реализацией я забыл о резетах (что делать сейчас еще более неудобно, т.к. плата за монитором в полу-подвешенном состоянии), можно слать в порт что угодно..</p>
<p>Временно приклеил 9 светодиодов по периметру экрана и начал экспериментировать с хостовой частью.. вылезли какие-то грабли с определением цвета, жуткие утечки памяти, но это все решаемо, меня больше заботит как подобрать правильное соответствие цветов: на картинке видно, что чистый красный (и любые чистые цвета) определился правильно, а там, где окно таск-менеджера должно было &laquo;разбавить&raquo; цвет, светодиоды дают почти белый (на самом деле слегка фиолетовый, телефон да в в темноте цвета попутал при сьемке)..</p>
<p>Может и добавлю в протокол зажигание конкретного светодиода конкретным цветом &#8211; чтобы удобнее было цвета подбирать..  Чем сегодня и займусь, если все пойдет хорошо (Бонд-Moonraker недосмотренный со вчера остался) :)</p>
]]></content:encoded>
			<wfw:commentRss>http://fat-hamster.info/wp/170510/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Картинка..</title>
		<link>http://fat-hamster.info/wp/1/</link>
		<comments>http://fat-hamster.info/wp/1/#comments</comments>
		<pubDate>Thu, 13 May 2010 06:40:26 +0000</pubDate>
		<dc:creator>Fat.Hamster</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[схемы]]></category>
		<category><![CDATA[тесты]]></category>

		<guid isPermaLink="false">http://fat-hamster.info/wp/?p=161</guid>
		<description><![CDATA[Первая success story..]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2F1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2F1%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p><a href="http://fat-hamster.info/wp/wp-content/uploads/2010/05/DSC00715.jpg"><img class="aligncenter size-large wp-image-162" title="DSC00715" src="http://fat-hamster.info/wp/wp-content/uploads/2010/05/DSC00715-e1273732249937-1024x787.jpg" alt="" width="717" height="551" /></a></p>
<p>Вчера хватило времени на допаивание всего на плату (разьемы закончились), сделать 4 шлейфа со светодиодами, залить тестовую прошивку, проверить, что все зажигается, выяснить, что используемый блок питания (старая зарядка от моторолы, написано 5 В 350 мА) выдает 6 вольт, из-за чего светодиоды немного греются, и пойти смотреть Бонда, Джеймса Бонда..</p>
<p>Но работает :)</p>
<p>В торчащие книзу разьемы (там их 2, 2-й 2-хпиновый пока не распаян) будет подключаться плата с остатком светодиодов, питание + uart + i2c; на нижней плате по идее кроме контроллера для светодиодов можно притулить и связь с компом (к сом или usb порту на max232 bли ft232 соотв.) и источник питания, раз такая байда с моим блоком питания сейчас.. Все не дойдут руки &#8211; если в htpc моем есть на &laquo;маме&raquo; колодка сом-порта, то с большой вероятностью мне даже не захочется с усб связываться</p>
]]></content:encoded>
			<wfw:commentRss>http://fat-hamster.info/wp/1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Тадам!</title>
		<link>http://fat-hamster.info/wp/%d1%82%d0%b0%d0%b4%d0%b0%d0%bc/</link>
		<comments>http://fat-hamster.info/wp/%d1%82%d0%b0%d0%b4%d0%b0%d0%bc/#comments</comments>
		<pubDate>Wed, 12 May 2010 12:18:47 +0000</pubDate>
		<dc:creator>Fat.Hamster</dc:creator>
				<category><![CDATA[Hardware]]></category>

		<guid isPermaLink="false">http://fat-hamster.info/wp/%d1%82%d0%b0%d0%b4%d0%b0%d0%bc/</guid>
		<description><![CDATA[:) “.. И снова пошел старик к самому синему морю.. И забросил невод..” А, не – и снова пошел я вчера к принтеру, и проверил тщательно лично все настройки, и распечатал на страничке из “Популярной механики” свою плату, потом померял листиком в клетку расстояние между 10 ножками микросхемы, и вроде все правильно, и дома переутюжил [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2F%25d1%2582%25d0%25b0%25d0%25b4%25d0%25b0%25d0%25bc%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2F%25d1%2582%25d0%25b0%25d0%25b4%25d0%25b0%25d0%25bc%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>:)</p>
<p>“.. И снова пошел старик к самому синему морю.. И забросил невод..” </p>
<p>А, не – и снова пошел я вчера к принтеру, и проверил тщательно лично все настройки, и распечатал на страничке из “Популярной механики” свою плату, потом померял листиком в клетку расстояние между 10 ножками микросхемы, и вроде все правильно, и дома переутюжил картинку на плату, вытравил плату в свежекупленном хлорном железе (зараза, что-то слабо оно травило), и влезла панелька “как там и была”, и возрадовался я, и возопил “Ура!”</p>
<p>Ага, примерно так вчера все и происходило; опробовал новый паяльник, распаял почти все, помыл с мылом и положил сушиться – сегодня (если все будет хорошо) допаяю isp-разьем и буду потихоньку програмить</p>
<p>Озадачился на выходных, что моего софтового шима не хватит для управления таким количеством лампочек (примерная прикидка показала, что в прерывании почти все время процессора выюзается, а еще ж надо обмен с компом и другими контроллерами за счет чего-то делать.. Повыдумывал разное – сначала перешел на Counter1 – он же 16-битный, можно больше периоды срабатывания сделать – но методом научного тыка определилось, что больше 50 us начинается хорошо видимое глазом мерцание</p>
<p>При 50 us уже времени вроде остается, но дополнительно научный тык показал, что можно обойтись не 256, а всего 64 уровнями яркости, ставил эксперименты на своей “лампе”</p>
<p>План действий дальше: </p>
<ul>
<li>“причесать” код </li>
<li>прицепить все излучатели</li>
<li>добавить процедуру self-диагностики при старте</li>
<li>дальше – обмен с хостом по rs232</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://fat-hamster.info/wp/%d1%82%d0%b0%d0%b4%d0%b0%d0%bc/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Щастье было так возможно..</title>
		<link>http://fat-hamster.info/wp/soldering/</link>
		<comments>http://fat-hamster.info/wp/soldering/#comments</comments>
		<pubDate>Sun, 09 May 2010 13:18:32 +0000</pubDate>
		<dc:creator>Fat.Hamster</dc:creator>
				<category><![CDATA[Hardware]]></category>
		<category><![CDATA[tools]]></category>
		<category><![CDATA[unsuccess story]]></category>
		<category><![CDATA[прибарахлился]]></category>

		<guid isPermaLink="false">http://fat-hamster.info/wp/?p=157</guid>
		<description><![CDATA[Это мне наказание за что-то, не помню за что.. &#171;Перевел&#187; плату, вытравил, высверлил, снава начал панельку прилаживать и снова эпик фейл: картинка распечаталась не 1-в-1, х.з. что там за настройки принтера были, но все меньше. Так что снова плата в мусор, а выходные &#8211; без пользы. С горя &#171;прибарахлился&#187; &#8211; купил хлорного железа, все потратилось [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2Fsoldering%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Ffat-hamster.info%2Fwp%2Fsoldering%2F&amp;style=normal&amp;b=2" height="61" width="50" /><br />
			</a>
		</div>
<p>Это мне наказание за что-то, не помню за что..</p>
<p>&laquo;Перевел&raquo; плату, вытравил, высверлил, снава начал панельку прилаживать и снова эпик фейл: картинка распечаталась не 1-в-1, х.з. что там за настройки принтера были, но все меньше. Так что снова плата в мусор, а выходные &#8211; без пользы.</p>
<p>С горя &laquo;прибарахлился&raquo; &#8211; купил хлорного железа, все потратилось на последнюю неудачу; наконец купил подставку для паяльника нормальную (спиралька такая, в которую паяльник суется; может в процессе и окажется, что не-нормальная, но все лучше, чем плоскогубцы, на которые я обычно паяльник ложил.. но пока  вроде удобно; еще и губка, жало вытирать), и паяльник купил (с 8-го класса у меня был паяльник маломощный, 12-вольтовый с блоком питания на 2 варианта мощности.. уже жало почти догорело, оно хоть и сменное там, только менять нечем, да и сам паяльник не фонтан, ручка раскалялась сильно, температура не регулируется).. Паяльник в регулировкой температуры прямо на ручке, сменное жало, типа с покрытием, но скорее всего фейковое там покрытие, 100 грн ($13) всего, чуть получше &#8211; уже все $50, я наступил себе на горло &#8211; столько лет пользовался вон чем и ничего, паял, так что обойдусь</p>
<p>Жалко &#8211; паять пока нечего..</p>
]]></content:encoded>
			<wfw:commentRss>http://fat-hamster.info/wp/soldering/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

