星期三, 4月 20, 2011

[8051]如何存取一塊外部記憶體的變數 with keil

公司有一個案子用到某顆8051 core的MCU,而這案子裡頭,有可能因為一些事故而會斷電,而某些資料或狀態能不受到斷電的影响,上電後能保持這些資料繼續運作,而其中能夠保持資料不變的方式就是將資料定期存入ROM內,例如EEPROM或是Flash,因為這些記憶體不會因為斷電儲存的資料就消散掉。

而我這顆裡面就有一個flash,datasheet說要存取這塊flash資料必須透過XMOV語法來執行,這是組語的方式,那keil呢?

若是使用keil,在以下連結有些許的討論:
http://www.keil.com/forum/8501/

定義一個變數,該變數使用到外部記憶體
ex:

unsigned char xdata Ralph
whatever = Ralph;
"據說(我自己還沒試過@@)",這樣的寫法即實現了XMOV語法,在keil中可以這樣使用。

另外,外部記憶體也可以使用pointer,以下:

unsigned char xdata *p; //它表達的是,指向XDATA區域的指標,而指標變數自身存放在什麼地方沒有說明,那就交給編譯器.
unsigned char * xdata p;//這樣表達的是:指向CHAR資料型態的通用指標,這個指標存放在XDATA區中,但是​​,它指向什麼區域沒有聲名,它是一個通用指標,佔三個bytes.

星期二, 4月 12, 2011

[名詞解釋]debounce time

其實是就是延遲時間,使系統延時感應物理的變化,以防止抖動產生的影響。


例如一個機械式的開關,從一個off切換到on的時候,切換的瞬間,其物理狀態會有一小段電位high low不停跳動的時間(類似雜訊),而debounce time的大小,由這一小段時間來決定。


如內容有誤,煩請指正。

星期五, 4月 01, 2011

如何解決用VC++ 2008開發的 *.exe 在別台電腦不能運行的方法

一年前我用VC++寫了一支視窗程式,當我從開發這程式的PC拿到別台PC Run的時候,發現他會出現錯誤而不讓我執行,找不到解決辦法,我就放棄繼續做下去了。

後來在一次偶然,我發現如果在別台電腦先安裝"Microsoft .NET Framework 2.0",就可以跑我從VC++開發的程式了。


如果有同樣的事情發生,說不定是對方的電腦沒有先裝該程式而引起的。

星期四, 2月 17, 2011

Lab View 內如何設定相對路徑

(內含圖片參考於http://www.labviewpro.net/,如有侵權,煩請告知,謝謝)


撰寫LabView程式的時候,有時會需要整合額外的小程式來加入,搭配system exec vi使用。system exec這個vi有一個輸入,為working directory。以我的習慣,當我有個test.exe小程式放在C:\program\底下,我的working directory會輸入路徑C:\program\  

問題來了,一般時候路徑只能夠打上絕對路徑,而如果整個LabView移到其他電腦後,路徑有可能會改變,這個時候使用相對路徑,說不定會方便一些。

LabView 有如何輸入相對路徑的方法,它可透過某些vi來實現,見下圖:

path

裡面有兩個可以得知正在執行vi的路徑,例如執行的test.vi在C:\LabView\test\資料夾內,則"Current VI's Path" vi能輸出現在這個VI所在的路徑加檔名,以此為例結果為C:\LabView\test\test.vi

如上例,只想要得到C:\LabView\test\要怎麼做呢?那就需要再搭配另一個LabView所提供的 vi:
Strip path.vi
相關做法如圖:
接一個Strip Path.vi就剝掉一層,以上例而言,則結果會是C:\LabView\
OwningDir_EXE

如此,我們可以使用絕對路徑來增加LabView的可攜性(我是這麼認為)。

星期五, 1月 21, 2011

[轉載]淺談8051(內有提到運算速度)

我為8051運算速度的計算在苦惱著,剛好看到這篇文章。
原始出處:(如有侵權 煩請告知)
The Star Also Rises: 科技:淺談8051

它裡面提到:

一般每個指令需要二到三個machine cycle不等,每個machine cycle費時12個clock,因此如果接上12Mhz的震盪器,則也1Mips的運算量。1T或4T,代表可在1個clock或4個clock完成一個machine cycle。
所以如果要計算運算速度,要先知道Xtal 的震盪頻率跟Machine cycle所消耗clock數。

星期三, 1月 19, 2011

[名詞]PN序列(Pseudorandom Noise)

目前所待的公司是做RF通訊的,有許多SG儀器,用來產生RF訊號,裡頭有許多選項,其中在封包的選項裡面,常常看到PN9 PN23(?),都不知道那是啥,所以最近查了一下它的資料。

原始出處:(若有侵權,煩請告知)
偽隨機序列(PN序列Pseudorandom Noise)(偽噪聲)

將基本的傳輸序列進行偽代碼的處理後的序列。 擴頻通訊中主要是偽隨機序列應用。 擴頻通訊中,抗干擾、抗多徑、抗截獲、多址性等特點都與PN序列密切相關。
    從理論上說,用純隨機序列去擴展信號頻譜是最理想的。 但在接收機中為了解擴應當有一個同發送端擴譜碼同步的副本。 因此,實際工程中,我們只能用偽隨機或偽噪聲(PN)序列作為擴頻碼。 偽隨機序列具有貌似噪聲的性質,但它又是周期性的有規律的,既容易產生,又可以加工和復制的序列。    cdma系統中,偽隨機序列(PN)用於數據的加擾和擴譜調製。 在傳送數據之前,把數據序列轉化成“隨機的”,類似於噪聲的形式,從而實現數據加擾。 接收機再用PN碼把被加擾的序列恢復成原始數據序列。

    通常,誤碼率測試都是用偽隨機二進制序列(PRBS:Pseudo Random Binary Sequence)作為信號源的原始數據,以模擬實際系統工作時信號的隨機性。 PRBS信號一般表示為PNx(比如, PN9一共有2 9 -1=511個比特) 。 該信號源輸出的信號送到待測接收器之後,接收器解出來的數字信息將送入誤碼率測試儀,與標準未隨機序列作比較。 另外我們已知不同的編碼的第三代碼分多址信號通信會有顯著的差異,其中 信息格式插入點的不同代表了模擬信號與實際系統信號的差異性。若在循環冗餘碼CRC之前插入,則被測技術要將測試循環完全解調解碼後,才能計算誤碼率,相當於測試待測接收器的整體效能;而若在擴展頻譜之前插入信息格式,則待測接收器只要將測試信號進行解擴後,就可以計算誤碼率了,相當於測試待測接收器的解擴電路性能。 由此可知,改變信息格式的插入點能使我們對接收器進行分階段測試。

星期二, 1月 11, 2011

[轉貼]如何選擇低壓降穩壓器

最近雖然持續學習了很多東西,不過都沒記錄下來。


現在趕快把最近有在搜尋的東西給紀錄一下,方便以後瀏覽~。


因為目前要Lay一塊板子,而電源端需要用一顆LDO,所以找了一些Chip的datasheet來看,在規格中看到了一項"dropout voltage"。稍微搜尋一下網路找到了這篇文章:
如何選擇低壓降穩壓器


其中他提到:
輸入、輸出和最小電壓差 (dropout voltage)
選擇低壓差穩壓器時,必須確定電源電壓在穩壓器的輸入範圍,下表是可攜式設備的常用電池以及它們的電壓範圍。 

判斷穩壓器能否提供所需輸出電壓時,必須將穩壓電路所要求的「最小電壓差」(dropout voltage) 列入考慮;輸入電壓必須大於目標輸出電壓以及最小電壓差額定值的總和,也就是VIN > VOUT + VDROPOUT,若VIN降至此電壓以下,穩壓器將失去穩壓功能,輸出電壓也會隨著輸入電壓而改變,其值等於輸入電壓減掉導通元件的RDS(on)乘上負載電流。 

值得注意的是,當輸入電壓不能滿足「最小電壓差」要求時,穩壓器效能也會改變,此時推動導通元件的誤差放大器會進入完全導通狀態,使得迴路增益為零,這表示輸入電源和負載的穩壓能力會變得很差,電源供應拒斥比也將大幅下降。 

選擇以固定電壓方式提供所需輸出電壓的低壓降穩壓器,以便省下外接電阻分壓器的成本和空間,這些電阻分壓器主要用來設定可調整式元件的輸出電壓。某些可調整式穩壓器還能將輸出連接至回授接腳,讓輸出電壓等於內部參考電壓,其值通常在1.2 V左右。請向製造商確認其產品是否支援這項功能。 
感覺如果我用的LDO若輸入電壓小於輸出加上 dropout voltage,LDO就沒辦法穩定工作了,所以這個值有其重要性~。



星期三, 9月 01, 2010

[LabView]Global 變數-可以共同給兩個VI使用的變數

公司的儀器不多,有三四個以上工作站的handler,現有的儀器卻只能架設一站,其他二三站則毫無用武之地。

我曾經提出一個共同存取一份文檔個方式,目的在於假設當工作站1要用儀器A的時候,會在預設的文檔寫入狀態資料為使用中(例如儀器A旗標舉起),然後開始使用該儀器。此時若工作站2要使用儀器A時,他也會先讀取該文檔。倘若讀取結果得知儀器A在使用,便等待。直到工作站1用完儀器A後,寫入儀器A可被使用的訊息到文檔內。如此工作站2在讀取到此訊息後,便知可使用儀器A,然後同樣在文檔中改變儀器A狀態為使用中,隨即使用儀器A。

這個作法應是可行的,不過當我打電話給LabView高手Legend跟他提到我的想法時,他給我一個建議,就是使用Global variable ,他是一個可以使用在不同vi的變數,也就是說當我開兩個獨立的vi的時候,可以透過這種變數,將他們的關係連結起來,可能類似我上頭所說的那個方法。

相關使用可參考下面這個連結:
http://www.labviewpro.net/teach_content.php?fid=6&post=341&fpt=8

星期三, 7月 28, 2010

[Study]BMP 檔格式範例

相關的Bitmap格式以下的文章已經講解得很詳細了。

點陣圖(Bitmap)檔案格式

我貼上一些範例,如圖,上方的檔案是10*10像素全白的,下方則是10*10全黑的。
兩個檔案皆為單色圖像格式。

從第0x0036位元組算第4*N個位元組後為點陣圖資料,如圖中第0x0036位元組後八個位元組為Palette(調色盤資料),其中前四個代表黑色,後四個代表白色。


所以從0x003E開始每一個bit代表一個像素,每一行(or每一列待查),以DWORD來表示,以下為例,前10個bits代表一行(or一列),不過要用一個DWOED(4 bytes)來表示,所以一行還一列用了10bits後,剩下的32-10=22bits以零填補。
單色BMP格式範例

星期五, 7月 16, 2010

[轉貼] word 如何製作目錄

因為是轉貼的,所以沒啥好說的。不過這個很實用,長時間沒用又會忘掉,先記下來。

轉貼網址

星期三, 7月 07, 2010

[轉貼]What is MTORR(Many To One Route Request)

突然發現我對ZigBee的了解還是不夠多~~

擷取轉貼來源:

ZigBee Pro Feature Set塵埃定 ZigBee商機現蹤

新通訊 2008 年 1 月號 83 期《 技術前瞻 》

文.張志龍

就應用而言,很多的情境會把資料集中收集,多數的節點都會把資料往同一個節點送,因此整個網路拓撲就像樹狀一樣。由於ZigBee Pro Feature Set並不使用樹狀路由的功能,此時為了建立樹狀的路由路徑,如果每個節點都做一對一路由要求(Unicast Route Request),才能建立往源節點(Originator/Source)的路徑,就會花很多時間,相較起來沒有效率,尤其是在規模較大的系統。  

為因應上述情形,ZigBee Pro Feature Set提出一個新的路由方式,稱為多對一路由(Many to One Route)。當發送多對一路由要求時,接收到這個封包的節點,就會直接建立一條往源節點路由的路徑,不須再透過路由回應(Route Reply)的機制建立資料傳送的路徑,所以很快的所有節點就會建好傳送路徑。反之若源節點要傳送資料給其他裝置,基本上還是得透過一對一路由要求的方式,建立起源節點對於其他節點的路由路徑。不過在ZigBee Pro Feature Set增加了一個源節點路由(Source Route)的功能,就是當路由路徑有變化時,節點會先發出一個路由紀錄命令(Route Record Command)給源節點,這個命令中會記錄這條路徑上經過的所有節點,當源節點接收到這個命令後,會把這條路徑記錄在一個叫做源路由表(Source Route Table)的表格中,只要源節點須要把資料傳送到其他節點時,就會先到Source Route Table找尋傳送的路徑,以加快時間,並且減少建立路由路徑或是做路徑修復的次數。而這些功能的目的都是為了增加網路上路由的效率。  

星期日, 7月 04, 2010

夏日,流浪

你喜歡夏天嗎~

整年最炎熱的季節,白天最長的季節,最會流汗的季節。

夏天,真的很適合流浪,那種炎熱的氣後,那種汗濕透的襯衫還有炙陽下的生機,我認為夏天,真的很適合行腳旅行。


星期二, 6月 29, 2010

[轉貼]阻抗匹配

最近要開始Layout了,不過這次有東西可以參考,是有東西可以模仿的。雖然如此,參考的資料也是有小小一疊需要閱讀,裡面就有提到阻抗匹配。


阻抗匹配?我大學畢業後就幾乎根本沒再碰的東西啊啊啊~~。

因此,我上網查了一些資料,日後慢慢看XD(謎:你還想要多慢)。

阻抗匹配

有關於RF的阻抗匹配(提到Smith chart ),這篇我想我會看不懂~~。

星期五, 6月 25, 2010

[轉貼]RF遙控器

最近要做器車座椅遙控器的提案,所以找了一些資料。以下這篇資料我覺得寫的還不錯(比我好XD),所以記錄下來囉。

http://www.im-perial.com.tw/rf遙控器會給電視遙控帶來什麼新氣象/

星期四, 6月 24, 2010

[轉貼]About Balun

來源:http://www.rimtai.com/chtr/products/Store/accessories.asp?CATL=70

平衡不平衡轉換器 (Balun) BALUN 是一種裝置, 它使平衡形式的天線  (例如: 偶極天線) 可用不平衡形式的饋線 (例如: 同軸電纜) 來供電, 反之亦然. 它的作用在於對稱與不對稱的電力饋送之間的相互轉換.
簡易的結構介紹, Balun 基本上是由高品質的高頻高壓線圈所組成, (等級視所設計的耐功率而定).一般日製品的耐功率較小, 而美製品的耐功率則以 1,500 W 的法定最大功率設計. 所以所使用的材質規格會較高. Balun 最常用的規格為 1:1, 製造方式用的以 3 條濾波線圈纏繞於 Air Core 空氣芯上構成 (通常成本比較低), 有些則纏繞於鐡粉芯構成 (成本較高一點, 但通常可用的頻寬會做的比較寬), 有些是絕緣套筒變壓器原理構成 (成本最高, 效能最好). 細節我們再以別的網頁來探討.
1:1 的 Balun  廣泛使用於對稱的偶極天線,
4:1 的 Balun  適用於 200ohm 負載對 50ohm 的負載, 或是 300ohm 的負載對應 75ohm 的負載
6:1 的 Balun  適用於 300ohm 負載對 50ohm 的負載, 或是 450ohm 的負載對應 75ohm 的負載
9:1 的 Balun  適用於 450ohm 負載對 50ohm 的負載, 或是 675ohm 的負載對應 75ohm 的負載, 這麼高比值的 Balun 也常用於不對稱的 Long Wire 天線
12:1 的 Balun  適用於 600ohm 負載對 50ohm 的負載, 或是 900ohm 的負載對應 75ohm 的負載, 這麼高比值的 Balun 也常用於不對稱的 Long Wire 天線, 矩環型或是三角環型 (Delta) V-beam 天線.

我才不要這麼多Router~~

安東尼提供我兩個解決方法,使用

Super Parents-他不會儲存child的資料,所以任何一個child醒來要奶喝她都照單全收,真是偉大(泣)。

使用#define EMBER_MOBILE_NODE_POLL_TIMEOUT,去調整EndDecvice資料存放在Parent的時間,時間到了之後,資料就會被清除,Parent就失憶了,新的EndDevice就可以加進來囉。

理論上是可以這樣做,不過我還沒試過,之後我再回頭看有沒有用囉,科科。

星期三, 6月 16, 2010

[筆記]時間管理術

最近看到這篇文章,對於開始工作的我來說,可能可以讓我對於自己的時間管理多了一分重視。