2009年4月16日 星期四

Dallas DS1307 應用心得

DS1307是一顆 REAL TIME CLOCK IC,內部有萬年曆的功能,腳位簡單,溝通操作是透過I2C界面,而且還有備援電池自動切換的功能,上面還有多餘的56BYTE可供外部MCU來使用。

幾個重點要注意:
一、DS1307 出廠後一定要初始化,把 ADDRESS 00h 的第7個BIT設成0 (CLOCK HALT)才會開始跑。

二、DS1307 上電後有一段時間延時,這段時間內MCU切勿發送I2C指令,否則可能造成誤寫入時間暫存器。***這邊也可能是I2C傳遞有誤造成的問題。

三、VDD要搭個電容會比較穩定。

四、VBAT沒用到的話要接地。

五、多餘的RAM可以拿來當成離線記憶體使用,正如同EEPROM一般。(VBAT有效的話)

六、時間的精度取決於外掛 OSC (32768HZ) 的精度,而且要接地良好,否則很容易被干擾。

2009年3月9日 星期一

Ruby 1.9.1 & Rails 2.3 on Debian 安裝筆記

安裝 ruby 1.9.1
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p0.tar.gz
tar xvf ruby-1.9.1-p0.tar.gz
cd ruby-1.9.1-p0
./configure

失敗
C compiler cannot create executables


安裝 libc6-dev
apt-get install libc6-dev

重作-安裝 ruby
./configure

失敗
make: command not found

安裝 make
apt-get install make

重作-安裝 ruby
./configure
make
make insatll

ruby -v
ruby 1.9.1p0 (2009-01-30 revision 21907) [i686-linux]

完成安裝 ruby

安裝 rake rack
gem install rake rack

失敗
/usr/local/lib/ruby/1.9.1/rubygems/package.rb:10:in `require': no such file to load -- zlib (LoadError)


安裝 zlib ruby adaptor
cd ruby-1.9.1-p0
cd ext
cd zlib
ruby extconf.rb

失敗
checking for deflateReset() in -lz... no

checking for deflateReset() in -llibz... no
checking for deflateReset() in -lzlib... no
*** extconf.rb failed ***

安裝 zlib1g-dev
apt-get install zlib1g-dev

重作-安裝 zlib ruby adaptor
ruby extconf.rb
make
make install

重作-安裝 rake rack
gem install rake rack

安裝 rails 2.3.1
gem install rails --source http://gems.rubyonrails.org

gem list

*** LOCAL GEMS ***

actionmailer (2.3.1)
actionpack (2.3.1)
activerecord (2.3.1)
activeresource (2.3.1)
activesupport (2.3.1)
rack (0.9.1)
rails (2.3.1)
rake (0.8.4)

完成安裝 rails


建新網站
rails blog -d mysql
cd blog
啟動
./script/server

失敗 /usr/local/lib/ruby/gems/1.9.1/gems/rails-2.3.1/lib/initializer.rb:269:in `rescue in require_frameworks': no such file to load -- openssl (RuntimeError)

安裝 openssl ruby adaptor
cd ruby-1.9.1-p0
cd ext
cd openssl
ruby extconf.rb

失敗
=== OpenSSL for Ruby configurator ===

=== Checking for system dependent stuff... ===
checking for t_open() in -lnsl... no

checking for socket() in -lsocket... no
checking for assert.h... yes

=== Checking for required stuff... ===

checking for openssl/ssl.h... no

=== Checking for required stuff failed. ===

Makefile wasn't created. Fix the errors above.


安裝 libssl-dev
apt-get install libssl-dev

重作-安裝 openssl ruby adaptor
ruby extconf.rb
make
make install

重新啟動網站
./script/server

網頁ok
http://localhost:30000/

About your aplication's environment

Internal Server Error undefined method `each' for # WEBrick/1.3.1 (Ruby/1.9.1/2009-01-30) at localhost:3000

console 顯示
!!! The bundled mysql.rb driver has been removed from Rails 2.2. Please install the mysql gem and try again: gem install mysql. /!\ FAILSAFE /!\ 2009-03-09 10:27:58 -0700 Status: 500 Internal Server Error no such file to load -- mysql

安裝 mysql ruby adaptor
wget http://tmtm.org/downloads/mysql/ruby/mysql-ruby-2.8.1.tar.gz
tar xvf mysql-ruby-2.8.1.tar.gz
cd mysql-ruby-2.8.1
ruby extconf.rb

失敗 checking for mysql_query() in -lmysqlclient... no *** extconf.rb failed ***

安裝 libmysql++-dev
apt-get install libmysql++-dev

重新安裝 mysql ruby adaptor
ruby extconf.rb
make
make install

重新啟動網站
./script/server

Status: 500 Internal Server Error Access denied for user 'root'@'localhost' (using password: NO)
ok~正常,這是 database.yml 沒設定的關係
改好後重啟網站
./script/server


完工^^;

2009年3月4日 星期三

MCU在ICE上開發與實際CHIP的差異

很多狀況會導致ICE開發時的結果正確,但是燒錄出來的實體CHIP卻有不同的結果…
底下記錄實際發生過的經驗:

一、使用內RC開發計時功能,燒錄出來卻發生時差誤差很大:
  大部份的MCU都己經有提供內RC的功能,但若ICE設計的有問題,或開發時的環境不同,年久失準…等等問題,就會有ICE內頻不準的狀況,而實際CHIP由於是相對比較量產的東西,所以實際的CHIP反而是應該要比較準確。
  系統開發的時間若是忽略這個問題,反而自作聰明的加入校正值的話,就會導致這個問題。

二、ICE由於可以模擬多種型號的CHIP,因此在設計時必定使用了比較大的RAM容量來當作CODE及MEMORY的記憶體,若是編譯器不良無法針對不同型號作檢查,那就有可能出現STACK OV的問題而在ICE模擬時卻不自知。一般都會正確檢查CODE的大小是否超過ROM的大小,但不一定都會檢查RAM的問題。

三、同樣上述的原因,不同的CHIP可能會對不同的指令集有不同程度的支援,若是編譯器無法適時檢查出這種錯誤,也會讓你DEBUG沒完沒了。

四、AD轉換模組需要使用參考電壓,有的是外部參考電壓,但也有用內部參考電壓的,這時就要考量ICE的電壓要怎麼能跟實際主板電壓一樣,或怎加入校正程序。

2009年3月3日 星期二

GMAIL建立標籤及篩選器的方法

GMAIL的標籤及篩選器搭配使用的方法…
一、點「設定」


二、點選標籤,建立一個新的標籤


三、點選篩選器,建立新的篩選器



四、在過瀘項目上填寫上條件
例如:
mary」、「peter@yahoo.com.tw」、「小明」…
亦可使用萬用字元「*」及「|」(或)來連結多個條件,例如:
mary|peter|*@mycompany.com

填好條件可以先按下「測試搜尋」來測試一下對不對,再進行下一步。




五、最後指定符合這個篩選條件的郵件要作何處理,這邊是幫它加上之前建好的標籤,記得勾選「同時套用到…」把以前的郵件也套用上這個篩選器,如此一來你的郵件就可以自動分好類了,。



六、你還可以把不同的標籤設定成不同的顏色。

GMAIL如何發信給一個群組

一、進入GMAIL通訊錄:


二、勾選你要群組在一起的聯絡人:


三、為這個群組命名,注意,開頭第一個字請不要使用中文,有些中文沒辦法達到自動群發的效果,可以使用符號,譬如「+同事」:



四、這樣以後撰寫郵件時,只要在收件人那邊打上第一個字,就會跳出群組名單讓你挑選了,非常方便:

2009年3月1日 星期日

JAVA SCRIPT 判斷只能輸入中文的程式碼

function isChinese(temp)
{
var re = /[^\u4e00-\u9fa5]/;
if(re.test(temp)) return false;
return true;
}

2009年2月27日 星期五

RoR試開筆記(五)

透過 generator 自動建立出的網頁框架固然很快速,但初學者可能會很難理解整個框架的運作流程。

new 跟 edit 可以使用同一個 form 的樣式,但 rail 要如何得知要產生不同的 form action ?

追一下連結跟control…
new--->create
<%= link_to 'New post', new_post_path %>
會連到 post control 的 new
@post = Post.new
才把 html 顯示出來

edit--->update
<%= link_to 'Edit', edit_post_path(post) %>
會連到 post control 的 edit
@post = Post.find(params[:id])
才把 html 顯示出來

一個是新增的,一個是從資料庫找出來的,因此能判定要用哪種 form action,但是這部份可以去微調嗎? 需要再研究。

2009年2月26日 星期四

RoR試開筆記(四)

ruby script\generate scaffold Post name:string title:string content:text
使用 scaffold 自動 generate 出一個名為 Post 的 model、controler、viewer,包含了一些基本的操作。

rake db:migrate
把剛剛自動生成的 model (想像成 table) 資料表作更新。

修改 \blog\app\views\home\index.html.erb
加入這個 post controler 的連結

<%= link_to "My Blog", posts_path %>

如此就可以到 http://127.0.0.1:3000/posts 進入 post controler 了
或到透過 home 首頁的 post 連結進入。

RoR試開筆記(三)

config/routes.rb
編輯「文件路由檔」

適當位置加入這行…
map.root :controller => "home"

刪除預設的首頁
\blog\public\index.html

如此 http://127.0.0.1:3000/ 就會指到 home controler (預設viewer:index.html.erb)

2009年2月25日 星期三

RoR試開筆記(二)

rails blog -d mysql
建立一個名為 blog 的網站app,使用 mysql

cd blog
進去 gen 好的網站

config/database.yml
編輯資料庫設定

rake db:create
自動建立資料庫

ruby script/generate controller home index
建立一個包含 viewer:index 的 controller:home

ruby script/server
啟動 server

http://localhost:3000/home/index
網頁

參考:http://guides.rubyonrails.org/getting_started_with_rails.html

2009年2月23日 星期一

RoR試開筆記(一)

Windows 下安裝 ROR
到…
http://rubyinstaller.rubyforge.org/
下載…
rubyinstaller ruby186-27_rc2.exe
安裝
套件管理程式 gem 要勾選隨同安裝

裝好後下指令安裝 mysql adaptor,才能用 mysql 作為資料庫…
gem install mysql [--no-ri --no-rdoc]

裝好後下指令…
gem install rails [--no-ri --no-rdoc]

開新專案(使用mysql,需先另外安裝好)…
rails HelloWorld -d myaql

啟動 server…
cd HelloWorld
ruby script\server


*要使用 mysql 也要將 libmysql.dll 拷貝到 ruby/bin 目錄下,才不會有錯誤訊息出現。
*mysql需支援 InnoDB,要修改 my.ini 重啟 MYSQL

2009年1月5日 星期一

FPPA教學簡報

FPPA基礎教學-使用組合語言…
第一章 FPPA簡介
第二章 FPPA程式架構
第三章 FPPA程式初探
第四章 FPPA程式設計
第五章 FPPA程式實習

FPPA實驗平台教學教材

由於ASSEMBLA即將開始收費,因此要把所有的SVN進行大搬家,連帶的一些教學文件也跟著搬家了,看來還是GOOGLE的窩最舒適(重點是免費)

FPPA實驗平台教學教材-使用C語言
FPPA實驗平台簡介
實驗(一) 8位元LED輸出單元 與 模組設計總論
實驗(二) 按鍵開關輸入單元 與 控制模組的設計
實驗(三) 飛梭編碼(帶開關)輸入單元
實驗(四) 6位數7字節顯示單元
實驗(五) RGB LED控制單元
實驗(六) LCM 模組控制

2008年9月15日 星期一

Windows 抓圖 API

相關函式…

HWND findChild = FindWindow( NULL, "視窗標題" );
HWND dc = ::GetWindowDC( findChild );

使用這個 DC HANDLE 來作圖形的拷貝動作

但是由於 windows 有外框、標題列等問題,所以實際抓圖的位要作細部的調整
使用 GetSystemMetrics WIN API,例如…

    int nCaptionY = ::GetSystemMetrics(SM_CYCAPTION);         //dialog的標題列
    int nBorderX = ::GetSystemMetrics(SM_CXEDGE)+1;         //BORDERX
    int nBorderY = ::GetSystemMetrics(SM_CYEDGE)+1;         //BORDERY

才可以準確得知,CLIENT 畫布的位置。

2008年9月9日 星期二

Samba Server 新增使用者

adduser id
smbpasswd -a id
若有 libssl.so.2 找不到 可找找底下替代 lib

ln -s /usr/lib/libssl.so.0.9.6 /usr/lib/libssl.so.2

ln -s /usr/lib/libcrypto.so.0.9.6 /usr/lib/libcrypto.so.2

2008年9月8日 星期一

POSTFIX 增加郵件群組的功能

nano /etc/postfix/main.cf
===================================
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
===================================

nano aliases
===================================
maillist: aaa, bbb, ccc, ddd, eee
===================================

postalias /etc/aliases
postfix reload                    <== 如果 main.cf 有改到的話則需要重啟

使用VBS修改電腦IP、DNS、電腦名稱、工作群組


strComputer="."
strmask="255.255.255.128" 
dim ipv,gateway,lan,pcname
gateway="220.229.105.129"
ipv="220.229.105.123"
pcname="pc123"

Set objWMIService=GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
Set colNetAdapters=objWMIService.ExecQuery("Select * from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

strIPAddress=Array(ipv)
strSubnetMask=Array(strmask)
strGateway = Array(gateway) '修改預設閘道
strDNS=Array("61.56.211.185","211.78.130.2","168.95.1.1") '// 三組 DNS

For Each objNetAdapter in colNetAdapters 
errEnable=objNetAdapter.EnableStatic(strIPAddress, strSubnetMask)'ip,子網路遮罩
errGateways = objNetAdapter.SetGateways(strGateway) '預設閘道
errDns=objNetAdapter.SetDNSServerSearchOrder(strDNS)'dns
Next

Set objWMIService = GetObject("winmgmts:" _
     & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colComputers = objWMIService.ExecQuery _
   ("Select * from Win32_ComputerSystem")

For Each objComputer in colComputers
     err = ObjComputer.Rename( pcname )'機器名稱
     ReturnValue = objComputer.JoinDomainOrWorkGroup("WORKGROUP")'工作群組
Next

2008年8月21日 星期四

MYSQL 支援 Transation

一、資料庫引擎要改成 InnoDB。

二、流程…

mysql_query('BEGIN TRANSACTION_NAME');

mysql_query('SELECT * FROM whatever...')
mysql_query('UPDATE blah blah...')

if(check for errors) {
mysql_query('ROLLBACK');
} else {
mysql_query('COMMIT');
}

2008年8月13日 星期三

專案列表

找個時間把開發過的案子程式要點記下來…

FPPA專案:
BatteryCharge-充電裝置自動充放電控制
BLDC-直流無刷馬達AD調速控制
FanControl-超微風風扇控制含定時、IR
GenFreq-方波頻率偵測即時計算
LightFailAlert-汽車燈號故障警示器、RF
PWM-RGB-Bar-三色PWM燈飾
PWM燈控-LED燈亮度調節控制
MP3Rider-MP3模組撥放音樂
RGBLight-RGB LED燈控制
RGBW-LED-四色LED燈控制
SPWM吊扇-無段風扇控制
VolControl-飛梭旋鈕訊號控制音量
三合一車燈-三合一車燈
立式16吋溫控無段風扇-無段溫控風扇控制
風扇節能調速器-風扇控制器
腳踏車警示燈-LED燈控制器
檯燈燈控-LED亮度控制器
雙頭風扇-風扇控制器
雞尾酒機-刨冰、擾拌定時控制器
TimerDevice-通用定時器

PIC專案:
sosLight-三合一車燈
FreqGen-頻率產生器
LedBar-LED燈控制器
PowerControl-電源輸出控制器
RFLightControl-RF號控制裝置
spwm-SPWM風扇PIC版
TimerDevice-通用定時器PIC版

ELAN專案:
PWMLED-RGB LED燈控制
TimerDevice-通用定時器ELAN版

2008年6月16日 星期一

3ds窗外搭景的方法

一、用單一平面貼圖…


二、用環繞圓柱作貼圖


也可以只用一個小扇形貼圖,效果會更好。

效果圖…




窗外的佈景,果真是搭出來的。