ZigBee開發中遇到的問題及解決方案
在學習zigbee的過程中,最重要的問題就是一開始對於一些陌生名詞的恐懼,學習新東西的過程中總會涉及到一些專業性比較強的東西,由於之前沒有接觸過,所以到導致一遇到陌生的名次就會很害怕,這裡總結的經驗就是多看幾遍就好了,任何東西都是可以學會的,尤其是學理的,應該秉承的世界上所有問題都是可以解決的,只要多學學,什麼都可以做出來。需要涉及到的知識以及zigbee工作過程上面已經基本都涉及到了,但是真正在開發專案的過程中還是遇到了很多很多的問題,一般都是上網先搜尋,看看有沒有前人栽下的樹,大部分情況還是能找到一些相關資訊的,但是如果沒有想解決的問題的話就只能多看書自己解決了。上面的知識我認為最重要的就是zigbe的三個元件在組網前和組網過程中的行為,這個在之後解決問題會有很大幫助,而且其實這個東西就是zigbee協議的核心。
這裡談到的都是cc2530晶片的開發,所以用的也是ti的ZStack協議棧,不用協議棧也可以組網通訊,只是人家ti團隊的精銳做出來的東西肯定要比一個剛入門的新手要穩定和好用的多。
個人覺得一開始就還是先學晶片再學協議棧,但是晶片也不用怎麼深學,搞清楚io操作就行,畢竟微控制器的精髓就是io和外設嘛,所以先了解一下這兩個就可以看協議棧了。那麼如何學習協議棧呢?我的學習過程是之直接看人家的協議棧程式,然後在網上看看一些關於協議棧結構的文章,沒有寫的非常全面的,但是一點點看,多看看,邊看邊對程式做註釋,而且人家本身也有一些英文註釋,這樣就慢慢入門了。至於看哪裡,怎麼看,後面詳細談。
另外推薦一個視訊教程,是一個叫老達的人錄製的,淘寶也有賣的,這個人是一線開發工程師,講的還是比較具體和詳細的,基本的東西講的很好,但是深入的開發肯定不會給你講。
下面就按照步驟說一下學習zigbee的過程。
首先介紹CC2530晶片的一些內容,CC2530前面說過是有8051增強核心的,所以其實就是一個微控制器,中斷、io輸入輸出、還有其他一些外設都和普通微控制器完全一個模式,這個找本書看看學會各個外設的操作就行,這個晶片唯一和一般微控制器不同的地方就是有一個射頻外設,對這個外設操作就可以發射或者接收無線訊號,所以其實不用動很多關於無線通訊的知識,只要會操作這個射頻外設就可以進行開發,就像掌握了串列埠外設就可以進行兩個微控制器之間的通訊交流了,這個只是把有線換成了無線,把串列埠換成了射頻。下給出一些我在開發過程中用到的一些外設例子,有程式,都是改了很多遍可以直接拿來用的。這裡如果微控制器玩的非常溜的可以不全看,就看看io操作就行,畢竟各類協議都是一樣的嘛。當然不同微控制器操作時可能會出問題,所以遇到問題再來對比看也是可以的。
1、關於ADC的一些配置
CC2530內建一個12位的ADC,有8個獨立的可配置的通道。1個參考電壓發生器。
可選抽取率;可接受單端或者差分訊號;參考電壓可選為內部單端、外部單端 、外部差分或AVDD5(注意外部的參考電壓最高不能超過3.3V);支援中斷;支援DMA;支援電池測量。
ADC引腳連線在埠0上,ADC的輸入引腳為AIN0~AIN7,分別對應P0_0~P0_7。
例:從P0_7輸入,採用AVDD5為參考電壓
P0DIR &= 0x7f; //p0_7配置為輸入
ADCIF = 0; //清標誌位
ADCH &= 0x00; //清除ADC資料暫存器
ADCL &= 0x00;
ADCCFG |= 0x80; //P0_7埠模擬IO使能
ADCCON3 = 0xB7; //單次轉換,配置參考電壓為電源電壓,對P0_7進行取樣,抽取率為512
//ADCCON1 = 0x30; //停止A/D
//ADCCON1 |= 0x40; //啟動A/D
while(!(ADCCON1&0x80));//等待AD轉換完成
AP_buf[0] = ADCH;
AP_buf[1] = ADCL;
return(AP_buf);
注意:這裡有個很坑的地方,雖然CC2530內建的是12位ADC但是其實ADCH+ADCL共14位,但是ADCH最高位是符號位,所以用不了,低三位也是不用的,而且資料位是右對齊的,也就是說其實精度最高是12位,而且採用如下規則:
10位—>ADCH的6~0 + ADCL的7~5
12位—>ADCH的6~0 + ADCL的7~3