2009年8月28日 星期五

AVR Dragon 的包裝

話說 AVR 這顆 RISC CPU 有個平易近人的燒錄器叫做 AVR Dragon。因為它很便宜所以我就弄了一台回來玩,代理商還親自送過來公司給我。當我一看到 AVR Dragon 的包裝時,還很疑惑這真的是燒錄器嗎?因為他的包裝實在看起來太像玩具了!而且背後還有龍的圖案,看來 Atmel 行銷部還挺幽默的。

2009年8月26日 星期三

RTX51 Full Porting on 8051

研究了將近一個月 RTX-51 Full 終於在今天成功的 Porting 到 8051 上面了!不過還是有點問題,就是 semaphore 跟 mailbox 都還不能使用。可惜的是前幾天打電話給 Keil 的代理商想詢問有關 RTX51 的訊息,沒想到得到的結果竟然是 RTX51 停產的消息。RTX-Tiny 雖然內建在 PK51 上面,但是功能遠遠輸給 RTX51 Full 版,很遺憾的是網路上面相關的訊息真的是少之又少。通常這種情況只有兩種可能:
1. 此路不通,建議改走別的方法。
2. 走在全世界的尖端,開創一條別人沒走過的路。
不過 99% 都是後者,只有 1% 靠運氣也靠實力才有機會走到 2。目前手邊還有 uCOS II 跟 FreeRTOS 這兩個 Operating System,希望也能夠 Porting 成功!By the way, 今天真是個特別的日子~

2009年8月5日 星期三

軟體模擬 UART

今天早上臨時起意想說來研究一下 Software 的 UART,結果下午就測試成功了。UART 是一種 8051 用來跟外界通訊的介面,通常一顆 MCU 裡面只有配置 1~2 組(大部分都是一組)。因此,如果您已經使用其中一組來與PC 端通訊的話,您就無法跟其他微電腦進行通訊了。軟體模擬 UART 的概念很簡單,就只是利用 Carriage Flag 來進行並列轉串列傳送資料。今天的整合中,最困難的一點就是將 Assembly(A51) 跟 Keil C51 進行結合。事實上,同時使用 C 及 Assembly 並沒有想像中困難,但是如果要自己寫 Assembly 函式並且在 C 裡面使用的話,對於記憶體備份要特別小心。

今天另外找到了這個禮拜遇到的一個大 BUG,就是在 ADC 讀取時會發生某特定位元出錯的問題。後來只利用了一個簡單的 loop_delay() 就解決了。原因是 DATA signal 比 Sweep signal 相位落後一點點所造成。MCU 接收到 Sweep signal 後,準備要接收時,DATA signal 才剛好處於 Rising edge 此時進行訊號擷取容易造成誤判。下圖就是我把示波器當做數位邏輯器的照片(DATA signal)

2009年8月3日 星期一

Software PWM for multi-channel

最近花了很多時間在研究 Operating System,剛好先前在設計 multi-channel PWM 時遇到瓶頸,就順便把嵌入式系統的觀念導入。在 Simulation 底下看起來蠻順暢的,果然 OS 沒有白學!本次實驗中除了改變 duty cycle 之外,還可以改變 period (也就是 frequency),4個 channel 看起來像是各自獨立的在動作,這就是 real-time OS 的精神所在。說不定有一天可以做出 Multi- PID 的控制器,這樣就可以拿來控制機器人了~