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卻都是一直沒反應,到底是要在多加程式碼進去讓輸入的資料做處理,還是程式碼的應用不對還要再苦惱 .....

2 則留言:

  1. 未來規劃是什麼?

    你們接下來,還有暑假,目標是甚麼,實做要做些甚麼?

    回覆刪除
  2. 萬志整理整體的回應

    1.我們現在大概的目標是朝向馬桶的偵測,若在馬桶上偵測有著不錯的成績才進行改良式
    我有看過一種嬰兒用品,他就是一塊布,跟老師說的應該是同一種,如果裝置在內褲外側,位於排泄器官周遭,視情況多裝幾個,應該是可以改善判斷成功率,只是這種裝置也有一些使用上的限制,譬如說當它濕掉以後要再使用,必須烘乾才能再次使用。

    2.本系統的設計原用意就在於幫助管理人員做統計情況,成功的話對老師協助應該不少
    李老師應該是指實際在學校並沒有做統計的的動作,也的確如此,我女朋友他們在特教幼稚園每天都是忙翻了,也不會有時間去仔細比較統技術數據,雖然他有跟我講這個應該很有用,幼稚園一般方式還是比較偏向定時帶小朋友上廁所,或許在統計這方面,如果可以發展改成當小朋友跟以往狀態有很大不同,就通知老師,這樣會對老師有比較大的立即回饋。

    3.我們先行以類似Mp3的播放裝置給予回饋,等系統測試準確度有一定水準在對回饋系統進行改良
    如果要達到個人化的回饋,設備上要求會比較高,如果要套用現行電子產品,也有可能會被環境限制(供電、場地佈置),而我們當初構想是利用RFID做個人識別,利用PDA當作多媒體播放裝置。

    4.這套裝置如同藍牙一般會受到障礙物影響 因此建置時的確需要實際場地的測試,調整各個接受器收到的訊號以求最佳品質連線
    其實ZIGBEE已經可以自行建制網路架構,只是當然每個點還是必須在連結距離內才能交流,不過在場地佈置上應該是非常簡易,每個訊號收發裝置都不要離上一個太遠即可,供電也是用電池的方式,雖然尚未測試實際工作時間,但是相信應可維持兩個星期以上,而大小最大的差不多A8,小的是A16左右,厚度都不超過5公分。

    回覆刪除