三、AVR單片機開發經驗
AVR與傳統類型的單片機相比,除了必須能實現原來的一些基本的功能,其在結構體系、功能部件、性能和可靠性等多方面有很大的提高和改善。
但使用更好的器件只是為設計實現一個好的系統創造了一個好的基礎和可能性,如果還采用和沿襲以前傳統的硬件和軟件設計思想和方法的話,是不能用好AVR的,甚至也不能真正的了解AVR的特點和長處。
功能越好的器件,需要具備更高技術和能力的人來使用和駕馭它。就象一部好的F1賽車,只有具備高超技術的駕駛員才能充分體會到車的特點,并能最大限度的發揮出車的性能。
AVR具有上手入門快,開發方便簡單的特點,但要充分體會和發揮AVR的優點,還需要應用工程師本身的硬軟件設計開發能力的不斷學習、實踐提高。
“外行看熱鬧,內行看門道”,對于有一定基礎的嵌入式和單片機系統設計開發的工程師,不妨先簡單嘗試一下AVR。
開發環境與工具:PC+下載線+實際的系統板
PC上的開發軟件:
AVR Studio(Free)匯編+匯編調試+高級語言調試+軟件仿真
ICC、CVAVR、BASCOM-AVR 高級語言程序開發+程序下載。其中一個購買正版全功能,作為主要的開發環境,其它使用DEMO版,作為輔助及參考。
AVR ISP下載線:
STK200 And STK200+ And STK300 ISP Programmer。通過PC的打印機口,采用ISP技術將系統運行代碼(HEX、BIN)和數據寫入AVR芯片的Flash和EEProm中,編程AVR的配置熔絲位和加密位。支持決大多數的AVR芯片、以及ATMEL的51兼容芯片89S8252、89S52等。在ICC、CVAVR、BASCOM-AVR、BASCOM-8051中都內含對該下載線的支持程序。免費專用的下載程序:SLISP、PonyProg2000等。
盡量不使用仿真器的建議:
在開發和調試系統程序時,有許多人完全依賴于仿真器,一旦離開了仿真器時就感覺無從下手。其實,由于AVR的Flash存貯器可方便的使用ISP技術在線的多次擦寫,因此建議盡量不使用(依賴)仿真器來開發和調試程序。
在實際開發過程中,程序的調試可以從下幾方面入手:
現在的高級語言編譯器(如C編譯器)可以產生效率很高的機器代碼,因此建議大家盡量使用高級語言編寫系統程序。
使用Atmel公司提供AVR Studio軟件模擬仿真環境,以及其他的軟件模擬仿真環境(BASCOM-AVR)。
盡可能使用高級語言編寫系統程序。
利用目標板上的LED、LCD或異步串口。見附件“沒有仿真器的情況下如何開發AVR”的介紹。
提高硬件設計的合理性:
盡量合理和充分使用AVR片內的資源,如EEPROM、A/D、內部的RC振蕩源。
盡量采用串口通信連接的外圍器件,大容量的存儲器、LCD控制器、打印機、不用8279(LED數碼管+鍵盤)而使用7279等。除了必須外擴RAM(如語音和圖象),一般不提倡使用并行擴展(573+譯碼電路),減小硬件和連線以及PCB板上錯誤的出現概率,同時也提高了系統的可靠性。并行擴展向串行擴展是發展趨勢?,F在有大量的新的外圍器件采用高速的串行接口,如A/D、D/A、RTC、存儲器等。
盡量使用以及在目標板上預留ISP程序下載接口,或使用IAP技術。
優點:ISP接口與I/O的兼容性比JETAG好。
缺點:不能在線調試
注意和掌握AVR配置熔絲位的使用:
。 系統晶振的選擇
.BOD的使用
。啟動延時.Mega8的PC6引腳,RESET與通用I/O的轉換
.JETAG接口和通用I/O的轉換
。啟動向量的轉換,BOOT-LOAT區大小的設置
提高硬件可靠性的考慮:
。盡量采用片內晶體、采用低頻率的系統時鐘、振蕩電路的輸出小幅度。
。選擇合適的啟動延時參數
。使用BOD、片內的看門狗
。合理休眠方式的使用
。不用I/O口設定輸出低電平
。利用內部的EEProm和寄存器MCUCSR判斷復位標志,進行不同的處理
提高軟件設計的能力和水平:
盡量合理采用高級語言設計編寫系統程序。有許多人認為使用匯編寫程序比較精簡,而用高級語言開發會浪費很多程序空間,其實這是一種誤解。對一個有經驗的,而且非常熟悉某種單片機的匯編高手而言,他是能寫出比高級語言更精簡的代碼。而對匯編不是很熟的開發者、或突然更換了一種新的單片機,您能保證一定可以寫出比高級語言更簡練的代碼嗎?
高級語言的優越性是匯編語言不能比的:
。程序移植方便
。程序的堅固性
。數學運算的支持
。條理清晰的結構化編程,程序的可維護性。
??蓞f同開發軟件,開發周期短。
現在的高級語言編譯器(如C編譯器)已可以產生代碼效率很高的機器代碼,因此建議大家能用高級語言實現的程序盡可能使用高級語言寫,在對速度和時序要求特嚴的場合可以采用混合編程的方法來解決。
更深入和全面的掌握各種串行通信協議的規程:
嵌入式系統目前以大量的使用串行接口外圍芯片和各種通信接口,如RS232、兩線(I2C)、三線(SPI)、單總線、USB、CAN、TCP/IP等。開發人員和程序員應了解低層協議,熟悉硬件怎樣和如何實現低層協議,如何定義可靠的上層應用協議,以及低層協議驅動同上層應用協議之間的接口設計(中間層軟件的實現)等。
硬件工程師的軟件編寫能力要提高,采用標準程序編寫方式、完善的軟件整體框架的設計、良好的數據結構和程序結構系統。(計算機軟件專業的程序設計員對硬件不熟悉、大部分是在操作系統支持下編寫軟件,對低層接口和協議的驅動層以及接口也不了解,往往也編寫不出好的單片機系統程序。)
通信接口的編寫應盡量
。采用中斷+緩沖區,
。分層+結構化設計,
。盡量不使用輪循方式(降低AVR的效率)。參見URAT(RS232)驅動+中間層軟件示例。
采用好的系統設計模式:
盡量不使用傳統的前后臺(中斷)系統設計模式,任務之間相互影響和干擾,無法定時操作。如設計一個采用動態掃描方式驅動的8位LED數碼管顯示+動態掃描的4*4矩陣鍵盤。
采用TimeTip+狀態機設計+CASE結構,實現多任務并行運行系統設計方法?;驎r間觸發式的系統設計。(見:《時間觸發嵌入式系統設計模式》中國電力出版社 2004.6)
移植小型嵌入式操作系統,如UCOS-II。在網上有些免費的基于AVR的簡潔的操作系統。
提高C語言的編程能力和軟件應用水平:
熟悉和用好C中的數據結構體、指針應用、內存管理等較高級的應用。
熟悉和了解你所使用的高級語言開發平臺的特點。這些平臺是針對某一類處理器的,包含許多特殊的不兼容的語句和擴展的結構、語句、函數等。盡管使用方便,但由于其不透明性和時間的不確定性,因此要合理使用。如C中的Getchar()、Putchar()等。AVR有多個開發平臺,每個都有其特點和不足。能夠綜合使用這些平臺,相互互補,能夠提高開發效率。如通過ICC、CVAVR的程序生成器CodeWizard學習和了解AVR的硬件設置,簡化計算,快速的生成程序基本模塊,如“一個URAT(RS232)低層驅動+中間層軟件示例”。
四、AVR單片機定時器輸出PWM的設計及注意問題
一、定時/計數器PWM設計要點
根據PWM的特點,在使用ATmega128的定時/計數器設計輸出PWM時應注意以下幾點:
1.首先應根據實際的情況,確定需要輸出的PWM頻率范圍,這個頻率與控制的對象有關。如輸出PWM波用于控制燈的亮度,由于人眼不能分辨42Hz以上的頻率,所以PWM的頻率應高于42Hz,否則人眼會察覺到燈的閃爍。
2.然后根據需要PWM的頻率范圍確定ATmega128定時/計數器的PWM工作方式。AVR定時/計數器的PWM模式可以分成快速PWM和頻率(相位)調整PWM兩大類。
3.快速PWM可以的到比較高頻率的PWM輸出,但占空比的調節精度稍微差一些。此時計數器僅工作在單程正向計數方式,計數器的上限值決定PWM的頻率,而比較匹配寄存器的值決定了占空比的大小。PWM頻率的計算公式為:
PWM頻率 = 系統時鐘頻率/(分頻系數*(1+計數器上限值))
4.快速PWM模式適合要求輸出PWM頻率較高,但頻率固定,占空比調節精度要求不高的應用。
5.頻率(相位)調整PWM模式的占空比調節精度高,但輸出頻率比較低,因為此時計數器僅工作在雙向計數方式。同樣計數器的上限值決定了PWM的頻率,比較匹配寄存器的值決定了占空比的大小。PWM頻率的計算公式為:
PWM頻率 = 系統時鐘頻率/(分頻系數*2*計數器上限值))
6.相位調整PWM模式適合要求輸出PWM頻率較低,但頻率固定,占空比調節精度要求高的應用。當調整占空比時,PWM的相位也相應的跟著變化(Phase Correct)。
7.頻率和相位調整PWM模式適合要求輸出PWM頻率較低,輸出頻率需要變化,占空比調節精度要求高的應用。此時應注意:不僅調整占空比時,PWM的相位會相應的跟著變化;而一但改變計數器上限值,即改變PWM的輸出頻率時,會使PWM的占空比和相位都相應的跟著變化(Phase And Frequency Correct)。
8.在PWM方式中,計數器的上限值有固定的0xFF(8位T/C);0xFF、0x1FF、0x3FF(16位T/C)?;蛴捎脩粼O定的0x0000-0xFFFF,設定值在16位T/C的ICP或OCRA寄存器中。而比較匹配寄存器的值與計數器上限值之比即為占空比。
評論