<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='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'><id>tag:blogger.com,1999:blog-5017607274596972953</id><updated>2024-09-07T09:24:26.690+08:00</updated><category term="AVR"/><category term="Arduino"/><category term="ATtiny2313"/><category term="LED"/><category term="小撇步"/><category term="閒聊"/><category term="8051"/><category term="ATtiny45"/><category term="COSM"/><category term="EL-WIRE"/><category term="MSP430"/><category term="PCB"/><category term="晶片"/><category term="電源"/><title type='text'>a-lu @ room</title><subtitle type='html'>學習慾望99%</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>15</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-2525495389316037125</id><published>2012-09-23T10:37:00.000+08:00</published><updated>2012-10-08T11:40:31.171+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Arduino"/><title type='text'>使用 Timer 中斷讓 Arduino 控制 VGA</title><content type='html'>Pyroelectro.com 使用 Timer 中斷來讓 Arduino UNO 輸出 VGA 訊號。Timer 中斷是用來控制 VGA 協議的訊號同步，由於 Arduino UNO 速度為 16MHz，所以使用中斷輸出VGA訊號幾乎是將 Arduino UNO 推到極限。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b style=&quot;text-decoration: underline;&quot;&gt;&lt;a href=&quot;http://www.pyroelectro.com/tutorials/arduino_interrupt_vga/&quot; target=&quot;_blank&quot;&gt;Arduino VAG via Interrupt&lt;/a&gt;&lt;/b&gt;, 共分為七格部分說明。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe allowfullscreen=&quot;allowfullscreen&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;http://www.youtube.com/embed/Nz0tpZYpI3g?feature=player_embedded&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/2525495389316037125/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2012/09/timer-arduino-vga.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/2525495389316037125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/2525495389316037125'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2012/09/timer-arduino-vga.html' title='使用 Timer 中斷讓 Arduino 控制 VGA'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/Nz0tpZYpI3g/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-7069219156144538043</id><published>2012-09-23T09:45:00.001+08:00</published><updated>2012-09-23T09:45:47.191+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Arduino"/><title type='text'>使用 &quot;Breakout&quot; 控制 Arduino</title><content type='html'>&lt;u&gt;&lt;a href=&quot;http://breakoutjs.com/&quot; target=&quot;_blank&quot;&gt;Breakout&lt;/a&gt;&lt;/u&gt; -- 是一個利用 Arduino 平台與 Firmata 的協議，純粹使用 Javascripr 讓用戶能夠經由網路控制或接收物理輸入與輸出訊號。&lt;u&gt;Breakout&lt;/u&gt;&amp;nbsp;需要 Arduino-IDE-1.0 以上。&lt;br /&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;安裝 &lt;u&gt;Breakout&lt;/u&gt; 之後，在 Arduino 中打開 &quot;File \ Examples \ Firmata \ StandardFirmata&quot; 編譯 (Compiler) 後上傳 (Upload)&lt;/li&gt;
&lt;li&gt;連接線路 (按下面按鈕 Show Schematic)&lt;iframe frameborder=&quot;0&quot; height=&quot;440&quot; src=&quot;http://breakoutjs.com/examples/getting_started/hello_world.html&quot; width=&quot;650&quot;&gt;&lt;/iframe&gt;&lt;/li&gt;
&lt;li&gt;開啟&amp;nbsp;&lt;u&gt;Breakout Server&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;...接下去請連接到 &lt;a href=&quot;http://breakoutjs.com/getting-started/&quot; target=&quot;_blank&quot;&gt;&quot;Breakout \ Getting Started&quot;&lt;/a&gt; 繼續看下去。&lt;/li&gt;
&lt;/ol&gt;
現在很多設備或裝置都講求遠端控制，甚至還需要將資料回傳到網頁上做為紀錄或顯示成趨勢圖 (&lt;br /&gt;
如我們之前介紹過的 &lt;u&gt;&lt;a href=&quot;http://a-luroom.blogspot.tw/2012/09/the-internet-of-things-cosm.html&quot; target=&quot;_blank&quot;&gt;The Internet of Things - 連接設備與應用程序到 COSM 平台，分享你的數據與想法於網路上&lt;/a&gt;&lt;/u&gt; )。不過，總歸一個字 &quot;懶&quot;，也就是想懶所以造就了方便，對吧！</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/7069219156144538043/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2012/09/breakout-arduino.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/7069219156144538043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/7069219156144538043'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2012/09/breakout-arduino.html' title='使用 &quot;Breakout&quot; 控制 Arduino'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-1470436646652809048</id><published>2012-09-22T00:16:00.000+08:00</published><updated>2012-09-22T00:16:18.965+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="PCB"/><title type='text'>如何焊接與保養焊槍</title><content type='html'>&lt;br /&gt;
焊接要焊的好，真的是需要耐心與技術，如果還要符合國際標準那可真是需要練習的。&lt;br /&gt;
&lt;br /&gt;
這裡有一份 IPC hand soldering 的七分鐘影片，裡面有關於焊接的要點、在使用焊槍焊接前的準備動作以及最後完成焊接時的焊槍保養與清潔的方式。&lt;br /&gt;
&lt;br /&gt;
這是專家的焊接示範，相信看完影片後能增加你(妳)既有的焊接技術。&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;iframe allowfullscreen=&quot;allowfullscreen&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;http://www.youtube.com/embed/x0YxEilyQVY?feature=player_detailpage&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
如果有需要可以上 http://www.ipctraining.org/ 尋找其他資料看，但有些是需要付費的。&lt;br /&gt;
&lt;br /&gt;
IPC 在對岸有舉辦&lt;a href=&quot;http://www.ipc.org.cn/Events/Hand-Soldering-Competition/2012/index.htm&quot; target=&quot;_blank&quot;&gt;手工焊接競賽&lt;/a&gt;，可見手工焊接在對岸是很受到重視的。對岸成為太陽能發電模組最大製造國，這些手工焊接人員應該可說是幕後的大功臣！</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/1470436646652809048/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2012/09/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/1470436646652809048'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/1470436646652809048'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2012/09/blog-post.html' title='如何焊接與保養焊槍'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img.youtube.com/vi/x0YxEilyQVY/default.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-6264281891375098216</id><published>2012-09-12T21:40:00.002+08:00</published><updated>2012-09-12T21:40:36.691+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="晶片"/><title type='text'>模擬 74xx595 移位暫存器</title><content type='html'>有時在使用單晶片作IO控制時，常有 IO 數目不夠的問題，因此常借用一些 SIPO 的晶片做 IO 的擴充，像 74595就是一種常用的 IO 擴充晶片，但是對於其控制方式卻常模不著頭緒！&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;&lt;b&gt;CONDUCTIVE RESISTANCE&lt;/b&gt;&lt;/u&gt; 網頁&amp;nbsp;&lt;a href=&quot;http://conductiveresistance.com/interactive-595-shift-register-simulator/&quot; target=&quot;_blank&quot;&gt;Interactive 595 Shift Register Simulator&lt;/a&gt;&amp;nbsp;做出了一個模擬 595 動作的網頁互動程式，藉由 595 晶片控制七段顯示器，經由網頁中的操作提示作練習，了解 595 的操作方式。&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;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwtAMb8ywYsecxNGYXpifULYlPHAjpiACgDVzOIG1kKEY4ZDzO5BN-kpgQl26P-ZTimlVLt9fTQqGkynvRSwyjbA3mDifhnXJAf2kZZR2gSjF6Zq0_OdUmVQBYj0rTt00tjzDfja2DmjY/s1600/Region.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwtAMb8ywYsecxNGYXpifULYlPHAjpiACgDVzOIG1kKEY4ZDzO5BN-kpgQl26P-ZTimlVLt9fTQqGkynvRSwyjbA3mDifhnXJAf2kZZR2gSjF6Zq0_OdUmVQBYj0rTt00tjzDfja2DmjY/s1600/Region.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
使用這網頁中的互動操作，比看操作手冊的時序圖更容易瞭解，推薦想認識 595 晶片的人上去瞧瞧吧！</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/6264281891375098216/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2012/09/74xx595.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/6264281891375098216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/6264281891375098216'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2012/09/74xx595.html' title='模擬 74xx595 移位暫存器'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiwtAMb8ywYsecxNGYXpifULYlPHAjpiACgDVzOIG1kKEY4ZDzO5BN-kpgQl26P-ZTimlVLt9fTQqGkynvRSwyjbA3mDifhnXJAf2kZZR2gSjF6Zq0_OdUmVQBYj0rTt00tjzDfja2DmjY/s72-c/Region.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-2061245374487444129</id><published>2012-09-06T16:54:00.001+08:00</published><updated>2012-09-15T11:51:24.484+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="COSM"/><title type='text'>The Internet of Things - 連接設備與應用程序到 COSM 平台，分享你的數據與想法於網路上</title><content type='html'>The Internet of Things (物聯網，&lt;a href=&quot;http://wiki.mbalib.com/zh-tw/%E7%89%A9%E8%81%94%E7%BD%91&quot;&gt;&amp;nbsp;MBA 智庫百科&lt;/a&gt;的說明，&lt;a href=&quot;http://zh.wikipedia.org/wiki/%E4%BC%A0%E6%84%9F%E7%BD%91&quot;&gt;Wiki 百科&lt;/a&gt;的說明)，簡單來說，就是把設備裝置 Sensors 的資料通過網際網路連接起來。&lt;br /&gt;
&lt;br /&gt;
原本這只是一個概念，現在 &lt;a href=&quot;http://zh.wikipedia.org/wiki/%E4%BC%A0%E6%84%9F%E7%BD%91&quot;&gt;COSM&lt;/a&gt;&amp;nbsp;做到了！&lt;br /&gt;
&lt;br /&gt;
它可以連接 iphone、Android 手機的 Apps、Arduino 裝置、其他很多設備，連 Excel 也可以，只要你懂得如何將資料傳送到網路，它會儲存你的數據資料與繪出圖形並顯示在網頁上。&lt;br /&gt;
&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;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTo1vd4NYmQJFfUcccmu5ZfRNcDk64wZaQ0Xtv-z8qjc7FexPvfC90TQnOXm4kzc3oKGRxyB0Sh7C6LIZAYUnDmtLylnXX6foXx49boFu9Cd8X77NnWfhqj1Tp3vDf6ngZ2iv2nMtm3vc/s1600/COSM_adding+devices.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;340&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTo1vd4NYmQJFfUcccmu5ZfRNcDk64wZaQ0Xtv-z8qjc7FexPvfC90TQnOXm4kzc3oKGRxyB0Sh7C6LIZAYUnDmtLylnXX6foXx49boFu9Cd8X77NnWfhqj1Tp3vDf6ngZ2iv2nMtm3vc/s640/COSM_adding+devices.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
網頁裡有&lt;a href=&quot;http://blog.cosm.com/&quot;&gt;教學&lt;/a&gt;，如果你需要將監控設備的資料傳送到網路讓需要的人知道的話，到這個網站申請帳號，照著教學一步一步做，將你的設備連上網路，資料數據傳送上 COSM ，即便你身在遠方也能即時得知數據走向。&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;2012/09/07 更新：&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;有一篇文章的作者將 Geiger Counter 連線到 COSM 的方式發表在&lt;a href=&quot;http://www.sparkfun.com/news/948&quot;&gt;&amp;nbsp;&lt;/a&gt;&lt;/i&gt;&lt;i&gt;&lt;a href=&quot;http://www.sparkfun.com/news/948&quot;&gt;Sparkfun &amp;nbsp;&lt;/a&gt;&lt;/i&gt;&lt;i&gt;&lt;a href=&quot;http://www.sparkfun.com/news/948&quot;&gt;部落格&lt;/a&gt;上&lt;/i&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;
下面是一個使用 DHT22 溫濕度感測器監控家中溫度的實際例子，連設備所在位置都會顯示出來。&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;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhebVxtEabDZi4tknenYpAdDPYUQv2AcmU0ekyRicut8CCfwbaexHrl3h3-arqPP6-550pzzgZISMXleENbjCtWYuQwTqN9AqtCWRmIxi4FkDtUi3DVDDHyBEid07-GEQWU-DViz65lgho/s1600/COSM-example.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;494&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhebVxtEabDZi4tknenYpAdDPYUQv2AcmU0ekyRicut8CCfwbaexHrl3h3-arqPP6-550pzzgZISMXleENbjCtWYuQwTqN9AqtCWRmIxi4FkDtUi3DVDDHyBEid07-GEQWU-DViz65lgho/s640/COSM-example.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
下面是一篇關於 COSM 物聯網的介紹，翔信看完後你會很清楚它的運作概念與方式&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;allowfullscreen&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;http://www.youtube.com/embed/oO3m7r_p2sc?feature=player_embedded&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;
&lt;a href=&quot;http://online-behavior.com/analytics/open-data-internet&quot;&gt;Open Data and the Internet of Things, Usman Haque,&amp;nbsp;Strata 2012&lt;/a&gt;&amp;nbsp;in Santa Clara, CA.&lt;br /&gt;
&lt;br /&gt;
&lt;span style=&quot;background-color: white; color: #28b3df; font-family: &#39;Trebuchet MS&#39;; font-size: 20px;&quot;&gt;Internet of Things: there is no data ownership, only data access&lt;/span&gt;&lt;br /&gt;
&lt;blockquote style=&quot;background-color: #eeeeee; color: #444444; font-family: Tahoma; font-size: 14px; margin: 0px 0px 15px; padding: 15px;&quot;&gt;
&lt;div style=&quot;font-style: italic; line-height: 20px; margin-bottom: 10px; padding: 0px;&quot;&gt;
&lt;strong style=&quot;margin: 0px; padding: 0px;&quot;&gt;&quot;In the Internet of Things, you don&#39;t know who&#39;s going to use the data that&#39;s generated by your devices, and you don&#39;t know who is going to help you unlock the value from the data that&#39;s being generated by all these devices.&quot;&lt;/strong&gt;&lt;/div&gt;
&lt;/blockquote&gt;
將數據連上 COSM 吧！</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/2061245374487444129/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2012/09/the-internet-of-things-cosm.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/2061245374487444129'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/2061245374487444129'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2012/09/the-internet-of-things-cosm.html' title='The Internet of Things - 連接設備與應用程序到 COSM 平台，分享你的數據與想法於網路上'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhTo1vd4NYmQJFfUcccmu5ZfRNcDk64wZaQ0Xtv-z8qjc7FexPvfC90TQnOXm4kzc3oKGRxyB0Sh7C6LIZAYUnDmtLylnXX6foXx49boFu9Cd8X77NnWfhqj1Tp3vDf6ngZ2iv2nMtm3vc/s72-c/COSM_adding+devices.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-3092668651953949198</id><published>2012-08-26T21:47:00.001+08:00</published><updated>2012-11-29T13:58:45.278+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AVR"/><category scheme="http://www.blogger.com/atom/ns#" term="小撇步"/><title type='text'>USBtinyISP 在 AVR Studio 5 和 Atmel Studio 6 的配置</title><content type='html'>最近這一陣子，Atmel 一直在更新 AVR 微處理器的編輯軟體，從 AVR Studio 4 到現在最新的版本 Atmel Studio 6，程式碼撰寫變得越來越人性化，也大幅減少打字錯誤以及編譯的速度，因此如果電腦還有空間的話，可以更新或是直接下載 AVR Studio 5 或 Atmel Studio 6 安裝，絕對讓你耳目一新！&lt;br /&gt;
&lt;br /&gt;
電腦環境：&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;HP COMPAQ 8710W&lt;/li&gt;
&lt;li&gt;Processor: Intel Core 2 Duo CPU T7500 2.20GHz&lt;/li&gt;
&lt;li&gt;Memory (RAM) : 4GB&lt;/li&gt;
&lt;li&gt;Windows Vista Business, SP2, 64-bit&lt;/li&gt;
&lt;li&gt;燒錄器：USBtinyISP (&amp;nbsp;&lt;a href=&quot;https://www.google.com/search?q=usbtinyisp&amp;amp;num=30&amp;amp;hl=zh-TW&amp;amp;newwindow=1&amp;amp;prmd=imvns&amp;amp;source=lnms&amp;amp;tbm=isch&amp;amp;sa=X&amp;amp;ei=leM5UOaRNpGZmQX034HoAQ&amp;amp;ved=0CAoQ_AUoAQ&amp;amp;biw=1049&amp;amp;bih=845&quot;&gt;上 Google 瞧瞧&lt;/a&gt;這東西的樣子!&amp;nbsp;)&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
我一開始使用 AVR Studio 4 配合 USBtinyISP 進行晶片的燒錄，但官方軟體只知官方燒錄硬體，如 STK500 和 AVRISP Programmer。因為兩者都是使用&amp;nbsp;serial port&amp;nbsp;(&amp;nbsp;串列埠 ) 與 PC 做連接，而 USBtinyISP 是使用 USB 轉 serial port，兩者不同，即使插上 USBtinyISP， AVR Studio 4 也不會認得 USBtinyISP。&lt;br /&gt;
&lt;br /&gt;
解決的方法就是 USBtiny500 將 USBtinyISP 模擬成 AVR Studio 4 認得的硬體，並利用&amp;nbsp;COM Bride 軟體 com0com，建立 AVR Studio 4 與 USBtinyISP 兩者 serial port 的連接。這樣傳送到 STK500 或 AVRISP 的命令，就會轉到 USBtinyISP 幫你(妳)完成燒錄的動作。&lt;br /&gt;
&lt;br /&gt;
AVR Studio 4 使用 USBtinyISP 燒錄的方法，請參考&lt;a href=&quot;http://www.ladyada.net/make/usbtinyisp/stk500compat.html&quot;&gt;這個網站&lt;/a&gt;的說明。&lt;br /&gt;
&lt;br /&gt;
升級到 V5 和 V6 後，上述的方法就不能再用了，也就是本文接下來要講的，怎樣使用升級後的軟體做燒錄，以及環境如何設置。&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;AVR Studio 5 與 Atmel Studio 6 兩者設置步驟都一樣，不同的是在設置 &quot;Tools / External Tools&quot; 的參數有些差異，因此接下來會一起討論。&lt;br /&gt;
&lt;br /&gt;
ps. 如果你是直接安裝 AVR Studio 5 或是 Atmel Studio 6，直接使用下面步驟及可，不需再安裝前面 AVR Studio 4 的軟體。&lt;br /&gt;
&lt;h4&gt;
安裝設置步驟：&lt;/h4&gt;
&lt;ol&gt;
&lt;li&gt;下載 &lt;a href=&quot;http://www.atmel.com/forms/software-download.aspx?target=tcm:26-41305&quot;&gt;Atmel Studio 6&lt;/a&gt; 或 AVR Studio 5&lt;/li&gt;
&lt;li&gt;下載更新檔 (可裝可不裝，這裡的更新檔是 A&lt;a href=&quot;http://www.atmel.com/forms/software-download.aspx?target=tcm:26-42639&quot;&gt;teml Studio 6 Patch2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;步驟1, 2 的下載檔若是不能下載，請至直接到軟體下載頁面點選育下載的連結並填入相關訊息後下載 (AVR Studio 5、&lt;a href=&quot;http://www.atmel.com/tools/ATMELSTUDIO.aspx&quot;&gt;Atmel Studio 6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;安裝 &lt;a href=&quot;http://www.ladyada.net/media/usbtinyisp/usbtinyisp%20w32%20driver%20v1.12.zip&quot;&gt;Windows USBtinyISP W32 driver built with libusb v1.12&lt;/a&gt;. ; 其他的版本 &lt;a href=&quot;http://www.ladyada.net/make/usbtinyisp/usbtinyisp_libusb-win32_1.2.1.0.zip&quot;&gt;64-bit windows Vista or 7&lt;/a&gt;&amp;nbsp;( 在這個&lt;a href=&quot;http://www.ladyada.net/make/usbtinyisp/download.html&quot;&gt;網頁&lt;/a&gt;確認是否是最新版本。看 &quot;Drivers&quot; 的內容就好，其他的不需安裝 )&lt;/li&gt;
&lt;li&gt;安裝 Atmel AVR 8-bit and 32-bit Toolchain 最新版 (撰寫時最新版為 &lt;a href=&quot;http://www.atmel.com/Images/avr-toolchain-installer-3.4.0.1146-win32.win32.x86.exe&quot;&gt;V3.4.0&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Toolchain 安裝完成後，打開命令提示視窗，直接輸入 avrdude，看是不是會出現類似下面的文字。如果出現了，就表示安裝與系統環境變數設置沒問題&amp;nbsp;&lt;/li&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:text&quot;&gt;C:\&amp;gt;avrdude
Usage: avrdude [options]
Options:
  -p &amp;lt;partno&amp;gt;                Required. Specify AVR device.
  -b &amp;lt;baudrate&amp;gt;              Override RS-232 baud rate.
  -B &amp;lt;bitclock&amp;gt;              Specify JTAG/STK500v2 bit clock period (us).
  -C &amp;lt;config-file&amp;gt;           Specify location of configuration file.
  -c &amp;lt;programmer&amp;gt;            Specify programmer type.
  -D                         Disable auto erase for flash memory
  -i &amp;lt;delay&amp;gt;                 ISP Clock Delay [in microseconds]
  -P &amp;lt;port&amp;gt;                  Specify connection port.
  -F                         Override invalid signature check.
  -e                         Perform a chip erase.
  -O                         Perform RC oscillator calibration (see AVR053).
  -U &amp;lt;memtype&amp;gt;:r|w|v:&amp;lt;filename&amp;gt;[:format]
                             Memory operation specification.
                             Multiple -U options are allowed, each request
                             is performed in the order specified.
  -n                         Do not write anything to the device.
  -V                         Do not verify.
  -u                         Disable safemode, default when running from a script.
  -s                         Silent safemode operation, will not ask you if
                             fuses should be changed back.
  -t                         Enter terminal mode.
  -E &amp;lt;exitspec&amp;gt;[,&amp;lt;exitspec&amp;gt;] List programmer exit specifications.
  -x &amp;lt;extended_param&amp;gt;        Pass &amp;lt;extended_param&amp;gt; to programmer.
  -y                         Count # erase cycles in EEPROM.
  -Y &amp;lt;number&amp;gt;                Initialize erase cycle # in EEPROM.
  -v                         Verbose output. -v -v for more.
  -q                         Quell progress output. -q -q for less.
  -?                         Display this usage.

avrdude version 5.10, URL: &amp;lt;http://savannah.nongnu.org/projects/avrdude/&amp;gt;

C:\&amp;gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;li&gt;打開 AVR Studio 5 或 Atmel Studio 6，在選單 &quot;Tools \ External Tools...&quot;，照著下面的圖設置相關參數。不管版本 V5 或 V6&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
例如設置 ATtiny2313：&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;Command: &quot;avrdude.exe&quot;&lt;/li&gt;
&lt;li&gt;Arguments: &quot;-c usbtiny -p t2313 -U flash:w:Release\$(ItemFileName).hex:i&quot;&lt;/li&gt;
&lt;li&gt;Initial directory: &quot;$(ProjectDir)&quot;; 試過用 &quot;$(ItemDir)&quot; 也可以，都可找到正確的 *.hex 檔&lt;/li&gt;
&lt;li&gt;選擇 &quot;Use Output window&quot;; 這樣就可以直接在下方的輸出視窗看到燒錄執行的進度&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
AVR Studio 5,&amp;nbsp;Atmel Studio 6, &quot;Tools \ External Tools...&quot; 介面設置&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZC7HK2OeRuEOOe5o8tChlA-ReyVUCe3WpgY50O4la26PDfKFSrEmKmW7rwSv4mWKrmd9BKyhVLBpVhnDdWowMRqIGTRnBLh9WMLFLiefzCvSoXjxKk6C6cj9kWWhZi_idhahzC0je_HE/s1600/V6_attiny2313.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZC7HK2OeRuEOOe5o8tChlA-ReyVUCe3WpgY50O4la26PDfKFSrEmKmW7rwSv4mWKrmd9BKyhVLBpVhnDdWowMRqIGTRnBLh9WMLFLiefzCvSoXjxKk6C6cj9kWWhZi_idhahzC0je_HE/s1600/V6_attiny2313.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
設置好之後，插上 USBtinyISP 到 PC，連接 ISP 線到晶片，在選單中選擇 &quot;Tools \ USBtinyISP - Attiny2313&quot; (或其它設定的名稱)，開始燒錄你 ( 妳 ) 的晶片吧 !&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/3092668651953949198/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2012/08/usbtinyisp-avr-studio-5-atmel-studio-6.html#comment-form' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/3092668651953949198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/3092668651953949198'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2012/08/usbtinyisp-avr-studio-5-atmel-studio-6.html' title='USBtinyISP 在 AVR Studio 5 和 Atmel Studio 6 的配置'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZC7HK2OeRuEOOe5o8tChlA-ReyVUCe3WpgY50O4la26PDfKFSrEmKmW7rwSv4mWKrmd9BKyhVLBpVhnDdWowMRqIGTRnBLh9WMLFLiefzCvSoXjxKk6C6cj9kWWhZi_idhahzC0je_HE/s72-c/V6_attiny2313.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-7837366213902804649</id><published>2012-08-16T16:30:00.005+08:00</published><updated>2012-08-16T16:30:51.932+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Arduino"/><category scheme="http://www.blogger.com/atom/ns#" term="MSP430"/><title type='text'>Use Arduino sketches to program TI Launchpad MSP430</title><content type='html'>相信使用 Arduino 開發 AVR 韌體的都知道，其控制函式語法很直覺化。相對於 TI&amp;nbsp;MSP430&amp;nbsp;LaunchPad &amp;nbsp;只要花費美金 $4.3元就可買到，但對於沒接觸過 16-bit 微處理器的人來講，其學習過程就是要下那麼一番苦工，才能得到我們所要的結果。&lt;br /&gt;
&lt;br /&gt;
還好，網路上就是有那麼多有心人士分享其開發成果，讓我們有下面要介紹的這軟體可以像在開發 Arduino 韌體一樣開發 MSP430。&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://energia.github.com/Energia/&quot;&gt;Energia&lt;/a&gt; 是使用與 Arduino IDE 一樣的核心 (&lt;a href=&quot;http://processing.org/&quot;&gt;Processing&lt;/a&gt;)，函式與語法使用上都與 Arduino 大同小異，如果你沒有使用過 Arduino IDE，可以先上 &lt;a href=&quot;https://github.com/energia/Energia/wiki/Getting-Started&quot;&gt;Getting Started&lt;/a&gt; 網頁看看，裡面有 Energia 安裝及使用的說明，有較深入的問題就上 &lt;a href=&quot;http://www.43oh.com/forum/viewforum.php?f=38&quot;&gt;Disscussion Froum&lt;/a&gt;&amp;nbsp;論壇找答案。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;a href=&quot;https://github.com/energia/Energia/wiki/Hardware&quot;&gt;LaunchPad 各接腳在 Energia 中的定義&lt;/a&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/energia/Energia/wiki/Hardware&quot;&gt;串列通訊&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.kernel.org/doc/Documentation/CodingStyle&quot;&gt;語法參考&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
更多資訊請上：&lt;a href=&quot;https://github.com/energia/Energia/wiki&quot;&gt;https://github.com/energia/Energia/wiki&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
手邊沒有 &lt;a href=&quot;http://e2e.ti.com/group/msp430launchpad/m/project/default.aspx&quot;&gt;TI MSP430 LaunchPad&lt;/a&gt; ? 只要註冊後花費 $4.3 美元(免運費)，每個人最多可買 3 片，3-7 天就會運送到府，非常的划算。配合上面所介紹的開發工具，有興趣的你(妳)還在等什麼 ?</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/7837366213902804649/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2012/08/use-arduino-sketches-to-program-ti.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/7837366213902804649'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/7837366213902804649'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2012/08/use-arduino-sketches-to-program-ti.html' title='Use Arduino sketches to program TI Launchpad MSP430'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-3211403668954040549</id><published>2011-07-03T22:35:00.001+08:00</published><updated>2012-08-24T10:55:19.135+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ATtiny2313"/><category scheme="http://www.blogger.com/atom/ns#" term="AVR"/><category scheme="http://www.blogger.com/atom/ns#" term="EL-WIRE"/><title type='text'>使用AVR 玩弄 EL-Wire (冷光線)</title><content type='html'>EL-Wire(ElectroLuminescent Wire, 簡稱&amp;nbsp;冷光線)，是一種利用電致發光原理的發光體，外觀類似電線。看起來像是電線，但依照所要發出不同顏色的光再批覆上不同的外皮，而且由於本體中心有一根單心銅線(依照本文所使用的 3mm 的冷光線線徑，銅線部分大約占整體的 1/3，也就是 1mm 左右的線徑)可根據設計的圖形、文字做不同的形狀變化。&lt;br /&gt;
&lt;br /&gt;
本文主要的目的為介紹如何使用 AVR (其他為控制器亦可)控制冷光線，內容有：&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;冷光線介紹與焊接方法&lt;/li&gt;
&lt;li&gt;冷光線DC(直流電)轉AC(交流電)電路(此處的AC是指有頻率的電壓，但所轉換的電壓不一定要通過電壓零點)。&lt;/li&gt;
&lt;li&gt;冷光線控制電路&lt;/li&gt;
&lt;li&gt;程式碼&lt;/li&gt;
&lt;li&gt;實際例子影片&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;冷光線介紹與焊接方法&lt;/span&gt;&lt;/b&gt; &lt;/li&gt;
&lt;/ul&gt;
冷光線的結構可以由下面圖片作解釋：&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9VDXXTAC16EFiMqUhIN9iUi2r8_Dvf4n2-Z0yQlEj6MFnjLHF7s9Jkp_RBvvIAV71ugWNRWgbPtScDdfb_2A5Sru0rH4d14qSjMmB59SUGlsCT-55QzmNwGAV4DxU_Po8D7ZcdYek6_I/s1600/500px-EL_wire.svg%255B1%255D.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9VDXXTAC16EFiMqUhIN9iUi2r8_Dvf4n2-Z0yQlEj6MFnjLHF7s9Jkp_RBvvIAV71ugWNRWgbPtScDdfb_2A5Sru0rH4d14qSjMmB59SUGlsCT-55QzmNwGAV4DxU_Po8D7ZcdYek6_I/s1600/500px-EL_wire.svg%255B1%255D.png&quot; style=&quot;background-color: white;&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;照片來源：&lt;a href=&quot;http://en.wikipedia.org/wiki/Electroluminescent_wire&quot;&gt;http://en.wikipedia.org/wiki/Electroluminescent_wire&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;u&gt;銅線(Cooper Core)、細銅線(Very Fine Copper Wire)&lt;/u&gt;：這是接到交流電(AC)兩端的線，沒有極性的區別，直接接上即可。但要使冷光線發光並不是直接接上交流電就可以，必須符合冷光線的規格。規格如下(此處以本文所使用的冷光線規格為例做說明，實際應用以所購買的冷光線規格為主，但本文中的示例，適用於大多數的冷光線應用環境中)：&lt;br /&gt;
&lt;blockquote&gt;
工作電壓範圍(Operating Voltage Range，均方根值(Root Mean Square, RMS))：&lt;br /&gt;
&lt;dl&gt;&lt;dd&gt;20 ~ 220V，最佳工作電壓(Optimum Operating Voltage)：120V&lt;/dd&gt;
&lt;dt&gt;工作頻率(Frequency of Operation)：&lt;/dt&gt;
&lt;dd&gt;50 ~ 5000Hz，最佳工作頻率範圍：1500 ~ 2000 Hz&lt;/dd&gt;
&lt;dt&gt;靜電容(Direct Capacitance)：&lt;/dt&gt;
&lt;dd&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;6 nf/m&lt;/span&gt; (20℃，RH &amp;lt; 80%&lt;/dd&gt;
&lt;dt&gt;發光亮度(Glow Brightness)：&lt;/dt&gt;
&lt;dd&gt;@電壓：120V，頻率：200 ~ 2000 Hz：30 ~ 126 cd/m&lt;sup&gt;2&lt;/sup&gt;&lt;/dd&gt;
&lt;dt&gt;消耗功率(Consumed Power)：&lt;/dt&gt;
&lt;dd&gt;@電壓：120V，頻率：200 ~ 2000 Hz：108 ~ 103226 mw/m&lt;/dd&gt;
&lt;dt&gt;壽命(Working Life)：&lt;/dt&gt;
&lt;dd&gt;@電壓：100V，頻率：400 Hz，正常溫度與濕度下：大約 5000小時&lt;/dd&gt;
&lt;dt&gt;連續工作溫度/相對濕度(Continuous Working Temperature/Relative Humidity)：&lt;/dt&gt;
&lt;dd&gt;-10℃ ~ +60℃；RH &amp;lt; 90%&lt;/dd&gt;
&lt;dt&gt;保存溫度/相對溼度(Storage Temperature/Relative Humidity)：&lt;/dt&gt;
&lt;dd&gt;-10℃ ~ +60℃；RH &amp;lt; 65%&lt;/dd&gt;&lt;/dl&gt;
&lt;/blockquote&gt;
&lt;u&gt;螢光粉塗層(Phosphor Coating)&lt;/u&gt;：塗佈在銅線的外層並纏繞兩條非常纖細的裸線的磷層。&lt;br /&gt;
&lt;u&gt;透明保護套(Clear Protective Sleeve)&lt;/u&gt;：包覆在銅線、螢光粉塗層、細線的外層的透明PVC套&lt;br /&gt;
&lt;u&gt;著色PVC套(Colored PVC Sleeve)&lt;/u&gt;：在無其他外加因素下，冷光線的原色經由螢光粉塗層所發出的光是藍綠(Blue-Green)色，此最外層的著色PVC套是用來混色用的，經由此層的混色現在的冷光線有湖水藍、粉紅色、白色、紫色、黃色、青色、綠色、橙色、紅色、深藍色...等色彩。&lt;br /&gt;
&lt;br /&gt;
冷光線跟LED、霓虹管比較有以下的優點：&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;很軟、可隨意彎曲，可做事物或是編在服飾上作為文字或是圖樣&lt;/li&gt;
&lt;li&gt;整條都可發光，LED必須密集連接，因此在單位長度的價格上，冷光線價錢較低($100/m)&lt;/li&gt;
&lt;li&gt;低耗電量。經由適當的電壓、頻率轉換，兩顆乾電池就可驅動 3m 的冷光線&lt;/li&gt;
&lt;li&gt;操作時，冷光線不會發熱、發燙，而且對人體無害，適當的防護下可用於水中環境&lt;/li&gt;
&lt;/ol&gt;
冷光線可近似於有著每呎 1nF 電容量的同軸電容器，對其快速充電與放電之下可激發螢光粉發出可見光。因此冷光線可經由改變工作變壓或是工作頻率，控制亮度，但相對的壽命也會減少，每天使用5小時以5000小時做計算也可使用1000天，夠本了！&lt;br /&gt;
&lt;br /&gt;
冷光線購買的時候，廠商會依據你所指定的長度事先幫你焊接好接頭。但大部分的情形下，懂得冷光線的焊接處理，是應用冷光線的必要手法。&lt;br /&gt;
&lt;br /&gt;
下面這段影片可做為冷光線與接頭焊接過程的最佳範例，提供給各位看倌做參考，不一定要跟影片一樣做，重要的是要將銅線上的螢光粉塗層刮掉露出中心銅線，再將兩條細線與中心銅線隔開後焊接；這步驟錯誤的話，冷光線一定不會亮。再者，熱縮套管一定要接，不然冷光線與接頭線連接處很容易斷。影片中連接的方式很牢靠，建議可行的話可以嘗試這樣做。&lt;br /&gt;
&lt;br /&gt;
&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;390&quot; src=&quot;http://www.youtube.com/embed/2XTTH-O4s-E?rel=0&quot; width=&quot;480&quot;&gt;&lt;/iframe&gt;&lt;br /&gt;
&lt;br /&gt;
實際上，沒用過剝線鉗剝過冷光線(影片示範者，一次就成功剝下並露出兩條細線，很羨慕！)，我是利用刀片與打火機將線撥開，再進行焊接。&lt;br /&gt;
&lt;br /&gt;
若是兩段冷光線要做連接，則只要銅線對銅線、細線對戲線做焊接即可。&lt;br /&gt;
&lt;br /&gt;
最後如何測試冷光線是否正常焊接，接冷光線電源供應器是一種方式，但是利用三用電表開在歐姆檔測試也可以，確認&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e06666;&quot;&gt;端子兩端不導通&lt;/span&gt;就對了！&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;冷光線驅動電路&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
本文中所使用的驅動電路，是在露天拍賣買的；DC3V驅動3公尺的大約是$150元，DC12V驅動15公尺是$250元。&lt;br /&gt;
&lt;br /&gt;
若有興趣自己做可參考下面的線路。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;http://cdn.makezine.com/make/21/elwire-schematic-variant.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;494&quot; src=&quot;http://cdn.makezine.com/make/21/elwire-schematic-variant.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-small;&quot;&gt;資料來源：&lt;a href=&quot;http://makezine.com/21/primer/&quot;&gt;makezine：Vol. 21: Electroluminescent (EL) Wire&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
上半部是驅動電路，將555的弦波訊號振幅經過比例&lt;span class=&quot;Apple-style-span&quot; style=&quot;color: #e06666;&quot;&gt;1:10&lt;/span&gt;的變壓器放大10倍，並且可利用前方的100 k Ohm 的可變電阻調頻率，控制冷光線的亮度。&lt;br /&gt;
&lt;br /&gt;
下半部是冷光線閃爍驅動電路，AC電壓使用 TRIAC 做開關控制。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;冷光線控制電路&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
注意到下途中的 TRIAC 元件使用 Z0103，這很方便在電子零件行買到，若買不到就隨便拿一個TRIAC即可，不需要一定要一樣，前方的限流電阻(R2)使用1K(大部分的情形都用這個大小)即可。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMl2iloYFFUidReTzpfSyYUIh_Si-uEQrwS0BVfVwafycYj7diyCcz_Q6NtMDeRJoC6yZOZvf93Of79OufX0qk42lsf4k-oHeQpleS72pIhpsqm7q9yjF_WjYm_AQMxvKJptCVcH8KGh4/s1600/Circuit-I.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;266&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiMl2iloYFFUidReTzpfSyYUIh_Si-uEQrwS0BVfVwafycYj7diyCcz_Q6NtMDeRJoC6yZOZvf93Of79OufX0qk42lsf4k-oHeQpleS72pIhpsqm7q9yjF_WjYm_AQMxvKJptCVcH8KGh4/s640/Circuit-I.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
TRIAC (Z0103)在使用的時候有方向性的區別，也就是必須使用 &lt;b&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;T1 &lt;/span&gt;&lt;/b&gt;接腳接地，不然冷光線會在AC電源開啟時就會一直亮，無法控制。正常的情形是在AC開啟時，冷光線必須在滅掉的狀態。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2u6cEqT1QX0yiNsGonjZn4w-8Yk2wr7dCPZJ2pF984BquOryIUVUHt4JKDSDkidY2ziU2L2YRtG8gg0DhPHQGlRAe8K8GEgW8xtYLzQBEGR1iU4pb-k-R217w_pmI5W3IRHoEkUx33zk/s1600/Z0103.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;109&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg2u6cEqT1QX0yiNsGonjZn4w-8Yk2wr7dCPZJ2pF984BquOryIUVUHt4JKDSDkidY2ziU2L2YRtG8gg0DhPHQGlRAe8K8GEgW8xtYLzQBEGR1iU4pb-k-R217w_pmI5W3IRHoEkUx33zk/s200/Z0103.jpg&quot; width=&quot;200&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;br /&gt;
最重要的一點，則是接地。由於冷光線電壓供應器的輸出為AC，但AC無極性，所以電路中的 HVGND (J4)取AC任一腳皆可，並將此接腳與DC的 GND接在一起。&lt;br /&gt;
&lt;br /&gt;
J1 與 J2 就是接你的冷光線。&lt;br /&gt;
&lt;br /&gt;
根據上面這個電路模型，微控制器有多少I/O接腳就可以接多少條EL-Wire，將右邊線路多複製幾組就行了。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;程式碼&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
這個Demo的程式主要是利用 ATtiny2313 的 8-bit Timer0 作為延遲計時用，並且利用此計時功能切換 I/O 接腳輸出，形成冷光線的漸亮漸滅、一亮一滅的效果。&lt;br /&gt;
&lt;br /&gt;
delay_us：使用 ATtiny2313 的 Timer0 計時，延遲的最小單位是 1us (CPU Speed 8MHz)，最多計時延遲 256 us，但因為輸入是整數，取其正數則可計時延遲到 32,767 us (32.767ms)。&lt;br /&gt;
delay_ms：利用 4 次 250 us 的計時為 1 ms，能做 2&lt;sup&gt;16&lt;/sup&gt;-1 ms 的延遲計時&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;void delay_us(int x)
{
 int y, z, a;
 
 y = x / 256;
 z = x - y * 256;
 
 for (a = 0;a &amp;lt; y;a++)
 {
  TIFR |= (1 &amp;lt;&amp;lt; TOV0); // Clear any interrupt flags on Timer1
  
  TCNT0 = 0; // 256 - 124 = 131: Preload timer 1 for x click. Should be 1us per click
  
  while (!(TIFR &amp;amp; (1 &amp;lt;&amp;lt; TOV0))); // Wait until timer 1 overflow flag set.   
 }
 
 TIFR |= (1 &amp;lt;&amp;lt; TOV0); // clear any interrupt flags on Timer1
 
 TCNT0 = 256 - z; // 256 - 125 = 131 : Preload timer 1 for x click. shoudle be 1us per click
 
 while(!(TIFR &amp;amp; (1 &amp;lt;&amp;lt; TOV0))); // Wait until timer1 overflow flag set.
}

void delay_ms(uint16_t x)
{
 for (;x &amp;gt; 0;x--)
 {
  delay_us(250);
  delay_us(250);
  delay_us(250);
  delay_us(250);
 }
}
&lt;/pre&gt;
pulse：第一個參數 line 是所指定的接腳號碼。第二個參數 speed 是 PWM duty 的間隔，數值越小較亮或漸滅的速度越慢，解析度越高。PWM 每一波段的時間為10 ms。&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;void pulse(uint8_t line, int speed)
{
 int x;
 
 // EL wire progressive light on increased by PWM duty = x / 10100
 for (x = 0;x &amp;lt; 10000;x += speed)
 {
  line_on(line);
  delay_us(x + 100);
  line_off(line);
  delay_us(10000 - x);
 }
 
 // EL wire progressive light off decreased by PWM duty = x / 10100
 for (x = 0;x &amp;lt; 10000;x += speed)
 {
  line_on(line);
  delay_us(10100 - x);
  line_off(line);
  delay_us(x + 100);
 }
}
&lt;/pre&gt;
程式的狀態使用 PB0 接 LED 做為系統正常狀態的提示，LED為低態動作&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;void hello_word()
{
 int i;
 for (i = 0;i &amp;lt; 5;i++)
 {
  cbi(SYS_STATUS_PORT, SYS_STATUS_INDICATOR); // turn on LED, active low
  delay_ms(300);
  sbi(SYS_STATUS_PORT, SYS_STATUS_INDICATOR); // turn off LED
  delay_ms(300);
 }
}
&lt;/pre&gt;
line_on，line_off：確定每次只亮、只滅一條冷光線&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;void line_on(uint8_t EL)
{
 char temp;
 
 if(line_on_2 != 0) line_off(line_on_2); // can&#39;t have more than one line on at a time
 
 // keep track of what&#39;s on and in what sequence
 line_on_2 = line_on_1;
 line_on_1 = EL;
 
 temp = EL;
 
 PORTB |= (1 &amp;lt;&amp;lt; temp); 
}

void line_off(uint8_t EL)
{
 char temp;
 
 if(EL == line_on_2) line_on_2 = 0;
 else if (EL == line_on_1)
 {
  line_on_1 = line_on_2;
  line_on_2 = 0;
 }
 
 temp = EL;
 
 PORTB &amp;amp;= ~(1 &amp;lt;&amp;lt; temp);
}
&lt;/pre&gt;
cycle：程式中並沒有用到這部分。cycle 主要是將所有的冷光線依序做亮滅，因為程式中只使用一條冷光線，所以 x &amp;lt; 1。如果有 8 條冷光線，那麼就是 x &amp;lt; 8。&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;void cycle(int speed)
{
 int x;
 
 if(speed &amp;gt; 32000) speed = 32000;
 
 for (x = 0;x &amp;lt; 1;x++) // Now, the EL wire only one line.
 {
  line_on(x);
  delay_us(32100 - x);
 }
 
 for (x = 1; x &amp;gt; 0;x--)
 {
  line_on(x);
  delay_us(32100 - speed);
 } 
}
&lt;/pre&gt;
ATtiny2313 的 IO 埠初始化與初值設定，Timer0 的 prescale 設定為 8，也就是計時頻率為 1 MHz。&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;void ioinit()
{
 // PB0 - PB7 define as output
 DDRB = 0xFF;
 
 // PD6 define as output
 DDRD |= 0x40;
 sbi(SYS_STATUS_PORT, SYS_STATUS_INDICATOR); // turn off system status indicator
  
 TCCR0B = (1 &amp;lt;&amp;lt; CS01); // Set prescaler to 8. CS01 = 1
}
&lt;/pre&gt;
下面這段程式碼是程式的標頭設定與主程式&lt;br /&gt;
main：chip I/O 與 Timer0 設定 --&amp;gt; 先say hello(hello_world)閃爍 LED 5次 --&amp;gt; 進入無窮迴圈&lt;br /&gt;
冷光線明滅 5 次 (speed 125)--&amp;gt; 閃爍 10 次(on 500ms, off 250ms) --&amp;gt; 閃爍 10 次(on 200ms, off 300ms) --&amp;gt; 明滅 5 次(speed 250)&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;#include &amp;lt;avr/io.h&amp;gt;
#include &amp;lt;avr/interrupt.h&amp;gt;

#define F_CPU 8000000UL

#define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;amp;= ~_BV(bit))
#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))

#define EL_LINE_PORT     PORTB
#define EL_TEST_PIN      PB0
#define SYS_STATUS_PORT    PORTD
#define SYS_STATUS_INDICATOR PD6

// Define functions
//===========================
void ioinit(void);     // Initializes IO
void hello_word(void);   // To indicate system status
void delay_ms(uint16_t x); // General purpose delay
void delay_us(int x);

void pulse(uint8_t line, int speed);
void line_on(uint8_t EL);
void line_off(uint8_t EL);
void cycle(int speed);
//===========================

static char line_on_1 = 0;
static char line_on_2 = 0;

int main(void)
{
 int x;
 
 // chip I/O initialize
 ioinit();
 
 // chip say hello to world
 hello_word();
 
 while(1)
  {
   // EL wire fading
   for (x = 0; x &amp;lt; 5; x++)
   {
    pulse(0, 125);
    delay_ms(100);
   }
   
   // EL wire flashing
   for(x = 0; x &amp;lt; 10;x++)
   {
    line_on(0);
    delay_ms(500);
    line_off(0);
    delay_ms(250);
   }

   for(x = 0; x &amp;lt; 10;x++)
   {
    line_on(0);
    delay_ms(200);
    line_off(0);
    delay_ms(300);
   }
  
   line_off(0);
  
   for (x = 0;x &amp;lt; 4; x++)
   {
    pulse(0,250);
    delay_ms(100);
   }
  
   delay_ms(1000);   
    }
}
&lt;/pre&gt;
ATtiny2313 設定如下：主要是取消掉 CKDIV8，使用 Internal RC 8MHz&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD-FH34ny7mj6Ogab7jRo34N-XjK_mWJo2yd1PD32Iilp7WH3zDAVSZ1eWY04xRZSo1zPXSQs7eTPDKNhgUKP_r2aJX2MrWcxKrh5ap72tdmFJ16RbUKJ2pyqHvcZ0mAJJC7r3ZSfwscM/s1600/Attiny2313-Fuse.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiD-FH34ny7mj6Ogab7jRo34N-XjK_mWJo2yd1PD32Iilp7WH3zDAVSZ1eWY04xRZSo1zPXSQs7eTPDKNhgUKP_r2aJX2MrWcxKrh5ap72tdmFJ16RbUKJ2pyqHvcZ0mAJJC7r3ZSfwscM/s1600/Attiny2313-Fuse.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;a href=&quot;http://dl.dropbox.com/u/13834835/a-lu%40room/EL_Wire/EL%20Wire.rar&quot;&gt;AVR Studio 4 專案檔下載&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: large;&quot;&gt;實際例子影片&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
根據上面程式碼的解釋，使用一段15公分長的紫色冷光線做控制：   &lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguHV4LGKfCa8ZMQjB_7pRxgNFRhINn9XhJ_GfzvQ1kRXYMoUXEn-hstmIc9pL5Wd8dJIqj35CTCROfjtJif61Q2ePuHvJVSYFAsXj_3kr_73lHknoJGlX_URcnAROcnkOIJvzd9r4-gEo/s1600/Circuit-II.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEguHV4LGKfCa8ZMQjB_7pRxgNFRhINn9XhJ_GfzvQ1kRXYMoUXEn-hstmIc9pL5Wd8dJIqj35CTCROfjtJif61Q2ePuHvJVSYFAsXj_3kr_73lHknoJGlX_URcnAROcnkOIJvzd9r4-gEo/s400/Circuit-II.jpg&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;冷光線明滅 (Fading) 5 次，PWM Speed 125&lt;/li&gt;
&lt;li&gt;冷光線閃爍 10 次(on 500ms, off 250ms)&amp;nbsp;&lt;/li&gt;
&lt;li&gt;冷光線閃爍 10 次(on 200ms, off 300ms)&lt;/li&gt;
&lt;li&gt;冷光線明滅 (Fading) 5 次，PWM Speed 250&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dy7RHqA84qweJN90SPTd_VMez-fL_DuUTpXCeTgOY7d-yDJ0tV-WQ1rKKvgbj58XE7GpL_bIWzV3LsPgo_TEA&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;br /&gt;
就像 LED 一樣，只要基本的電路與程式一旦完成，接下來的變化就是看個人創意了！&lt;br /&gt;
&lt;br /&gt;
希望此篇文章能夠對觀看本文的各位有所幫助，也期待與各位做個交流溝通，如果你有任何意見或是建議請不吝指教！</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/3211403668954040549/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2011/07/avr-el-wire.html#comment-form' title='2 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/3211403668954040549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/3211403668954040549'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2011/07/avr-el-wire.html' title='使用AVR 玩弄 EL-Wire (冷光線)'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj9VDXXTAC16EFiMqUhIN9iUi2r8_Dvf4n2-Z0yQlEj6MFnjLHF7s9Jkp_RBvvIAV71ugWNRWgbPtScDdfb_2A5Sru0rH4d14qSjMmB59SUGlsCT-55QzmNwGAV4DxU_Po8D7ZcdYek6_I/s72-c/500px-EL_wire.svg%255B1%255D.png" height="72" width="72"/><thr:total>2</thr:total><georss:featurename>709台灣台南市安南區長安里</georss:featurename><georss:point>23.069469 120.199209</georss:point><georss:box>23.0687505 120.198684 23.070187500000003 120.19973399999999</georss:box></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-7028162248223157977</id><published>2011-07-03T22:24:00.002+08:00</published><updated>2011-07-03T22:40:27.906+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="8051"/><category scheme="http://www.blogger.com/atom/ns#" term="ATtiny2313"/><category scheme="http://www.blogger.com/atom/ns#" term="AVR"/><title type='text'>無線模組 (RF 315MHz) 發射接收，使用8051與ATtiny2313</title><content type='html'>相信大多數的人都有玩過遙控類的玩具，甚至在日常生活中也常常用到，例如家裡的電動門、汽車中控鎖......等，都使用到這種 RF (Radio Frequency) 通訊的技術。&lt;br /&gt;
&lt;br /&gt;
本文中所要探討的是 RF 315MHz 長距離發射/接收模組 (TG-11A 與 TG-11B) 的控制方法，不使用額外的編碼與解碼晶片，而是使用 MCU (Micro-Controller Unit) 微控制器來負責發射與接收：發射端送出自訂字元，接收端接收自訂字元產生相對應的動作 (這裡是控制 LED 明滅)。&lt;br /&gt;
&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjRVtx2XVA-ZMn-MPvrlrdQ9yzvDaascrA5h16gwQ8w3qXYAyfNc85CEuRTzTy7LpBJMRoEzOj4M9MxhhRk_mARjr8xaSVpRpnpCs2OyOzoKS20-wn0QOUFFV2ByLC-Ou_P-HL_PrRtWs/s1600/DSC01171.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjRVtx2XVA-ZMn-MPvrlrdQ9yzvDaascrA5h16gwQ8w3qXYAyfNc85CEuRTzTy7LpBJMRoEzOj4M9MxhhRk_mARjr8xaSVpRpnpCs2OyOzoKS20-wn0QOUFFV2ByLC-Ou_P-HL_PrRtWs/s640/DSC01171.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
網路上關於照片中的模組所找到的資料都是基於八支腳位的，不過由於大部份接腳都是共用的，所以簡化之後的接腳只有 Vcc、GND和 DATA IN/OUT用的到。&lt;br /&gt;
&lt;br /&gt;
文中所使用的模組都是 4-pin，有些接腳在使用時必須接在一起 (照片中可清楚看出)。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;參考網站：&lt;/b&gt;&lt;br /&gt;
&lt;a href=&quot;http://winavr.scienceprog.com/example-avr-projects/running-tx433-and-rx433-rf-modules-with-avr-microcontrollers.html&quot;&gt;WinAVR AVR-GCC Tutorial -&amp;nbsp;Running TX433 and RX433 RF modules with AVR microcontrollers&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;硬體線路：&lt;/b&gt;&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;發射線路：從左而右的四支接腳分別接 Vcc (pin-1, pin-2)、Data-In (pin-3)、GND (pin-4)，其中比較重要的是 Data-In 接腳，這支接腳必須接到 MCU 的 TxD 接腳；另外 Vcc 接腳在本文中是接 +5V，我讓它跟 MCU 共用電源(你可以試試接 +3 ~ 12V)。&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiidzuz10lV6JZ0o9G5fOylqMBV_0bwJJjqbhecDYWmChLBQ60e4NO0iz6wkaeAr6KqfXOoiX4blwHdAJjHDCZWZsSugkVCNTdJv_YCXUDuO5vDvaQIZ1b1C02mKHtN6upRsNC3RnCwfzc/s1600/DSC01180.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;311&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiidzuz10lV6JZ0o9G5fOylqMBV_0bwJJjqbhecDYWmChLBQ60e4NO0iz6wkaeAr6KqfXOoiX4blwHdAJjHDCZWZsSugkVCNTdJv_YCXUDuO5vDvaQIZ1b1C02mKHtN6upRsNC3RnCwfzc/s320/DSC01180.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;接收線路：從左而右的四支接腳分別接 Vcc (pin-1)、Data-Out (pin-2，pin-3)、GND (pin-4)，其中比較重要的是 Data-Out 接腳，這支接腳必須接到 MCU 的 RxD 接腳；另外 Vcc 接腳在本文中是接 +5V，我讓它跟 MCU 共用電源，但是實際測試過可以用兩顆電池(+3V)來驅動，+3V 的電源剛好可以用在 ATtiny2313，這在下面測試時會講到。&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbOPhamiKtDFZ-ujZhwyfbzBWHEdnck04uV5ubToX5FVGYcy7t5w7E_wOdrHyc7abqx55TcCjZvV2xTGWlPWO2lSCIpBPrIke5FlcN3rjwjA1zyS9DlQoRngLIaLyi0D9t8N0kBqYE6hI/s1600/DSC01182.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;201&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjbOPhamiKtDFZ-ujZhwyfbzBWHEdnck04uV5ubToX5FVGYcy7t5w7E_wOdrHyc7abqx55TcCjZvV2xTGWlPWO2lSCIpBPrIke5FlcN3rjwjA1zyS9DlQoRngLIaLyi0D9t8N0kBqYE6hI/s320/DSC01182.JPG&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
電源是用 +9V 乾電池經穩壓晶片 7805 降壓到 +5V，輸出電流最大為 1A，剛好可以給本文中發射與接收的電路作測試用；一開始我是這樣想，以 ATtiny2313 做發射 AT89S51 做接收都正常運作，直到&amp;nbsp;AT89S51&amp;nbsp;做發射&amp;nbsp;ATtiny2313&amp;nbsp;做接收時，LED 閃爍的反應變的超慢，也不能說不正常，畢竟也正常運作，那時還沒想到這樣反過來做測試會吃這麼多電，因為電壓不足造成 MCU 一直 reset 重新啟動，而造成這種情形。&lt;br /&gt;
&lt;br /&gt;
在使用上，發射與接收線路通常不會共用電源而是分開使用的，我是為了方便測試所以才接在一起，最後是在接收程式中加入 &quot;hello word&quot; 的開機 LED 閃爍，才得知這個問題，然後另外使用一個+3V的乾電池電源給 ATtiny2313 用，希望你不要發生像我一樣的情形。&lt;br /&gt;
&lt;br /&gt;
下面是使用 ATtiny2313 與 AT89S51 時，發射與接收模組的接法。AT89S51 的震盪器(12 MHz)與 Reset 電路並沒有畫出你必須自行接上；ATtiny2313 直接接上電源即可，熔絲位請選擇 &quot;Internal RC Osc. 8MHz; Start-up time: 14 CK + 65 ms&quot;，CLK/8 不使用。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvskmP1Ziob7FzWH3CqLmincl1m2HXIVVuMtrpPuVAnMS52d71Pgf5IoczNq8EH9GUHBWY21WcBGQchQiwL342GgATC5xmYdusSk8lzLLWs4x4_6_KvGyYT8zxyLbzj01GswVgIkbEneI/s1600/RF_Schematics.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;450&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvskmP1Ziob7FzWH3CqLmincl1m2HXIVVuMtrpPuVAnMS52d71Pgf5IoczNq8EH9GUHBWY21WcBGQchQiwL342GgATC5xmYdusSk8lzLLWs4x4_6_KvGyYT8zxyLbzj01GswVgIkbEneI/s640/RF_Schematics.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;b&gt;軟體撰寫：&lt;/b&gt;&lt;br /&gt;
&quot;參考網站&quot; 中使用 ATmega8 作為 RF 發射與接收的韌體開發晶片。為了無線傳輸時，發射與接收訊號能夠同步化，使用晶片中通用同步與非同步串列接收發射器 ( USART, &amp;nbsp;Universal Synchronous and Asynchronous serial Receiver and Transmitter) 功能；為了避免無端干擾，設置了編碼與解碼封包的自定控制字元，原始程式的說明請上 &quot;參考網站&quot;。在本文中只針對修改及增加的部份多做說明。&lt;br /&gt;
&lt;br /&gt;
基於 &quot;參考網站&quot; 中的資料，本文中所要實做的部分為：&lt;br /&gt;
ATtiny2313 (C語言) 發射 &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AT89S51 (C語言) 接收&lt;br /&gt;
ATtiny2313 (C語言) 發射 &amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; AT89S51(組合語言) 接收&lt;br /&gt;
&lt;br /&gt;
AT89S51 (C語言) 接收 &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ATtiny2313 (C語言) 接收&lt;br /&gt;
AT89S51(組合語言) 接收&amp;nbsp;&amp;lt;&amp;lt;&amp;lt;&amp;lt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; ATtiny2313 (C語言) 接收&lt;br /&gt;
&lt;br /&gt;
因為比較熟 Keil C/assembly 和 AVR GCC，所以這六個程式除了AVR GCC 的程式之外，Keil C/Assembly 就依 &quot;參考網站&quot; 中的程式來重寫以達到同樣的功能，順便複習 Keil 組合語言。&lt;br /&gt;
&lt;br /&gt;
ATtiny2313 RF發射程式需要修改的部份如下，主要是修改暫存器裡的設定&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;void USART_Init(void)
{
//Set baud rate
UBRRL = (uint8_t)UBRRVAL;  //low byte
UBRRH = (UBRRVAL &amp;gt;&amp;gt; 8); //high byte
//Enable Transmitter and Receiver and Interrupt on receive complete
UCSRB = (1 &amp;lt;&amp;lt; TXEN);
//Set data frame format: asynchronous mode,no parity, 1 stop bit, 8 bit size
UCSRC = (0 &amp;lt;&amp;lt; UMSEL) | (0 &amp;lt;&amp;lt; UPM1) | (0 &amp;lt;&amp;lt; UPM0) |
 (0 &amp;lt;&amp;lt; USBS) | (0 &amp;lt;&amp;lt; UCSZ2) | (1 &amp;lt;&amp;lt; UCSZ1) | (1 &amp;lt;&amp;lt; UCSZ0); 
&lt;/pre&gt;ATtiny2313 RF發射程式整理在此，&lt;a href=&quot;http://dl.dropbox.com/u/13834835/a-lu%40room/RF315MHz_TxRx/RF315M_Transmitter_Test.rar&quot;&gt;按此下載&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
ATtiny2313 RF接收程式修改的部份如下，除了暫存器修改之外，在 &quot;Main_Init()&quot; 裡加入了 LED 閃爍的效果，當 MCU 插上電源 LED 會明滅閃爍 5 次，以及修改中斷副程式 LED 所連接的位置，LED 是低態動作。&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;void USART_Init(void)
{
//Set baud rate
UBRRL = (uint8_t)UBRRVAL;  //low byte
UBRRH = (UBRRVAL &amp;gt;&amp;gt; 8); //high byte
//Set data frame format: asynchronous mode,no parity, 1 stop bit, 8 bit size
UCSRC = (0 &amp;lt;&amp;lt; UMSEL) | (0 &amp;lt;&amp;lt; UPM1) | (0 &amp;lt;&amp;lt; UPM0) |
 (0 &amp;lt;&amp;lt; USBS) | (0 &amp;lt;&amp;lt; UCSZ2) | (1 &amp;lt;&amp;lt; UCSZ1) | (1 &amp;lt;&amp;lt; UCSZ0); 
//Enable Transmitter and Receiver and Interrupt on receive complete
UCSRB = (1 &amp;lt;&amp;lt; RXEN) | (1 &amp;lt;&amp;lt; RXCIE);//|(1&amp;lt;&amp;lt;TXEN);
}

ISR(USART_RX_vect)
{
//define variables
uint8_t raddress, data, chk;//transmitter address
//receive destination address
raddress = USART_vReceiveByte();
//receive data
data = USART_vReceiveByte();
//receive checksum
chk = USART_vReceiveByte();
//compare received checksum with calculated
if(chk == (raddress+data))//if match perform operations
{
  //if transmitter address match  
  if(raddress == RADDR)
  {
 if(data == LEDON)
 {
 PORTD &amp;amp;= ~(1&amp;lt;&amp;lt;PD6);//LED ON
 }
 else if(data == LEDOFF)
 {
 PORTD |= (1&amp;lt;&amp;lt;PD6);//LED OFF
 }
 else
 {
 //blink led as error
 PORTD |= (1 &amp;lt;&amp;lt; PD6);//LED OFF
 _delay_ms(10);
 PORTD &amp;amp;= ~(1 &amp;lt;&amp;lt; PD6);//LED ON 
 }
  }
}
}

void Main_Init(void)
{ 
 uint8_t i = 0;

 DDRD = 0x40;//define port C pin 0 as output;
 // hello word
 for(;i &amp;lt; 5;i++)
  {
  PORTD &amp;amp;= ~(1 &amp;lt;&amp;lt; PD6); // LED ON
  _delay_ms(150);
  PORTD |= (1 &amp;lt;&amp;lt; PD6); //LED OFF
  _delay_ms(150);  
  }
 //enable global interrupts
 sei();
}
&lt;/pre&gt;ATtiny2313 RF接收程式整理在此，&lt;a href=&quot;http://dl.dropbox.com/u/13834835/a-lu%40room/RF315MHz_TxRx/RF315M_Receiver_Test.rar&quot;&gt;按此下載&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
AT89S51(Keil C) RF發射程式，結構上與原始程式一樣，主要增加 &quot;delay_100ms()&quot; 副程式做延遲的工作，因為 Keil 沒內建延遲程式可以呼叫，所以只好自己建一個；&quot;ioinit()&quot; 包含 UART 的設定與設定使用 Timer1 作為 baud rate 產生器，不需設定全局中斷(EA)。&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;#include &amp;lt;REGX51.H&amp;gt;
 
typedef unsigned char tByte;

//define receive parameters
#define SYNC 0XAA// synchro signal
#define RADDR 0x44
#define LEDON 0x11//switch led on command
#define LEDOFF 0x22//switch led off command

// delay 100ms
void delay_100ms()
 {
  #pragma asm
     MOV  R6, #250
    delay_1: MOV  R7, #200
    DJNZ R7, $
    DJNZ R6, delay_1
  #pragma endasm
 }

void ioinit(void)
 {
 // mode 1, 8-bit UART
 PCON |= 0x00; // SMOD = 0, double baud rate speed disable 
 // SCON = SM0 SM1 SM2 REN TB8 RB8 TI RI = 01000000;
 // SM0 = 0, SM1 = 1 meas UART mode 1
 SCON = 0x40;
 // baun rate, Timer1, mode 2 auto reload, 1200bps
 TMOD = 0x20;
 TL1 = 0xe6;
 TH1 = 0xe6;
 TR1 = 1; // start timer 1  
 }

void send_byte(tByte const b)
 {
  SBUF = b;
  while(!TI);
  TI = 0;   
 }

void send_packs(tByte const radd, tByte const rcmd)
 {
  send_byte(SYNC);
  send_byte(radd);
  send_byte(rcmd);
  send_byte((radd+rcmd)); // check sum
 }

void main(void)
 {
 ioinit();
 for(;;)
  {
  send_packs(RADDR, LEDON);
  delay_100ms();
  send_packs(RADDR, LEDOFF);
  delay_100ms();
  }
 }
&lt;/pre&gt;&lt;br /&gt;
相對應的 Keil Assembly 的 RF 發射程式，請對照上一個程式。&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;;------------------------------------------------------------------------------
;   VARIABLES
;------------------------------------------------------------------------------
  ; CONST DEFINES
  SYNC EQU  0xAA
  RADDR EQU  0x44
  LEDON EQU  0x11
  LEDOFF EQU  0x22
  ; VARIABLE DEFINES
  CMD  DATA 0x30  
;------------------------------------------------------------------------------
;   INTERRUPT VECTOR DEFINITIONS
;------------------------------------------------------------------------------
  ORG  0000H   ; STARTUP MEMORY ADDRESS
  JMP  RESET
;------------------------------------------------------------------------------
;   MAIN PROGRAM
;------------------------------------------------------------------------------
RESET: MOV  SP, #5FH
IOINIT: ORL  PCON, #00H ; SMOD = 0, DOUBLE BAUD RATE SPEED DISABLE
  MOV  SCON, #01000000B ; UART MODE 1, 8-BIT
  MOV  TMOD, #20H ; TIMER1, MODE 2(8-BIT AUTOLOAD), 1200bps
  MOV  TL1, #0E6H
  MOV  TH1, #0E6H
  SETB TR1   ; START TIMER 1
MAIN: ; send led on command
  MOV  CMD, #LEDON
  LCALL SEND_PACKS  
  ; delay 100 ms
  LCALL  DELAY_100MS
  ; send led off command
  MOV  CMD, #LEDOFF
  LCALL SEND_PACKS
  ; delay 100 ms
  LCALL DELAY_100MS
  JMP  MAIN
;------------------------------------------------------------------------------
;   SUBROUTINE
;------------------------------------------------------------------------------
;    DELAY 100 ms
;------------------------------------------------
DELAY_100MS:
   MOV  R6, #250
delay_1: MOV  R7, #200
   DJNZ R7, $
   DJNZ R6, delay_1
   RET
;------------------------------------------------
;  SEND PACKS FROM UART
;  1. synchronous signal
;  2. wireless device ID
;  3. command
;  4. check sum
;------------------------------------------------
SEND_PACKS:
  MOV  SBUF, #SYNC  ; synchronous signal
  JNB  TI, $
  CLR  TI
  MOV  SBUF, #RADDR  ; wireless devive ID
  JNB  TI, $
  CLR  TI
  MOV  SBUF, CMD  ; command
  JNB  TI, $
  CLR  TI
  MOV  A, CMD
  ADD  A, #RADDR
  MOV  SBUF, A   ; check sum
  JNB  TI, $
  CLR  TI
  RET
;------------------------------------------------------------------------------
  END
&lt;/pre&gt;&lt;br /&gt;
AT89S51(Keil C) RF接收程式&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;#include &amp;lt;REGX51.H&amp;gt;

#define INTERRUPT_UART 4
#define ON 0
#define OFF 1

// ASSIGN LED CONTROL BIT P0.0, ACTIVE LOW
sbit LED = P0^0;

// delay 10ms
void delay_10ms()
 {
 #pragma asm
    MOV R6, #25
 DEL: MOV  R7, #200
   DJNZ  R7, $
   DJNZ R6, DEL 
 #pragma endasm
 }

typedef unsigned char tByte;

//define receive parameters
#define SYNC 0XAA// synchro signal
#define RADDR 0x44
#define LEDON 0x11//switch led on command
#define LEDOFF 0x22//switch led off command

void ioinit(void) // wait modify
{
 // turn off LED
 LED = OFF;

 // mode 1, 8-bit UART
 PCON |= 0x00; // SMOD = 0, double baud rate speed disable 
 // SCON = SM0 SM1 SM2 REN TB8 RB8 TI RI = 01010000;
 // SM0 = 0, SM1 = 1 meas UART mode 1
 SCON = 0x50;
 // baun rate, Timer1, mode 2 auto reload, 1200bps
 TMOD = 0x20;
 TL1 = 0xe6;
 TH1 = 0xe6;  
 TR1 = 1; // start timer 1  
 // interrupt
 ES = 1; // enable serial port interrupt
 EA = 1; // enable global interrupt
}

tByte USART_vReceiveByte(void)
{
    // Wait until a byte has been received
    while(!RI);
 RI = 0;
    // Return received data
    return SBUF;
}

void UART_ISR() interrupt INTERRUPT_UART
{
 // a-lu remark: 2011.02.21
 //  No implemented SYNC check before receive the byte of RADDR
 //  Let&#39;s to wait and see the test result

 //define variables
 tByte raddress, cmd, chk;//transmitter address

 // find TX or RX caused interrupt
 if(TI) 
  { 
  // clear TI
  TI = 0;
  }
 else
  { 
  //receive destination address
  raddress = USART_vReceiveByte();
  //receive cmd
  cmd = USART_vReceiveByte();
  //receive checksum
  chk = USART_vReceiveByte();
  //compare received checksum with calculated
  if(chk == (raddress+cmd))//if match perform operations
   {
   //if transmitter address match
   if(raddress == RADDR)
    {
     if(cmd == LEDON)
      {
      LED = ON; //LED ON
      }
     else if(cmd == LEDOFF)
      {
      LED = OFF; //LED OFF
      }
     else
      {
      //blink led as error
      LED = OFF; //LED OFF
      delay_10ms();
      LED = ON; //LED ON 
      }
     }
    }
   }
}

int main(void)
{
 ioinit();
 for(;;)
 {
 PCON |= 0x01; // IDLE MODE
 }
 //nothing here interrupts are working
 return 0;
}
&lt;/pre&gt;&lt;br /&gt;
相對應的 Keil Assembly 的 RF 發射程式，請對照上一個程式。&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;;------------------------------------------------------------------------------
;   VARIABLES
;------------------------------------------------------------------------------
  ; CONST DEFINES
  SYNC EQU  0xAA
  RADDR EQU  0x44
  LEDON EQU  0x11
  LEDOFF EQU  0x22
  ; VARIABLE DEFINES
  CMD  DATA 0x30  
;------------------------------------------------------------------------------
;   INTERRUPT VECTOR DEFINITIONS
;------------------------------------------------------------------------------
  ORG  0000H   ; STARTUP MEMORY ADDRESS
  JMP  RESET
;------------------------------------------------------------------------------
;   MAIN PROGRAM
;------------------------------------------------------------------------------
RESET: MOV  SP, #5FH
IOINIT: ORL  PCON, #00H ; SMOD = 0, DOUBLE BAUD RATE SPEED DISABLE
  MOV  SCON, #01000000B ; UART MODE 1, 8-BIT
  MOV  TMOD, #20H ; TIMER1, MODE 2(8-BIT AUTOLOAD), 1200bps
  MOV  TL1, #0E6H
  MOV  TH1, #0E6H
  SETB TR1   ; START TIMER 1
MAIN: ; send led on command
  MOV  CMD, #LEDON
  LCALL SEND_PACKS  
  ; delay 100 ms
  LCALL  DELAY_100MS
  ; send led off command
  MOV  CMD, #LEDOFF
  LCALL SEND_PACKS
  ; delay 100 ms
  LCALL DELAY_100MS
  JMP  MAIN
;------------------------------------------------------------------------------
;   SUBROUTINE
;------------------------------------------------------------------------------
;    DELAY R5 x 100 ms
;  before call it should set R5 value
;------------------------------------------------
DELAY_100MS:
;delay:  MOV  R6, #250
   MOV  R6, #250
delay_1: MOV  R7, #200
   DJNZ R7, $
   DJNZ R6, delay_1
;   DJNZ R5, delay
   RET
;------------------------------------------------
;  SEND PACKS FROM UART
;  1. synchronous signal
;  2. wireless device ID
;  3. command
;  4. check sum
;------------------------------------------------
SEND_PACKS:
  MOV  SBUF, #SYNC  ; synchronous signal
  JNB  TI, $
  CLR  TI
  MOV  SBUF, #RADDR  ; wireless devive ID
  JNB  TI, $
  CLR  TI
  MOV  SBUF, CMD  ; command
  JNB  TI, $
  CLR  TI
  MOV  A, CMD
  ADD  A, #RADDR
  MOV  SBUF, A   ; check sum
  JNB  TI, $
  CLR  TI
  RET
;------------------------------------------------------------------------------
  END
&lt;/pre&gt;&lt;br /&gt;
AT89S51 與 ATtiny2313&amp;nbsp;接收程式中，AT89S51 的中斷副程式同時處理 UART 傳送 (TxD) 與接收 (RxD) 觸發的中斷，而 ATtiny2313 (應該 AVR都是一樣的) 是分開處理的。因此在處理 AT89S51 的 UART 中斷時也要同時注意中斷是由哪一個所引起，雖然在接收程式可以不去管 TxD 所造成的中斷，但為了避免錯誤，所以只要是由 TxD 所引起的 UART 中斷，都直接將 TI設置為 0並直接返回，這是在撰寫 AT89S51 時要注意到的。&lt;br /&gt;
&lt;br /&gt;
AT89S51 發射與接收的 Keil 專案檔整理在此，&lt;a href=&quot;http://dl.dropbox.com/u/13834835/a-lu%40room/RF315MHz_TxRx/AT89S51.rar&quot;&gt;按此下載&lt;/a&gt;。&lt;br /&gt;
&lt;br /&gt;
編譯後產生 .HEX 然後燒錄進你的晶片，開始接下來的測試。&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;上機測試：&lt;/b&gt;&lt;br /&gt;
上面所提供的六個韌體程式都以實際測試過。&lt;br /&gt;
&lt;br /&gt;
下面影片中，RF發射端使用 AT89S51，電源供給 +5V；RF 接收端使用 ATtiny2313 ，電源供給 +3V。&lt;br /&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: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBJ4ONVO0yFIgRE37Rue6WkuSWD_-zCwAmD1-l3YZ6OH1chP2wCR5BVtFAs-M3419SmZ4Y825ILyO6B197ZoYxAncjqGLXUmxeXJ_uJ0_y9mbHafy5znQIR-fLTOTVpgiy62lCE-YELXU/s1600/DSC01196_note.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiBJ4ONVO0yFIgRE37Rue6WkuSWD_-zCwAmD1-l3YZ6OH1chP2wCR5BVtFAs-M3419SmZ4Y825ILyO6B197ZoYxAncjqGLXUmxeXJ_uJ0_y9mbHafy5znQIR-fLTOTVpgiy62lCE-YELXU/s640/DSC01196_note.jpg&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;
不管你發射與接收是使用哪一個晶片，正常的動作情形就像影片一樣！&lt;br /&gt;
&lt;iframe allowfullscreen=&#39;allowfullscreen&#39; webkitallowfullscreen=&#39;webkitallowfullscreen&#39; mozallowfullscreen=&#39;mozallowfullscreen&#39; width=&#39;320&#39; height=&#39;266&#39; src=&#39;https://www.blogger.com/video.g?token=AD6v5dz-1-Am947JzfE347vO5EhM89Vyns5gPdfscfJDTd3w1C5EQaCNXI8FfRlEBdTNwRlINWN9OCblCGAhOkNpSA&#39; class=&#39;b-hbp-video b-uploaded&#39; frameborder=&#39;0&#39;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/7028162248223157977/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2011/07/rf-315mhz-8051attiny2313.html#comment-form' title='17 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/7028162248223157977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/7028162248223157977'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2011/07/rf-315mhz-8051attiny2313.html' title='無線模組 (RF 315MHz) 發射接收，使用8051與ATtiny2313'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgjRVtx2XVA-ZMn-MPvrlrdQ9yzvDaascrA5h16gwQ8w3qXYAyfNc85CEuRTzTy7LpBJMRoEzOj4M9MxhhRk_mARjr8xaSVpRpnpCs2OyOzoKS20-wn0QOUFFV2ByLC-Ou_P-HL_PrRtWs/s72-c/DSC01171.JPG" height="72" width="72"/><thr:total>17</thr:total><georss:featurename>709台灣台南市安南區長安里</georss:featurename><georss:point>23.0646352 120.19645220000007</georss:point><georss:box>23.0582312 120.18953070000006 23.0710392 120.20337370000007</georss:box></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-6326198087084311715</id><published>2011-03-03T12:47:00.000+08:00</published><updated>2011-03-03T12:47:20.223+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="ATtiny45"/><category scheme="http://www.blogger.com/atom/ns#" term="AVR"/><title type='text'>實作 UART 功能使用 Attiny45 USI</title><content type='html'>Attiny45 是一個 8-pin 的晶片，因為體積小而且功能強大且內建 4K 的 flash rom，對於簡單的一些練習是再好不過的晶片。但是這幾天為了想作一些關於 ADC 的實驗，於是就拿了它來做，結果呢? 它本身內建的功能沒有所謂的 UART (也就是在接腳圖上看不到 TxD 與 RxD )，而且手邊的Attiny2313 卻只有 on-chip Analog Comparator 兩支接腳作為類比比較用。一個有 ADC 卻沒硬體 UART，一個有 UART 卻只有一組 Analog Comparator 也不夠用 ......真是羚羊趕不完！&lt;br /&gt;
&lt;br /&gt;
不過既然 Attiny45 有 USI 功能，想必可以用軟體實作的方式做出來！&lt;br /&gt;
&lt;br /&gt;
上網 google 的一下，在 Atmel 官網中的一份文件(&amp;nbsp;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&lt;a href=&quot;http://www.atmel.com/dyn/resources/prod_documents/doc4300.pdf&quot;&gt;AVR307: Half Duplex UART Using the USI Module on tinyAVR and megaAVR devices&lt;/a&gt;) 有解決方案(如果找不到這份文件請 Google 一下，Updated 10/03，打文時又檢查了一遍連結發現ATEML官網最近有大改版)。不過事情卻沒想像中這麼容易，文件中所使用的晶片是 Attiny26，編譯器是 IAR Workbench。跟我用的都不一樣，所以如果要使用 Attiny45 內的 USI 做出 UART 的功能，必定要經過一番苦讀與修改。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;首先要做的就是&lt;a href=&quot;http://www.atmel.com/dyn/resources/prod_documents/AVR307.zip&quot;&gt;下載 AVR307所附的範例程式&lt;/a&gt;，把 Attiny26 相關的暫存器設定，修改為Attiny45，最後再修改整個 IAR 的程式碼讓它可以符合並通過 AVR Studio 編譯器的語法檢查，這樣才能產生所需要的Attiny45 UART 程式碼。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;我的目的是要使用 ATtiny45 實現兩個 ADC 的監控。當然需要兩個 UART 功能的也可利用這個方法來做實現。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse; font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif;&quot;&gt;&lt;span style=&quot;border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&lt;b&gt;硬體線路：&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;硬體線路可以分為兩個部份，第一部分是Attiny45的線路部分，需要注意的是：當使用三線USI模式時，PB1(pin6) 是設定為 output 而且是一個open-drain output，所以必須要加上一個pull-up電阻。如圖中所示，加上了一個 1K 電阻，經實際測試是OK的！&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;border-collapse: collapse;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;span style=&quot;border-bottom-width: 0px; border-collapse: collapse; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; font-family: &#39;Lucida Sans Unicode&#39;, &#39;Lucida Grande&#39;, Verdana, Arial, sans-serif; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifzc0B6eScCIrIYF7KkgILK3Pd4a6ltT_JJ6V97LpjsPaJCB4qFZLIGqkN1Ftn1hosI8qWXfVqlJ32ZjP0CexBveu6k5jHE6iBg30LCo3zGTY46VIKiS122H-al8B8N48zZwEGkz3zNZU/s1600/%25E5%25AF%25A6%25E4%25BD%259C+UART+%25E5%258A%259F%25E8%2583%25BD%25E4%25BD%25BF%25E7%2594%25A8+Attiny45+USI.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifzc0B6eScCIrIYF7KkgILK3Pd4a6ltT_JJ6V97LpjsPaJCB4qFZLIGqkN1Ftn1hosI8qWXfVqlJ32ZjP0CexBveu6k5jHE6iBg30LCo3zGTY46VIKiS122H-al8B8N48zZwEGkz3zNZU/s1600/%25E5%25AF%25A6%25E4%25BD%259C+UART+%25E5%258A%259F%25E8%2583%25BD%25E4%25BD%25BF%25E7%2594%25A8+Attiny45+USI.jpg&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;第二部份是一個 RS232 準位準換電路，Attiny45 所標示的的 Tx 與 Rx 分別接到 232 晶片的 pin11 和 pin12，由於輸出已經直接跳線到 D-Type 母接頭，因此在與電腦連接時並不需要特別購買 9-pin 的 RS232跳線，直接用一般的線就好。圖中所使用的晶片為 MAX232 和 HIN232，若你使用的晶片代號不一樣時，請查閱一下晶片手冊。對於簡單應用與測試來講這個線路很足夠了，不但簡單而且零件很容易取得，價錢又便宜！&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 class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;b&gt;修改：&lt;/b&gt;&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;工具：AVR Studio、AVR307程式碼、Attiny26 與 Attiny45 手冊&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 class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;請先用 AVR Studio 建立一個新的專案，專案建立的名稱與存放路徑隨你高興，這時你的專案中應該會有一個 &amp;lt;專案名稱&amp;gt;.c 的檔案在左側 &quot;Source Files&quot; 底下，我所設定的專案名稱為 &quot;UART_45_Test&quot;。&lt;/li&gt;
&lt;li&gt;複製 AVR307 裡面 &quot;main.c&quot; 裡的內容到 &quot;UART_45_Test.c&quot; 裡&lt;/li&gt;
&lt;li&gt;接著，複製 AVR307 範例程式中的 &quot;USI_UART.c&quot; 與 &quot;USI_UART_config.h&quot; 到專案目錄下並把這兩個檔案加入到專案檔中。&lt;/li&gt;
&lt;/ul&gt;設定好之後的專案檔畫面&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi64-Fnvd73K2rS4dzNt1ST9Tx5vWd2NqXjzOK6ui8-FWbfj3I_1H-qH2xZJzEv4550zcBk7Y_MN79c8PrYAhdBSqx4yi6I-BJo7sm11HTpWcAccM55ZoK8QM0VO96aW4PI_OsbDY-I1Rw/s1600/%25E5%25B0%2588%25E6%25A1%2588%25E6%25AA%2594.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi64-Fnvd73K2rS4dzNt1ST9Tx5vWd2NqXjzOK6ui8-FWbfj3I_1H-qH2xZJzEv4550zcBk7Y_MN79c8PrYAhdBSqx4yi6I-BJo7sm11HTpWcAccM55ZoK8QM0VO96aW4PI_OsbDY-I1Rw/s1600/%25E5%25B0%2588%25E6%25A1%2588%25E6%25AA%2594.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;/div&gt;&lt;div class=&quot;&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;選擇 Project/Configuration Options 在此頁面下做專案檔參數設定&lt;/li&gt;
&lt;/ul&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQknA3oMZ0bcBhFNN_RlzwBqd3IxlxB7b7zOgZ3IejtKKOiK2moYvsoRiA05B37RhHz2E-1w5qbp5YGAbFWopEFbHI-l0PYhu-pcgRjdZTWTqScKREcX-XUPz_MqtMs617War__E8D9QY/s1600/%25E5%25B0%2588%25E6%25A1%2588%25E6%25AA%2594%25E8%25A8%25AD%25E5%25AE%259A.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjQknA3oMZ0bcBhFNN_RlzwBqd3IxlxB7b7zOgZ3IejtKKOiK2moYvsoRiA05B37RhHz2E-1w5qbp5YGAbFWopEFbHI-l0PYhu-pcgRjdZTWTqScKREcX-XUPz_MqtMs617War__E8D9QY/s1600/%25E5%25B0%2588%25E6%25A1%2588%25E6%25AA%2594%25E8%25A8%25AD%25E5%25AE%259A.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;修改 &quot;UART_45_Test.c&quot; 程式碼，如下所示&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;&lt;script class=&quot;brush: js&quot; type=&quot;syntaxhighlighter&quot;&gt;
&lt;![CDATA[
/*-------------------------------------------------------------------
 *        Name: UART_45_Test.c
 *    Modifier: sakuyaki
 * Create Date: 2010-12-29
 * Description: Half Duplex UART Using the USI Module
 *    Chip: Attiny 45
      UART: 57600, 8, N, 1
-------------------------------------------------------------------*/
#include &quot;USI_UART_config.h&quot;
//-------------------------------------------- START OF GO_TO_SLEEP()
// void GO_TO_SLEEP()
// OS go into the idle mode
// MCUCR, SM1 = 0, SM1 = 0, SE = 1 (sleep enable)
//-------------------------------------------------------------------
void GO_TO_SLEEP()
 {
 // When the SM1..0 bits are written to 00, the SLEEP instruction makes the MCU enter
 // Idle mode, stopping the CPU but allowing the UART, Analog Comparator, ADC, USI,
 // Timer/Counters, Watchdog, and the interrupt system to continue operating. This sleep
 // mode basically halts clkCPU and clkFLASH, while allowing the other clocks to run.
 MCUCR = (1&lt;&lt;SE)|(0&lt;&lt;SM1)|(0&lt;&lt;SM0);  // Enable Sleepmode: Idle
 asm(&quot;sleep&quot;);
 }
//--------------------------------------------- END OF GO_TO_SLEEP()

int main()
 {
   unsigned char myString[] = &quot;\n\rYou just sent me: &quot;;
  
    
    unsigned char counter;
    
    USI_UART_Flush_Buffers();
    USI_UART_Initialise_Receiver();                                         // Initialisation for USI_UART receiver
    sei();                                                                  // Enable global interrupts
    
    for( ; ; )                                                              // Run forever
    {
        if( USI_UART_Data_In_Receive_Buffer() )
        {  
            for(counter = 0; counter &lt; 20; counter++)                       // Echo myString[]
            {
                USI_UART_Transmit_Byte( (unsigned int)myString[counter] );     
            }
            USI_UART_Transmit_Byte( USI_UART_Receive_Byte() );              // Echo the received character      
        }    
        GO_TO_SLEEP();                                                      // Sleep when waiting for next event
    }   

  return 0;
 }
//------------------------------------------------------END OF main()

]]&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;a href=&quot;https://docs.google.com/uc?id=0Bxe5gfcBt6fzY2RmZDZmZTYtNjViMi00MTM4LWFkMWMtNzEwNmNhMmYwM2Vi&amp;amp;export=download&amp;amp;authkey=CMGgmfsL&amp;amp;hl=en&quot;&gt;&quot;UART_45_Test.c&quot; 修改後的檔案&lt;/a&gt;&lt;br /&gt;
若與 AVR307 &quot;main.c&quot; 做比較，就可以發現到程式碼修改了晶片進入到 idle 模式的部份，標頭檔只加入 &quot;USI_UART_config.h&quot;，其餘的幾乎沒做變更。&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;修改 &quot;USI_UART_config.h&quot; 程式碼，如下所示&lt;/li&gt;
&lt;/ul&gt;&lt;script class=&quot;brush: js&quot; type=&quot;syntaxhighlighter&quot;&gt;
&lt;![CDATA[
/*****************************************************************************
*
* Copyright (C) 2003 Atmel Corporation
*
* File          : USI_UART_config.h
* Compiler      : AVR STUDIO V4.18
* Created       : 18.07.2002 by JLL
* Modified      : 12.29.2010 by SAKUYAKI
*
* Support mail  : avr@atmel.com
*
* AppNote       : AVR307 - Half duplex UART using the USI Interface
*
* Description   : Header file for USI_UART driver
*
*
****************************************************************************/
#include &lt;avr/io.h&gt;
#include &lt;avr/interrupt.h&gt;
//********** USI UART Defines **********//
#define SYSTEM_CLOCK              8000000
#define BAUDRATE                    57600  // this baud rate not setting CLK/8


#define TIMER_PRESCALER           1

#define UART_RX_BUFFER_SIZE        4     /* 2,4,8,16,32,64,128 or 256 bytes */
#define UART_TX_BUFFER_SIZE        4


//********** USI_UART Prototypes **********//

unsigned char Bit_Reverse( unsigned char );
void          USI_UART_Flush_Buffers( void );
void          USI_UART_Initialise_Receiver( void );
void          USI_UART_Initialise_Transmitter( void );
void          USI_UART_Transmit_Byte( unsigned char );
unsigned char USI_UART_Receive_Byte( void );
unsigned char USI_UART_Data_In_Receive_Buffer( void );
]]&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;a href=&quot;https://docs.google.com/uc?id=0Bxe5gfcBt6fzNzI4ODZlYTYtNmE1ZC00ZTRjLTlhYmItMzVjNWU5ZDVjYjY3&amp;amp;export=download&amp;amp;authkey=CM3H2coK&amp;amp;hl=en&quot;&gt;&quot;USI_UART_config.h&quot; 修改後的檔案&lt;/a&gt;&lt;br /&gt;
這個檔案只是新增兩個標頭檔 (&lt;avr io.h=&quot;&quot;&gt;, &lt;avr interrupt.h=&quot;&quot;&gt;) 宣告在此處，改變兩個常數定義 (SYSTEM_CLOCK = 8000000, BAUNRATE = 576000)，所以 UART 的設定為 &quot;576000, 8, N, 1&quot;，這個也是在設定超級終端機連線時的重要參數，不然會無法通訊的。&lt;/avr&gt;&lt;/avr&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;修改 &quot;USI_UART.c&quot;程式碼，如下所示&lt;/li&gt;
&lt;/ul&gt;&lt;script class=&quot;brush: js&quot; type=&quot;syntaxhighlighter&quot;&gt;
&lt;![CDATA[
/*****************************************************************************
*
* Copyright (C) 2003 Atmel Corporation
*
* File              : USI_UART.c
* Compiler          : AVR STUDIO 4.18
* Created           : 18.07.2002 by JLL
* Modified          : 29.12.2010 by SAKUYAKI
*
* Support mail      : avr@atmel.com
*
* Supported devices : ATtiny45
*
* Application Note  : AVR307 - Half duplex UART using the USI Interface
*
* Description       : Functions for USI_UART_receiver and USI_UART_transmitter.
*                     Uses Pin Change Interrupt to detect incomming signals.
*
* // Modified by a-lu on 2010.12.29
  USI UART Initialization - Transmitter
  When three-wire mode is selected, the direction of pin 1 on port B is set 
  to output, which in Three-wire mode is an open-drain output. An external 
  pull-up is therefore required.
  The interrupts required for transmission are enabled.
                   
                                     +5v
                  ATTINY45            |
           ------------------------   |
          | 1 (RESET)  (VCC)     8 |__|__ 
          | 2 (PB3)    (PB2/SCK) 7 |     |__[R (1K)]___
          | 3 (PB4)    (PB1/DO)  6 |___________________|___&gt;&gt; TxD 
    GND___| 4 (GND)    (PB0/DI)  5 |_______________________&lt;&lt; RxD
           ------------------------
  UART 57600, 8, N , 1

 How to start, Open Hyperterminal and setting as above value. 
 Press ANY characters, 
 you will see the string &quot;You just sent me: &quot; with char you just keyin. 
 example: keyin character &#39;G&#39;
  You just sent me: G


* Reference Website : 
*    http://www.avrfreaks.net/index.php?name=PNphpBB2&amp;file=viewtopic&amp;t=71294
*
****************************************************************************/
#include &quot;USI_UART_config.h&quot;


//********** USI UART Defines **********//

#define DATA_BITS                 8
#define START_BIT                 1
#define STOP_BIT                  1
#define HALF_FRAME                5

#define USI_COUNTER_MAX_COUNT     16
#define USI_COUNTER_SEED_TRANSMIT (USI_COUNTER_MAX_COUNT - HALF_FRAME)
#define INTERRUPT_STARTUP_DELAY   (0x11 / TIMER_PRESCALER)
#define TIMER0_SEED               (256 - ( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ))

#if ( (( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ) * 3/2) &gt; (256 - INTERRUPT_STARTUP_DELAY) )
    #define INITIAL_TIMER0_SEED       ( 256 - (( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ) * 1/2) )
    #define USI_COUNTER_SEED_RECEIVE  ( USI_COUNTER_MAX_COUNT - (START_BIT + DATA_BITS) )
#else
    #define INITIAL_TIMER0_SEED       ( 256 - (( (SYSTEM_CLOCK / BAUDRATE) / TIMER_PRESCALER ) * 3/2) )
    #define USI_COUNTER_SEED_RECEIVE  (USI_COUNTER_MAX_COUNT - DATA_BITS)
#endif

#define UART_RX_BUFFER_MASK ( UART_RX_BUFFER_SIZE - 1 )
#if ( UART_RX_BUFFER_SIZE &amp; UART_RX_BUFFER_MASK )
    #error RX buffer size is not a power of 2
#endif

#define UART_TX_BUFFER_MASK ( UART_TX_BUFFER_SIZE - 1 )
#if ( UART_TX_BUFFER_SIZE &amp; UART_TX_BUFFER_MASK )
    #error TX buffer size is not a power of 2
#endif

/* General defines */
#define TRUE                      1
#define FALSE                     0

//********** Static Variables **********//

// __no_init __regvar static unsigned char USI_UART_TxData @ 15;   // Tells the compiler to store the byte to be transmitted in registry.

register unsigned char USI_UART_TxData asm(&quot;r15&quot;);          // Tells the compiler to use Register 15 instead of SRAM
// static volatile unsigned char USI_UART_TxData;               // Or we can use this code instead of above mention

static unsigned char          UART_RxBuf[UART_RX_BUFFER_SIZE];  // UART buffers. Size is definable in the header file.
static volatile unsigned char UART_RxHead;
static volatile unsigned char UART_RxTail;
static unsigned char          UART_TxBuf[UART_TX_BUFFER_SIZE];
static volatile unsigned char UART_TxHead;
static volatile unsigned char UART_TxTail;

static volatile union USI_UART_status                           // Status byte holding flags.
{
    unsigned char status;
    struct
    {
        unsigned char ongoing_Transmission_From_Buffer:1;
        unsigned char ongoing_Transmission_Of_Package:1;
        unsigned char ongoing_Reception_Of_Package:1;
        unsigned char reception_Buffer_Overflow:1;
        unsigned char flag4:1;
        unsigned char flag5:1;
        unsigned char flag6:1;
        unsigned char flag7:1;
    };
} USI_UART_status = {0};


//********** USI_UART functions **********//

// Reverses the order of bits in a byte.
// I.e. MSB is swapped with LSB, etc.
unsigned char Bit_Reverse( unsigned char x )
{
    x = ((x &gt;&gt; 1) &amp; 0x55) | ((x &lt;&lt; 1) &amp; 0xaa);
    x = ((x &gt;&gt; 2) &amp; 0x33) | ((x &lt;&lt; 2) &amp; 0xcc);
    x = ((x &gt;&gt; 4) &amp; 0x0f) | ((x &lt;&lt; 4) &amp; 0xf0);
    return x;    
}

// Flush the UART buffers.
void USI_UART_Flush_Buffers( void )  
{  
    UART_RxTail = 0;
    UART_RxHead = 0;
    UART_TxTail = 0;
    UART_TxHead = 0;
}

// Initialise USI for UART transmission.
void USI_UART_Initialise_Transmitter( void )                              
{
    cli(); //__disable_interrupt();

    TCNT0  = 0x00;
  //TCCR0A = 0x00;
  TCCR0B = (0&lt;&lt;CS02)|(0&lt;&lt;CS01)|(1&lt;&lt;CS00);          // No Prescale
  GTCCR  = (1&lt;&lt;PSR0);                                       // Reset the prescaler
    TIFR   = (1&lt;&lt;TOV0);                                       // By Writing a logic one to clear Timer0 OVF interrupt flag.
    TIMSK |= (1&lt;&lt;TOIE0);                                      // Enable Timer0 OVF interrupt.
                                                                
    USICR  = (0&lt;&lt;USISIE)|(1&lt;&lt;USIOIE)|                         // Enable USI Counter OVF interrupt.
             (0&lt;&lt;USIWM1)|(1&lt;&lt;USIWM0)|                         // Select Three Wire mode.
             (0&lt;&lt;USICS1)|(1&lt;&lt;USICS0)|(0&lt;&lt;USICLK)|             // Select Timer0 OVER as USI Clock source.
             (0&lt;&lt;USITC);                                           
             
    USIDR  = 0xFF;                                            // Make sure MSB is &#39;1&#39; before enabling USI_DO.
    USISR  = 0xF0 |                                           // Clear all USI interrupt flags.
             0x0F;                                            // Preload the USI counter to generate interrupt at first USI clock.
    DDRB  |= (1&lt;&lt;PB1);                                        // Configure USI_DO as output.
                  
    USI_UART_status.ongoing_Transmission_From_Buffer = TRUE;
                  
    sei();//__enable_interrupt();
}

// Initialise USI for UART reception.
// Note that this function only enables pinchange interrupt on the USI Data Input pin.
// The USI is configured to read data within the pinchange interrupt.
void USI_UART_Initialise_Receiver( void )        
{  
    PORTB |=   (1&lt;&lt;PB3)|(1&lt;&lt;PB2)|(1&lt;&lt;PB1)|(1&lt;&lt;PB0);         // Enable pull up on USI DO, DI and SCK pins. (And PB3 because of pin change interrupt)   
    DDRB  &amp;= ~((1&lt;&lt;PB3)|(1&lt;&lt;PB2)|(1&lt;&lt;PB1)|(1&lt;&lt;PB0));        // Set USI DI, DO and SCK pins as inputs.  
    USICR  =  0;                                            // Disable USI.
    GIFR   =  (1&lt;&lt;PCIF);                                    // Clear pin change interrupt flag.
    GIMSK |=  (1&lt;&lt;PCIE);                                    // Enable pin change interrupt for PCINT0{PB3:0(Attiny26)}
    PCMSK  =  (1&lt;&lt;PCINT0);                 // ATTINY45 PIN CHANGE MSK REGISTER PB0:0(PCINT0).
}

// Puts data in the transmission buffer, after reverseing the bits in the byte.
// Initiates the transmission rutines if not already started.
void USI_UART_Transmit_Byte( unsigned char data )          
{
    unsigned char tmphead;

    tmphead = ( UART_TxHead + 1 ) &amp; UART_TX_BUFFER_MASK;        // Calculate buffer index.
    while ( tmphead == UART_TxTail );                           // Wait for free space in buffer.
    UART_TxBuf[tmphead] = Bit_Reverse(data);                    // Reverse the order of the bits in the data byte and store data in buffer.
    UART_TxHead = tmphead;                                      // Store new index.
    
    if ( !USI_UART_status.ongoing_Transmission_From_Buffer )    // Start transmission from buffer (if not already started).
    {
        while ( USI_UART_status.ongoing_Reception_Of_Package ); // Wait for USI to finsh reading incoming data.
        USI_UART_Initialise_Transmitter();              
    }
}

// Returns a byte from the receive buffer. Waits if buffer is empty.
unsigned char USI_UART_Receive_Byte( void )                
{
    unsigned char tmptail;
        
    while ( UART_RxHead == UART_RxTail );                 // Wait for incomming data 
    tmptail = ( UART_RxTail + 1 ) &amp; UART_RX_BUFFER_MASK;  // Calculate buffer index 
    UART_RxTail = tmptail;                                // Store new index 
    return Bit_Reverse(UART_RxBuf[tmptail]);              // Reverse the order of the bits in the data byte before it returns data from the buffer.
}

// Check if there is data in the receive buffer.
unsigned char USI_UART_Data_In_Receive_Buffer( void )        
{
    return ( UART_RxHead != UART_RxTail );                // Return 0 (FALSE) if the receive buffer is empty.
}


// ********** Interrupt Handlers ********** //

// The pin change interrupt is used to detect USI_UART reseption.
// It is here the USI is configured to sample the UART signal.
SIGNAL (SIG_PIN_CHANGE)
{                                                                    
    if (!( PINB &amp; (1&lt;&lt;PB0) ))                                     // If the USI DI pin is low, then it is likely that it
    {                                                             //  was this pin that generated the pin change interrupt.
        TCNT0  = INTERRUPT_STARTUP_DELAY + INITIAL_TIMER0_SEED;   // Plant TIMER0 seed to match baudrate (incl interrupt start up time.).
    //TCCR0A = 0x00;
        TCCR0B  = (0&lt;&lt;CS02)|(0&lt;&lt;CS01)|(1&lt;&lt;CS00);              // start Timer0.
       GTCCR  = (1&lt;&lt;PSR0);                                       // Reset the prescaler
    TIFR   = (1&lt;&lt;TOV0);                                       // Clear Timer0 OVF interrupt flag.
        TIMSK |= (1&lt;&lt;TOIE0);                                      // Enable Timer0 OVF interrupt.
                                                                    
        USICR  = (0&lt;&lt;USISIE)|(1&lt;&lt;USIOIE)|                         // Enable USI Counter OVF interrupt.
                 (0&lt;&lt;USIWM1)|(1&lt;&lt;USIWM0)|                         // Select Three Wire mode.
                 (0&lt;&lt;USICS1)|(1&lt;&lt;USICS0)|(0&lt;&lt;USICLK)|             // Select Timer0 OVER as USI Clock source.
                 (0&lt;&lt;USITC);                                           
                                                                  // Note that enabling the USI will also disable the pin change interrupt.
        USISR  = 0xF0 |                                           // Clear all USI interrupt flags.
                 USI_COUNTER_SEED_RECEIVE;                        // Preload the USI counter to generate interrupt.
                                                                  
        GIMSK &amp;=  ~(1&lt;&lt;PCIE);                                     // Disable pin change interrupt for PCINT0{PB3:0(Attiny26)} 
    PCMSK &amp;=  ~(1&lt;&lt;PCINT0);                   // ATTINY45 PIN CHANGE MSK REGISTER PB0:0(PCINT0).
        
        USI_UART_status.ongoing_Reception_Of_Package = TRUE;             
    }
}

// The USI Counter Overflow interrupt is used for moving data between memmory and the USI data register.
// The interrupt is used for both transmission and reception.
SIGNAL (SIG_USI_OVERFLOW)                              
{
    unsigned char tmphead,tmptail;
    
    // Check if we are running in Transmit mode.
    if( USI_UART_status.ongoing_Transmission_From_Buffer )      
    {
        // If ongoing transmission, then send second half of transmit data.
        if( USI_UART_status.ongoing_Transmission_Of_Package )   
        {                                   
            USI_UART_status.ongoing_Transmission_Of_Package = FALSE;    // Clear on-going package transmission flag.
            
            USISR = 0xF0 | (USI_COUNTER_SEED_TRANSMIT);                 // Load USI Counter seed and clear all USI flags.
            USIDR = (USI_UART_TxData &lt;&lt; 3) | 0x07;                      // Reload the USIDR with the rest of the data and a stop-bit.
        }
        // Else start sendinbg more data or leave transmit mode.
        else
        {
            // If there is data in the transmit buffer, then send first half of data.
            if ( UART_TxHead != UART_TxTail )                           
            {
                USI_UART_status.ongoing_Transmission_Of_Package = TRUE; // Set on-going package transmission flag.
                
                tmptail = ( UART_TxTail + 1 ) &amp; UART_TX_BUFFER_MASK;    // Calculate buffer index.
                UART_TxTail = tmptail;                                  // Store new index.            
                USI_UART_TxData = UART_TxBuf[tmptail];                  // Read out the data that is to be sent. Note that the data must be bit reversed before sent.
                                                                        // The bit reversing is moved to the application section to save time within the interrupt.
                USISR  = 0xF0 | (USI_COUNTER_SEED_TRANSMIT);            // Load USI Counter seed and clear all USI flags.
                USIDR  = (USI_UART_TxData &gt;&gt; 2) | 0x80;                 // Copy (initial high state,) start-bit and 6 LSB of original data (6 MSB
                                                                        //  of bit of bit reversed data).                
            }
            // Else enter receive mode.
            else
            {
                USI_UART_status.ongoing_Transmission_From_Buffer = FALSE; 
                
        // TCCR0A = 0x00;
                TCCR0B  = (0&lt;&lt;CS02)|(0&lt;&lt;CS01)|(0&lt;&lt;CS00);                // Stop Timer0.
               GTCCR  = (1&lt;&lt;PSR0);                                       // Reset the prescaler
        PORTB |=   (1&lt;&lt;PB3)|(1&lt;&lt;PB2)|(1&lt;&lt;PB1)|(1&lt;&lt;PB0);         // Enable pull up on USI DO, DI and SCK pins. (And PB3 because of pin change interrupt)   
                DDRB  &amp;= ~((1&lt;&lt;PB3)|(1&lt;&lt;PB2)|(1&lt;&lt;PB1)|(1&lt;&lt;PB0));        // Set USI DI, DO and SCK pins as inputs.  
                USICR  =  0;                                            // Disable USI.
                GIFR   =  (1&lt;&lt;PCIF);                                    // Clear pin change interrupt flag.
                GIMSK |=  (1&lt;&lt;PCIE);                                    // Enable pin change interrupt for PCINT0{PB3:0(Attiny26)}
                PCMSK  =  (1&lt;&lt;PCINT0);                 // ATTINY45 PIN CHANGE MSK REGISTER PB0:0(PCINT0).
            }
        }
    }
    
    // Else running in receive mode.
    else                                                                
    {              
        USI_UART_status.ongoing_Reception_Of_Package = FALSE;           

        tmphead     = ( UART_RxHead + 1 ) &amp; UART_RX_BUFFER_MASK;        // Calculate buffer index.
        
        if ( tmphead == UART_RxTail )                                   // If buffer is full trash data and set buffer full flag.
        {
            USI_UART_status.reception_Buffer_Overflow = TRUE;           // Store status to take actions elsewhere in the application code
        }
        else                                                            // If there is space in the buffer then store the data.
        {
            UART_RxHead = tmphead;                                      // Store new index.
            UART_RxBuf[tmphead] = USIDR;                                // Store received data in buffer. Note that the data must be bit reversed before used. 
        }                                                               // The bit reversing is moved to the application section to save time within the interrupt.
                                                                
        TCCR0B = (0&lt;&lt;CS02)|(0&lt;&lt;CS01)|(0&lt;&lt;CS00);                 // Stop Timer0.
      GTCCR  = (1&lt;&lt;PSR0);                                       // Reset the prescaler
        PORTB |=   (1&lt;&lt;PB3)|(1&lt;&lt;PB2)|(1&lt;&lt;PB1)|(1&lt;&lt;PB0);         // Enable pull up on USI DO, DI and SCK pins. (And PB3 because of pin change interrupt)   
        DDRB  &amp;= ~((1&lt;&lt;PB3)|(1&lt;&lt;PB2)|(1&lt;&lt;PB1)|(1&lt;&lt;PB0));        // Set USI DI, DO and SCK pins as inputs.  
        USICR  =  0;                                            // Disable USI.
        GIFR   =  (1&lt;&lt;PCIF);                                    // Clear pin change interrupt flag.
        GIMSK |=  (1&lt;&lt;PCIE);                                    // Enable pin change interrupt for PCINT0{PB3:0(Attiny26)}
        PCMSK  =  (1&lt;&lt;PCINT0);                 // ATTINY45 PIN CHANGE MSK REGISTER PB0:0(PCINT0).
    }
    
}

// Timer0 Overflow interrupt is used to trigger the sampling of signals on the USI ports.
SIGNAL (TIMER0_OVF_vect)
{
    TCNT0 += TIMER0_SEED;                   // Reload the timer,
                                            // current count is added for timing correction.
}
]&gt;
&lt;/script&gt;&lt;br /&gt;
&lt;a href=&quot;https://docs.google.com/uc?id=0Bxe5gfcBt6fzMTI5OGQ4NzAtNzVhZC00OGY2LThiMTctZDhjNjRmNTQ1ODQ1&amp;amp;export=download&amp;amp;authkey=CNem75cD&amp;amp;hl=en&quot;&gt;&quot;USI_UART.c&quot; 修改後的檔案&lt;/a&gt;&lt;br /&gt;
主要是修改 IAR 與 AVR Studio 不相容的語法，還有修改 ATtiny26 暫存器設定到 ATtiny45，讓 AVR Studio 編譯時可以通過。這裡有兩個檔案的&lt;a href=&quot;https://docs.google.com/uc?id=0Bxe5gfcBt6fzODliZGY5MzctMjc5OS00N2U4LWIxMWItYjg3OWFjYTFmZmYw&amp;amp;export=download&amp;amp;authkey=CKCpyLsK&amp;amp;hl=en&quot;&gt;比較結果&lt;/a&gt;，建議使用&amp;nbsp;&lt;a href=&quot;http://www.pspad.com/en/&quot;&gt;PSPad&lt;/a&gt;&amp;nbsp;觀看，不然會有格式對齊的問題。&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;OK！現在可以編譯產生 HEX 檔，然後將 HEX 檔燒錄進 ATtiny45 晶片中 。&lt;/li&gt;
&lt;li&gt;如線路圖將線路接好&lt;/li&gt;
&lt;li&gt;設定超級終端機 57600, 8, N, 1 (57600bps, 8 data-bit, no parity check, 1 stop-bit)。&lt;/li&gt;
&lt;li&gt;開電測試&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;這時在超級終端機視窗按下任意字元，例如 &quot;G&quot;，視窗會出現&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space: pre;&quot;&gt;  &lt;/span&gt;You just sent me: G&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;這就是修改之後可以用在 ATtiny45 晶片的 UART 程式，而且可以用在沒有 UART 但是有 USI module 的 AVR &amp;nbsp;晶片上，然後實現或是擴充 UART 的功能。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;有時候我們必須去使用別人已經寫過的程式來加速實現自己所要完成的東西，雖然在看起來是種抄襲，但是當我們學習至熟悉前，不是都是經由抄襲別人過去的經驗，傳承之後加以咀嚼再慢慢消化變成成長的養分，咀嚼的越夠越容易被消化！就像是把別人寫的程式看懂、了解其寫作 key point 以及功能實現的方法，這樣自然比你自己瞎子摸象般的學習快的多了，您說是吧！&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;畢竟要看懂別人寫的程式，自己也要下過功夫！&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;下一個主題就是利用這邊所實現成功的 ATtiny45 UART 的功能，加入CDS與溫度監控的 ADC 轉換功能，然後將轉換數據輸出到超級終端機裡。&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/6326198087084311715/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2011/03/uart-attiny45-usi.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/6326198087084311715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/6326198087084311715'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2011/03/uart-attiny45-usi.html' title='實作 UART 功能使用 Attiny45 USI'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifzc0B6eScCIrIYF7KkgILK3Pd4a6ltT_JJ6V97LpjsPaJCB4qFZLIGqkN1Ftn1hosI8qWXfVqlJ32ZjP0CexBveu6k5jHE6iBg30LCo3zGTY46VIKiS122H-al8B8N48zZwEGkz3zNZU/s72-c/%25E5%25AF%25A6%25E4%25BD%259C+UART+%25E5%258A%259F%25E8%2583%25BD%25E4%25BD%25BF%25E7%2594%25A8+Attiny45+USI.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-6570217962826786057</id><published>2011-02-27T17:25:00.002+08:00</published><updated>2012-09-06T09:59:51.942+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LED"/><category scheme="http://www.blogger.com/atom/ns#" term="電源"/><title type='text'>利用家中廢棄的省電燈泡，自製 LED 燈泡 (使用阻容降壓)</title><content type='html'>還記得 &lt;a href=&quot;http://a-luroom.blogspot.com/2011/02/led.html&quot;&gt;&quot;淺談 LED 驅動連接方式&quot;&lt;/a&gt; 裡所談的，現在我們要利用其中的 LED 並聯連接方式來實際動手做一個 LED 燈炮，但這可不是測試喔！是真的可以用的家用燈泡，利用家中廢棄的省電燈泡所做的一個 AC &amp;nbsp;電源驅動的 LED 燈，來取代那一顆壞掉的省電燈泡！&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;硬體線路：&lt;/b&gt;&lt;br /&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td valign=&quot;top&quot; width=&quot;390&quot;&gt;硬體線路如右所示。R1 與 C1 是阻容降壓主要的元件，決定整個電路所輸出的電流值；D1 ~ D10 代表所使用的白光 LED (當然，可以使用更多的白光 LED，只要了解接下來的計算方式)；R2 是限流電阻。&lt;br /&gt;
&lt;br /&gt;
在右圖中分別有兩個量測器，上方為顯示電路中通過 LED 的電流值，下方為顯示分壓後的交流電壓值；這兩個量測器可作為驗證計算的結果值。&lt;br /&gt;
&lt;br /&gt;
在這個實際應用的線路，使用 AC 110 V (60 Hz)，白光 LED 順向電壓 V&lt;sub&gt;F&lt;/sub&gt;&amp;nbsp;= 3.2 V，LED 限制電流為 10 mA。&lt;/td&gt; &lt;td width=&quot;310&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlpHUEy42Xf7WBQnUiZFi_oCl2NPvCKH93n8_Fa7_Bgut0UJaGVXRqTXGI74HA22GqAB25mhLmo7swzGx2OkT8KT9D8HQ8hzfnF9xDedsjr0q17FB7bVQpQhzoImrPn_Ecz3rIr3eO85w/s1600/RC-Voltage-Reducing_wo-value.jpg&quot; imageanchor=&quot;1&quot; style=&quot;float: left; margin: 5px 10px 5px 5px;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;320&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlpHUEy42Xf7WBQnUiZFi_oCl2NPvCKH93n8_Fa7_Bgut0UJaGVXRqTXGI74HA22GqAB25mhLmo7swzGx2OkT8KT9D8HQ8hzfnF9xDedsjr0q17FB7bVQpQhzoImrPn_Ecz3rIr3eO85w/s320/RC-Voltage-Reducing_wo-value.jpg&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlpHUEy42Xf7WBQnUiZFi_oCl2NPvCKH93n8_Fa7_Bgut0UJaGVXRqTXGI74HA22GqAB25mhLmo7swzGx2OkT8KT9D8HQ8hzfnF9xDedsjr0q17FB7bVQpQhzoImrPn_Ecz3rIr3eO85w/s1600/RC-Voltage-Reducing_wo-value.jpg&quot; imageanchor=&quot;1&quot; style=&quot;float: left; margin: 5px 10px 5px 5px;&quot;&gt;&lt;/a&gt;&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
這電路中比較重要的是電容 C1 與 電阻 R2 的計算，我們必須計算出最小的需求值。&lt;br /&gt;
&lt;b&gt;&lt;/b&gt;&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;br /&gt;
&lt;b&gt;電路計算：&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
C1 的容抗 X&lt;sub&gt;C1&lt;/sub&gt; = 1 / (2 * pi * f * C)&lt;br /&gt;
&lt;br /&gt;
流過 C1 的充電電流 I&lt;sub&gt;C1&lt;/sub&gt; = U /&amp;nbsp;X&lt;sub&gt;C&lt;/sub&gt;；其中 U = 交流電壓 (110 V)&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
I&lt;sub&gt;C1&lt;/sub&gt;&amp;nbsp;= U /&amp;nbsp;X&lt;sub&gt;C1&amp;nbsp;&lt;/sub&gt; =&amp;nbsp;2 * pi * f * C * U = 2 * 3.14 * 60 * C * 110 = 41469 * C ------ (1)&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
由 (1) 式，所選擇的電容必須要使得所計算出來的&amp;nbsp;I&lt;sub&gt;C1&amp;nbsp;&lt;/sub&gt;值大於 10 mA。&lt;br /&gt;
&lt;br /&gt;
R1 電阻是用來泄放 C1 電容上的殘存電荷，避免人員在維修時碰觸到電容金屬部份產生觸電的可能。泄放電阻 R1 的阻值與 C1 電容量有關，電容容量越大，儲存的電荷越大，泄放電阻就需選擇阻值小一點；泄放電阻的經驗資料如下表所示。&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;
&lt;tr align=&quot;center&quot;&gt;&lt;td align=&quot;center&quot; width=&quot;120&quot;&gt;&lt;b&gt;C1 (uF)&lt;/b&gt;&lt;/td&gt;&lt;td width=&quot;80&quot;&gt;0.47&lt;/td&gt;&lt;td width=&quot;80&quot;&gt;0.68&lt;/td&gt;&lt;td width=&quot;80&quot;&gt;1&lt;/td&gt;&lt;td width=&quot;80&quot;&gt;1.05&lt;/td&gt;&lt;td width=&quot;80&quot;&gt;2&lt;/td&gt;&lt;/tr&gt;
&lt;tr align=&quot;center&quot;&gt;&lt;td width=&quot;120&quot;&gt;&lt;b&gt;R1 (K OHMS)&lt;/b&gt;&lt;/td&gt;&lt;td width=&quot;80&quot;&gt;1000&lt;/td&gt;&lt;td width=&quot;80&quot;&gt;750&lt;/td&gt;&lt;td width=&quot;80&quot;&gt;510&lt;/td&gt;&lt;td width=&quot;80&quot;&gt;360&lt;/td&gt;&lt;td width=&quot;80&quot;&gt;200~300&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;br /&gt;
R2 電阻是用來限制流過 LED 的電流，由於所要求的電流為 10 mA，故&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
R2 = (110 - (3.2 x 5)) &amp;nbsp;/ 10 mA = 9.4 K OHMS&lt;/div&gt;
&lt;div style=&quot;text-align: center;&quot;&gt;
P&lt;sub&gt;R2&lt;/sub&gt; = I x V = 10 mA x (110 - (3.2 x 5)) = 940 mW&lt;/div&gt;
只用 5 顆 LED 做計算是因為交流電壓每一週期只會導通一組 LED於上半週或是下半週。&lt;br /&gt;
&lt;br /&gt;
計算出所需要的電容與電阻值後，接下來就是選擇適合的電子零件使用，選擇手邊或是大於計算值的電子零件即可，不一定要跟我選的一樣。&lt;br /&gt;
&lt;br /&gt;
如下圖，由左至右：C1 選擇 1uF 耐壓400V (105K / 400JS)、R1 選擇 560k (綠藍黃) / 1w、R2 選擇 10k(棕黑橙) / 2 w。&lt;br /&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRuVqbifl7vdXInPCmS4UdX4-ndg3m-_CkDb1lu7t-tfkqVEVZb0A4y-LKLAQWA47q65MVMInWGLiOW27BOZGEGTZifDoTf0qcD7QxIUosIh9oySv31oLmsLux107PEyCAr34SmtSyAFE/s1600/DSC01198.JPG&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiRuVqbifl7vdXInPCmS4UdX4-ndg3m-_CkDb1lu7t-tfkqVEVZb0A4y-LKLAQWA47q65MVMInWGLiOW27BOZGEGTZifDoTf0qcD7QxIUosIh9oySv31oLmsLux107PEyCAr34SmtSyAFE/s640/DSC01198.JPG&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;b&gt;動手作：&lt;/b&gt;&lt;br /&gt;
下面只是一個利用廢棄省電燈泡改裝製作 LED 燈的例子，主要的零件就是上面所提到的，在這裡只是提供我做的方式而已，如何將整個電路裝上燈泡座就見仁見智了。&lt;br /&gt;
&lt;br /&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz79Pz6Vf-KEzHy8AizEIdh8CwyYfRY96X2ZH3GEwiDstmxm70C-Gv9HYKtVTuWYAU9MkI5prCWmLEqcFHPJ8SE9xBgqhdBT6JLEClxmnDyyZw2yewHLtUVvZo7ES5j91_BsFqeYwHRhA/s1600/20101113452.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgz79Pz6Vf-KEzHy8AizEIdh8CwyYfRY96X2ZH3GEwiDstmxm70C-Gv9HYKtVTuWYAU9MkI5prCWmLEqcFHPJ8SE9xBgqhdBT6JLEClxmnDyyZw2yewHLtUVvZo7ES5j91_BsFqeYwHRhA/s320/20101113452.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 1：&lt;br /&gt;
將省電燈泡上下分開 (用一字起子或是剪刀在燈泡上下結合處扳一扳就可以拆掉)，拉出裡面的電路板，只要留下燈泡座 AC 電源與電路板連接的那兩條線，然後將其延長(記得在焊接處加上熱縮套管)。&lt;br /&gt;
&lt;br /&gt;
準備電路板，焊上 C1 與 R1 並連接上 AC 電源的其中一條(火線)，另一條先不用。&lt;br /&gt;
&lt;br /&gt;
照片中的圓形洞洞板是在電子零件行買的，你也可以自行剪裁。&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDjMEE3fEU4J0mq6ODsm6usJja8yv-Wcy7QMOlmPb6hibtJyZMe3wZmM_WCNdpC1r0MycUjZOYAHXkLr4xkfh99FMDLOSABHLVgq4cIE_Js78KPTD8xRWbCZXk_5uEIlkJIEp1nLZGnqE/s1600/20101113453.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;400&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgDjMEE3fEU4J0mq6ODsm6usJja8yv-Wcy7QMOlmPb6hibtJyZMe3wZmM_WCNdpC1r0MycUjZOYAHXkLr4xkfh99FMDLOSABHLVgq4cIE_Js78KPTD8xRWbCZXk_5uEIlkJIEp1nLZGnqE/s400/20101113453.jpg&quot; width=&quot;300&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 1-1：&lt;br /&gt;
使用排針調整底層與上層 LED 的間距。排針除了調整上下層間距之外還將另一端的 AC 連接線引導到上層 LED。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_W3upLFgyRIRNibPO7R2jzfnm9wxxffsJfV8Qydh3wqykssDzcn8uzxzOfJMuv97DSxI532LnG54PVW-LFWwlQeczb1_ZJuasPIunRySB8MUILWbrP1hdz-SrwmYUHWdSrWXo4MeR2ac/s1600/20101113455.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_W3upLFgyRIRNibPO7R2jzfnm9wxxffsJfV8Qydh3wqykssDzcn8uzxzOfJMuv97DSxI532LnG54PVW-LFWwlQeczb1_ZJuasPIunRySB8MUILWbrP1hdz-SrwmYUHWdSrWXo4MeR2ac/s320/20101113455.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 1-2：&lt;br /&gt;
重複調整排針，直到兩個電路板可以放入燈座中。&lt;br /&gt;
&lt;br /&gt;
左圖中的藍白線就是要連接到上層的線，也就是電路圖中接地的符號線 (地線)。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0TAfeODGO5OTNT_yLxixLS17i4zVMxjKvXpLY_hkY9q_XoECyvttHIsW_Y4B_Oc11K26W3_NWck-DO-bCJdP3hWgwVHI8DmxDd4xPpF7r2veKLidS3z5Z9SZDvKCxC1TB5JBac5AJA0I/s1600/20101113456.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi0TAfeODGO5OTNT_yLxixLS17i4zVMxjKvXpLY_hkY9q_XoECyvttHIsW_Y4B_Oc11K26W3_NWck-DO-bCJdP3hWgwVHI8DmxDd4xPpF7r2veKLidS3z5Z9SZDvKCxC1TB5JBac5AJA0I/s320/20101113456.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;
&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 1-3：&lt;br /&gt;
右圖是調整之後，剛好可以放入燈座裡。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU19oaU2bS1f5XhSmAQAj5qFsMpHBRh4kfYgzwjbjsE6In25HyLtp0qcYCbPff_ldCg7mJic9vJ0_W86FPVFHKoQT0hB8gtOQWlHkYQqZQ3L5ihPmQj3ev2bXWNTZoXTEYE22HQwCI9ew/s1600/20101113457.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgU19oaU2bS1f5XhSmAQAj5qFsMpHBRh4kfYgzwjbjsE6In25HyLtp0qcYCbPff_ldCg7mJic9vJ0_W86FPVFHKoQT0hB8gtOQWlHkYQqZQ3L5ihPmQj3ev2bXWNTZoXTEYE22HQwCI9ew/s320/20101113457.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;&lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 2：&lt;br /&gt;
在燈座與在上層電路板固定孔位處劃線標記，然後用剪刀在兩相對處挖兩個洞 (固定電路板在燈座上用)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWqcarClU_RFTPNhVCOUqfq2mSf_U6nsLBPzlgM2YHglusyB0jnn7acUVlIqHz5pC4aOvRBDjPuFhGoihuT-cLnuYyz9oifmNXqGh8RAAALvoXk5XrDuLrxhFIKGrD57b9J24kPbCQAsk/s1600/20101113458.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiWqcarClU_RFTPNhVCOUqfq2mSf_U6nsLBPzlgM2YHglusyB0jnn7acUVlIqHz5pC4aOvRBDjPuFhGoihuT-cLnuYyz9oifmNXqGh8RAAALvoXk5XrDuLrxhFIKGrD57b9J24kPbCQAsk/s320/20101113458.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 2-1：&lt;br /&gt;
固定孔位的完成圖 (燈座的材質非常容易加工，不需要鑽頭，只要用剪刀挖個幾下馬上就可以完成)。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD7aeg6-RIBR-Ddy4UMnffziAF6MAnWrVN-Nk0bR5n2hsoMgqhISkRdDxCU-sGSfDgIxVPx1MTXdQol8K6Z5H-mgS2zINQE-tOJ9CKir9oHsrnc-5BLLxucR3p-K-8lcPlPreEZ2_CzvQ/s1600/20101113459.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjD7aeg6-RIBR-Ddy4UMnffziAF6MAnWrVN-Nk0bR5n2hsoMgqhISkRdDxCU-sGSfDgIxVPx1MTXdQol8K6Z5H-mgS2zINQE-tOJ9CKir9oHsrnc-5BLLxucR3p-K-8lcPlPreEZ2_CzvQ/s320/20101113459.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 3：&lt;br /&gt;
在上層電路板焊上 10 顆 LED 燈和 R2 限流電阻。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvUKqmnN18cZEp5K2Bxhupzc7pzEv7BDtuTeOdFRuz7RtUtFmCcHcagkgf5lP5tMqT4qtRyfBJYGyZFSsMDuy5hdydcS0NZNRoB5h9gDK93C59WJuxXSa1UaKSe7YhfIlNPB5Ew_TTc8c/s1600/20101113460.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvUKqmnN18cZEp5K2Bxhupzc7pzEv7BDtuTeOdFRuz7RtUtFmCcHcagkgf5lP5tMqT4qtRyfBJYGyZFSsMDuy5hdydcS0NZNRoB5h9gDK93C59WJuxXSa1UaKSe7YhfIlNPB5Ew_TTc8c/s320/20101113460.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 4：&lt;br /&gt;
準備結合。&lt;br /&gt;
&lt;br /&gt;
將排針彎曲加強上下層板的固定。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcIAlzyhLSZTH4UNlgPRwlFO8MJ6_LJMDmUp5eN8Q4x6mN0bRpa0y_sRaI_UqWzr8kfsQ9AaHw7d3VjRPSvjLBVnZiTva6ipE_4dsB62SHirw7bbW3ZZ1dUrY9LhMhTEhFaopfnJTUh5g/s1600/20101113461.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhcIAlzyhLSZTH4UNlgPRwlFO8MJ6_LJMDmUp5eN8Q4x6mN0bRpa0y_sRaI_UqWzr8kfsQ9AaHw7d3VjRPSvjLBVnZiTva6ipE_4dsB62SHirw7bbW3ZZ1dUrY9LhMhTEhFaopfnJTUh5g/s320/20101113461.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 5：&lt;br /&gt;
裝上 LED 電路板並固定他在燈座上。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhstkcssDyh07gxNRh6R2hijdnGEEdhaB-QNGuD755MoatkhKPBdoJazk38Ow4VswhbVRuPw1_18c4x-qiwN4ZaD0WXKqDDH5Mh5eJMIBSDLvf1a5miSjATwVrf6KkJKG1Ktn8Zn4QWzPY/s1600/20101113462.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhstkcssDyh07gxNRh6R2hijdnGEEdhaB-QNGuD755MoatkhKPBdoJazk38Ow4VswhbVRuPw1_18c4x-qiwN4ZaD0WXKqDDH5Mh5eJMIBSDLvf1a5miSjATwVrf6KkJKG1Ktn8Zn4QWzPY/s320/20101113462.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;完成圖&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHTWdsntuo64vmZLqvfieZNTzizEexqTKkR1IX7woyU5V3LAFfYzUGLZKvFCwpz6MK3rW39kvTGZi771_4bwliyQp9synDkjpiTzbBOMvIOFLcQGpvRflUuMEUu1NDDRbw7ej-KgAL7OM/s1600/20101113463.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhHTWdsntuo64vmZLqvfieZNTzizEexqTKkR1IX7woyU5V3LAFfYzUGLZKvFCwpz6MK3rW39kvTGZi771_4bwliyQp9synDkjpiTzbBOMvIOFLcQGpvRflUuMEUu1NDDRbw7ej-KgAL7OM/s320/20101113463.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 6：&lt;br /&gt;
實際裝上燈具試試。&lt;br /&gt;
&lt;br /&gt;
你應該看到 LED 燈在未開點前已經有一點為亮，因為我沒特別上燈具去量火線與地線，而直接使用插頭測試時是特別分交流電的火線與地線，是沒有這種情形的，所以請各位自行注意，(若不特別去分，有 50% 的機率會接對)。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgys9AEMY1X3XYh1Sq0eDveQPO7cfn-cN0ppXKIJ5xkxEEnB_nferl3LZuq70OeiCLvSWEEg6fVOyiG5MVve_3L4vfnSYluFJX8yAphyphenhyphenhFu-PRyBJDWgbahC1RbW8LI4KVJcmTdKxZTzEM/s1600/20101113464.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;240&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgys9AEMY1X3XYh1Sq0eDveQPO7cfn-cN0ppXKIJ5xkxEEnB_nferl3LZuq70OeiCLvSWEEg6fVOyiG5MVve_3L4vfnSYluFJX8yAphyphenhyphenhFu-PRyBJDWgbahC1RbW8LI4KVJcmTdKxZTzEM/s320/20101113464.jpg&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;開燈測試，白光真的很亮！&lt;br /&gt;
&lt;br /&gt;
我所使用的 LED 燈是聚光性的，角度在 25-30 度左右，直線指向較好；你可以使用其他角度大的試試，效果應該會有所不同。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td width=&quot;330&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW42lsu19A4PVdEZVkgP_T_mKK-RprRQRYRz1hcBEEQkRSdeHPStK5gf7xKEWSRw-3tPxrOulDri2Mwk6noi6WCrUfPV2XavjGcJfg1miSvSfN-gOtMNYhv19Zs_xLjtqooouT1FsynJc/s1600/20101113465.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;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW42lsu19A4PVdEZVkgP_T_mKK-RprRQRYRz1hcBEEQkRSdeHPStK5gf7xKEWSRw-3tPxrOulDri2Mwk6noi6WCrUfPV2XavjGcJfg1miSvSfN-gOtMNYhv19Zs_xLjtqooouT1FsynJc/s320/20101113465.jpg&quot; width=&quot;240&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;370&quot;&gt;step 7：&lt;br /&gt;
開燈測試之後，最後一個步驟就是調整每一顆 LED 的投射方向，讓它可以平均的發光 (擴散)。&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
這就是利用簡單的阻容降壓電路所做的 LED 燈，這是一個非隔離電路而且沒有加入整流或濾波的電子元件，對電源設計有興趣的可以上網找關於阻容降壓 (大陸稱為電容降壓) 的文件看看。&lt;br /&gt;
&lt;br /&gt;
&lt;div&gt;
如果你有利用其他方式來做出這個 LED 燈，歡迎提供友情連結給我。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/6570217962826786057/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2011/02/led_27.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/6570217962826786057'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/6570217962826786057'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2011/02/led_27.html' title='利用家中廢棄的省電燈泡，自製 LED 燈泡 (使用阻容降壓)'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlpHUEy42Xf7WBQnUiZFi_oCl2NPvCKH93n8_Fa7_Bgut0UJaGVXRqTXGI74HA22GqAB25mhLmo7swzGx2OkT8KT9D8HQ8hzfnF9xDedsjr0q17FB7bVQpQhzoImrPn_Ecz3rIr3eO85w/s72-c/RC-Voltage-Reducing_wo-value.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-3867836930055458490</id><published>2011-02-27T17:24:00.003+08:00</published><updated>2012-07-06T23:40:41.864+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="LED"/><title type='text'>淺談 LED 驅動連接方式</title><content type='html'>，LED (Light-Emitting Diode) 發光二極體是現在很夯的東西，省電、顏色多樣，現在外面很多的霓虹燈 (看檳榔攤就知道) 幾乎都被汰換成 LED了，以後連我們所用的照明設備也會開始進入到 LED 稱霸的世界；但是驅動 LED 一般都是使用直流電 (直流電就是頻率為&quot;0&quot;的電壓，而交流電就是會隨時間做週期性變化的電壓，LED 可直接使用交流電壓，但是必須符合其特性下所使用)，可直接使用交流電的 LED 應該在不久的將來就可以看到了。&lt;br /&gt;
&lt;br /&gt;
NOKIA 說&quot;科技始終來自於人性&quot;，上面講的其實在未來就有可能被人性化的需求所取代，等一下文中所要講的 LED 驅動方式，或許在不久的將來就會變的不一樣了，誰也說不定吧！&lt;br /&gt;
&lt;br /&gt;
廢話不多說！本文中所要談的是現在大家常用的 LED 驅動連接方式，因為驅動電路的設計與選擇和 LED 所選用的排列方式一定的關連性，這關係到 LED 的可靠度與亮度穩定性。&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;如何從&amp;nbsp;LED&amp;nbsp;外觀得知其極性 (&lt;a href=&quot;http://zh.wikipedia.org/wiki/File:Ledmrp.jpg&quot;&gt;來自維基百科&lt;/a&gt;)；當 LED 接腳不容易看出時，可觀察LED內部，內部較大的就是陰 (-) 極，小的是陽 (+) 極；另外還可以觀察，有平邊的那一邊是陰 (-) 極。&lt;br /&gt;
&lt;br /&gt;
LED 電子符號表示 (&lt;a href=&quot;http://cs.wikipedia.org/wiki/Soubor:%2B-_of_LED.svg&quot;&gt;來自維基百科&lt;/a&gt;)。&lt;br /&gt;
&lt;br /&gt;
上面的圖片是關於判斷 LED 極性的重要特徵，未經使用的 LED 是最好判斷的，兩支接腳中較長的是陽 (+) 極，短的是陰 (-) 極；但儒果是使用過的或是焊在電路板上，此時要判斷 LED 極性就是直接使用上面介紹的方法。錯誤的極性連接會導致 LED 損毀，須特別注意！&lt;br /&gt;
&lt;br /&gt;
LED 連接可分為串聯、並聯與串並聯，不同的連接方式所需要的供應電壓與電流都不同，因此在使用前必須進行計算才能讓 LED 正常動作。&lt;br /&gt;
&lt;br /&gt;
在了解如何計算供應電壓與電流前，LED 順向電壓 (V&lt;sub&gt;Fmax&lt;/sub&gt;, Maximum Forware Voltage) 、 順向電流(I&lt;sub&gt;Fmax&lt;/sub&gt;, Maximum Forware Current) 必須在使用前先知道，不同顏色 (製作材料) 會有不同的 V&lt;sub&gt;F&lt;/sub&gt; 和 I&lt;sub&gt;F&lt;/sub&gt; 值，一般若是沒有特別說明或是不是很特別的 LED，可以使用下面表格所提供的數值作為參考，詳細數據就要參考你所購買的 LED 資料表。&lt;br /&gt;
&lt;br /&gt;
&lt;table align=&quot;center&quot; border=&quot;1&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;顏色 &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;I&lt;sub&gt;Fmax&lt;/sub&gt; (順向電流) &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;V&lt;sub&gt;Fmax&lt;/sub&gt; (順向電壓) &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;紅&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;20~25 mA &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;2.0 V &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;黃&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;b&gt;20~25 mA &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;2.5 V&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;綠&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;b&gt;20~25 mA &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;2.5 V&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;藍&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;b&gt;20~25 mA &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;3.2 V&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;白光&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;b&gt;20~25 mA &amp;nbsp;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;&lt;td align=&quot;center&quot;&gt;&lt;b&gt;3.2 V&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;b&gt;LED 串聯：&lt;/b&gt;&lt;/div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td width=&quot;100&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXE03uC_0jtmPt5FVB8StFO7AgST9LA7MqeRuUTlePXpUReb_IbofMdE3VpgBzqJv8z9w9sHaawlvyzaqmPiESMifvSOdUAaJe-Z5YAKjYL1mmkjPSShbgeNph8q8aohP1W2g7WjYpTpQ/s1600/LED%25E4%25B8%25B2%25E6%258E%25A5.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;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXE03uC_0jtmPt5FVB8StFO7AgST9LA7MqeRuUTlePXpUReb_IbofMdE3VpgBzqJv8z9w9sHaawlvyzaqmPiESMifvSOdUAaJe-Z5YAKjYL1mmkjPSShbgeNph8q8aohP1W2g7WjYpTpQ/s320/LED%25E4%25B8%25B2%25E6%258E%25A5.jpg&quot; width=&quot;91&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;600&quot;&gt;首先假設每一顆 LED 的順向電壓 V&lt;sub&gt;Fmax&lt;/sub&gt; 為 2.0 V、順向電流 I&lt;sub&gt;Fmax&lt;/sub&gt;&amp;nbsp;為 20 mA，使用 N 顆 LED 串在一起，若 N = 5，則&lt;br /&gt;
&lt;br /&gt;
所需要的最小順向電壓：2.0 x N &amp;nbsp;= 10 V，只要大於 10V，LEDs 就會亮；假設這一串 LED 使用 12V 的電源供應， V+ = 12 V。&lt;br /&gt;
&lt;br /&gt;
由於是串聯，所以通過每一顆 LED 的順向電流都會是一樣，由條件中可以知道 LED 最大的順向電流限制為 20 mA，因此我們必須控制通過這一串 LED 的電流值在這個範圍內；當然順向電流越大 LED 越亮，相對的也意味著耗電，視你的需要選擇合適的順向電流就可以，不要超過最大順向電流的限制就好。&lt;br /&gt;
&lt;br /&gt;
若要限制通過這串 LED 的&amp;nbsp;&amp;nbsp;I&lt;sub&gt;F&lt;/sub&gt;&amp;nbsp;電流在 10 mA，則必須加入一顆限流電阻 R 來得到期望電流 10 mA，&lt;br /&gt;
&lt;br /&gt;
由歐姆定律 V = I&lt;sub&gt;F&lt;/sub&gt;&amp;nbsp;x R，R = (12 - (2.0 x 5) ) / 10mA = 200 OHMS&lt;br /&gt;
&lt;br /&gt;
電阻瓦特數由 P =&amp;nbsp;&amp;nbsp;I&lt;sub&gt;F&lt;/sub&gt;&amp;nbsp;x V = 10 mA x (12 - (2 x 5)) V = 20 mW&lt;br /&gt;
&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;b&gt;LED 並聯：&lt;/b&gt;&lt;br /&gt;
假設每一顆 LED 的順向電壓 V&lt;sub&gt;Fmax&lt;/sub&gt; 為 3.0 V、欲設計LED 順向電流 I&lt;sub&gt;F&lt;/sub&gt; 為 10 mA、電源 V+ 為 5.0 V&lt;br /&gt;
&lt;div&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;
&lt;tr&gt; &lt;td width=&quot;260&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyUsaZYwlKYDDjzc9smT9nGJEVg0ba2UQkoDtVp5dIpnwlUPmmAlTy9ZtzoE89TX4rU8T-5uaqJ4o9R9mYRMHUWi55oaeaWoLm5pVmMH3sUYRxHcGpWbYO7krjBWN3sTkZir8Vs3vOS_U/s1600/LED%25E4%25B8%25A6%25E6%258E%25A5_%25E5%2596%25AE%25E9%259B%25BB%25E9%2598%25BB.jpg.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://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgyUsaZYwlKYDDjzc9smT9nGJEVg0ba2UQkoDtVp5dIpnwlUPmmAlTy9ZtzoE89TX4rU8T-5uaqJ4o9R9mYRMHUWi55oaeaWoLm5pVmMH3sUYRxHcGpWbYO7krjBWN3sTkZir8Vs3vOS_U/s200/LED%25E4%25B8%25A6%25E6%258E%25A5_%25E5%2596%25AE%25E9%259B%25BB%25E9%2598%25BB.jpg.jpg&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;440&quot;&gt;計算最小的電源供應：V =&amp;nbsp;V&lt;sub&gt;F &lt;/sub&gt;=3.0 V&lt;br /&gt;
計算最小的電流供應：I =&amp;nbsp;I&lt;sub&gt;F&lt;/sub&gt;&amp;nbsp;x N&lt;br /&gt;
計算最小應使用的電阻瓦數：P = I x V = (I&lt;sub&gt;F&lt;/sub&gt;&amp;nbsp;x N) x (2)&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
若 N = 4、V+ = 5.0 V，則由上面公式計算中可得&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
R = ((V+) - V&lt;sub&gt;F&lt;/sub&gt;) / I = (5 - 3) / (10 mA x 4) = 50 OHMS&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
P = I x V = (10 mA x 4) &amp;nbsp;x (5 - 3) = 80 mW&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
選用的電阻值要大於 50 OHMS、大於 80 mW&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
像這種形式的 LED 並聯盡量避免使用，因為在並聯的每一顆 LED 要有屬於自己的限流電阻；若以上面所計算出來的數值，4 顆 LED 每一顆限制在 10 mA，若是其中有一顆壞掉了則剩下的三顆 LED 會因為電流分流的關係，重新分配到 13.66 mA 的電流，電流會突然增大，增加 LED 損壞的機會；這是左列並聯電路的其中一個缺點，不建議使用。&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;/td&gt; &lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; height=&quot;10&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt; &lt;td width=&quot;260&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy4i9PhZYeq6tg980MHKXHxMAj9rFa-SvJB29VMPfq5zk0vQ5TcDQ9A78u61JRU3kwtOC1U7bo8oAKquq-YJjC_eubQlfzqxyWcn94LddOtbemOWALhLdPAvD8ThD9UfcS35LMl8SXiKg/s1600/LED%25E4%25B8%25A6%25E6%258E%25A5.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;235&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjy4i9PhZYeq6tg980MHKXHxMAj9rFa-SvJB29VMPfq5zk0vQ5TcDQ9A78u61JRU3kwtOC1U7bo8oAKquq-YJjC_eubQlfzqxyWcn94LddOtbemOWALhLdPAvD8ThD9UfcS35LMl8SXiKg/s200/LED%25E4%25B8%25A6%25E6%258E%25A5.jpg&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt; &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;440&quot;&gt;而像左列每一顆 LED 上面都有一個限流電阻的方式是較好的，通過每一組 LED 的電壓都一樣，計算上只要個別針對每一組 LED 做計算即可，也就是利用上面 &quot;LED 串聯&quot; 的計算方式將 N 設定為 &quot;1&quot;。&lt;br /&gt;
&lt;br /&gt;
所以每一組 LED 都是唯一個單獨的 LED 船聯電路做計算即可，所以可以使用來並接不同顏色的 LED (麻煩的是必須要串電阻)&lt;/td&gt; &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;&lt;br /&gt;
&lt;/b&gt;&lt;br /&gt;
&lt;b&gt;LED 串並聯：&lt;/b&gt;&lt;br /&gt;
&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td width=&quot;260&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfV09_X2zWiT4GD44KXx417DOO-2mV6qriYANWKeRtjRIlC1SsYTJI1Jc5veL8nsU4J_LmtJQMYsbr3FNkHy5fEZi5Qm7WnDujx1adEJdItbxE28_HLB4BlKpBwz70QXk8sn56vWtHTHM/s1600/LED%25E4%25B8%25B2%25E4%25B8%25A6%25E6%258E%25A5.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;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgfV09_X2zWiT4GD44KXx417DOO-2mV6qriYANWKeRtjRIlC1SsYTJI1Jc5veL8nsU4J_LmtJQMYsbr3FNkHy5fEZi5Qm7WnDujx1adEJdItbxE28_HLB4BlKpBwz70QXk8sn56vWtHTHM/s320/LED%25E4%25B8%25B2%25E4%25B8%25A6%25E6%258E%25A5.jpg&quot; width=&quot;250&quot; /&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/td&gt;  &lt;td style=&quot;padding: 15px;&quot; valign=&quot;top&quot; width=&quot;440&quot;&gt;&lt;br /&gt;
將上面 &quot;LED 並聯&quot; 第二種形式擴展，每一組 LED 不再是單獨一顆而是多顆串接；同樣的計算方式也一樣將各組 LED 視為單一個 &quot;LED 串聯&quot; 電路做計算則可。&lt;br /&gt;
&lt;br /&gt;
舉個例子，假設有三組 LED，顏色和順向電流需求為：綠色 6 顆 (V&lt;sub&gt;Fmax&lt;/sub&gt;&amp;nbsp;= 2.5 V， I&lt;sub&gt;F&lt;/sub&gt; = 10 mA)、紅色 5 顆&amp;nbsp;(V&lt;sub&gt;Fmax&lt;/sub&gt;&amp;nbsp;= 2.0 V， I&lt;sub&gt;F&lt;/sub&gt;&amp;nbsp;= 15 mA)、藍色 &amp;nbsp;8 顆&amp;nbsp;(V&lt;sub&gt;Fmax&lt;/sub&gt;&amp;nbsp;= 2.5 V， I&lt;sub&gt;F&lt;/sub&gt;&amp;nbsp;= 5 mA)，求最小需求的電源與電流值、限流電阻值及瓦數?&lt;br /&gt;
&lt;br /&gt;
最小需求電源則取這三串 LED 需求的順向電壓最大值，&lt;br /&gt;
V&lt;sub&gt;F(綠色)&lt;/sub&gt; = 2.5 x 6 = 15 V&lt;br /&gt;
V&lt;sub&gt;F(紅色)&lt;/sub&gt;&amp;nbsp;= 2.0 x 5 = 10 V&lt;br /&gt;
V&lt;sub&gt;F(藍色)&lt;/sub&gt;&amp;nbsp;= 3.2 x 8 = &amp;nbsp;25.6 V&lt;br /&gt;
V&lt;sub&gt;(min)&lt;/sub&gt;&amp;nbsp;= MAX(V&lt;sub&gt;F(綠色)&lt;/sub&gt;，V&lt;sub&gt;F(紅色)&lt;/sub&gt;，V&lt;sub&gt;F(藍色)&lt;/sub&gt;) = 25.6 V&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
最小需求電流值則是將這三串的 LED 需要的順向電流加總，&lt;br /&gt;
&lt;br /&gt;
I&lt;sub&gt;(min)&lt;/sub&gt; =&amp;nbsp;&amp;nbsp;I&lt;sub&gt;F(綠色)&lt;/sub&gt;+ &amp;nbsp;I&lt;sub&gt;F(紅色)&lt;/sub&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;+&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;I&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: small;&quot;&gt;&lt;sub&gt;F(藍色)&lt;/sub&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&amp;nbsp;= 10 mA + 15 mA + 5 mA = 30 mA&lt;/span&gt;&lt;br /&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px;&quot;&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
所以由上面所得知的最小需求電源與電流可以知道，你所設計與購買的電源供應器必須大於上面最小的電源供應與電流需求。&lt;br /&gt;
&lt;br /&gt;
接下來，計算每組 LED 的限流電阻與瓦數，這邊我們假設所提供的電源為 30 V，可提供最大 0.5A 的電流。設計限流電阻時，只會用到 30V 這個值。&lt;br /&gt;
&lt;br /&gt;
R1 = ((V+) -&amp;nbsp;V&lt;sub&gt;F(綠色&lt;/sub&gt;) / (&amp;nbsp;I&lt;sub&gt;F(綠色)&amp;nbsp;&lt;/sub&gt;) = (30 - 15) / 10 mA = 1.5 K OHMS&lt;br /&gt;
P1 =&amp;nbsp;&amp;nbsp;I&lt;sub&gt;F(綠色)&amp;nbsp;&lt;/sub&gt;&amp;nbsp;x&amp;nbsp;((V+) -&amp;nbsp;V&lt;sub&gt;F(綠色&lt;/sub&gt;) = 10 mA x (30 - 15) = 150 mW&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
R1 = ((V+) -&amp;nbsp;V&lt;sub&gt;F(紅色&lt;/sub&gt;) / (&amp;nbsp;I&lt;sub&gt;F(紅色)&amp;nbsp;&lt;/sub&gt;) = (30 - 10) / 15 mA = &amp;nbsp;1.33 K OHMS&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
P1 =&amp;nbsp;&amp;nbsp;I&lt;sub&gt;F(紅色)&amp;nbsp;&lt;/sub&gt;&amp;nbsp;x&amp;nbsp;((V+) -&amp;nbsp;V&lt;sub&gt;F(紅色&lt;/sub&gt;) = 15 mA x (30 - 10) = &amp;nbsp;300 mW&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
R1 = ((V+) -&amp;nbsp;V&lt;sub&gt;F(藍色&lt;/sub&gt;) / (&amp;nbsp;I&lt;sub&gt;F(藍色)&amp;nbsp;&lt;/sub&gt;) = (30 - 25.6) / 5 mA = 880 OHMS&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
P1 =&amp;nbsp;&amp;nbsp;I&lt;sub&gt;F(藍色)&amp;nbsp;&lt;/sub&gt;&amp;nbsp;x&amp;nbsp;((V+) -&amp;nbsp;V&lt;sub&gt;F(藍色&lt;/sub&gt;) = 5 mA x (30 - 25.6) = &amp;nbsp;0.022 mW&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
各組 LED 的限流電阻選用大於上面所計算出來的值即可。&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
當然還有其他的 LED 排列方式，例如如下使用 proteus 模擬 LED 交叉式陣列排列方式，&lt;/div&gt;
&lt;div style=&quot;margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;&quot;&gt;
LED 的&amp;nbsp;V&lt;sub&gt;F &lt;/sub&gt;= 2.2 V，通過電流為 5 mA，模擬出來的值與計算非常接近。&lt;/div&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_xg0sOlGZJPowoskcgfROEucYV5hwkjpB9zTZ7JhfM2L1w5pKt5qMkcn22I-nUVvf6gONJYqGUE4xQfHLdvaqGUwsIYh07dHqUGa16shMCfgfJ0UfpFehCShZNTZtk4HodNbViNd-t0w/s1600/LED_%25E4%25BA%25A4%25E5%258F%2589%25E5%25BC%258F%25E9%2599%25A3%25E5%2588%2597.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;464&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_xg0sOlGZJPowoskcgfROEucYV5hwkjpB9zTZ7JhfM2L1w5pKt5qMkcn22I-nUVvf6gONJYqGUE4xQfHLdvaqGUwsIYh07dHqUGa16shMCfgfJ0UfpFehCShZNTZtk4HodNbViNd-t0w/s640/LED_%25E4%25BA%25A4%25E5%258F%2589%25E5%25BC%258F%25E9%2599%25A3%25E5%2588%2597.jpg&quot; width=&quot;640&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 class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
說到這邊，不曉得大家對於 LED 驅動上是否有一些了解? 不管是何種 LED 排列方法，主要的還是要能提供穩定且耐用的電源供應，因此現在在市面上出現很多的 LED 驅動晶片，不過這不在討論的範圍之內，有興趣的可以找一些電源設計相關的書籍研究。&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 class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;
如果大家對於製作 LED 燈有興趣的話，可以看一下另一篇文章：&lt;a href=&quot;http://a-luroom.blogspot.com/2011/02/led_27.html&quot;&gt;&quot;利用家中廢棄的省電燈泡，自製 LED 燈泡 (使用阻容降壓)&quot;&lt;/a&gt;。&lt;/div&gt;
&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/3867836930055458490/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2011/02/led.html#comment-form' title='3 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/3867836930055458490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/3867836930055458490'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2011/02/led.html' title='淺談 LED 驅動連接方式'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXE03uC_0jtmPt5FVB8StFO7AgST9LA7MqeRuUTlePXpUReb_IbofMdE3VpgBzqJv8z9w9sHaawlvyzaqmPiESMifvSOdUAaJe-Z5YAKjYL1mmkjPSShbgeNph8q8aohP1W2g7WjYpTpQ/s72-c/LED%25E4%25B8%25B2%25E6%258E%25A5.jpg" height="72" width="72"/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-79522658374112224</id><published>2011-02-21T13:26:00.000+08:00</published><updated>2011-02-21T13:26:00.629+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="小撇步"/><title type='text'>如何在部落格加入程式碼高亮度語法辨識</title><content type='html'>相信很多寫部落格的同好，遇到要發佈關於程式碼的部份都會很頭大，原因是語法格式要做一些小修改才能正確的顯示在部落格上。遇到比較好的部落格網站會提供某些標籤供使用，但是如果能夠像在程式編輯器裡面寫程式時，不但可以顯示各語法間的高亮度辨識，也有行碼可看，這樣不是更好嗎?&lt;br /&gt;
&lt;br /&gt;
請看下面程式碼，寫程式時不就是這個樣子的編輯視窗嗎?&lt;br /&gt;
&lt;br /&gt;
&lt;pre class=&quot;brush:c&quot;&gt;static uint8_t buffer[60];
static uint8_t screen_mem[8];

const prog_uint8_t dot_00[] = {
0xEF, 0x96, 0xEF, 0xCB, 0xAD, 0xEF, 0x86, 0x8F};

// definition method 1
// typedef char PROGMEM prog_char;
const prog_char message_00[] = &quot; THIS IS MADE BY a-lu. &quot;;
const prog_char message_01[] = &quot; WHAT&#39;S UP MAN! &quot;;

// msg_00_0 save in SRAM
const prog_char* msg_00_0[] = {
 message_00,
 message_01
};&lt;/pre&gt;&lt;br /&gt;
不僅僅是 C 語言而已，只要是現今大部分常用的語法，大多可以正常的辨識並使用不同顏色與高亮度顯示出來，並且可以配合網頁或是部落格而有不同的佈景主題可以選用，只要會使用下面的技巧就可達到這個目的。&lt;br /&gt;
&lt;br /&gt;
如果你想學習如何在部落格中使用這種技巧的話，那就繼續往下看吧！&lt;br /&gt;
&lt;br /&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;這個語法辨識的技巧是使用 CSS 配合 Javascript，然後將這些檔案利用外部連結的方式崁入到部落格的樣本裡。&lt;br /&gt;
&lt;br /&gt;
以 Google Blog 做示範，這裡所使用的 CSS 與 Javascript 的檔案是&amp;nbsp;&lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter&quot;&gt;SyntaxHighlighter&lt;/a&gt;&amp;nbsp;網站所提供，你可以下載後直接使用，不過因為部落格不是自行架設的，無法將這些檔案放到伺服器上去，只能使用外部連結的方式來達到語法辨識高亮度表示的功能。&lt;br /&gt;
&lt;br /&gt;
SyntaxHighlighter 提供不同語言之間的語法辨識，辨識的種類有 C/C++、CSS、XML、Java、Pascal、Delphi、......等 (詳細支援的檔案類型請上 &lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/&quot;&gt;SyntaxHighlighter Bundled Brushes&lt;/a&gt; 了解 )，使用的時候只要在所要顯示的程式碼加入&lt;br /&gt;
&lt;pre class=&quot;brush:css&quot;&gt;&amp;lt;pre class=&quot;brush:檔案類型&quot;&amp;gt;
程式碼放置的位置
&amp;lt;/pre&amp;gt;
&lt;/pre&gt;即可。其中，&quot;檔案類型&quot;就填上所要辨識程式碼即可，上面所使用的檔案類型是 css，所以 class=&quot;brush:css&quot;&lt;br /&gt;
&lt;br /&gt;
另外還有一種顯示的方法是使用 &amp;lt;SCRIPT&amp;gt;&amp;lt;/SCRIPT&amp;gt;的方式，這種方式是你無法在部落格&quot;撰寫&quot;的視窗下看到程式碼，必須到 &quot;修改 HTML&quot; 視窗下才能修改，不過優點是你不需要將程式碼中所有的 &quot;&amp;lt;&quot; 小於或是 &quot;lgt;&quot; 符號全部換成特殊字元符號 &quot;&amp;amp; lt;&quot; 或是 &quot;&amp;amp; gt;&quot;，只要將要顯示在網頁上的程式碼剪下然後複製到語法辨識標籤中，就可以馬上顯示出來。這兩種顯示方法的優缺點在&amp;nbsp;&lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter/manual/installation.html&quot;&gt;SyntaxHighLighter Installation&lt;/a&gt;&amp;nbsp;有做比較。&lt;br /&gt;
&lt;pre class=&quot;brush:js&quot;&gt;&amp;lt;script class=&amp;quot;brush: js&amp;quot; type=&amp;quot;syntaxhighlighter&amp;quot;&amp;gt;
&amp;lt;![CDATA[
程式碼放置的位置
]]&amp;gt;&amp;lt;/script&amp;gt;
&lt;/pre&gt;&amp;lt;SCRIPT&amp;gt;&amp;lt;/SCRIPT&amp;gt;使用的方式與 &amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt; 一樣，只要修改 &quot;檔案類型&quot; 並剪下填上到 &quot;程式碼放置位置&quot; 即可。&lt;br /&gt;
&lt;br /&gt;
除了正確的語法辨識之外，SyntaxHighlighter 還提供語法高亮度顯示，可以根據不同網頁顏色背景選擇不一樣的&lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter/manual/themes/&quot;&gt;語法高亮度顯示佈景主題(themes)&lt;/a&gt;，現在有提供七種，像這個頁面所使用的佈景主題是 &quot;Fade To Gray&quot;。先記住這部份可以做調整，接下來會講到這部份。&lt;br /&gt;
&lt;br /&gt;
到這邊為止，我們已經知道如何在部落格使用這些所謂的顯示標籤，以及如何修改相對應的檔案類型。現在進一步的，我們必須將這些 JavaScript 與 CSS 檔案加入到部落格的樣本頁面來，這樣每次在使用這些標前時，頁面才會自動呼叫並轉換這些需要高亮度顯示的程式碼。&lt;br /&gt;
&lt;br /&gt;
在 SyntaxHighlighter Installation 頁面中提到：&lt;br /&gt;
&lt;br /&gt;
&lt;div style=&quot;color: #333333; font-family: Helvetica, Geneva, Arial, sans-serif; font-size: 16px; line-height: 21px;&quot;&gt;To get SyntaxHighlighter to work on you page, you need to do the following:&lt;/div&gt;&lt;ol style=&quot;color: #333333; font-family: Helvetica, Geneva, Arial, sans-serif; font-size: 16px; line-height: 21px;&quot;&gt;&lt;li&gt;Add base files to your page:&amp;nbsp;&lt;code style=&quot;font-family: Consolas, Monaco, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;shCore.js&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code style=&quot;font-family: Consolas, Monaco, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;shCore.css&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Add brushes that you want (for example, shBrushJScript.js for JavaScript, see the list of all&amp;nbsp;&lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter/manual/brushes/&quot; style=&quot;color: #5a86e4; text-decoration: none;&quot;&gt;available brushes&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Include&amp;nbsp;&lt;code style=&quot;font-family: Consolas, Monaco, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;shCore.css&lt;/code&gt;&amp;nbsp;and&amp;nbsp;&lt;code style=&quot;font-family: Consolas, Monaco, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;shThemeDefault.css&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Create a code snippet with either&amp;nbsp;&amp;lt;pre&amp;gt;&amp;nbsp;or&amp;nbsp;&amp;lt;script&amp;gt;&amp;nbsp;method (see below)&lt;/li&gt;
&lt;li&gt;Call&amp;nbsp;&lt;code style=&quot;font-family: Consolas, Monaco, &#39;Bitstream Vera Sans Mono&#39;, &#39;Courier New&#39;, Courier, monospace;&quot;&gt;SyntaxHighlighter.all()&lt;/code&gt;&amp;nbsp;JavaScript method&lt;/li&gt;
&lt;/ol&gt;其實有看也不是很懂，反正主要是 SyntaxHighlighter 要能正常的動作必須要做如下的幾個事情，啦啦啦的......一大堆！&lt;br /&gt;
&lt;br /&gt;
跟著下面的步驟做就對了，不需要很懂這些東東，會用就好，如果要做研究就另當別論！&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;登入你的 &quot;Google&quot; 帳號，進入到部落格的資訊主頁，點擊&quot;設計&quot;&lt;/li&gt;
&lt;/ul&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrSX5zbTeNIqRjf2GP_f6mBYYrtQ63l72t92urT3UxeEKuK6u5ep66fVT_BjBcwi4kv5DrJYAtk7y1yWrVB0ltWsmgsJsVa9lIWqXqs7Ht10DiNv-C5dR23CS9sc8u3bZ9BZpJhQdW7fE/s1600/%25E9%2583%25A8%25E8%2590%25BD%25E6%25A0%25BC_%25E8%25A8%25AD%25E8%25A8%2588.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrSX5zbTeNIqRjf2GP_f6mBYYrtQ63l72t92urT3UxeEKuK6u5ep66fVT_BjBcwi4kv5DrJYAtk7y1yWrVB0ltWsmgsJsVa9lIWqXqs7Ht10DiNv-C5dR23CS9sc8u3bZ9BZpJhQdW7fE/s1600/%25E9%2583%25A8%25E8%2590%25BD%25E6%25A0%25BC_%25E8%25A8%25AD%25E8%25A8%2588.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;點擊 &quot;修改 HTML&quot;，在下方的 HTML 碼就是部落格頁面產生時的樣本檔，我們所填寫的部落格文字都會被嵌入到下方的一個區塊裡。在部落格頁面點擊滑鼠右鍵選擇&quot;檢視頁面程式碼&quot;就會看到這些文字被嵌到哪個區塊中。&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYJsyT2Fy2aKzB8qebkAiVEC1hnHjHVCpkHx_4VIfhmGfKqE0pHvHIwlcxUBOhtnpiZKBmoVX1-RVFK6w2YGtpZ8ubKdys_w3J6CEQInBpxW2lwrFNXqNtEyAaPjQAdSeNGqdh-RYi3ec/s1600/%25E9%2583%25A8%25E8%2590%25BD%25E6%25A0%25BC_%25E8%25A8%25AD%25E8%25A8%2588_%25E4%25BF%25AE%25E6%2594%25B9HTML.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhYJsyT2Fy2aKzB8qebkAiVEC1hnHjHVCpkHx_4VIfhmGfKqE0pHvHIwlcxUBOhtnpiZKBmoVX1-RVFK6w2YGtpZ8ubKdys_w3J6CEQInBpxW2lwrFNXqNtEyAaPjQAdSeNGqdh-RYi3ec/s1600/%25E9%2583%25A8%25E8%2590%25BD%25E6%25A0%25BC_%25E8%25A8%25AD%25E8%25A8%2588_%25E4%25BF%25AE%25E6%2594%25B9HTML.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;下方是一個範例，主要的部分在&amp;lt;&amp;lt;!--Syntax Highlighter --&amp;gt; 到 &amp;lt;!-- End of Syntax Highlighter --&amp;gt;，這一部分就是要加到部落格樣本頁面的程式碼。先別複製它，這部分的程式碼必須依你實際的需要做修改，再用到你的樣本頁面裡，請繼續往下看說明&lt;/li&gt;
&lt;/ul&gt;&lt;pre class=&quot;brush:xml&quot;&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html b:version=&#39;2&#39; class=&#39;v2&#39; expr:dir=&#39;data:blog.languageDirection&#39; xmlns=&#39;http://www.w3.org/1999/xhtml&#39; xmlns:b=&#39;http://www.google.com/2005/gml/b&#39; xmlns:data=&#39;http://www.google.com/2005/gml/data&#39; xmlns:expr=&#39;http://www.google.com/2005/gml/expr&#39;&amp;gt;

&amp;lt;!--Syntax Highlighter --&amp;gt; 
&amp;lt;!--1. 必要檔案--&amp;gt; &amp;lt;link href=&#39;http://alexgorbatchev.com/pub/sh/current/styles/shCore.css&#39; rel=&#39;stylesheet&#39; type=&#39;text/css&#39;/&amp;gt;
&amp;lt;!--2. 佈景主題--&amp;gt; &amp;lt;link href=&#39;http://alexgorbatchev.com/pub/sh/current/styles/shThemeFadeToGrey.css&#39; rel=&#39;stylesheet&#39; type=&#39;text/css&#39;/&amp;gt;
&amp;lt;!--1. 必要檔案--&amp;gt; &amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shCore.js&#39; type=&#39;text/javascript&#39;/&amp;gt;

&amp;lt;!-- Brushes --&amp;gt;
&amp;lt;!--3. 語法辨識--&amp;gt; &amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushVb.js&#39; type=&#39;text/javascript&#39;/&amp;gt; 
&amp;lt;!--3. 語法辨識--&amp;gt; &amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushXml.js&#39; type=&#39;text/javascript&#39;/&amp;gt; 
&amp;lt;!--3. 語法辨識--&amp;gt; &amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCss.js&#39; type=&#39;text/javascript&#39;/&amp;gt; 
&amp;lt;!--3. 語法辨識--&amp;gt; &amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushCpp.js&#39; type=&#39;text/javascript&#39;/&amp;gt; 
&amp;lt;!--3. 語法辨識--&amp;gt; &amp;lt;script src=&#39;http://alexgorbatchev.com/pub/sh/current/scripts/shBrushJScript.js&#39; type=&#39;text/javascript&#39;/&amp;gt;

&amp;lt;!-- JavaScript Method --&amp;gt;
&amp;lt;script language=&#39;javascript&#39;&amp;gt; 
&amp;lt;!--4. 組態設定--&amp;gt; SyntaxHighlighter.config.bloggerMode = true;
&amp;lt;!--5. 語法辨識--&amp;gt; SyntaxHighlighter.all();
&amp;lt;/script&amp;gt; 
&amp;lt;!-- End of Syntax Highlighter --&amp;gt;

  &amp;lt;head&amp;gt;

&lt;/pre&gt;&lt;br /&gt;
編輯流程(這邊是重點)：&lt;br /&gt;
&lt;ol&gt;&lt;li&gt;必須加入的檔案：shCore.css、shCore.js&lt;/li&gt;
&lt;li&gt;選擇要使用的&lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter/manual/themes/&quot;&gt;佈景主題&lt;/a&gt;&amp;nbsp;(只能選擇其中的一個)，如範例使用 Fade To Gray (shThemeFadeToGrey.css)&lt;/li&gt;
&lt;li&gt;選擇會用到的語法辨識模組 (可以選擇多種，但如果頁面載入速度受影響，可再做取捨) &lt;/li&gt;
&lt;li&gt;設定 Syntax Highlighter 的組態，只要設定 BloggerMode = true 即可整合進部落格樣本頁面裡，Syntax Highlighter Configuration 請點擊&lt;a href=&quot;http://alexgorbatchev.com/SyntaxHighlighter/manual/configuration/&quot;&gt;這裡&lt;/a&gt;查看。&lt;/li&gt;
&lt;li&gt;呼叫 &quot;SyntaxHighlighter.all()&quot; JavaScript 函式執行，這會在頁面載入後自動執行，如果放置的位置在上面範例所指定的位置 &lt;/li&gt;
&lt;li&gt;複製&amp;nbsp;&amp;lt;&amp;lt;!--Syntax Highlighter --&amp;gt; 到 &amp;lt;!-- End of Syntax Highlighter --&amp;gt;&amp;nbsp;區段間的程式碼進行修改&lt;/li&gt;
&lt;li&gt;將修改後的程式碼複製貼到樣本頁面中的 &amp;lt;head&amp;gt;上方，如範例所示一樣。&lt;/li&gt;
&lt;/ol&gt;完成編輯流程後，接下來每次要使用這個語法辨識的功能時，利用一開始談到的兩種方法，就可達到如這個頁面顯示的程式碼一樣，不但可自動進行語法辨識還有漂亮的高亮度顏色作顯示，相信這個功能的呈現將會為您的網站添色不少！</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/79522658374112224/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2011/02/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/79522658374112224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/79522658374112224'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2011/02/blog-post.html' title='如何在部落格加入程式碼高亮度語法辨識'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgrSX5zbTeNIqRjf2GP_f6mBYYrtQ63l72t92urT3UxeEKuK6u5ep66fVT_BjBcwi4kv5DrJYAtk7y1yWrVB0ltWsmgsJsVa9lIWqXqs7Ht10DiNv-C5dR23CS9sc8u3bZ9BZpJhQdW7fE/s72-c/%25E9%2583%25A8%25E8%2590%25BD%25E6%25A0%25BC_%25E8%25A8%25AD%25E8%25A8%2588.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-2980027980497428867</id><published>2010-03-30T13:07:00.001+08:00</published><updated>2010-12-31T00:34:27.571+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="閒聊"/><title type='text'>[引句] 請永遠選擇心靈上最痛苦的選擇，這樣才能讓自己更強</title><content type='html'>自從有了專案管理的證照後，常利用時間上這個網站(&lt;a href=&quot;http://joechang.pixnet.net/blog&quot;&gt;http://joechang.pixnet.net/blog&lt;/a&gt;)瀏覽，並且每隔一段時間會上書局找一些管理相關書籍閱讀。&lt;br /&gt;
&lt;br /&gt;
一來這些書籍並不像教科書那麼枯燥，二來並不想因為考了證照後而一直停留在一個地方。而是希望經由別人的經驗教訓，來讓自己多吸收一些東西。&lt;br /&gt;
&lt;br /&gt;
文章的最後點出了一句話，蠻適合我現在的心情: &quot;請永遠選擇心靈上最痛苦的選擇，這樣才能讓自己更強&quot;。&lt;br /&gt;
&lt;br /&gt;
找個對你有幫助，但總是下不了決心的事做；不要害怕失敗，因為從失敗中爬起的人才會更茁壯！</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/2980027980497428867/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2010/03/blog-post_30.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/2980027980497428867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/2980027980497428867'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2010/03/blog-post_30.html' title='[引句] 請永遠選擇心靈上最痛苦的選擇，這樣才能讓自己更強'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-5017607274596972953.post-3291835831351186479</id><published>2010-03-26T23:55:00.001+08:00</published><updated>2010-03-26T23:56:36.037+08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="閒聊"/><title type='text'>第一篇網誌</title><content type='html'>這是網誌的第一篇文章，本來想利用時間寫一些工作或是興趣相關的文章，但在有空的時候突然又接到要撰寫一個網站的事務，所以呢?&lt;br /&gt;
&lt;br /&gt;
現在正在想這個網站要怎麼弄...</content><link rel='replies' type='application/atom+xml' href='http://a-luroom.blogspot.com/feeds/3291835831351186479/comments/default' title='張貼留言'/><link rel='replies' type='text/html' href='http://a-luroom.blogspot.com/2010/03/blog-post.html#comment-form' title='0 個意見'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/3291835831351186479'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/5017607274596972953/posts/default/3291835831351186479'/><link rel='alternate' type='text/html' href='http://a-luroom.blogspot.com/2010/03/blog-post.html' title='第一篇網誌'/><author><name>sakuyaki</name><uri>http://www.blogger.com/profile/08438451893023282089</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjp4UvjBmCvFD-RIwRn0O99dAtwhB6MbLTg5iu_ywBHIrzdC2IWw7GSMgOdLbQTT0WdYp0xPOu1PN-Hg81GGo9RL8TKExPu_IPBBBjjfstesr5AUpWnQvDsX4m4Wgx9Dg/s220/6.jpg'/></author><thr:total>0</thr:total></entry></feed>