發表文章

目前顯示的是 3月, 2008的文章

8x51 起手式 -LED 跑馬燈

圖片
講到自動控制一定會提到『 8x51 系列』的應用,這系列的晶片在近二十幾年來已經被廣泛開發到爛掉,無處不見其縱影呀,從燈號控制、定時裝置到各種自動化的家電、工業產品,都可以找到它的存在。因此,凡是講到要學習自動控制的應用與設計,『 8x51 系列』可說是必學的項目。 這學期因為專題教授強烈的『口頭勸說』和為了順便湊畢業學分,就跑去選修了『 8x51 微處理機』的課程,重溫了以前零星的經驗。話說這堂課有多次實作的作業,過程中玩弄電路板和程式非常有意思。不過課程免不了從最簡單的 LED 跑馬燈開始教,雖然乏味但也是一個惡搞經驗的開始〔尤其是不依照老師要求時 :D〕。 這是第一次作業的電路示意圖〔圖的標示和真實腳位不一樣,請參考 8x51 的腳位定義資料。〕: 作業目標是讓 LED 燈號從第一個燈開始,每 0.2 秒變一次燈號,向左旋轉三圈後,再往右反方向旋轉三圈,如此以重覆動作跑下去。程式設計流程大致上是: 程式是用 ASM 寫的,原始程式碼和詳細註解如下: MOV R0, #24 ; 設定切換 LED 次數:跑三圈共23次 ; 因為包括起始燈號,所以要設定成 n+1 次 MOV A, #11111110B ; 以 bit 為單位,設 1 代表該腳位會輸出 5V 電壓 ; 設 0 則腳位輸出 0V 電壓,會讓 LED 有電位差而亮燈 ; 這裡設最右邊第一顆 LED 燈泡為起始燈 RUNL: MOV P0, A ; 使用 A 的設定值來設定 P0 ,以控制 LED CALL SLEEP ; 呼叫 SLEEP 副程式,暫停 0.2 秒 RL A ; 將燈泡設定值向左平移 DJNZ R0, RUNL ; R0=R0-1 ; 然後判斷 R0是否為 0

Hacking Huawei E220 HSDPA 3G 網路卡的裝置和相關連線訊息

圖片
3G、3.5G 這半年多來炒的沸沸揚揚,令誰都想去辦個門號一探究竟。不過,談各家電信業者的 3G 服務品質已經沒什麼意思,來 Hacking 一下 3G 網卡的裝置訊息似乎會有趣得多 :)。目前,各家業者的 3G 門號,都是搭配『 Huawei 』的網卡,尤其以『 E220 HSDPA USB Modem 』最為普遍,其小巧又乾淨的外型相當討喜,因此就選擇拿它來開刀。 如何在 Linux 上安裝 E220 就不多說了,任何人都能在 Google 找到不少文獻,比較值得注意的是,安裝過程中會出現三個令人迷惑的 device file〔ttyUSB0、ttyUSB1、ttyUSB2〕。經搜尋過網路上的資料和實地測試後,已經大概知道這三個 Device file 的用途: ttyUSB0: 被當成一般 modem 通道使用,處理 3G 網路撥接用 ttyUSB1: 回傳相關的裝置和連線訊息 ttyUSB2: 放驅動程式的儲存裝置〔不確定〕。 如果你有將網卡裝起來,通常可以使用 pppd 透過 ttyUSB0 連線到 3G 網路,我想這部份就不用再多做解釋了。倒是 ttyUSB1 的部份比較特殊,會回傳一堆奇奇怪怪的 messages 〔可以使用 cat /dev/ttyUSB1 看到內容〕,而這些 messages code 又各是代表什麼意思,就相當令人好奇,當然,這也是這次 Hacking 的目的。 :D 經過一番測試後,整理了一些 ttyUSB1 回傳的狀況。 不論網路是否有連線,每固定一段時間就會回傳: ^BOOT:82907211,0,0,0,6 不過目前為止,還不了解此訊息的內容是什麼意思,有可能是裝置編號或是 firmware 的版本。 撥號連線後,就開始會回傳一些不一樣的訊息: 目前的網路模式: ^MODE:5,5 ^MODE:5,4 其中 5 是代表 HSDPA , 4 是代表 WCDMA。而其他的 3、2、1 應該分別是 EDGE、GPRS、GSM,不過,大台北地區的 3G 基地臺相當完整,我還沒機會碰到有 3G 以下的模式,所以無法確定。 連線訊號強度: ^RSSI:8 其中的數字 8 即代表訊號的強弱,理論上 10 應該是最強,而 0則代表沒訊號〔目前還沒機會測試到〕。 然後有資料傳輸的相關資訊和統計〔每兩秒鐘更新一次〕: ^DSFLOWRPT

讓我們偷看未來的 Graphical User Interfaces

圖片
說到 Graphical User Interfaces〔以下簡稱 GUI〕,就不能不提到『 Apple Inc 』的貢獻,其產品的推出確實一直為我們帶來很大的想像空間,尤其是『 Apple Mac 』推出之後,炫麗的 Dock 特效一度造成風潮,可以不難發現新一代的 GUI 早就已經開始悄悄萌芽。或許『特效』這個關鍵字會讓你想到一些知名的 3D Desktop Technology〔如:Compiz 和 Window Vista Aero〕,但在這邊我們並不會去探討它們,不過未來的 GUI 還是脫離不了 3D Technology 的範疇。 電腦 3D 技術發展至今,最近在基礎層面的應用也被許多人所關注,尤以 Mobile Device 上的動態更令人感興趣,像是 Apple iPhone 內廣為人知的特效就是一個例子。現在要介紹的一個 Open Source Project -『 Clutter Toolkit 』,就運用 OpenGL 技術提供一個效果十足的 GUI。 以下是從 Clutter Toolkit 官方網站摘錄的一段簡介: Clutter is an open source software library for creating fast, visually rich and animated graphical user interfaces. Clutter uses OpenGL (and optionally OpenGL ES for use on Mobile and embedded platforms) for rendering but with an API which hides the underlying GL complexity from the developer. The Clutter API is intended to be easy to use, efficient and flexible. Clutter Toolkit 提供一個快速且有豐富動畫特效的 GUI Library,讓程式人員可以很輕易的使用 Clutter API 去開發出一系列好用且具有科技質感的使用介面。若是更進一步結合觸控螢幕當 Input,操作易用性將大大提升,能讓使用者能有非常特別的操作感受。從官方『 Clutter Bl

初探 Glib Programing - I/O 處理事件化『 g_io_channel』

C語言本身沒什麼困難,只要好好弄懂指標與記憶體位置之間的關係,大體上『應該』就算會 C 語言了。真正令人感到怯步的部份,反倒是藏身其中的各種演算法、資料結構和作業系統機制問題,要經過長年累月的 coding 才能盡數體會。 相信許多人都曾經歷過自己硬幹『串列』的美好時光,造這種基本的資料結構似乎也成為了寫 C 的樂趣之一。但是,你可曾想過哪一天寫 C Program 時,再也不需要自製串列結構、再也不用使用 select() /poll 去操作 I/O、再也不用怕處理 String 遺漏許多安全細節、再也… ,一切『原始』的結構和機制,如果都不用再自己去刻劃,這樣的輕鬆的一刻到來,會是多麼愉快呀!『Glib』的出現,使所有夢想得以成真,讓 C Program 的開發更容易、更簡潔有效率且更穩定安全,如果說 Glib 是 libc 的加強補完計畫也不為過!〔雖然少了很多 coding 的樂趣 :( 〕 Glib 的眾多包裝之中,『I/O 處理事件化』是一個很特別部份,我們可以等待 I/O 的回應而不需要再用到 select() + loop。只要用『 g_io_channel 』設定好 I/O watch 後,讓 Glib 自己觸發 R/W 的事件 handler 就可以了,就如同 gtk 中觸發各種事件一樣的簡單。 基本 I/O 事件的 handler 宣告和設計: static gboolean gio_in (GIOChannel *gio, GIOCondition condition, gpointer data) { GIOStatus ret; GError *err = NULL; gchar *msg; gsize len; /* 若 IO HUP,直接返回 */ if (condition & G_IO_HUP) return FALSE; /* 讀取 IO 的資料 */ ret = g_io_channel_read_line (gio, &msg, &len, NULL, &err); if (ret == G_IO_STATUS_ERROR) g_error ("Error reading: %s\

LXDE 近期動態

圖片
之前多次提到的 『 LXDE 羽量級桌面環境 』最近進展神速,除了 pcmanfm 的許多 bug 被修正之外,也添了不少新功能,其中最重要的就是 desktop-icon。這新的 desktop-icon 將提供桌面圖示功能,屬於 pcmanfm 的 branches 之一,目前已經成熟達到可用階段,即將被併回原本 pcmanfm 的主結構中。 在 session manager 的部份,lxsession 已經被重新設計過,現在可支援常見的關機、休眠、儲存執行狀態等功能,提供作業環境的許多必要管理機制。 而 LXPanel 裡的新網路監控外掛『 netstat 』也進入了實用測試階段,除了有線的網路裝置狀態之外,在無線網路的部份提供了更完整的支援,如 AP Scanning 等。如果沒有什麼意外,在下一版 release 就會預設使用此 plugin。 以下是 netstat plugin screenshot,不難由 screenshot 中可以猜到, netstat plugin 將是以取代 NetworkManager 為目標而設計,因為尚缺部份功能,目前仍在持續開發中: Wireless Information Encrypted AP Cable Detect AP Scanning 另外,由於 LXDE Project 近日得到了 ASUS EeePC 等捐贈,我們有更多機會在 EeePC 上測試 LXDE,所以將會針對 EeePC 此類 Mobile Device 做更多一系列的開發。 歡迎大家的參與, LXDE 將會持續努力向前走,提供使用者一個『飛快』的桌面環境! 後記 好睏。都不太清楚自己在寫什麼了,只憑著興奮的情緒硬撐開眼睛在亂寫!