12/17/2009

SuSE問題記錄

感謝黑眼大的幫忙
讓我的問題都能被解決
在此記錄下來

安裝英文介面後的問題
1.網站或mail的某些字會暈開
解決半法:
1.yast2 安裝 chinese-fonts-setting
2.sudo ln -s /etc/fonts/conf.avail/57-sung.conf /etc/fonts/conf.d/
3.sudo fc-cache

2.gedit 開啟中文字會有亂碼
解決半法:
1.alt+F2
2.輸入 gcinf-editor
3. app-->getit-2-->preferences-->encodings
4.點二下 auto_detected
5.加入 BIG5 移至最上
6.如需其他文字碼,可在自行增加

3.想要讓firefox 播放內嵌wma wmv的網頁
需在安裝mplayer and mplayerplug-in
不過yahoo的電影預告片我還是不能看
有人能教我嗎? 囧
**原來是公司網管鎖住了**
**在家裡試是沒問題的**

4.如果firefox點選flah play的按紐卻沒有反應
vi /usr/lib/nspluginwrapper/i386/linux/npviewer

修改為如下
#!/bin/sh
TARGET_OS=linux
TARGET_ARCH=i386
export GDK_NATIVE_WINDOWS=1
. /usr/lib/nspluginwrapper/noarch/npviewer

5.gmplayer 顯示中文字幕
vi /etc/mplayer/mplayer.conf

增加
subcp=cp950
font=/usr/share/fonts/truetype/arphic/ukai.ttf
subfont-text-scale=3

需先確認有這個字型或是可換自已想要的字形

6.如果想用banshee 聽mp3
只需在加裝gstreamer-0_10-fluendo-mp3
相容性問題請更改來源為packman即可

7.英文語系使用 WINE 中文會亂碼
輸入:export LA_ALL=zh_TW.UTF-8

12/08/2009

SuSE Linux 套件列表

最近常在重灌SuSe linux
所以把常用到的安裝來源列出來
才不會要常常找來找去

Packman:
1.http://ftp.twaren.net/Linux/Packman/suse/11.2/
2.http://ftp.gwdg.de/pub/linux/misc/packman/suse/11.2/

Gcin:
http://download.opensuse.org/repositories/home:/swyear/openSUSE_11.2/

Wine:
http://download.opensuse.org/repositories/Emulators:/Wine/openSUSE_11.2/

因為內建的totem banshee
是需要在安裝解碼的套件
依使用KDE or Gnome安裝
Restricted Formats/11.2
http://opensuse-community.org/Restricted_Formats/11.2

就不用在另外找別的程式來聽音樂或看片了
而在安裝時會出現問題
請把來源改為 Packman 就可以了

p7zip+q7z
可解rar檔案,GUI介面

w32code-all

12/06/2009

OpenSuSE 11.2 64bit 安裝wine

因為工作上都是在寫程式
而有些IDE都只有windows版
所以只好安裝wine來寫程式

1.在YaST2加上來源
"http://download.opensuse.org/repositories/Emulators:/Wine/openSUSE_11.2/"

2.安裝wine

3.將"C:\WINDOWS\Fonts\MingLiU.ttc" copy到"/home/user/.wine/drive_c/windows/fonts"

4.Downlad reg_fix解開後,執行以下指令,fonr.reg為所解開的路徑

wine .wine/drive_c/windows/regedit.exe font.reg


5.wine設定可打 winecfg

6.要玩wow,請直接用copy的將安裝在windows下的wow整個copy過來會比安裝還來的快,在打此指令 wine "C:\Program Files\World of Warcraft\WOW.exe" -opengl
或是修改 /wtf/Config.wtf檔,加下以下三行

SET gxApi "opengl"
SET SoundOutputSystem "1"
SET SoundBufferSize "150"

打此指令 wine "C:\Program Files\World of Warcraft\WOW.exe"
目前測試是在linux下玩比在windwos下還順,資源也用的比windows少
真是好太多了

12/05/2009

OpenSuSE 11.2 64bit安裝讀卡機

***後來驗證是目前只support 32bit linux ****
***只是我有安裝相容32bit軟體所以能用********

網路上找到的教學都是舊的
而我用的又是64bit os
自已試了好久 終於試出來了

我是使用ez100pu

1.請使用YaST2安裝 Pcsc-lite

2.請downlad EZ100PU_Driverpcscd_for_LibUSB.tar.gz二個檔案

3.解開pcscd_for_libusb.gz檔

./install

它會蓋過你所安裝的pcscd

4.解開EZ100PU_Driver檔,在driver_ezusb_v1.4.9目錄下會少一個 drivers64 的目錄
所以請將driver裡的東西copy到drivers64,然後需新建一個pcsc的目錄

cp -r drivers drivers64
mkdir /usr/lib/pcsc

然後下此指令

./check_env
./install

等它cp完檔案

5.插上讀卡機

/etc/init.d/pcscd restart


6.使用firefox連上玉山銀行atm網頁,安裝WebATM plug-in
即可開始使用玉山銀行atm

11/30/2009

Go Go Linux

以下是用來安裝Linux的二台電腦
一台是筆電,一台是桌機
目前打算整個移除winddows
而使用Linux

桌機:
CPU : AMD Phenom X4 9550 (B3)
Menory: 2g
Display: asus GT9800 top
OS : openSuse 64bit 11.2 (Gnome)

1. sh ./nvidia.xxx.run -q
2.sax2 -r -m 0=nvidia

筆電:
CPU : Intel Core2 Duo T3100 1.9g
Memory: 2g
Display: ATI Mobility Radeon HD4330
OS: OpenSuSE 64bit 11.2 (Gnome)

1.sh ./ATI.xxxx.run
2.aticonfig --initial
3.sax2 -r -m 0=fglrx

11/24/2009

OpenSuSE Linux

這次在筆電上安裝了Linux
選了OpenSuSE
就只因為"壽司"好吃 :D

筆電:HP ProBook 4310s
OS:OpenSuSE Linux 11.2
Xwindows:Gnome
Display:ATI 4330

問題記錄:
1.剛安裝完後,沒有裝ATI Drive
按下ctrl+Alt+F1~F6
畫面全黑無游標
按下ctrl+Alt+F7
可正常顯示Xwindows

解決半法:
請至ati官網download drive
安裝請參考官網說明
重點:整個安裝完後,重新開機

開機重新進入Xwindows後
在Command Line輸入 init 3
輸入用戶名和密碼
然後輸入

>>aticonfig --initial --input=/etc/X11/xorg.conf
>>sax2 -r -m 0=fglrx
>>reboot

沒意外的話就會自動重開
在次進入Xwindows後
輸入

# glxinfo
OpenGL vendor string: ATI Technologies Inc.
OpenGL renderer string: RADEON X850 PRO Generic
OpenGL version string: 2.0.6286 (8.33.6)

有看到這個就代表安裝ok
在來按ctrl+Alt+F1~F6
Text Mode就正常了

2.在Gnome模式下關機
有可能在第二次登入時整個死當
Kde有沒這個問題我不知道@@

解決半法:
要關機時
請先用ctrl+Alt+F1~F6
登入root在回Xwindows下關機指令
如此可暫時解決死當問題

心情糟

那種感覺
就像是一種刺痛
好想要妳的擁抱

11/10/2009

UCOSII 理解說明(1)

這是為了將來移植到不同MCU做記錄
以免忘記後又要在看一次
也是自已對UCOSII的理解


這是原廠文件的說明圖
其實真正需要修改的部份只有4個檔案

Application
----------------
uc/os-ii (不需修改)

OS_CORE.C
OS_FLAG.C
OS_MBOX.C
OS_MUTEX.C
OS_Q.C
OS_SEM.C
OS_TASK.C
OS_TIME.C
uCOS_II.C
uCOS_II.H
----------------
uc/os-ii (應用相關 需修改)

OS_CFG.H-------設定 UC/OS 相關功能是否使用
----------------
uc/os-ii (MCU相關 需修改)

OS_CPU.H
---DATA TYPE
---OS_CRITICAL_METHOD //中斷方式
---0S_STK_GROWTH //STACK 由高自低或由低自高
---OS_ENTER_CRITICAL()//開啟中斷
---OS_EXIT_CRITICAL() //關閉中斷

OS_CPU_A.ASM
---OSStartHighRdy() //執行最高優先權任務
---0SCtxSw() //任務切換
---OSIntCtxSw() //中斷任務切換
---OSTickIsr() //TIME 中斷

OS_CPU_C.C
---OSTaskStkInit() //STACK 初始化 需對MCU底層有一定了解
---其餘9個函式可不用修改
----------------
硬體

需了解所謂的多任務排程
就是依優先權排定執行順序
而每個任務所執行的時間是一樣的

鬧脾氣


對你百般愛護
對你溫柔照顧

不曾對你惡言相向
不曾對你打罵

為何
為何你要如此的鬧脾氣

唉....
我只好忍痛送你回娘家了

無法習慣沒有你的日子
只盼你能快點回來
我的MIDO.......

想對你說

親愛的
我們在一起快二年多了
而遠距戀愛也一年多了

對你的感覺
我不曾變過
也不會覺的累
感謝你對我的包容和照顧
我願面對解決困境
牽你的手一直走下去

過程?結果?

工作上的態度
決定產品的價值
你用什麼角色面對?

主管角色...只需要結果,不管過程
東西做的出來就好

工程師角色...配合主管,只要做出來就好
不管架構,程式嚴僅,流程

這只是一般的想法
但我.....或許是龜毛吧 XD
我會想好架構,對每個部份都去了解
寫好應用的LIB
在移植到自已的應用
而不是只是個做事的機器
應付主管,過過日子

目前進度

目前工作上算是比較有空閒的時間了
也不在玩online game
打算在繼續之前的研究
在此列一下工作進度

MINI GAME....OK?
目前完成了用MEGA16寫了魔行方塊
還有其他6個GAME還要寫嗎?

MOUSE COMS SENSOR
GPS FOR MEGA16
UCOSII FOR MEGA128 & MEGA16
RTL8019AS MEGA16
ECOS FOR MEGA128

雖然在公司使用過 ARM7 ARM926+DSP
那是否要自已在買一片ARM7來使用?

10/13/2009

終於

這次所趕的案子
終於快告一段落了

在來就是把DEMO給客戶看
在看客戶的想法了

不過這次算是半主導整個專案
雖然累,不過還是學到蠻多的

停了二個月沒寫BLOG 0.0
以為沒有人在看
沒想到真有網友使用我的小工具
然後發現了問題

現在也修改好了
感謝使用和指導 :p

8/21/2009

加班!

為了案子
最近常常加班
總是晚上8~9才下班

偶爾星期六還會出現在公司
現在才體會出責任制的ox

上班->睡覺->上班->睡覺

這就是人參啊~~~~~~

一篇無聊沒有主題的主題

7/22/2009

迷惘

愛情似迷霧
總是讓人迷惘

"我一個人不孤單 想一個人才孤單
有伴的人在狂歡 寂寞的人怎麼半"
GOGO&MEME SAY FOREVER

希望你的累了
只是因為在一起久了
"習慣"了,所以感覺淡了
而不是............

因為想珍惜,所以一句話
就足以讓人不知所措

"你是此生最美的風景"--JS

"兩個人在一起 倘若感覺感情變淡了
千萬不要就此認為
也許 你們認為"感情淡了"
實際上只是因為"習慣了彼此"
那種激情已經不在
存在之間的 剩下"習慣"
別小看"習慣"
因為 那是你們相處很久很久
習慣了彼此在身邊
倘若 有天 失去了對方
你們感受到的
不是失戀 是失去
失去生活".............轉

7/21/2009

淡淡的.......

妳說感覺變淡了.......
我該積極.....還是消極

因為工作,考試...讓你疲累
因為遠距,我的因素...讓你對未來不安

我該積極的找回當初的感覺
還是消極的面對.....

我選擇了消極
或許這對你才是好的
不在給你壓力
讓你能更輕鬆的面對

工作上的建議
我知道你不會接受
但目前我能給你的幫助最大也只能這樣
很希望你能考慮

或許我們就這樣慢慢的變為朋友
但....
我相信
感情也需要伸縮
或許我們也會變的更好

加油

AM 04:38....

7/20/2009

Mouse Sensor

其實用mcu+lcd寫小game
對我來說算是熟手了

不過
這次比較不一樣的是
硬體加上了mouse sensor
要在lcd上做出 cursor
並跟著移動 左右鍵功能

第一次做出來時
結果程式在顯示整個畫面和cursor
muc的loading很重
造成cursor的移動lag
因為遊標每改變一次
便要重新繪制一次

為了改善這個問題
第二次使用了前景,背景的寫法
雖然繪圖的架構不一樣了
卻改善了Loading

這次也是用16bit mcu
主加構+三個小game
小畫家...記憶遊戲....變臉
只用了4天就完成了
算是目前最快的記錄了
讓自已有很大的成就 :p

下次試看看移到avr 8bit上
看看自已的功力如何 XD

7/06/2009

想跟妳說........

嗯...親愛的 0.0
我想你知道我在說你
這些話我有跟你說過了
不過
還是想在一次的告訴你

我不是一個大男人 0.0
這你一定知道

我不是很聰明
這你也知道

所以當我說出來的事
或是有些字發音錯誤
或是我的觀念是錯的
我會很希望是你告訴我
而不是別人跟我說 XD

原因...你是知道的 :P

GPS!!

GPS RECEIVE MODULE
最近在做的其中一個案子
需要使用到這個東西

看完GPS PROTOCOL後
一直無法用MCU將指令下給GPS
但用電腦的GPS公用程式卻又可以

反覆試了好久 沒想到
居然錯在CHECKSUM轉換
真是囧........

一時的不注意
一個小細節
讓我查了二天
還把uart的信號接出來看......囧rz

6/19/2009

坐骨神經痛!!!!

好一陣子沒寫blog
總以為自已還年青
沒想到會發生在自已身上

才32的年齡
我有了坐骨神經痛 囧
那種感覺真是..........
坐久了就會酸麻
彎腰就會酸麻
姿態不對就會酸麻

目前就先做做復建
看是否能改善
大家要注意自已做的姿勢啊~~~~~~~~

5/12/2009

FFT Tools

最近在玩和FFT轉換相關的東西
因為每次所放大的倍數,點數有所不同
所以寫了這個小工具

轉出來的數值
是使用在單晶片上的
因為單晶片做浮點數運算會很慢
所以改用整數運算

選取fft 點數
填入放大陪數,需為2的陪數

轉出為 sin , cos table
bir_rev_table 倒序table

最近比較無心寫程式
過些時間會在把fft轉到avr
做成影片po上來

**
Ver 1.0 : first Version
Ver 1.1 : add bit reverse table
Ver 1.2 : add hamming window table

FFT2C.rar

5/06/2009

眷戀

對事的眷戀
對物的眷戀
對人的眷戀


眷戀妳的味道
眷戀妳的懷抱
眷戀妳的嘮叨

遠距讓人產生眷戀
遠距讓人產生想念

4/18/2009

Atmega16 Tetris

利用空閒時間
把一些mini game移植到 ATMEGA16
原本是想一次寫二個GAME上去
沒想到 16K的FLASH........

放些圖檔上去就不夠用了
所以最後拿掉選單和字型
直接寫GAME

看來還是要用ATMEGA128
才能把7個GAME都放進去了



MCU:ATMEGA16
CSTN:128*128 drive:ST7637
KEY:I/O KEY

Total flash:97%

回頭在檢視程式
發現還有能改進的地方

目前 Total flash:78.5%
多了20% :p

4/16/2009

UCOSII

這次的新玩具是 arm7tdmi核心的mcu
試了三天
終於將 UCOSII-2.86 porting 到 arm7
對於ucosii也終於有了理解和認識

也對arm7 的組語有了些基礎
因為時間的關係
還沒深入去看ucosii整個程式
但對於應用上還算ok

過些時間會把ucosii porting 到avr atmega 系列

UCOSII最新源碼可自官網DOWNLOAD

UCOS-II 中斷理解

這次的工作是將UCOSII PORTING 至 ARM7TDMI核心的MCU
使用哪家的MCU也就不方便說明
不過大致上都相同
網路上也能找到很多 ARM7TDMI的資料

每個MCU的中斷都不相同
所以用法也不同
以下是自已對於UCOS-II的中斷使用理解

ARM7 中斷向量只有一個
但架在ARM7的中斷卻有好幾個
當中斷一產生後跳至 Ostickisr
全部只用同一個 ostickisr

ostickisr:
.........
bl osintenter
bl 判斷中斷來源
bl osintexit
.........

使用在8051 or 多個中斷向量的mcu

cseg at 0023h (某個中斷向量
ljmp commisr (跳至程式
...............

commisr:
..........
lcall osintenter
lcall 中斷要執行的程式
lcall osintexit
..........

每個中斷都有自已的進入點
而osintenter會將 OSIntNesting+1
來記錄第幾層中斷
osintexit 將OSIntNesting-1

4/15/2009

BMP TO Hex

這次想用avr移植之前寫的mini game
為了將圖檔格式轉換在轉c的陣列
一直在網路上找bmp to hex工具
卻一直找不到

最後決定自已寫一個
以後想改或想加功能
也比較方便

目前少16色的格式和單色的格式
有人知道轉換公式的話
請告知 謝謝

Release note

v1.5
1.增加 YUV(422)
2.增加 pixel bit

v1.4
1.增加排版
2.修改 332 mode,顯示8bit時,不在顯示0x00

v1.3
1.增加 888 (24bit) and 666 (24bit)

v1.2
1.增加 show plant選項 (較無意義,做好玩的 :p
2.增加 include w/h,output時多輸出圖檔的w/h

v1.1
1.搞錯bmp的格式,結果轉出來的圖是顛倒
2.增加plant比對後在轉為 565,555,444,332
圖檔不在限定為24bit,其他格式帶plant的圖
會對照plant後的色彩在轉為選取的格式

v1.0
1.first verison
2.only convert 24bit BMP to 565,555,444,332

BMP2C.ZIP

3/30/2009

信任感

原以為我早就不在為過去的陰影所傷
沒想到
我還是那個不曾改變的我.......

何時
人和人之間的信任
早就被剝奪

試著讓自已由傷害中站起
原來自以為的恢復
事實上
卻是不堪一擊

3/23/2009

AVR FUSH 燒錯!!!

第一次使用AVR的朋友
一定常常會燒錯 FUSH
而造成程式或FUSH無法在讀出或寫入

千萬不要這樣就把MCU丟掉
網路上所提供的方法有三種可救回燒錯FUSH

1.使用4隻腳位的XTAL
將OUT腳位接到XTAL1
建議使用4MHz
然後使用PRINT PORT的燒寫就可重新寫入 FUSH

2.使用一個能正常工作的MCU
通電使其正常工作
在將MUC的XTAL2腳位拉至燒錯FUSH MCU的XTAL1
在使用PRINT PORT 重新燒寫 FUSH

3.使用高壓編程
這是最麻煩的
所以請使用1 OR 2的方法

電路板成果

目前洗出了6片自已想要使用的板子
ATMEGA128 DB
ATMEGA16 DB
USB ISP
PRINT ISP
POWER
AVR JTAG

以下是電路圖
有興趣的朋友也可自已做來試看看
ATMEGA128 DB......MEGA128 DEMO BOARD
M128DB.pdf
M128DB.sch



ATMEGA16 DB.......MEGA16 DEMO BOARD
M16DB.pdf
M16DB.sch



USB ISP...........USB ISP PROGRAMMING
UISP.pdf
UISP.sch



PRINT ISP.........PRINT ISP PROGRAMMING
PISP.pdf
PISP.sch



POWER.............EASY POWER OUT 3.3V AND 5V
POWER.pdf
POWER.sch


AVR JTAG..........RS232 AVR JTAG
**需注意的是 XTAL 一定要用7.3728MHz**
不是很好買要多找幾家
JTAG.pdf
JTAG.sch


洗電路板

趁這次的空閒機會
小窮人請不起別人洗電路板
那就自已來試洗電路板吧

洗電路板順序
畫PCB電路->曝光->顯像->蝕刻->鑽孔

曝光機一台便宜的要價也要萬把塊 ~_~
那就自已做一台吧
買個合板 6支燈管
成本約1500元 :D

簡易蝕刻機一台也要1200上下
還好小弟是做玻璃的
願意幫我做一台 XD
所以我只要買打氣泡的就OK了
成本約500 :D

畫好電路後
試洗了幾次
總算抓到訣竅了
後來發現其實不用描圖紙
只需要用一般的A4紙就OK了
沒錯......沒看錯
因為我沒有雷射印表機
我只有噴墨印表機
而且用一般的紙印出來的還比描圖紙好用 :D

目前以測過,能洗出0.3mm的線
而且無斷線,能導通

危機!? 轉機!?

套句朋友說的話
"人在江湖飄,哪有不中刀"
在這波的不景氣
我們台中部門也被裁掉了............

是危機? OR 轉機?

就一個星期
做做自已想做的事
充實自已
把之前寫的小GAME移到別的MCU上
做個DB板,增加自已面試的機會~~
加油

2/25/2009

瘋狂加班

最近因為 G Sensor正夯
很多東西的應用都加上了 G Sensor
剛好新案子也是用 G Sensor

因為是剛接觸 G Sensor
很多控制設定都還未測試過
HK又趕著要
雖然這個案子不是由我開發
但........盡在不言中 囧

連續14天半夜2到4點下班
到隔天10點的也有
只能說累啊 ~_~

AVR Usb Programming

最近在網路上找到新的AT89S5x Programmer
剛好也看到AVR USB Programmer
就試著把它們做出來
測試的結果是ok的
也能正確燒寫

Easy spi......Print port 簡易電路
SPI progrma...增加74ls244穩定用,有分USB POWER AND PRINT POWER
使用軟體 Spipgm or Ponyprog

AVR USB Program...Usb Program
需要使用燒寫器先將usb程式寫入Atmega8
插上USB後電腦會辨視出Device
安裝Drive
使用Avrdude將程式寫入Mcu

遇到的問題是全新的Atmega8
使用Usb萬用燒錄器將程式寫入後
電腦還是無法辨視
但使用Print port寫入後
卻可正常辨視
之後不管使用usb萬用燒錄器還是Print寫入
都能正常執行

參考網站
Usbasp
Avrdude
Avrdude-gui

以下我修改後的電路圖
SPI_PROGRAM.pdf
SPI_PROGRAM.sch

2/05/2009

Easy stocks system

因為小弟需要
所以用三天寫一個簡易的股票小系統
很久沒用BCB寫程式

所以很多小細節沒有注意到
目前只是個簡易的功能
沒有錯誤提示

輸入股票代碼
按find
之後auto up data才能開啟使用
每40秒自動更新一次
如需改秒數
請修改stock.ini裡的
ats=40000

如使用後有bug或需要改進的地方
請告訴我 謝謝

Download Stock.rar

1/22/2009

AT89S5X easy demo

公司同事功能上的測試
需要另一個mcu做簡單的功能
剛好就用51來做

1/19/2009

AT89S5x + SS2A16 LCM

使用 SDEC 的 LMC-SS2A16
和網路上的 LMC-SSC2A16
是同樣的所以可參考同一份PDF


想做這個是以後可用一個簡易的LCD
當做Debug使用
因為沒有ICE ~_~
所以就用變通的方法
最少這樣還能簡易的除錯
還不錯用


/*
LMC - ssc2a16 user atmel 89s52

show addr 1 2 3 4 ~~~ 16
one line 00H 01H 02H 03H 10H
two line 40H 41H 42H 43H 50H

By Brian @Taiwan
*/

#include "AT89X52.H"

#define LCM_En P1_0
#define LCM_Rs P1_1
#define LCM_Rw P1_2
#define LCM_Data_port P2

void sys_init(void); //system initial
void msDelay(unsigned int MaxDelay); //del function
void LCM_Init(void); //lcm initial
//void CheckBusy(void); //lcm chech write ok?
void LCM_Com_Writer(void); //lcm write command
void LCM_Show_Data(unsigned char addr,unsigned char *sd);

unsigned int DelayCNT;
unsigned int TimeCNT;

void main(void)
{
unsigned char SData1[]="Brian @Taiwan";
unsigned char SData2[]="LCD Test OK!";
char i=0;

sys_init();
msDelay(10);

LCM_Init();
msDelay(10);

LCM_Show_Data(0x81,SData1);
LCM_Show_Data(0xC2,SData2);

while(1)
{
// code
}
}

void sys_init(void)
{
//ALL SYSTEM REG SET
IE = 0x82; //USER INTERRUPT TIME0
TMOD = 0x02; //SET TIME 0 MODE
TH0 = 256-200; //SET RELOAD VALUE
TL0 = 256-200; // FAST VALUE
TimeCNT=0;
TR0=1; //time enabled
P1=0x00;
P2=0x00;
}

void Time0_int(void)interrupt 1
{
TimeCNT++;
if(TimeCNT>=10)
{
DelayCNT++;
TimeCNT=0;
}
}

void msDelay(unsigned int MaxDelay)
{
DelayCNT = 0x0000;
while(DelayCNT < MaxDelay) {}
}

void LCM_Init(void)
{
LCM_Data_port = 0x30;
LCM_Com_Writer();

LCM_Data_port = 0x30;
LCM_Com_Writer();
/*
function set 001(dl)(n)(f)xx
(dl=1 data=8bit dl=0 4bit)
(n=1 double line n=0 one line)
(f=0=5*7dot f=1 5*10 dot)
*/
LCM_Data_port = 0x38;
LCM_Com_Writer();

LCM_Data_port = 0x06;//enter mode 01(ld)(s) ld=0 addr++ ld=1 addr-- s=1 addr shift
LCM_Com_Writer();

LCM_Data_port = 0x01;//clear lcm show data
LCM_Com_Writer();

/* lcd on/off 1(d)(c)(b) 1=lcd on 0=lcd off d=lcd c=cursor b=bline */
LCM_Data_port = 0x0C;
LCM_Com_Writer();
}


void LCM_Com_Writer(void)
{
LCM_Rs=0;
LCM_Rw=0;
LCM_En=1;
msDelay(1);
LCM_En=0;
msDelay(1);
}

void LCM_Data_Writer(void)
{
LCM_Rs=1;
LCM_Rw=0;
LCM_En=1;
msDelay(1);
LCM_En=0;
LCM_Rs=0;
msDelay(1);
}

void LCM_Show_Data(unsigned char addr,unsigned char *sd)
{
if(addr!=0)
{
LCM_Data_port = addr;
LCM_Com_Writer();
}

while(*sd!=0)
{
LCM_Data_port = *sd++;
LCM_Data_Writer();
}
}
/*void CheckBusy(void)
{
unsigned char i=0x80;

LCM_Rs=0;
LCM_Rw=1;
LCM_En=1;

while(i&0x80)
{
i=P2;
msDelay(2);
}
LCM_Rs=0;
LCM_Rw=0;
LCM_En=0;
} */


1/16/2009

AT89S5X + G_SENSOR

G_SENSOR 使用的是BOSH BMA020
通訊介面是用I2C
由於89s5x沒有提供硬體I2C介面
所以就用軟體模擬

程式只是試驗用的
所以沒有寫的很嚴謹
如果G_SENSOR有問題的話
整個程式會當在ACK
有需要的人可自已在改寫
INT腳未拉出


/*
BMA020 G_SENSOR 3.3V
需注意io 可使用在16 or 32 bit mcu
USER I2C INTERFACE

By Brian @Taiwan
*/
#include "AT89X52.H"

#define GS_SDI 0x80 //P2.7 low
#define GS_SCK 0x40 //P2.6 low

#define GS_Read 0x71
#define GS_Write 0x70

void sys_init(void);
void msDelay(unsigned int MaxDelay);

void Init_GS(void);
void Send_Comm(unsigned char tx_data);
void Receive_ACK(void);
unsigned char read_Data(unsigned char send_reg);
unsigned char read_Comm(void);
void I2C_Stop(void);
void I2C_Start(void);
void Send_ACK(void);

unsigned int DelayCNT;
unsigned int TimeCNT;

void main(void)
{
unsigned char x_axis_lsb=0,x_axis_msb=0;

sys_init();

Init_GS();

while(1)
{
x_axis_lsb=read_Data(0x02);
x_axis_msb=read_Data(0x03);
//you code
}
}

void sys_init(void)
{
//ALL SYSTEM REG SET
IE = 0x82; //USER INTERRUPT TIME0
TMOD = 0x02; //SET TIME 0 MODE
TH0 = 256-200; //SET RELOAD VALUE
TL0 = 256-200; // FAST VALUE
TimeCNT=0;
TR0=1; //time enabled
P2 = 0x00; //gs port default
}

void Time0_int(void)interrupt 1
{
TimeCNT++;
if(TimeCNT>=10)
{
DelayCNT++;
TimeCNT=0;
}
}

void msDelay(unsigned int MaxDelay)
{
DelayCNT = 0x0000;
while(DelayCNT < MaxDelay) {}
}


void Init_GS(void)
{
I2C_Start();
Send_Comm(GS_Write);
Receive_ACK();
Send_Comm(0x0A); //regedit
Receive_ACK();
Send_Comm(0x02); //soft reset
Receive_ACK();
I2C_Stop();

I2C_Start();
Send_Comm(GS_Write);
Receive_ACK();
Send_Comm(0x14);
Receive_ACK();
Send_Comm(0x16); //+/-4g 1500hz
Receive_ACK();
I2C_Stop();

I2C_Start();
Send_Comm(GS_Write);
Receive_ACK();
Send_Comm(0x15);
Receive_ACK();
Send_Comm(0x40);//enable adv_int
Receive_ACK();
I2C_Stop();

I2C_Start();
Send_Comm(GS_Write);
Receive_ACK();
Send_Comm(0x11);
Receive_ACK();
Send_Comm(0x00);//any_motion_dur hg lg set
Receive_ACK();
I2C_Stop();

I2C_Start();
Send_Comm(GS_Write);
Receive_ACK();
Send_Comm(0x0F);
Receive_ACK();
Send_Comm(0x0A); //hg_dur
Receive_ACK();
I2C_Stop();

I2C_Start();
Send_Comm(GS_Write);
Receive_ACK();
Send_Comm(0x0E);
Receive_ACK();
Send_Comm(0xE0); //hg_thres
Receive_ACK();
I2C_Stop();

I2C_Start();
Send_Comm(GS_Write);
Receive_ACK();
Send_Comm(0x0C);
Receive_ACK();
Send_Comm(0x10); //lg_thres
Receive_ACK();
I2C_Stop();

I2C_Start();
Send_Comm(GS_Write);
Receive_ACK();
Send_Comm(0x0B);
Receive_ACK();
Send_Comm(0x57); //any & hg & lg_enable hg & lg_counter
Receive_ACK();
I2C_Stop();

I2C_Start();
Send_Comm(GS_Write);
Receive_ACK();
Send_Comm(0x0A);
Receive_ACK();
Send_Comm(0x00);
Receive_ACK();
I2C_Stop();
}


void Send_Comm(unsigned char tx_data)
{
unsigned char Port_status;
unsigned char temp;
int i;

for(i=0;i<8;i++)
{
temp = tx_data & GS_SDI;
Port_status = P2;

if(temp)
Port_status |= GS_SDI;
else
Port_status &= ~GS_SDI;

P2 = Port_status;

tx_data<<=1;

// msDelay(1);
P2 |= GS_SCK;
// msDelay(1);
P2 &= ~GS_SCK;
// msDelay(1);
}
}

void Receive_ACK(void)
{
unsigned int i,temp;

P2 |= GS_SDI;
// msDelay(1);
P2 |= GS_SCK;
i=1;
while(i)
{
temp = P2;
temp &=GS_SDI;
if(temp==0)
i=0;
// msDelay(1);
}
P2 &= ~GS_SCK;
// msDelay(1);
}

void I2C_Start(void)
{
P2 |= GS_SCK;
P2 |= GS_SDI;
//msDelay(2);
P2 &= ~GS_SDI;
// msDelay(2);
P2 &= ~GS_SCK;
//msDelay(2);
}

void I2C_Stop(void)
{
P2 |= GS_SCK;
// msDelay(2);
P2 |= GS_SDI;
}

unsigned char read_Data(unsigned char send_reg)
{
unsigned char Rx_data;

I2C_Start();
Send_Comm(GS_Write);
Receive_ACK();
Send_Comm(send_reg);
Receive_ACK();
I2C_Stop();

//msDelay(1);

I2C_Start();
Send_Comm(GS_Read);
Receive_ACK();
// msDelay(1);
Rx_data = read_Comm();
Send_ACK();
I2C_Stop();

return Rx_data;
}

unsigned char read_Comm(void)
{
unsigned char Port_status;
unsigned char temp=0x00;
int i;

for(i=0;i<8;i++)
{
Port_status=P2 & GS_SDI;
Port_status>>=i;
temp|= Port_status;

// msDelay(1);
P2 |= GS_SCK;
// msDelay(1);
P2 &= ~GS_SCK;
// msDelay(1);
}
return temp;
}

void Send_ACK(void)
{
P2 &= ~GS_SDI;
// msDelay(1);
P2 |= GS_SDI;
// msDelay(1);
}

1/15/2009

電容換算

有時拿到電容時
還要細看編號
對於我們這種較笨的人
還要拿個紙筆計算一下
還會算錯才囧


因為同事的建議就寫了這個簡易換算程式
只要輸入電容編號就ok
但不能反算
因為是簡易的 XDD

這次提供了 DOS 和 WINDOWS 二種版本
之前的RGB轉換也有小改
CAP.rar
WCAP.rar

Source Code:

/*
By Brian @Taiwan
*/
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int CAP;
int head;
int modu;
int flag=1,exit=1;
int i;
int exit_ans;
unsigned long ans;
float ansf;

printf("Wellcome user CAP program. \n");
printf("CAP Ver 1.0 \n");
printf("By brian @Taiwan. \n\n");
printf("Ex:Please input CAP number :102 \n");
printf(" 102 CAP = 1000pF \n\n");

while(exit)
{
while(flag)
{
printf("Please input CAP number :");
scanf("%d",&CAP);
if(CAP>=100)
flag=0;
else
printf("CAP number is error!! \n");
}
ans=1;
modu = CAP %10;
head = CAP /10;

if(modu<=7)
{
for(i=0;i<modu;i++)
ans *= 10;
ans *= head;
printf("%d CAP = %dpF \n",CAP,ans);
}
else
printf("%d CAP = %d*10^%dpF \n",CAP,head,modu);

if(modu<=7)
{
if(modu<=2)
{
ansf = (float)ans/1000;
printf(" = %fnF \n",ansf);
}
else
{
ans /= 1000;
printf(" = %dnF \n",ans);
}
}
else
{
modu-=3;
for(i=0;i<modu;i++)
ans *= 10;
ans *= head;
printf(" = %dnF \n",ans);
}

if(modu<=2)
ansf = (float)ansf/1000;
else
ansf = (float)ans/1000;
printf(" = %fuF \n\n",ansf);

printf("Do you want exit? 1.yes 2.no :");
scanf("%d",&exit_ans);
if(exit_ans==1)
exit=0;
else
{
exit=1;
printf("\n");
flag=1;
}
}
return 0;
}

1/13/2009

我願意

王菲
是我最欣賞的藝人
喜愛她的歌聲
特別是早期的作品
常讓我回味

天空......一張很舊的專輯
但..很好聽

王菲 我願意

思念是一種很玄的東西,如影隨形
無聲又無息出沒在心底,轉眼.....吞沒我在寂寞裡
我無力抗拒,特別是夜裡......哦~~想你到無法呼吸
恨不能立即朝你狂奔去 大聲的告訴你.......
我願意為你....忘記我姓名
就算多一秒,停留在你懷裡,失去世界也不可惜
我願意為你....被放逐天際
只要你真心,拿愛與我回應,我什麼都願意...什麼都願意......為你!

1/12/2009

思念

原來對人,對物的思念
能夠這麼的清悉

或許是第一次來到外鄉
一切總是陌生,孤獨

對人,想念那種溫暖的擁抱
對物,想念那種熟悉的環境

我是那麼想妳......

感受

雖然這次是出差
但總是要品嘗一下
大陸,香港的美食

茶餐廳
凍檸茶.....就是檸檬紅茶 XD
波蘿包.....小小的不錯吃
肉丁炒公仔....@_@原來王子麵也能拿來炒
臘肉飯.....只有幾片蔬菜 真不習慣 XD

北方餃子館
羊肉水餃....羊騷味好重 @@ 好吃
牛肉煎餃....
大白菜......
xxx牛筋.....

好油好鹹好辣
讓我大大的受不了
吃完馬上拉啊 囧......

如果台灣的計程車讓你覺的很猛
那一定要試坐大陸的 taxi
真的是拿命來拼的啊
下車的瞬間
會讓人有種活著真好的感覺 XD

司機的一句"操你媽"
聽起來就是那麼的真實
比起電影裡聽到的就是不一樣
覺對讓你開懷大笑又久久無法忘懷

入境

飛離海岸線
深入雲層
未曾看過的雲景
讓人無法忘懷

香港
陌生的城市
陌生的人群
熟悉的微笑
讓人心安

中國
對台灣
還是帶點不削
海關的機車
一樣的也是讓人留下回憶

AM 3:00

第一次的旅程
有點慌,有點趕,有點緊張......

沉睡的城市
寧靜的美
原來一切都是這樣陌生

出境前的緊張
無法覆蓋黑咖啡的香
輕柔的音樂
甜美的笑聲
讓人彷彿像個詩人