星期五, 9月 30, 2005

明天要去日月潭了....

明天要去日月潭囉,這是定的飯店,可以看到湖喔
moonlake


另一個消息是....中央氣象局提供的


 typhonpath


強烈颱風"龍王"也要一起去......

Palm也不是Palm了: Run Windows 的Palm手機

treo700http://www.microsoft.com/windowsmobile/5/palm.mspx
這應該是全台灣的努力造成的。
據說80%的smartphone手機都是台灣設計的(製造當然都是在大陸)。
最後導致Palm不得次放棄自己比較好用的OS,選用看起來比較炫,但是不怎麼好用的Windows smartphone.

果然和我猜的一樣,Windows終究會贏得勝利。
接著,就和MB一樣,所有的廠商都會作smartphone。
............OS都用MS的就可以了。

這應該是HTC教導MS有關smartphone的know how,讓MS修改他smartphone的平台。
最後platform 都OK了,也就沒有進入門檻。 只要follow MS design suggestion 就可以run
smartphone,HTC的優勢也就漸漸消失了。

可能還有空間吧:目前smart phone都使用GSM module來作,所以PDA UI/Application操作要一個MCU,GSM module要一個MCU。
HTC會自己做GSM module,所以可以將GSM module內的MCU和PDA 的MCU (甚至GPS的MCU) 共用。 這樣空間,耗電量和Cost都可以縮小。 GSM和GPS的軟體package也不會被併入MS的smartphone platform 中。

星期四, 9月 29, 2005

Analog Device也有作GSM Baseband Soc

就是 http://www.analog.com/en/prod/0,2877,AD6525,00.html
ARM7 + ADSP 218X.
內含" Sufficient " RAM,當然,也可以外加。
支援VisualFone 開發環境

詳細的Spec要簽NDA才拿得到.

AD 也有GSM的Voice Codec : 6521 http://www.analog.com/zh/prod/0%2C2877%2CAD6521%2C00.html

以上就是AD家的Othollo 平台。

scsitools : Debian 的scsi hd 工具程式(集)

只要用
#apt-get install scsitools
就可以安裝了(但是要是unstable 才行).

並不是叫scsitools,實際上是一組工具程式

但是裝了以後,只有
scsiinfo
scsiformat

不太有用...

Linux各Distribution的版本

看Kernel的版本用uname -a
但是要看distribution的版本呢?

再Moto有看到

RedHat 裡面有 /etc/redhat-release
Mandrake 有 /etc/mandrake-release
B2D 有 /etc/b2b-release
可是 Debian , ubuntu , slackware 沒有類似的檔案

slackware有/etc/slackware-version這個檔
debian也有 /etc/debian_version這個檔案

剛好 ubuntu 也有 /etc/debian_version這個檔案
所以ubuntu沒辦法用這個方式跟debian區分

當我試著cat /proc/version . 會出現
代碼:
Linux version 2.6.10-5-386 (buildd@terranova) (gcc version 3.3.5 (Debian 1:3.3.5-8ubuntu2)) #1 Tue Apr 5 12:12:40 UTC 2005

可以偷偷的發現是ubuntu , 但是不知道是哪個版本
但是Debian就很帥氣的顯示
代碼:
Linux version 2.2.20-idepci (herbert@gondolin) (gcc version 2.7.2.3) #1 Sat Apr 20 12:45:19 EST 2002

連Debian的字眼都沒顯示

最後當我
cat /etc/issue
ubuntu 會出現 Ubuntu 5.04 "Hoary Hedgehog" \n \l
Debian會出現 Debian GNU/Linux 3.1 \n \l

所以 , 我個人覺得 cat /etc/issue 應該可以獲得最好的資訊

再真正的server上create raid device

Xeon 2.6G
RAM 1G
SCSI Card是aic79xx,接4個SCA的HD。

sda1 : root
sdb : 好像壞掉
sdc , sdd - 作一個 raid1的partition

sdc, sdd 各create一個type 'fd' 的partition:
#fdisk /dev/sdb
n : new a partition
p : primary
t : change partition id
- fd -Linux raid autodetect
w : write table to disk and exit

用mdadm create一個md
#mdadm -C /dev/md0 --level=raid1 --raid-device=2 /dev/sdc1 /dev/sdd1
回應
mdadm: array /dev/md0 started

現在開始建立,初始化raid hd,這個需要一點時間...可以用
#cat /proc/mdstat
看到進度的百分比.....很慢,約11M/sec,越後面越慢

Debian Sarge : upgrade to unstable

原來用CD安裝的,到/etc/apt/sources.list看,寫的是unstable,但是改由網路作feed
deb http://debian.csie.ntu.edu.tw
後,要寫stable。

這個kernel 是 2.4.27-1

用網路的feed,改unstable後,run apt-get update, apt-get upgrade.
好像會grade到2.6的kernel ... download中

.... 沒這回事....


到aptitude中 Uninstalled package - base - main中選2.6的kernel image
I - install
g - download and install
就會將2.6的kernel image安裝進來,同時也install 需要升級的package.
(其實是顯示一些可以升級,但是沒有升級的package)。

download 完後,會在GRUB中多一個2.6 的boot image。並且放在boot option的第一個(default)
.

用apt-get upgrade,但是有一些package是holdback.
用apt-get dist-upgrade,好像所有都upgrade了...例如gcc升級到4.0


試試編譯核心(Debian's way), ref : http://www.falkotimme.com/howtos/debian_kernel2.6_compile/
說要kernel-package
#apt-get install kernel-package
完成後 /usr/share/和/usr/share/doc下就有kernel-package目錄了
還要有ncurses-dev fakeroot
#apt-get install ncurses-dev
#apt-get install fakeroot
還有kernel source. 因為只想install自己現在版本的source code
#uname -a
看一下是2.6.8
#apt-get install kernel-source
他會列出所有的version,並說要指定版本才行,所以挑了一個2.6.8的...
#apt-get install kernel-source-2.6.8
但是竟然download不下來,改了一些deb site也是一樣,只好改download 2.6.10
#apt-get install kernel-source-2.6.10
奇怪,一直錯,只好follow他的instruction加上--fix-missing
#apt-get install kernel-source-2.6.10 --fix-missing
應該是firewall的關係,到41%又fail

沒辦法,只好到kernel site去download :
wget http://www.tw.kernel.org/pub/linux/kernel/v2.6/linux-2.6.13.tar.gz

星期三, 9月 28, 2005

Debian : apt-get & sources.list

因為Server放在小房間裡,每次要apt-get install 時,還要去放CD很麻煩,所以想用網路作source。

修改 /etc/apt/sources.list
將原來
deb cdrom:[....]/ unstable contrib main ,,,, comment掉(加上"#")。
然後加入網路上的source:
deb http://debian.csie.ntu.edu.tw/debian unstable main contrib non-free
deb http://debuan.csie.ntu.edu.tw/debian-non-US unstable main contrib non-free

以上的site path可以到 http://www.debian.org/mirror/mirrors_full 去找

之後,apt-get update。開始到site download package list.

這個是中文軟體的deb source : http://apt.debian.org.tw/
deb-src http://apt.debian.org.tw unstable main

Opera PC 版 免費,還提供Blog Host

使用起來跟Firefox比較像,也有"skin"可以download。
tabe browsing(似乎已經成為browser的標準)。

在Opera的首頁,有Blog host邀請,是免費的。
還提供import blog功能,可以將Blogger的內容import進去。真是不錯。

Opera Browser和Firefox差不多,但是他的Blog就比blogger好一些。
有Tag, upload file, import功能。

... 剛剛發現Opera在Blogger的Edit page中,一些tools都顯示不出來。

星期二, 9月 27, 2005

為什麼RX不會動.----電路圖還是要看一下

搞了很久,為什麼TX可以通,但是RX卻不能通。 用MCU時,卻又都可以。
只好認命了,拿電路圖來看,拿示波器來量。
這是一個level轉換電路,將D0由Vcc位準轉為Vext位準。輸出R pin和Siplex的out短接。
RX_NOWORK
唉,結果是這樣。
當MCU拿走時,D0是Open的,所以Q14不導通,導致Q15導通,所以R端永遠是Low。
R端和我外接的Siplex232的output並接。所以從RS232傳入的資料,經過Siplex232後,到R pin就永遠是Low了。

修改的方法,應該說是使用的方法,就是把MCU放回去,然後把D0 pin拉High。讓R pin是High.這樣Q15的電阻就是Siplex的負載--應該推的動吧。


的確推得動,但是有一片板子是壞掉的。

VIA EPIA platform,, small size pc

這個是VIA的EPIA motherboadd(使用C3)的Linux Howto網站
http://epialinux.org/files/epia_howto/index.html
其中有說明VIA這類CPU的比較表,和安裝Linux driver的說明

這裡是VIA提供的Display FBdev的driver
http://www.viaarena.com/default.aspx?PageID=420&OSID=25&CatID=2580&SubCatID=101


EPIOS,以Gentoo base,為VIA EPIA chip所作的linux distro,這是一個forum
http://www.epios.net/viewtopic.php?t=80

MINIX NETWORK CODE COMMENT

這個是一定要紀錄一下的啦:
http://www.os-forum.com/minix/net/
一行一行的解釋Minix 的networking code.
....當然,還是英文。....所以有些人或許覺得code還比英文好懂。

這個呢,也是MINIX的code comment :
http://www.swartzbaugh.net/index.php
是MINIX OVER-DOCUMENT Site
有詳細說明和圖解

星期一, 9月 26, 2005

Hitech C Compiler for PIC

一些奇怪的行為:

const char 和 char不能比較:

bit samestr(char *data,const char *cstr)
{
if(data[i]==cstr[i]){
.....

這樣不行,要先宣告一個local variable,再取出constr的內容

char temp;

temp=cstr[i];
if(data[i]==temp({
....

這樣才可以

愚公移山與遞迴

紅潮貴先生的網站
一個好的程式設計師不會放任自己 「勤於動手複製卻懶得動腦簡化」

星期五, 9月 23, 2005

PIC UART

PIC的UART可以做
Asynchronous (Full duplex)
Synchronous - Master (Half duplex)
Synchronous - Slave (Half duplex)


RCSTA中的SPEN (bit 7) 設為1時,enable serial port功能。
同時要將TRISC<7:6>也就是port C的TX/RX pin設為1。才能將TX/RX pin設定正確。


Baudrate Generator (SPBRG)
Serial port有專屬的8 bit timer用來產生baudrate clock。
Baudrate Generator參考系統的Clock Fosc,當TXSTA 的BRGH設為1時,代表高速,所以Baudrate將系統clock /16作為reference.當BRGH是0時,/ 64。
在Synchronous和Aynchronous時,動作不一樣,現在說明Aynchronous:
實際Baudrate的公式是(X是SPBRG的值):
BRGH=0 (LOW Speed)
Baudrate = Fosc/(64(X+1))

BRGH=1 (HIGH Speed)
Baudrate = Fosc/(16(X+1))

所以使用20MHz Crystal,要達到9600的baudrate時,SPBRG 要設為:
BRGH=0
20,000,000/(64 * 9600) -1 = 33.15

BRGH=1
20,000,000/(16 * 9600) -2 =130.2



  • 非同步模式Asynchronous Mode (也就是RS232 模式)
  • 將TXSTA bit 4 : SYNC 設為0,代表使用非同步模式
  • 傳送的register叫TXREG,當TXREG buffer是空的,會將PIR1 的bit 4 : TXIF設為1.
  • 這一個bit可以用來產聲中斷 (將PIE bit 4 : TXIE設為1)。這個interrupt和其他interrupt不同,TXIF只有在有新data放入TXREG時才會被clear掉。
  • 將data放入TXREG,data並不會送出去,要將TXSTA bit 5 : TXEN 設為1後才會開始送。
  • TXIF代表TXREG的資料已經放入Shift register,可以放入下一筆,但並不帶表data已經送出去。
  • 真正代表data送出去的flag是TXSTA bit 1 : TRMT.
  • 所以要將TXEN關閉時,不能只檢查TXIF,真正要檢察的是TRMT。
  • 如果data在shift register中,還沒送玩,就將TXEN關閉,shift register內剩下的資料會送不出去。


傳送的步驟:
  1. 設定SPBRG,BRGH,決定Baudrate
  2. 清除SYNC。
  3. 設定SPEN
  4. 依照 需要將TX中斷打開(TXIE=1),或關閉(TXIE=0)。
  5. 將TXEN設為1,開始傳送動作。(同時會使TXIE=1,因為TXREG是空的)。
  6. 將要傳送的資料放入TXREG。
  7. 如果有使用中斷,將GIE和PEIE打開。
下面是最簡單的,不用中斷的Code:
 SPBRG=130;
BRGH=1;
SPEN=1;
SYNC =0;
TXEN=1;
while(1){
while(!TXIF);
TXREG='A';
}
下面是用中斷作的簡單的tx sending.
bit TxOk=0;
char TxBuf[10];
char Txi;
char TxLen;

void interrupt inthandler(void)
{
if(TXIF){
if(Txi < TxLen){
TXREG=TxBuf[Txi];
Txi++;
}else{
TxOk=1;
TXIE=0;
}
}
}

const char *outstr="Hello!";

void main(void)
{
char i;

SPBRG=130;
BRGH =1;
SPEN =1;
SYNC =0;

PEIE=1;
GIE =1;
TXEN=1;

i=0;
TxLen=0;
while(outstr[i]!=0x00){
TxBuf[i]=outstr[i];
TxLen++;
i++;
}
TxOk=0;
TXIE =1;

while(!TxOk);

while(1);

}


接收
Baudrate和Asynchronouse設定跟TX的設定一樣。
  • 設定CREG後,Receive Register才開始動作。
  • 當收到data後RCIF會被設為1。
  • 收到的資料會被放在RCREG。如果有overflow, OERR會被設為1。要清除OERR,要將CREG設為0後再設為1。Reset Receive Logic.
  • 當OERR是1,接收動作會停止。
  • 當Stop bit收到0時,Framing Error bit : FERR會被設為1,但是一但讀取RCREG後,FERR的值就會倍update掉了,所以在讀取RCREG之前,最好先讀取FERR的值,確認RCREG的內容是正確的


設定接收動作的procedure:
  1. 設定SPBRG和BRGH bit,決定baudrate
  2. SYNC=0, SPEN=1.
  3. 如果要中斷,RCIE=1
  4. CREN=1,開始接收
  5. 收到資料後RCIF=1. 如果有設RCIE的話,會中斷
  6. 讀取RCSTA的FERR好知道stop bit是不是正確。
  7. 讀取RCREG取得收到的資料
  8. check error,如果有的話,將CREG=0,再CREG=1
  9. 如果要中斷,GIE和PEIE要設為1
...

星期四, 9月 22, 2005

GSM/GPRS MODEM 測試

以下參考
GSM Modem SMS操作
手機通訊錄AT Command


AT Command都以AT開頭,以\r\n結尾。
設備回應時也以0x0d,0x0a結尾。
有些設備在回應時會先以0x0d,0x0a開頭,避免前一個command還沒結束。(就像SLIP, PPP一樣)


AT+CREG?
+CREG: 0,1
OK
註冊OK


ATD0937909999;
OK
因為撥號後有加";"號,所以再命令下達後,會回來,不會等待通話完畢。
當對方接聽後,不會有任何message。
對方掛斷後,會有 NO CARRIER


AT+CHFA?
+CHFA: 0 (NORMAL_AUDIO)
這是選擇硬體audio channel的command,module 硬體有兩個audio channel :
0 : NORMAL - 好像是在modem後面,用電話筒的那一個RJ11接頭
1 : AUX - 是用免持 耳mic線的,旁邊的接頭。
要選的話,用comamnd
AT+CHFA=1
選AUX channel。
一般defaul是Normal (0),用這個command選aux channel後,重開機還是會回到normal channel.
NORMAL MODE時,響鈴會從speaker(外接,不是話筒handset的speaker)播出來。
AUX MODE時,響鈴會從耳mic播出。


設定喇叭音量
AT+CLVL= 0 關閉喇叭音量(設為0)
AT+CLVL=100 將音量開最大(設為100)


AT+CPIN=1234
+STC: 0
OK
輸入PIN碼,開機時會用到,要輸入後才能使用SIM card.


有電話撥入時,會顯示
RING
約 每 1 sec 送出一次。


當有電話撥入時,用
ATA;
可以接聽。一定要加";"號。


當有電話撥入時,用
AT+CLCC
會回應caller number
+CLCC: 1,1,4,0,0,"+886939900000",145


列出簡訊,
AT+CMGL=?
以下command依SMS的Mode是TEXT或PDU而有所區分,PDU Mode時
+CMGL: 0,1,2,3,4
這樣用(=?)會列出支援的列出方式
0 : 收到的,未讀的message
1 : 收到的,已讀的message
2 : 儲存的,未送出的message
3 : 儲存的,已送出的message
4 : 所有的message。
所以要讀取(列出)所有的message,要用
AT+CMGL=4
在TEXT MODE時,0,1,2,3,4變成
+CMGL: "REC READ","REC UNREAD","STO SENT","STO UNSENT","ALL"
要讀取所有的message,要用
AT+CMGL="ALL"

就會列出所有收到的messasge內容:

+CMGL : 1,1,,49
07896E0900000000.....<略>

+CMGL : 2,1,,33
079122347E7AC909....<略>


簡訊的模式,收發顯訊有兩種模式:0. PDU, 1: Text. default是PDU Mode.
PDU : Protocol Description Unit.
實際上SMS傳送的格式都是PDU,Text是GSM Modem支援的另一種模式,將AT command輸入的文字轉為PDU格式發出。
AT+CMGF=?
+CMGF : (0-1)
列出支援的模式,Modem回應它支援0,和1模式。
設定使用文字模式(1)
AT+CMGF=1
OK


收到簡訊時,回有
+CMTI: "SM", 2
代表收到SMS,放在"SM"記憶區,index是2
("SM",和2之間會有一個空格,當index是兩位數時,這個空格一樣存在)
+CMTI是Modem傳出的command,沒有user 輸入的格式。(是unsolicited command)


讀取簡訊
AT+CMGR=2
讀取index 2的簡訊,Modem會印出
+CMGR: "REC UNREAD","+886937909999",,"05/09/23",09:52:48+32"
123
OK
第 一行列出SMS的狀態,之後換行<CR&~~SPECIAL_REMOVE! #~~gt;<LF>再來是 message的內容"123".
AT+CMGR command顯示的內容會隨著SMS format (AT+CMGF=?)而不同。
和上面同一個message,在+CMGF=0(pdu mode)時會顯示:
+CMGR: 1,,22
0791589723848098040C918896330975290000509032902584230331D90C
但是在+CMGF=1時,會顯示
+CMGR: "REC READ","+886937975999",,"05/09/23,09:52:48+32"
123


寄簡訊
AT+CMGS=0939909999
>message
然後用Ctrl-Z結束
再TEXT Mode時,message會直接轉成Text,
在PDU Mode時,要follow pdu formate。輸入內碼。


刪除簡訊
AT+CMGD=11
刪除第11筆簡訊


電池電壓
AT+CBC
+CBC: 0,53
第一個數字0代表電源輸入是電池還是外部電源,0是電池
53代表電壓是53% full


變更loacal的baudrate
AT+IPR=9600
將loacl baudrate設為9600
這一項設定在reset後還會保留。


設定回應輸入命令(echo)
ATE0 關閉回應
ATE1 開啟回應
這個command不用加 AT+


選取電話簿
電話簿有很多:SIM card,話機... etc
AT+CPBS=?
+CPBS: ("SM","ON","MC")
SM帶保SIM card
ON代表電話機
選擇SIM card電話簿用
AT+CPBS="SM"


讀取電話簿
AT+CPBR=1,20
列出1到20筆電話簿內容
如果只要讀一筆,就用
AT+CPBR=7
讀取第7筆


寫入電話簿
AT+CPBW=12,"0939909999",129,"XO"
將名叫XO的電話0939909999寫入memory 12的位置
129代表文字編碼,用129就OK了。


播打電話簿的號碼:

ATD>2;
播打現在使用記憶體中第二的位置的號碼

ATD>SM2;
播打SM(SIM)記憶體第二位置的號碼

ATD>"A1"
播打記憶體中名叫A1的電話

星期三, 9月 21, 2005

想到以前的一個跳蚤的實驗

這次數位隻強調查寬頻網路使用尖峰時間,發現是晚上7:00 - 12:00。
內容以網頁瀏覽為主。
所以建議寬頻影音應該要多注重內容。

我想這個在基本上就不同,現在家中有電視的家庭比有寬頻的家庭多很多。
同樣的

星期二, 9月 20, 2005

PT6961 Sample Code

Command 0x03 1 : 7 digit 11 seg
Command 0x8F 4 : Display On, Pulse width 14/16
----clear ram----
Command 0x40 2 : Normal, Increment, Write to disp
Command 0xC0 - Data 0x00 repeat 14. 3 : write 14 datas to ram, start from 0
----load---------
Command 0x44 2 : Normal, Fix, Write to disp
----address:data set
Command 0x44 2 : Normal, Fix, Write to disp
Command Addr - Data Data
-0xC0 : 0x38 write 0x38 on 0
-0xC2 : 0x18 write 0x18 on 2
-0xC4 : 0x38 write 0x38 on 4
-0xC6 : 0x2C
-0xC8 : 0x3C
-0xCA : 0x1C
-0xCC : 0x30
REPEAT 4 Times
----set ram
Command 0x40 2 : Normal, Increment, Write to disp
Command 0xC0 Data 0xFF repeat 14 3 : Write 14 0xFF to disp starts from 0
----read key
Command 0x42 Read Data repeat 4 2 : Normal, Increment, Read 4 data.

星期一, 9月 19, 2005

普誠 LCD button controller : PT6961

提供類似SPI的interface (SDI/SDO/CLK/CS)和MCU溝通。
可以用掃描的方式驅動7段顯示器,用掃描的方式讀取keyboard。
SPI的格式是第一個byte command,之後N個byte data (IN/Out)。
Command的最高兩個bit是Command Index,之後的bite是command的設定內容。
Command後的byte都是data byte

Command 1: Display Mode Setting
七段顯示器掃描有18個控制線,可以選擇是6 digits + 12 segment 或是 7 digits + 11 segments。
一般的七段顯示器因為一個digit只有8個segment。所以選兩個都一樣。

Command 2: Data Setting Command
用來讀寫PT6961內部的memory (register ?)。用一個bit來決定是Read還是write。
Command之後就是Data (in/out)。
Read Command代表讀取Scan Key的內容,
KeyScan一次Scan K1,K2,K3三個key。
Scan Line有SG1 - SG10。
Read Data依照Scan的內容,每一個byte只有用到前6個bit,代表兩個Scan Line。
所以keyscan總共有5個byte。
Write Command代表寫入七段顯示輸出記憶體
一個七段顯示器需要12個bit,使用2個byte。
所以write command使用的memory有 7 x 2 = 14 byte


Command 3: Address Setting Command
設定開始顯示的memory address
顯示memory也是一樣,因為PT6961支援一個digit最多支援12 segment。
所以memory一個digit需要2個byte (16 bit),但是最高4 bit不使用。只用12 bit.

Command 4: Display Control Command
開啟/關閉七段顯示器的掃描動作。
設定顯示的duty cycle(調整亮度)。


Sample Code from PTC :
Command 0x03 1 : 7 digit 11 seg
Command 0x8F 4 : Display On, Pulse width 14/16
----clear ram----
Command 0x40 2 : Normal, Increment, Write to disp
Command 0xC0 - Data 0x00 repeat 14. 3 : write 14 datas to ram, start from 0
----load---------
Command 0x44 2 : Normal, Fix, Write to disp
----address:data set
Command 0x44 2 : Normal, Fix, Write to disp
Command Addr - Data Data
-0xC0 : 0x38 write 0x38 on 0
-0xC2 : 0x18 write 0x18 on 2
-0xC4 : 0x38 write 0x38 on 4
-0xC6 : 0x2C
-0xC8 : 0x3C
-0xCA : 0x1C
-0xCC : 0x30
REPEAT 4 Times
----set ram
Command 0x40 2 : Normal, Increment, Write to disp
Command 0xC0 Data 0xFF repeat 14 3 : Write 14 0xFF to disp starts from 0
----read key
Command 0x42 Read Data repeat 4 2 : Normal, Increment, Read 4 data.


spec的recommand algorithm:
Command 2
Command 3 Clear Memory
Command 1
Command 4 Disp OFF
Command 1
Command 4 Disp ON
Loop -
Command 2 Write Data
Command 3
Command 1
Command 4


使用PIC內建SPI來作沒有動作,改用IO控制後OK。
Initial的Code如下

void Pt6961Init(void)
{
char i;

STB=1;
SCL=1;

// command 2 : memory r/w, address inc
STB=0;
sout(0x40);
STB=1;

// command 3 : address set, and data
STB=0;
sout(0xC0);
for(i=0;i<14;i++)
sout(0x00);
STB=1;

// command 1 : display mode : digit & seg
STB=0;
sout(0x02);
STB=1;

// command 4 : disp on/off, disp duty
STB=0;
sout(0x87);
STB=1;

// command 1 : display mode
STB=0;
sout(0x02);
STB=1;

// command 4 : disp on/off, disp duty
STB=0;
sout(0x8F);
STB=1;

}

其中sout是:

void sout(char data)
{
char i;
for(i=0;i<8;i++){
SCL=0;
SDO = data&0x01;
SCL=1;
data = data >> 1;
}
}

將內容送出到LED的Code是

void LedPrint(char *str)
{
char data;
char i=0;

// command 2
STB=0;
sout(0x40); // write mode, auto inc address
STB=1;

// command 3
STB=0;
sout(0xC0); // set write start address=0
sout(str[0]); // 1st digit
sout(0x00); // 1 digit occupy 2 bytes
sout(str[1]); // 2nd digit
sout(0x00);
sout(str[2]); // 3rd digit
sout(0x00);
STB=1;
}

讀取KeyScan的Code是: data[5]就是讀出的結果,但是每個byte只有前6個bit有效

// Read
STB=0;
sout(0x42); // read mode, auto inc address
data[0]=sin(); // read in 1st scan line only 0-5 useable
data[1]=sin(); // 2nd
data[2]=sin(); // 3rd
data[3]=sin(); // 4th
data[4]=sin(); // 5th
STB=1;

sin() 是

char sin(void)
{
char i;
char rc=0;

for(i=0;i<8;i++){
SCL=0;
rc = rc>>1;
SCL=1;
if(SDI)
rc |= 0x80;
}

return rc;
}



所以datasheet應該要改一下,這一顆chip的protocol是固定將STB Low後第一個byte作Command,之後的都是Data,所以在任何Command後都可以加Data。 至於Data的動作就由上次Command 2的Read/Write bit來決定是Read Data或是Write Data。
如果是Write Data,Write Target Address就依照上次 Command 2中address auto increment bit的狀態跟Command 3 : target address的設定值決定。

Another way to find the data.

http://www.peicheng.com.tw/report/report15.html

David寄了一個link,是所有手機相關零組件的國內外廠商資料。
這個Link是證券公司的研究報告。

所以找資料不一定要從技術上找,從 $ 上找可能也找得到。

星期日, 9月 18, 2005

騎腳踏車

Ariel騎得很高興...
050918 002
照電視說的,拆掉踏板...
050918 017
要注意,左右腳的方向不一樣喔
050918 018
8字型練習開始...
050918 020
啊,,快撞牆了...
050918 022
嘿,真是千鈞一髮
050918 023
Ariel : 舅媽,你要勇敢一點.
050918 025
好,看我的,,,衝啊。
050918 026
Ariel : 算了,還是我來推吧
050918 036
050918 038
050918 046

吃Pizza : Pizza Hut

點了下面四樣
seafood
6flavor
NewoleanChicken
BBQChicken
地址,電話是:
pizzahutaddress

因為是自己去拿,所以買大送大,總計NT 804.
雖然是中秋節,但是一樣15 min後就可以拿。

密碼:說得很對呀!

這是 LinuxCenter說得一段:
犯罪手法的專業化與攻擊走向複雜,使得企業使用愈來愈長的密碼,或是經常變更密碼。但Gartner研究副總裁Jay Heiser指出,「這是不智的,因為使用者反而被搞到忘記密碼或乾脆把它寫下來,進而為安全帶來各種威脅。」
真是說得很對呀。
現在公司的MIS要求三個月改一次密碼,而且不得與前3次的密碼有4個自以上相同,又規定要8個字以上。
這麼多規定,後來自己都忘了密碼是多少,只好寫在旁邊。

星期四, 9月 15, 2005

Blogger可以Search了

Google 推出了Blog Search,可以用來搜尋所有的Blog。
最方便的是自己Blog的文章也可以Search了。
Blogspot不能設category就已經很慘了,後來在Edit page的Search功能又被拿掉,簡直就...
終於,現在又可以Search了!而且Search Result更好看了喔。


可以由每個Blogspot網頁上面的
SearchThisBlog作搜尋的動作,這樣只會搜尋這個blog的內容。
也可以到blogspot的search page:
BlogSearch
http://search.blogger.com/ 作search,但是這是對所有的blog作search.

星期二, 9月 13, 2005

This Entry is post in Foresight Linux

Blog Entry Poster

得"獎"的是.....

eBay!

最近大家都想買Skype,最後是eBay買下來了,花41億美金(也有說是26億的)。
奇怪的是eBay買通訊軟體公司幹嘛?
如果他要在拍賣item使用Skype的Click to Talk,只要跟Skype購買授權就可以了呀。
最賺的應該是Skype了,據說公司員工只有50人,所以平均一人可以得到?
這次Skype的CEO不像上次他賣Kazaa時,賣完就走。還會待在Skype (一陣子?)。

不過上次那個誰要買Skype,他卻不賣,現在卻又賣了。
是價錢的問題?
還是? Google推出 Google Talk ?
..... 我大概想太多了。
..... 大概是CEO玩膩了,又有什麼好點子了。

不過我猜Skype被eBay買下後,應該就會那麼精壯,隨著其他通訊軟體的推出,他應該會慢慢的消失..

星期一, 9月 12, 2005

可憐,要自己買

文具:

訂書機
膠水
刀片
剪刀

MPASM : SET and EQU

MPASM中有set和equ兩個directive
set 是對變數動作
equ 是定義constant

CBLOCK value 類似C的enume,在之後宣告的constant會由value依序+1,+1...

雙UART Program - 1 hardware, 1 software : Impmenet Soft UART in PIC.

一個UART是hardware peripherial, 另一個是software。
Software UART的pin是PortC,因為PIC的IO interrupt只有PORTB有IO interrupt,所以代表這個Software UART沒有(辦法)使用interrupt,所以應該是用polling的方式。或是用Timer 定時Sampling。
猜測RX用定時Sampling,TX用polling。因為都要用timer,所以是half-duplex。

follow microchip的AN555 software implement UART : sampling freq = 4 x Baudrate.

RX StartBit的偵測是用Counter/Capture 來作:
將Timer 設定和外部RX Pin腳同步counting (下緣)。
設定Timer Initial 值FF,這樣只要count 1就會overflow引發中斷。
但是只有Timer0可以Synch到Falling edge,Timer1只能Synch Rising Edge.

所以只能使用Timer作,以4x freq作Sampling。
4800 => 1/4800 : 0.208mS => 0.208mS/4 : 0.052mS => 52uS
20MHz => 20MHz/4 : 5MHz => 1/5MHz : 0.2uS

52/0.2 = 260. > 255,所以用prescale = 2, count 130. TMR0 Preload=125


結果我用code :

bit RcvStartBit;
bit RcvOk;
char sampleCount;
char biti;
char RcvByte;

#define TMR0PRELOAD (201)
unsigned int err=0;
void interrupt inthandler(void)
{
if(TMR0IF){
TMR0IF=0;
TMR0=TMR0PRELOAD;
if(!RcvStartBit){
if(!RC1){
sampleCount=5;
RcvStartBit=1;
biti=0;
RcvByte=0;
}
}else if(sampleCount>0){ // StartBit received
sampleCount--;
}else{
sampleCount=3;
if(biti<8){>>= 1;
if(RC1)
RcvByte |= 0x80;
biti++;
}else{
if(RC1){
RcvOk=1;
}else{
err++;
}
RcvStartBit=0;
}
}
}
}

startbit wait 6
interbit wait 4
receive '0' (0x30). 收到的卻是0xFA.
所以把125改成200才OK. --- 查,這是9600 baudrate用的PRELOAD SETTING


可見效率很差,要把4x sampling改成2x sample (start-bit 要wait 1.5 bittime)
或是採用wait startbit 和interbit 不同的freq來作。


奇怪,今天試,是113 - 123是OK的區域
( 255 - 113) ~ ( 255 - 123)
也就是142 ~ 132. --- 這是4800的PRELOAD SETTING,和計算值125比較接近。
計算 -->實際
65 --> 55
125 --> 110
所以猜測interrupt 的overhead是10


下圖是RS232的't'字波形
RS232Sample
(from : PUMPKIN's AN-8, Implemeting Quard 1200 Full-dulpex Software UART)
從Start bit後,每一點間隔都是一個bit -time (1/baudra)。

但是如果Start bit的Sample 點在bit period的後段時,間隔一個bit time後,可能因為傳送端和接收段的Timming 誤差而導致sample到下一個bit period。

所 以為了增加timming的torance,要儘早的sample到Start bit,一般Start bit都是以baudrate的4倍取樣,這樣可以確保Start bit同步在前1/4 bit period中,之後再1+1/2 bit time後作為下一個bit的sample點。之後每個bit 間隔1 bit time。

上面的code就是用Timer0產生4x baudrate的中斷,在中斷中sample各bit,所以start bit後的delay count = 5 (+1),之後每個bit的delay count是 3 (+1)


其實這樣很愚蠢,因為PIC的Timer0不是Auto Reload,而是每次要自己Reload,所以可以設計成不同Sampling Freq :
Sample Start bit 時,Sampling Freq = 4x baudrate.
Sample data bit時,Sampling Freq = baudrate.
這樣可以減少不必要的中斷。
* 從這裡也可以看出,如果當初設計hardware的人,將RX assign到有interrupt功能的pin腳上,也不用浪費這4x Sampling Freq的中斷時間。....我也覺得莫名其妙。為什麼放著可以中斷的PORTB不用(接到LED),反而把RX拉到RC。-----難道是要證明他們的 功力?


試作none-even sampling freq:
一個bit time需要delay的timer count:
1/4800 = 2.08x10-4
2.08x10-4/2x10-7 = 1040.
所以prescale 要用8, Delay Counting = 1040/8=130.
Startbit counting = 130/4=32.5, 從上一個code test,約120,所以用30.
Interbit counting = 130, 從上一個code test, 修正10/4,所以用128.
TEST CODE:

#include <pic.h>

bit RcvStart;
bit RcvOk;
char biti;
char RcvData;
char RxData;
char RcvErr=0; // for debug

#define TMR0PRELOAD_START (255-30)
#define TMR0PRELOAD_BIT (255-131)

void interrupt inthandler(void)
{
if(TMR0IF) {
TMR0IF=0;
if(!RcvStart){
if(!RC1) {
TMR0=TMR0PRELOAD_BIT;
RcvStart=1;
biti=0;
RcvData=0;
}else{
TMR0=TMR0PRELOAD_START;
}
}else{
if(biti<8){ tmr0="TMR0PRELOAD_BIT;">>= 1;
if(RC1)
RcvData |= 0x80;
biti++;
}else{
TMR0=TMR0PRELOAD_START;
if(RC1){
RxData=RcvData;
RcvOk=1;
}else{
RcvErr++;
}
RcvStart=0;
}
}
}
}

char data[20];
void main(void)
{
char ri;

OPTION=0x02; // prescale use 8
TMR0=TMR0PRELOAD_START;
TRISC=0x0F;
TMR0IE=1;
GIE=1;

ri=0;
while(1) {
if(RcvOk){
RcvOk=0;
data[ri]=RxData;
ri++;
if(ri>=20)
ri=0;
}
}
}

結果STARTBIT在255-30的情況下,INTERBIT可以使用255-(126~137)的range.所以用131


Tx也用同樣的方法,以下是Tx/Rx半雙工的Code.

// Software UART, half-duplex
// call RcvStart to start the Rx session. (and stop the Tx session)
// call RcvStop befor sending Data out.

#include

#define TXPIN RC0 // remember to modify the TRISC config
#define RXPIN RC1

#define TMR0PRELOAD_START (255-16) // 4800 : 30 9600: 16
#define TMR0PRELOAD_BIT (255-63) // 4800 : 130 9600: 63

bit TxProcess=0; // Tx In Process
bit RxProcess=0; // Rx In Process
bit RxStart=0; // Receive a Start bit
bit RxError=0; // Receive a Error condition
char TRBiti; // bit index, used in rx/tx bit
bit RxOk; // receive 1 char in TRData
char TRData; // sending, receiving data

char RxData; // receiving data : shift register - workspace


// INTERRUPT
//==================
void interrupt inthandler(void)
{
if(TMR0IF) {
TMR0IF=0;

if(TxProcess){ // Process TX
TMR0=TMR0PRELOAD_BIT;
if(TRBiti==10){ // start bit
TXPIN=0;
}else if(TRBiti==1){ // stop bit
TXPIN=1;
}else if(TRBiti==0){ // all complete
TMR0IE=0;
TxProcess=0;
}else{
if(TRData&0x01){
TXPIN=1;
}else{
TXPIN=0;
}
TRData = TRData>>1;
}
TRBiti--;
}else if(RxProcess){ // Process RX
if(!RxStart){
if(!RXPIN){
TMR0=TMR0PRELOAD_BIT;
RxStart=1;
TRBiti=0;
RxData=0;
}else{
TMR0=TMR0PRELOAD_START;
}
}else{
if(TRBiti<8){
TMR0=TMR0PRELOAD_BIT;
RxData = RxData >> 1;
if(RXPIN)
RxData = RxData | 0x80;
TRBiti++;
}else{
TMR0=TMR0PRELOAD_START;
if(RXPIN){
TRData = RxData;
RxOk=1;
}else{
RxError=1;
}
RxStart=0;
}
}
}else{
TMR0IE=0;
}
}
}

// Sending
//=========================
void SendChar(char data)
{
while(TxProcess);
TxProcess=1;
TRBiti=10;
TRData=data;
TMR0=TMR0PRELOAD_BIT;
TMR0IE=1;
}

void SendCString(const char *str)
{
char data;
char i;

i=0;
data=str[i];
while(data!=0){
SendChar(data);
i++;
data=str[i];
}
}

//==============================================
void RcvStart(void)
{
while(TxProcess); // wait Tx Complete
TMR0IE=0;
RxProcess=1;
TRBiti=0;
RxStart=0;
RxOk=0;
RxError=0;
TMR0=TMR0PRELOAD_START;
TMR0IE=1;
}

void RcvStop(void)
{
TMR0IE=0;
RxProcess=0;
}

//==============================================
char rcvstr[40];
char rcvlen=0;

void main(void)
{
int i;

OPTION=0x02; // prescale 8
TRISC=0x02;
GIE=1;

SendCString("Hello!\r\n");
RcvStart();
for(i=0;i<sizeof(rcvstr);i++){
while(!RxOk);
rcvstr[i]=TRData;
RxOk=0;
}
RcvStop();
SendCString("Receiveing OK\r\n");

while(1); // end
}

星期六, 9月 10, 2005

英文教學: 烘手機

phone-dryer
這是從PIL看到的 http://forum.palmislife.com/viewthread.php?tid=55598&fpage=1
他說是從台南站看到的,改天去要跟他合照一下。
---應該會變成台南的名勝之一吧。

星期五, 9月 09, 2005

PIC的中斷結構

picint_struct
從上圖可以看出pic的中斷還是一個擴充的結構,可以看的出來是由原來的一個基本的中斷控制器擴充周邊中斷(PEIE)來達成的。
所以啟動擴充裝置的中斷,除了要啟動GIE (Gblobal),和該周邊的中斷Enable外,還要Enable PEIE.

PIC有自動防止INT重複進入的問題:
進入中段時,GEIE會自動清除。
執行RETFIE退出中斷時,GEIE會自動enable.

PIC只有一個中斷位址:0x0004.
所以在Interrupt Service Routine中要一一polling各interrupt的flag,並且清除他。


所以一個使用Timer2作time tick的code是:

#include <pic.h>

unsigned char tick;
unsigned char sec;

void interrupt timer2(void)
{
if(TMR2IF){
TMR2IF=0;
tick++;
if(tick>=125){
tick=0;
sec++;
}
}
}

void main(void)
{
T2CON = 0x4A; // post 10, pre 16
PR2 = 250; // 16 x 250 = 40000
// 20M inst = 20/4 = 5M
// count 125 = 1sec

tick=0;
sec=0;
TMR2IE = 1;
PEIE = 1; // the int hirachy, TMR2 belongs to Periperial
GIE = 1; // Global
TMR2ON=1;

TRISB=0x1F;
while(1) {
if(sec%2){
PORTB = 0x00;
}else{
PORTB = 0xE0;
}
}
}

星期四, 9月 08, 2005

GPS的衛星總共有24顆。
衛星上的電子鐘資料每天校正一次,靠著在范登堡空軍基地的主控站將校正後的資料上傳到衛星。
衛星發射兩種信號L1:1575.42MHz, L2:1227.60MHz.

GPS接收器一般都是12 channel的,可以同時收12顆衛星。
GPS接收到3顆衛星就可以算出2D資料,4顆以上就可以算出高度。

GPS NMEA Protocol

NMEA是GPS 的標準protocol,她是ASCII的字串,像
$GPRMC,053322.682,A,2502.6538,N,12121.4838,E,0.00,315.00,080905,,,A*6F
這一個command是GPS Recommanded GNSS data

053322.682
是UTC Time : 格式是hhmmss.sss所以是5:33:22.682
A
代表data是valid (如果找不到衛星,就會是V)
2502.6538
是緯度,格式是degree * 100 + minutes。但是minutes是100進位,所以要/100 * 60轉為degree,轉換後就是25'02'39.228''.
N
是代表緯度是北緯
12121.4838
是經度,格式是degree * 100 + minutes。minutes一樣要做/100*60的轉換,轉換後就是121'21'29.02''.
E
代表經度是東經
0.00
是速度,因為GPS天線沒動,所以是0.00
315.00
是方向
080905
是目前的日期,格式是ddmmyy,所以是05年9月8日
- -
接著有兩個欄位沒有用,所以空著
A
是Autonomous ?
*6F
是checksum
*** 所以用google earth就知道我把天線放在哪了****



格式是:
1.一律以 $ 符號開頭
2.$ 後是Message id. 5個ASCII Code.
3.一連串以','分開的欄位.
4.Checksum,checkum以'*'開始,後面是兩個ASCII code.
5.

$GPGSV,1,1,02,14,,,37,25,,,46,,,,,,,,*7F

$GPGSV : Satellites in View

Message ID : $GPGSV
Number of Messages : 1
Message number : 1
Satellites in view : 02 目看到的衛星數
Satellite Id : 14 Satellite vehicle 以下是第一個看到的衛星,編號14
Elevation : - Elevation of satellite in degree
Azimuth : - Azimuth of satellite in defree
SNR : 37 Signal to Noise ration in dbHz
Satellite id : 25 Satellite vehicle,以下是第二個看到的衛星,邊號25


NMEA Protocol中checksum的算法:
不包含開頭的'$',一直計算到'*'之前。一個byte一個byte的作XOR.

data++; // skip the heading '$' mark
sum = *data;
while(*data!='*') {
sum ^= *data;
data++;
}

所以可以知道,連command間的','符號也加入計算。


一般NMEA的report data中,用


有些擴充協定,用來設定,例如
$PNMRX103, NMEA report rate control
可以指定NMEA report資料的頻率
GGA,GLL,GSA,GSV,RMC,VTG,ZDA,ALL
例如:
$PNMRX103,ALL,0*1A
所有的report都停止。
$PNMRX103,RMC,2*02
每2 sec送出一次RMC report


$PNMRX100 設定baud rate
$PNMRX100,0,4800,0*48
設定
Protocol : 0 : NMEA Mode, 1: Bindary Mode (不要用這一個)
baud rate: 4800 其他可以設1200,2400,4800,9600,19200,38400,57600.
Parity : 0 : None, 其他1 2代表Odd, 2代表 Even.
所以上面的example代表:使用NMEA Mode, 4800, None Parity


這些設定在reset後都消失......


雖然Manual中說明support message有GGA,GLL,GSA,GSV,RMC,VTG,ZDA但是用ALL command開啟後,發現只有report GGA,GSA,RMC,VTG.

星期三, 9月 07, 2005

電子地圖的廠商

http://www.olemap.com/olemap_chinese/olemap_chinese.htm
用java寫的server map engine,可以用在windows, linux甚至是手機上
友邁科技
地址:220 台北縣板橋市文化路一段266號4樓之2
電話:02-8969 0032
傳真:02-8969 0030
mail:vincent@olemap.com


已經打電話了,她說會請協理來聯絡....希望真的慧聯絡才好


聯絡了...
回覆了,
地圖平台可以run在server上或是Symbian OS(6.0, 9.0)的手機上。
可以經由internet或是SMS接收GPS的資料。
另外在GPS涵蓋不良的地區,該系統甚至可以由基地台資訊取得大概資料。
會來demo

FM Tuner IC

FM Tuner IC,也就是可以收聽FM 廣播的IC。有I2C和SPI兩種控制介面,另外有Audio out 和天線。 ic 很小4 mm x 4 mm,屬於multi-chip module,只需要加crystal 就可以。單價約$6。
代理
QUMAX

陳時康 Danny Chen
02 26982566 ext 323
0920843153
danny.chen@qumax.com.tw

電子指北針

YAMAHA出的,電子指北針,I2C介面。 可以送出detector ic與地球磁場的夾角。
ic size: 2 mm x 2 mm, 很小。
可以配合papago,可以知道車子的朝向。
用在飛行搖桿上,可以作一個不需承軸,滾輪的搖桿。
單價約$2. (230 YEN)
YAMAHA http://www.yamahakhs.com

課長 林海立 Haili Lin
02-25118688 ext 282
haily@yamahasemi.com.tw
代理
QUMAX http://www.qumax.com.tw

陳 明慧 Cathy Chen
02 26982566 ext 325
0921128018
cathy.chen@qumax.com.tw

星期二, 9月 06, 2005

AXD 設定:使用multi-ice

1.開啟AXD,選Option --- Configure Target
axd_config_selecttarget

2.選Add,出現一個選DLL的dialog,找到multiice提供的dll(應該會在multi-ice server的安裝目錄下)。加入,就會多出一個multiice的taget
axd_config_target_add

3.選File -- Load Image
AXD_loadimg

4.從Dialog中選build好的for debug的image檔,附檔名是.AXE
AXD_Selectimg

5.load後,AXD會自動停在程式的起始位置,並顯示出該處的source code。如果要在其他的.c file中設定break point,要用Process-View - Source
AXD_ViewSource

6.在dialog中會將所有的source code列出,選你要看的source file
AXD_OpenSource

7.OK,AXD把你要的source code列出來了,可以到你要的地方set break point,之後按RUN就開始執行了。

星期一, 9月 05, 2005

PIC 的Timer

Timer0 和Watchdog共用一個prescalar(在Watchdog中叫postscalar),所以給Watchdog用的話,Timer0就不能用,同理,Timer0拿來用的話,Watchdog就不能用了。
為了避免要到處加clear watchdog,所以prescalar都是給watchdog用。

使用內部Crystal作clock時,clock = Fosc/4.
Timer0是8 bit timer,所以最長每256個instruction就會interrupt一次。
....有點太快。

Watchdog用的是內部的RC,產生period約15ms的reset信號,如果用postscalar(也就是Timer0的prescalar),最多可以到2.3 sec。


Timer1 是16 bit的counter,每次overflow後會由00開始技數,所以比較像是用來量測時間用的。
例如:方波開始時start,方波結束時check timer counter。


Timer2 固定使用內部Instruction Cycle (Fosc/4)作clock,可以由T2CON的T2PKCS0-T2PKCS1設定prescalar,TOUTPS0-TOUTPS3設定postscalar。
PR2是match register,決定Timer2的overflow的值

使用4M的crystal,instruction freq是1M。
設定Timer2的pre和post scalar都是16 (最大),設定PR2 (overflow count)是217的話。
count 18.0012次就算是1 sec。誤差是0.0012/18 = 0.006.4%
一天誤差5 sec。一個月誤差3 min,似乎太大。

pre=16, post=10. PR2=250
count 25 次就算是1 sec。誤差是0。

#include <pic.h>

unsigned int tick;
unsigned int sec;
void main(void)
{
T2CON = 0x4A; // post 10. pre 16
PR2 = 250; // 16 x 10 x 250 = 40000.
// use 4MHz, inst Freq = 4/4 = 1MHz
// so count 25 times = 1sec
tick=sec=0;
TMR2ON = 1;

while(1) {
while(!TMR2IF);
TMR2IF = 0;
tick++;
if(tick>=25){
tick=0;
sec++;
}
}
}

Memo : 數位相機

Panasonic DMC FX-8 : 12000
SONY Cyber-Shot T33 : 11000
Casio Exilim EX-Z57 : 9900
Pentax S5n : 9400

T33和S5n的錄影模式是MPEG-4,其他功能大約相同。
*Pentax的電池只能拍130張。其他都至少300張。

星期五, 9月 02, 2005

GPRS Modem上網設定 -- Windows 2000 系統

使用SIMCOM的SIM100T Modem,用RS232 cable接到PC上。準備一個有GPRS 帳號的SIM Card
(這裡是用台灣大哥大)

1.
newmodem
控制台,Modem,新增Modem,不要偵測。選一般9600 Modem
2.
selectcomport
選定Modem接的com port
3.
selectadvset
完成,到新的Modem,選內容
4.
advset
進階,設定初始命令:AT+CGDCONT=1,"IP","INTERNET"
---這是台灣大哥大的設定,好像根中華電信一樣。
5.
dialno
新增撥號連線,設定號碼
6.
password
撥號, username和password不用填。
撥號後,連線,OK。

保養:235500.

順便修了車燈和噴水器。
NT 14500.

油價要上漲2.4塊

我也是這樣想....

遠見雜誌電子報

《藍海策略》作者金偉燦與莫伯尼打破了「競爭力」大師波特 (Michael Porter)所提出的競爭為思考主軸的理論,《藍海策略》認為過度強調降低成本、改善效率,只在原有的市場進行差異化較勁,終究會落入企業削價競爭的「紅色海洋」。

《藍海策略》強調,唯有不甩競爭者,才能超越現有的需求,擺脫既有的競爭局面,為顧客創造有價值的創新。

「不要老是去抄襲別人的,要從客戶角度來創新,」全球最大智慧型電話(smartphone)廠商宏達電子總經理周永明強調,宏達在設計下一世代產品時,都是先考量滿足客戶未來需求,不會人云亦云、盲從潮流,才會創造出全球第一支pda(數位個人助理)手機。



這就是我所認為的,要靠著大陸低廉的勞工才能生存下去的 並不是真本事(真本是即使在勞動力最貴的日本也能降低生產成本)只會讓自己處於暫時的優勢,終究喪失創新的動力。

是不是要去買這本書來看看呢?


結果 這一期商周就有
一九九二年,眼看台灣勞力成本居高不下,帛漢電子董事長林昌亮帶著五百萬元大膽西進,前往廣東開平,生產電子變壓器、濾波器。大陸便宜的勞工,讓帛漢快速擴張,資本額成長八十倍,員工四千人。

林 昌亮自嘲在大陸經營的是「手工業」,他在大陸女工中,百中選一,因為她們必須分辨出頭髮般的細線,還有針頭大小的捲線器,然後在捲線器上,一線一線繞出電 子線圈,再加工製成各種成品,林昌亮說,帛漢就是這樣在針頭上討生活,一針一線繞出帛漢的商機。為了管理這群員工,林昌亮更花了十三年苦心,才建立出一套 軍事化的工廠管理與生產模式。

但大陸耕耘成功,林昌亮反而開始憂心,「靠大陸廠的低成本優勢,可以再過十年,但十年裡若不做升級,未來什麼都沒有!」於是,他決定押下在大陸掙來的一切所得,逆向回台灣找出路。

所以囉,並不是只有我這樣想。

新買的翻譯機

無敵CD-55 NT 1980,燦坤買的。
050901 004
050901 003
用電池,30萬字,有例句和詞根。 還有發音。
缺點是沒有背光,沒有觸控螢幕。