星期五, 12月 16, 2011

keil error C129

error C129: missing ';' before 'u***k'似乎慎很容易在編輯程式發生的一個錯誤,有一部分是真的忘了加上分號,但有一種狀況是,在問題function內有使用某個定義(例如Uint8,通常這是原始keil額外的定義),事故在那個檔案記得要引入問題function內有使用到deftype的標頭檔,如此可能就能解決該錯誤了。

星期三, 10月 19, 2011

如何解決 USB 轉 Rs-232 轉接驅動 在 Win7無法工作的j問題

我很常需要用到Rs-232的介面對MCU做通訊,不過現在的電腦設備對於Rs-232的資源提供越來越少了......幸好現在有公司推出USB轉Rs-232的轉接頭,只要將USB端連接到電腦端,就會產生一個虛擬的COM Port。如此就可以直接套用Rs-232的應用啦。

不過最近因為開始使用Windows7 發現某種轉接頭的驅動安裝在電腦上是有問題的,雖然找的到裝置,不過安裝完通常在裝置管理員會出現一個error code 10的錯誤代碼,即使去產品的公司下載標明與Win7相容的驅動,仍然問題未解。


後來循著以上的幾個問題點,在網路上找到了解決的辦法:

就是安裝另一個版本的驅動,不是相對的Win7相容驅動,而是要用專為vista製作的版本~。

後來依循著網友的說明,我安裝之後,就可以使用了!
如果有遇到相同問題的人,可以試試。

相關內容:(摘自:http://forums.adafruit.com/viewtopic.php?f=8&t=12655)

Re: USB/Serial Converter "This device cannot start.(Code 10)"Postby chazwark » Sat Apr 24, 2010 10:50 pm
I fixed the "Device Cannot Start Error Code 10" issue on Win7 64-bit by installing the Windows Vista version of the Prolific USB-to-Serial Adapter Driver from cooldrives.com. First, I uninstalled any previous driver version, and then installed the Vista version. No reboot was required. The Vista version of the driver ran just fine on Win7 64-bit and recognized the Prolific USB-to-Serial Adapter as soon as I plugged it in.

星期五, 10月 14, 2011

[Keil] ERROR L211 問題

我在編譯的時候發現這個問題,且 EXCEPTION為"ACCESS TO FILE DENIED"。

在網上搜尋了一下,看到以下這篇文章:
關於C51編輯器UV3的錯誤FATAL ERROR L211

內文提到:
......
我當時的工程文件目錄如下圖所示: 看到這個地方,突然明白了一個問題所在了,這個工程名字是MODBUS,在工程文件夾中還有一個文件夾名字也叫MODBUS 問題就來了,UV3在編譯工程的時候,需要創建一個與工程文件名 ​​一樣的文件,而這個文件是沒有後綴的, 這下好了,UV3在創建MODBUS文件的時候發現MODBUS文件已經存在,於是要去覆蓋它,但是存在的MODBUS是一個目錄, UV3覆蓋自然會失敗了。
......
趕緊刪除這個作祟的MODBUS目錄,重新Build,一切順利,呵呵,大功告成!......



看完後,我看一下Log中的提示:FILE:OOXX

突然想到編譯出來的HEX檔也叫做"OOXX",故重新命名HEX檔(Options for Target>Output>修改Name of Executable),就編譯成功並順利生成HEX檔了。

星期三, 10月 12, 2011

Virtual Box USB裝置安裝失敗問題

因為一些需要,我的電腦裡面會使用Virtual Box來模擬出一個OS,像是現在許多軟體都還沒有支援Win 7(而且Win 8都已經在試用了)。為此,方便使用一些軟體,我還是在電腦用VB裝了一個XP  OS。

使用Virtual Box我最常遇到的問題是裝置驅動的問題,尤其像是USB熱插拔的裝置,有很多驅動雖然相容XP,但是插入電腦,往往看到Virtual Box沒有反應,或是跳出錯誤,例如:"Usb device with UUID ...... is busy with a previous request. please try again later......"。這樣若需要控制USB裝置的話,有了驅動問題就變得很麻煩。

如果遇到上述問題,可以照以下步驟試試看,可能會有所幫助:

檢查裝置篩選器:
  1. 從VirtualBox清單裝找到虛擬OS,在該OS Icon上點擊右鍵,點選"設定值"。
  2. 在跳出設定值操作清單中,選擇USB
  3. 右邊會出現"USB裝置篩選器",按"從裝置加入篩選器"圖示增加USB裝置,最後按確定。
  4. 再進去虛擬OS後,重新插拔USB裝置,照一般步驟應可成功。

有一部分驅動沒有成功的問題是來自此選項未增加。若還是不成功的話,可以參考以下這篇在VirtualBox論壇的討論串(來源:https://forums.virtualbox.org/viewtopic.php?f=6&t=39104#p176270):

內有提到:
Re: USB not workingPostby nayasis » 24. Feb 2011, 10:14
I've got solution finally... T-T
(It seems like problem of window 7)

1. My Host is window 7 32bit home premium. But, 64bit's solution may be same because problem was caused by USB filtering function of WINDOW 7.
2. first of all, edit your registry
- Open the Windows registry, by clicking on Start > Run and typing regedit
- Navigate to the following location HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Class\{36FC9E60-C465-11CF-8056-444553540000}- In the right hand panel, if the the UpperFilters entry exists, then delete it
3. Install virtualbox USB driver manually.
- Goto folder C:\Program Files\Oracle\VirtualBox\drivers\USB\filter- Click right mouse button on file named VboxUSBMon.inf- Check Install(I) (maybe.. My window is korean so it dose not exact. )
4. Rebooting
5. Unplug your USB memory (or joystick..)
6. Open VirtualBox and Close it rightly.
( it will remove your USB device from VM's seized list. )
7. Plug your USB memory.
8. Open VirtualBox and Run Virtual Machine.
9. Click right mouse button on USB icon placed in status bar which is below VM window.
10. Check USB device what you want to plug in.
11. Enjoy !!


** notice !!
Do not chain your USB device like snake. for example... A usb bridge <- B usb device... and check B usb device in VM. like this...
to use B usb device, you must check A usb bridge first !... it's so complicate..

希望對於類似的問題可以達到幫助。


星期三, 8月 24, 2011

[PADS]如何消除鋪銅

有時候Lay 新的PCB板,可以從舊的*.pcb檔來編輯,這樣沿用到以前的設定,可以節省去設定的時間。不過通常拿就得來改會遇到一個小問題,就是上頭會做鋪銅,所已在擺件之前,要怎麼解除鋪銅呢~?


有兩個指令可以試試,一個是"po" 另一個是"spo",因為鋪銅的方式有兩種,所以解除鋪銅也有兩種,可以嘗試輸入,看看鋪銅的顏色有沒有不見~如此就可以繼續使用Lay out了。

星期三, 7月 27, 2011

[轉貼]SMD元件知識,對新手很有幫助啊。

今天在畫電路圖的時候,遇到某些IC尺寸問題,所以開始花一點時間找0603 0402等等IC尺寸的定義,就找到以下這篇,有很多專有名詞,我覺得對於一個"工程師"(為何要框起來,哈),是需要對這些有一點點了解的。 

原始網頁:http://www.smthome.net/html/201001/235314.html





星期二, 4月 26, 2011

判別試 if else 簡寫

if ... else的簡寫如下


(condition)?statment1:statment2

condition 是條件式
statement1 是當條件成立時執行
statement2 是不成立時執行

星期三, 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就沒辦法穩定工作了,所以這個值有其重要性~。