2008年12月29日 星期一

SMD鉭質電容

因為實驗室有SMD鉭質電容,可是我一直覺得有一橫的那個是負號。


如何證明這件事。李老師的朋友就找大廠的DATASHEET來看。


先看VISHAY的鉭質電容


裡面就有寫到,有一橫的為正極。



再看ROHM的鉭質電容,也是說有一橫的為正極。



由這二家大廠的DATASHEET可以得知,有一橫的確實為正極。


這是學弟買的SMD電容,因為MLCC電容(積層電容)和鉭質電容都是黃色的,不過怎麼分辦是MLCC還是鉭質電容?


剪開電容,如果是一層一層疊起來的話,那就是MLCC,如果裡面是一根的話,那就是鉭質電容。


剪開後可以得知,學弟買的這電容為鉭質電容。



還好前幾天有發現這個問題,不然可能到我離開學校都不知道我對鉭質的認知是錯誤的。


2008年12月18日 星期四

dsPIC DSP矩陣函數

因為已經習慣了dsPIC的晶片了,所在在設計的時後通常都會拿dsPIC來用,不過有趣的是為何要叫dsPIC,因為它是Microchip的  DSP + PIC 。 簡稱dsPIC。


既然內含DSP的引擎,當然要好好的利用一下,因為RLS都是矩陣運算,那就先試試看矩陣運算。


有矩陣乘法器。



矩陣移位器。(不知道有沒有翻錯)


矩陣加法器。


矩陣轉置。


反矩陣。


要用DSP的矩陣函式時,是需要用所謂的fractional (分數)運算,內部定義為Q-format,1.15。


數值範圍為+0.99999~-1。
在使用上的時後,其實還滿麻煩的。


假設有4*1 的矩陣要和1*4的矩陣運算時。


[ 0.5  0.5  0.5  0.5] *[0.9 0.9  0.9  0.9]T ,這樣的用數學的算法應該會得到一個純量:1.8。不過這樣如果算進frational時,就會出錯,因為已經超過1的範圍了,所以還挺麻煩了。目前我還卡在這裡,不知道這地方該怎麼辦。


雖然用DSP的函式很方便,不過好像要注意的地方很多。


本來以為可以很快的就把矩陣運算套入RLS裡,沒想到竟然又卡關了。


所以只好待續了……


2008年12月16日 星期二

線性內插查表法-誤差分析2

上一篇:線性內插查表法-誤差分析,在上一篇只有做單點的誤差測試而已,既然要分析,當然需要把所有的資訊都抓來分析一下。就再用matlab跑個for迴圈,這樣就可以找到所有的誤差,從圖上可以得知,誤差最大不超過0.0004,其準度可以 達到小數第三數。



其實暴力法確實還不錯用,只是說,當效能很重要時,就不行這樣玩了。至於泰勒展開和牛頓逼進法,我還沒有看懂,有機會的話再試試。


2008年12月13日 星期六

97學年度臺灣區電腦化運動競技大賽

2008年12月13,假東南科技大學舉辦的97學年度臺灣區電腦化運動競技大賽,這次的比賽是要報名費的,不過總共有四百多隊的隊伍參賽,似乎還滿多人來參加的。


電腦鼠比賽一開始照往常一樣,把場地蓋住。



打開後發現今年的場地似乎牆壁還滿少的。可能一次程式改太多了,水土不服。比賽時才會有一直撞牆的冏樣。


果然,驕者必敗,往常的比賽都是比賽前一個月還在瘋狂的試各式各樣的場地,這次在實驗室試跑的場地少得可憐,幾乎只有一個場地試4個不同的起點而已。


雖然最後還是領獎了,但卻沒有那麼的開心。因為似乎少了什麼。


這是這次自走車競速的場地,這次的場地和規則其實還滿ox的,場地和規則劃的其實還差不多,但斷線的地方差很多,試跑前一天和實際比賽的時後又不一樣,到了比賽當天還更改規則,從三戰2勝改成1戰定生死。- -  真搞不懂辦比賽的大會是否真的有替學生想過。既然是比競速?何必將場地再三更改?F1也是需要讓車手一直試跑的啊。 不然怎麼會有趣?整場比賽沒看過有2台車超超過1圈的- -,真是汗顏!


最後獲勝的是「小鴻莓」?蛤?記者:「小姐請問您從企劃到製作總共花多久的時間?」


小鴻莓:「三天」。


其他人:「……」。


哈哈哈,三天,真有趣。真的如此嗎?



號稱想打算稱霸全日本的學弟,這次拿了第五名,為了這比賽還三天沒睡覺。


看這照片就知道他和我的心情一樣冏rz。


不過他的王牌沒上場到是真的。


會後大家一起合照。


學弟的王牌是什麼?


是這個號稱有長「魚鰭」的搖頭自走車。


這機構做得很屌,還滿配服的。花了1個星期劃solidworks,竟然組裝起來和solidworks沒有太大的差異,只能說學弟的頭上LV up!


賽後有種回到二年前,老鼠撞牆心中無限感傷的心情。


2008年12月11日 星期四

第29回全日本電腦鼠比賽

這是介紹29回全日本電腦鼠比賽,日本人辦的比賽真的很贊,都會有完整的介紹。


今年的冠軍是新加坡教授MIN5獲得勝利,真的很厲害。


其中還包含了:中島史敬ロボット工作研究室 分室mouselabo88吸地板的電腦鼠White eye…… 等高手。


如果還有興趣,這是去年的第28回全日本電腦鼠


比較一下日本人連做比賽都很精緻,反觀台灣辦比賽就很不用心了。第四屆人工智慧電腦鼠競賽


希望台灣可以加緊腳步跟上國際的水準。


 


 


2008年12月10日 星期三

memory copy-2

照著上一篇Bee的說法,實驗c compiler 附的memcpy( );函數。


做之前先做點功課,memcpy( ) 的介紹


真的快多了,比我自己寫的還要快很多倍,複製80個char 就只要85個指令時間。



在做這個的過程中發現一個有趣的現象,因為dsPIC是16bits的微控制器,當在跑for 迴圈時,如果變數宣告成char (8bits) 這樣運算會比宣告成int (16bits)的運算來的久一倍運算時間。



這樣以後在寫程式的時後要特別注意一下,為了省一個byte,卻浪費1倍的運算時間。


memory copy

最近又看到一篇有趣的文章,如何快速的複製資料:memcpy


那就複製裡面的程式,順便驗證一下是否正確。


首先,先建立2個char的陣列。



my_memcpy複製的副程式,以1個byte來複製。



這是以前的寫法,寫個for回圈,讓陣列test_b = test_a。


這樣需要1208個指令時間



執行my_memcpy副程式


用1個byte複製,需1386個指令時間,似乎沒有比較快。



my_memcpy複製的副程式,以2個byte來複製。



再執行my_memcpy副程式。


用2個byte複製,需要827個指令時間。



my_memcpy複製的副程式,以4個byte來複製。



再執行my_memcpy副程式。


用4個byte複製,需要467個指令時間。



my_memcpy複製的副程式,以8個byte來複製。



再執行my_memcpy副程式。


用4個byte複製,需要287個指令時間。



 


順便比較一下float的陣列。



這是以前的寫法,寫個for回圈,讓陣列test_b = test_a。


這樣需要1688個指令時間



my_memcpy複製的副程式,以1個float,4個byte來複製。


再執行my_memcpy副程式。


用1個float複製,需要1706個指令時間。



my_memcpy複製的副程式,以1個long double,8個byte來複製。



再執行my_memcpy副程式。


用1個long double複製,需要1067個指令時間。




 


結論:用指標的方式,當複製的byte數是一樣的話,執行速度並不會比較快。但如果複製的byte數較高的話,可以省去較多的時間。


2008年12月8日 星期一

模擬RLS

什麼是RLS(Recursive Least Square),疊滯式的最小平方解。


這樣的好處是只需要計算當下的資料。並且會記住之前的資料。


老大寫了一個matlab,那我們就拿他的matlab轉成C 語言。


這是老大寫的m file。



這是我用C語言寫的矩陣相乘,說實在的,這只是其中一部分而已。轉起來還真麻煩。


還好配合MPLAB IDE 驗證,方便許多。


因為dsPIC,含有DSP的引擎,所以應該是可以用DSP 引擎來做才是。


改天有空再來用DSP內建的函式庫試試好了。


以下是用MATLAB和C語言計算過後找到的四個參數。看起來好像是一樣的。




放大來看,就可以看到有一點誤差。


為了加速程式方便寫作,所以所有變數宣告float。且皆使用浮點數運算,這樣一個回圈約1ms,在30MIPS下。



還沒有時間推導RLS的數學式,只是單純的把MATLAB 轉成C語言而已。


該準備星期六的電腦鼠走迷宮競賽,2008/12/13,剛好也是全國微電腦設計應用競賽的頒獎典禮,很可惜的時間上不允許,只好放棄上台領獎的機會了。


 


如何利用MPLAB驗證程式

這是我如何將數學式,轉換成c語言程式,並如何交叉比對


首先,先用simulink建一個模型。將輸出值丟到workshop。



首先需將z轉換推導一次。


可以得到y(n)-0.3y(n-1)-0.54y(n-2)=u(n)-2.54u(n-1)。


y(n)為輸出的答案,u(n)為輸入的命令。


推導完後就可以寫程式了。


程式我寫的比較亂就沒有貼上來了。


最後只需要將答案用printf 印出來就好了。不過為何要用printf呢?原因是不需要接硬體就可以模擬了。



在編輯界面上的工具列上選擇Debugger→Settings。


會出現一個"Simulator Settings",選擇Rewind Input。可以選擇將資料建在一個資料夾裡。


或者是直接show出來。


這是直接show出來的答案。


最後將答案貼回matlab。再重劃一下圖。


這2個輸出的圖形非常像。


放大來看,其實是會有誤差的,不過誤差非常非常的小。


利用這個做法,可以非常快速的除錯,而且過程中可以不需要接硬體就可以了。