2009年5月23日 星期六

DIO的程式碼測試

Jennic公司的zigbee子版的Exansion Connector一共有40隻腳位
根據"JN-RM-2001-Integrated-Peripherals-API-2v4"這份文件的說明
其中1~20這些pin腳稱為DIO(Digital I/O)可供外接
程式中有幾個比較重要的參數如下

vAHI_DioSetDirection 設置方向
vAHI_DioSetOutput 設置輸入輸出
u32AHI_DioReadInput 讀所有的IO口
u8AHI_DioSetByte 輸出一個字節
u8AHI_DioReadByte 讀一個字節

Zigbee的開發是以C為基礎,借了幾本書來參考
也上網找了資訊,大陸的Bocon 公司也有針對Zigbee研究,公司也有開發一個資訊論壇

http://www.bocon.com.cn/boconbbs/forumdisplay.php?fid=19

由於以往並沒有什麼程式的基礎,唯一會的程式也只有在單晶片課程學到的組合語言,而Zigbee主要的應用都是要修改其內部的程式架構,除了翻譯說明書之外,我只能一步一步的Try,參考別人的打法,針對DIO的應用在Bocon中下載了一個對於DIO的應用檔JN-AP-1040-JN5139-UsingDioInterrupts-1v0

裡頭主要的程式就是以下這段:
PRIVATE void vInitSystem(void){ /* Setup interface to MAC */ u32AppQApiInit(NULL, NULL, NULL); u32AHI_Init();

{

/* Set SW1(dio9)/SW2(dio10)to input and LED1(dio16)/LED2(dio17)to output */
vAHI_DioSetDirection(E_AHI_DIO9_INTE_AHI_DIO10_INT, 0);
vAHI_DioSetDirection(0, E_AHI_DIO16_INTE_AHI_DIO17_INT);
/* enable pullups on all inputs/unused pins */
vAHI_DioSetPullup(!(E_AHI_DIO16_INTE_AHI_DIO17_INT),E_AHI_DIO16_INTE_AHI_DIO17_INT);
/* turn LED off */
vAHI_DioSetOutput(E_AHI_DIO16_INTE_AHI_DIO17_INT, 0);
/* set interrupt for DIO9 /DIO10 to occur on button release - rising edge */
vAHI_DioInterruptEdge(E_AHI_DIO9_INTE_AHI_DIO10_INT, 0);
/* enable interrupt for DIO9/DIO10 */
vAHI_DioInterruptEnable(E_AHI_DIO9_INTE_AHI_DIO10_INT, 0);

}

註解的地方通通以紅色呈現,將這個範例燒進去之後,並不會發送感測的訊號給母版,於是針對程式的針腳研究
/* Set SW1(dio9)/SW2(dio10)to input and LED1(dio16)/LED2(dio17)to output */
vAHI_DioSetDirection(E_AHI_DIO9_INTE_AHI_DIO10_INT, 0);
vAHI_DioSetDirection(0, E_AHI_DIO16_INTE_AHI_DIO17_INT);
根據註解的意義,是將DIO9以及10設為input,DIO16以及17設為output
/* turn LED off */
vAHI_DioSetOutput(E_AHI_DIO16_INTE_AHI_DIO17_INT, 0); 而這段程式是將兩個LED關閉,在開機時,兩顆LED也確實是熄滅未開燈的(原本在enddevice的時候是兩顆燈會開啟代表運作中) *尚未把後面的0改成1試試,也許會開啟LED*

註解說將DIO9以及10設為input,DIO16以及17設為output,但這是什麼意思?我拿彩虹排線將16以及17接39的VCC,兩顆LED都熄滅,而將9接Gnd LED沒反應,10接Gnd LED1滅了,奇怪的是接9沒反應,接11的時候LED2熄滅,而根據說明書的硬體電路圖,Pin腳16跟17是接在兩顆LED的負端,若是將其接上vcc則就不會有亮燈的現象,而sw1,sw2之前接了pin9和10,而sw1、sw2、LED1、LED2都是共用同一vcc,所以將pin9以及10接Gnd的話,理論上電流將不會流向LED,也因此會讓燈熄滅,但是經測試的結果,卻是10.11腳才有這樣的效果,也因此讓我困擾很久。

但更令我困擾的是將DIO9以及10設為input,DIO16以及17設為output這段話的意義,我從9.10輸入高電位以及低電位,應該要是output的16.17卻都是一直沒反應,到底是要在多加程式碼進去讓輸入的資料做處理,還是程式碼的應用不對還要再苦惱 .....

資料傳送測試

把5139的 HomeDemo coordinator,Router,都燒到JN5139短晶片裡面,coordinator可以開機,但沒有反應,另外燒入Router後對應原本主版的晶片有反應,可以隨著主板的sw3 跟 sw4控制子板 sw1亮燈的功能,主版的sw3是off,sw4是on。


連接電腦
利用學長給的網址裡的程式碼分別試讀取亮度和溫度的
燒入晶片後顯示出成功的與電腦做連接我們連接超級終端機
圖一(偵測到光)
圖二(偵測到溫度與濕度)
連接comport
圖三 (測光)
圖四(偵測溫度和濕度)
不過似乎沒有隨著環境改變而改變,這邊還要在了解一下
另外溫度與濕度的資料傳輸會有周期性的交互傳送
週期性可由LED1來判別,亮暗變動表示傳送下一筆資料

不過還要去詳細了解程式碼的架構
以下是與連接的主要程式碼

PRIVATE void InitSystem(void)
{
uint8 u8UartPort = E_AHI_UART_0;
uint8 u8BaudRate = E_AHI_UART_RATE_38400;
}
這段是設定選擇的串口,並且定義傳每秒傳輸位元以連接超級終端機。當然可以去更改。

vAHI_UartEnable(u8UartPort);
vAHI_UartReset(u8UartPort, TRUE, TRUE);
vAHI_UartReset(u8UartPort, FALSE, FALSE);
vAHI_UartSetClockDivisor(u8UartPort, u8BaudRate);
vAHI_UartSetControl(u8UartPort, FALSE, FALSE, E_AHI_UART_WORD_LEN_8, TRUE, FALSE);
vAHI_UartSetInterrupt(u8UartPort, FALSE, FALSE, FALSE, TRUE, E_AHI_UART_FIFO_LEVEL_1)
這段就是要開啟串口傳輸資料
之後要求資料回傳顯示在終端機上就要設定call back function。

所以要能夠與電腦做連結必須要先學會然後撰寫以上的程式碼



後來想說找一個範例程式碼去做修改,實際測試看看
結果還是沒成功,不免有種失落感
      圖五(修改程式碼 失敗了)

在與電腦連結這方面對於程式碼要多看多打多測才行
目前的方向是要從程式碼去著手

2009年5月19日 星期二

板子的背光模式

板子的背光模式只有在外接電源時才能開啟,而且記得把藍色小蓋子從pin12移到pin23





我想背光模式在外接電源條件下才會啟動的原因應該是背光模式很耗電,Zigbee的好處就是低功耗,如果在電池模式下開啟背光模式應該跟使用手機很像,待機可以很久,但螢幕一直發出亮光電量很快就沒了。

在外接電源的條件下,即使沒有保險絲也可以通電使用,新竹那間材料行雖然沒有同樣型號的保險絲,但學長說有可能是同樣的東西因為產品在美國,所以型號不同,所以還是得問問那間材料行才準。

ps:在此特別感謝帥哥立中的sony ericsson手機充電器,規格是6.5V DC,變壓器的規格是5~7V DC,剛好低空飛過,省了買變壓器的錢

2009年5月18日 星期一

熟悉Zigbee開發平台 軟體操作

介紹Zigbee的軟體操作 Jennic Flash Program 與 Jennic CodeBlack

jennic CodeBlack 主要功能為編譯程式
初始介面



以開發包裡的Application 壓縮包為例
利用CodeBlack軟體開啟位於C:\Jennic\cygwin\jennic\SDK\Application\JN-AN-1052-ZigBee-Home-Sensor-Demo\CodeBlocksProjects 的檔案





裡面為Router的程式碼 原始檔案為 cbp檔
我們可以在裡面更改指令 產生想要的結果
完成程式碼的編碼後 選擇release 模式 即後在左列的專案名稱按右鍵
然後點build 完成建置






完成編譯後 將會在C:\Jennic\cygwin\jennic\SDK\Application\JN-AN-1052-ZigBee-Home-Sensor-Demo
自動產生一個Build的資料夾 裡面及出現剛剛編譯完成的檔案,並且檔案型態改為bin檔 這就是當我們用到flash program時所要用的檔


Jennic Flash Program

初始介面



之後與Zigbee Module 做連結



當完成連結後 按下Refresh
在Device 可以看到連結的型號,並且可以看到這塊module的MAC Address
之後便可進行燒錄
1.在program file選擇所需要的檔案
2.選擇RS232所連結的COM,此COM會因每台電腦會插入的USB孔不同而改變
3.一切就緒後按下program 方可進行燒錄



以上是介紹從編譯到開始燒入的過程。


另外對於與電腦的溝通我所找到的方法還是要寫程式進去
我們要燒錄程式於晶片開啟UART與電腦的做資料傳送
之後便可以連結超級終端機
不過程式的部分還是不太清楚要如何著手
所以要加油!!

2009年5月17日 星期日

Exansion Connector 訊號測試

理想化的情形是外接一個Sensor,利用Zigbee的傳輸功能將其感測到的訊號傳送回監控端,因此,找出外接的地方不可或缺,在每個子版Expansion Connector(J4)部分即是提供外接的功能但是,用哪些針腳以及如何利用這些針腳還是個問題,也因此,我只好先測量在子板開啟的狀態底下,哪些針腳是有在作用的。

這是說明書上對於每個針腳的說明,不過裡頭還是有很多地方不是很清楚





試驗的方法是利用兩條彩紅排線以及一個LED,一端接上要量測的針腳,另一端接上GND,透過LED亮燈與否測量數位訊號

此次實驗所用到的東西 : 一個Zigbee子版、兩條彩紅排線,一個LED
第38以及40是GND,選擇其中一個即可
在只開啟子版的狀態底下測量每個針腳,若針腳有訊號就會形成一個迴路,使得LED發亮
測量每個腳位的結果,1代表有亮,0代表無亮燈
由於亮燈的明亮度都不一樣,於是我也順便測量了每個腳位的電壓,其中第39腳位VCC測量到的電壓約2.94V,估計此Exansion Connector提供的Vcc約是3V左右



這只是在單獨子版開啟的狀態底下測量,還有一種情況是當母版以及子版同時開啟時,這些針腳會不會有傳訊的情況產生,就待下次測量結果。