2010年12月29日

用8951單晶片製作三原色光球

最近這個blog變成電子電路筆記啦!

其實對我而言,我從來沒有那種「因為我是學XX的,所以我只會XX」的想法。(例如:因為我是學生物的,所以我只會教生物)
我喜歡跨出自己的領域去學東西,反正多涉略一些東西總是好事嘛,至少可以讓自己更有價值啊。

之前我一直很想學單晶片(因為名字聽起來很炫),不過不知道從何下手,因為周遭的朋友沒有一個是學電子電機的,直到去年遇上一個特別的學生,這才開了我的眼界。那位學生從小就開始學一些電子電路的東西,聽說是爸媽特地幫他找的家教。

一年前的這個時候吧,我就問他一些電路的問題,當時我問的就是最近一直在做的三原色球閃爍要怎麼做,結果從他口中冒出的答案讓我霧煞煞,像是什麼「用555來做啊,用RC電路計算時間啦,比較簡單的方式就用8951單晶片來寫....」

聽到這些專業術語,實在很佩服,沒想到小小年紀的國中生(當時他8年級),居然懂得這麼多,而我身為大人,要學會這些東西應該不會太困難吧。所以這一年來,偶而想到就把資料東翻西翻的,看看假以時日,我能不能有他那樣程度的電路知識。

一年過後,知識有沒有長進不是很確定,但可以確定的是,過去那些看不懂的書籍資料,慢慢看懂了,正好前一陣子又對閃爍光源的電路很感興趣,所以乾脆一鼓作氣,把之前學過的工具都拿來試試看,於是才會寫出前面那兩篇。
用Arduino製作三原色謎(Mix)光球
以555+4017電路製作三原色謎(Mix)光球

加上這篇總計至少會有四篇,另外一篇就是自己嘗試洗電路板的過程。

之前沒什麼提到那顆球怎麼做,其實就是把這樣的裝置塞進白色乒乓球裡頭就可以了。那顆LED燈是共陰的,所以RGB三色一共會有四隻腳。



學單晶片的過程,學生建議我可以讀下面這本「單晶片微電腦8051/8951 原理與應用(C語言)」。對我而言,雖然從來沒有特別去學C語言,不過因為之前寫過不少VBA、Action Script等,所以要看懂C語言,也不會太難。而硬體學習的部份,因為之前就有玩arduino的興趣,所以也不是太大的門檻。比較大的問題是,學會要拿來做什麼?


還好前一陣子想到可以做RGB三原色光球,有了目標,一切就好辦多了。其實就只要把製作「霹靂燈」的程式改一點點的部份,就可以符合我的需求了。下面這些程式,其實就是直接修改現成的範例所做出來的。

#include<AT89X51.H>
void delayms(unsigned int time);

/*主程式 */
main()
{
  while(1)
  {
   unsigned char k;
   for (k=0x01; k<0x08; k<<1)
   {
    P1 =~k;
   delayms(2);
   }
  }
}
/*延時副程式 */

void delayms(unsigned int time)
{
 unsigned int n;
 while (time>0)
 {
 n=120;
  while(n>0) n--;
  time--;
  }
}
}
--

至於接線的部份不會太難,反正幾個小零件就打發了。


至於細節的部份,就不在這裡贅述了,反正這些8951的資料在書裡都寫得很詳細啦。