之前在學校隻學過51系列的單片機,當然對于如今的很多系統,用51單片機已經不能滿足系統的需求了,包括 處理速度,定時/計數器,IO口等。最近公司要做個智能遙控器系統,經過選擇和論證,決定采用Atmega88PA-AU的晶片。設計好原理圖,PCB闆,等闆子到了,就迫不及待想試試。
由于Atmega88PA-AU(以下簡稱avr88)沒有Jtag口,是以隻能用debugWire,當然就隻能買MKII的調試器(挺貴的,不過都是公司的錢)。由于對于熔絲位不太懂,是以不敢輕舉妄動,寫好程式後,點選了program,诶!不錯,下進去了,沒問題!于是乎信心大增,開始大膽把dwen勾上了,點選program,結果悲劇了,彈出對話框(一堆英文,意思是說複位線被占用),看來真悲劇了,一片晶片被鎖了,貌似還隻能用高壓程式設計解鎖了。這樣一來又要買高壓程式設計器,測試座(由于是貼片的),公司肯定不敢啦!之前為了系統測試,還特定加了複位電路,想不到現在竟成了絆腳石,那沒有辦法,隻能重新焊上一塊晶片,然後把複位電路拆了,重新調熔絲位,就OK啦!初學avr,沒辦法,總得費幾塊片子的,是以還是得大膽的測。不過得先看懂文檔來,不然盲目測,公司肯定吃不消!
以下是熔絲位(轉載自http://www.fxdzw.com/dpj/avr_rsw.htm)
要想使MCU功耗最小也要了解一些位的設定。
1:未程式設計
0:程式設計
1、BOD(Brown-out Detection) 掉電檢測電路
BODLEVEL(BOD電平選擇): 1: 2.7V電平; 0:4.0V電平
BODEN(BOD功能控制): 1:BOD功能禁止;0:BOD功能允許
使用方法:如果BODEN使能(複選框選中)啟動掉電檢測,則檢測電平由BODLEVEL決定。一旦VCC下降到觸發電平(2.7v或4.0v)以下,MCU複位;當VCC電平大于觸發電平後,經過tTOUT 延時周後重新開始工作。
因為M16L可以工作在2.7v~5.5v,是以觸發電平可選2.7v(BODLEVEL=1)或4.0v(BODLEVEL=0);而M16工作在4.5~5.5V,是以隻能選BODLEVEL=0,BODLEVEL=1不适用于ATmega16。
2、複位啟動時間選擇
SUT 1/0: 當選擇不同晶振時,SUT有所不同。
如果沒有特殊要求推薦SUT 1/0設定複位啟動時間稍長,使電源緩慢上升。
3、CKSEL3/0: 時鐘源選擇(時鐘總表)
時鐘總表:
時鐘源 啟動延時 熔絲
外部時鐘 6 CK + 0 ms CKSEL=0000 SUT="00"
外部時鐘 6 CK + 4.1 ms CKSEL=0000 SUT="01"
外部時鐘 6 CK + 65 ms CKSEL="0000" SUT="10"
内部RC振蕩1MHZ 6 CK + 0 ms CKSEL="0001" SUT="00"
内部RC振蕩1MHZ 6 CK + 4.1 ms CKSEL="0001" SUT="01"
内部RC振蕩1MHZ1 6 CK + 65 ms CKSEL="0001" SUT="10"
内部RC振蕩2MHZ 6 CK + 0 ms CKSEL="0010" SUT="00"
内部RC振蕩2MHZ 6 CK + 4.1 ms CKSEL="0010" SUT="01"
内部RC振蕩2MHZ 6 CK + 65 ms CKSEL="0010" SUT="10"
内部RC振蕩4MHZ 6 CK + 0 ms CKSEL="0011" SUT="00"
内部RC振蕩4MHZ 6 CK + 4.1 ms CKSEL="0011" SUT="01"
内部RC振蕩4MHZ 6 CK + 65 ms CKSEL="0011" SUT="10"
内部RC振蕩8MHZ 6 CK + 0 ms CKSEL="0100" SUT="00"
内部RC振蕩8MHZ 6 CK + 4.1 ms CKSEL="0100" SUT="01"
内部RC振蕩8MHZ 6 CK + 65 ms CKSEL="0100" SUT="10"
外部RC振蕩≤0.9MHZ 18 CK + 0 ms CKSEL="0101" SUT="00"
外部RC振蕩≤0.9MHZ 18 CK + 4.1 ms CKSEL="0101" SUT="01"
外部RC振蕩≤0.9MHZ 18 CK + 65 ms CKSEL="0101" SUT="10"
外部RC振蕩≤0.9MHZ 6 CK + 4.1 ms CKSEL="0101" SUT="11"
外部RC振蕩0.9-3.0MHZ 18 CK + 0 ms CKSEL="0110" SUT="00"
外部RC振蕩0.9-3.0MHZ 18 CK + 4.1 ms CKSEL="0110" SUT="01"
外部RC振蕩0.9-3.0MHZ 18 CK + 65 ms CKSEL="0110" SUT="10"
外部RC振蕩0.9-3.0MHZ 6 CK + 4.1 ms CKSEL=0110 SUT="11"
外部RC振蕩3.0-8.0MHZ 18 CK + 0 ms CKSEL=0111 SUT="00"
外部RC振蕩3.0-8.0MHZ 18 CK + 4.1 ms CKSEL="0111" SUT="01"
外部RC振蕩3.0-8.0MHZ 18 CK + 65 ms CKSEL=0111 SUT="10"
外部RC振蕩3.0-8.0MHZ 6 CK + 4.1 ms CKSEL="0111" SUT="11"
外部RC振蕩8.0-12.0MHZ 18 CK + 0 ms CKSEL=1000 SUT="00"
外部RC振蕩8.0-12.0MHZ 18 CK + 4.1 ms CKSEL="1000" SUT="01"
外部RC振蕩8.0-12.0MHZ 18 CK + 65 ms CKSEL="1000" SUT="10"
外部RC振蕩8.0-12.0MHZ 6 CK + 4.1 ms CKSEL="1000" SUT="11"
低頻晶振(32.768KHZ) 1K CK + 4.1 ms CKSEL="1001" SUT="00"
低頻晶振(32.768KHZ) 1K CK + 65 ms CKSEL="1001" SUT="01"
低頻晶振(32.768KHZ) 32K CK + 65 ms CKSEL="1001" SUT="10"
低頻石英/陶瓷振蕩器(0.4-0.9MHZ) 258 CK + 4.1 ms CKSEL="1010" SUT="00"
低頻石英/陶瓷振蕩器(0.4-0.9MHZ) 258 CK + 65 ms CKSEL="1010" SUT="01"
低頻石英/陶瓷振蕩器(0.4-0.9MHZ) 1K CK + 0 ms CKSEL=1010 SUT="10"
低頻石英/陶瓷振蕩器(0.4-0.9MHZ) 1K CK + 4.1 ms CKSEL="1010" SUT="11"
低頻石英/陶瓷振蕩器(0.4-0.9MHZ) 1K CK + 65 ms CKSEL="1011" SUT="00"
低頻石英/陶瓷振蕩器(0.4-0.9MHZ) 16K CK + 0 ms CKSEL=1011 SUT="01"
低頻石英/陶瓷振蕩器(0.4-0.9MHZ) 16K CK + 4.1ms CKSEL="1011" SUT="10"
低頻石英/陶瓷振蕩器(0.4-0.9MHZ) 16K CK + 65ms CKSEL="1011" SUT="11"
中頻石英/陶瓷振蕩器(0.9-3.0MHZ) 258 CK + 4.1 ms CKSEL="1100" SUT="00"
中頻石英/陶瓷振蕩器(0.9-3.0MHZ) 258 CK + 65 ms CKSEL="1100" SUT="01"
中頻石英/陶瓷振蕩器(0.9-3.0MHZ) 1K CK + 0 ms CKSEL=1100 SUT="10"
中頻石英/陶瓷振蕩器(0.9-3.0MHZ) 1K CK + 4.1 ms CKSEL="1100" SUT="11"
中頻石英/陶瓷振蕩器(0.9-3.0MHZ) 1K CK + 65 ms CKSEL="1101" SUT="00"
中頻石英/陶瓷振蕩器(0.9-3.0MHZ) 16K CK + 0 ms CKSEL="1101" SUT="01"
中頻石英/陶瓷振蕩器(0.9-3.0MHZ) 16K CK + 4.1ms CKSEL="1101" SUT="10"
中頻石英/陶瓷振蕩器(0.9-3.0MHZ) 16K CK + 65ms CKSEL="1101" SUT="11"
高頻石英/陶瓷振蕩器(3.0-8.0MHZ) 258 CK + 4.1 ms CKSEL="111"0 SUT="00"
高頻石英/陶瓷振蕩器(3.0-8.0MHZ) 258 CK + 65 ms CKSEL="111"0 SUT="01"
高頻石英/陶瓷振蕩器(3.0-8.0MHZ) 1K CK + 0 ms CKSEL="111"0 SUT="10"
高頻石英/陶瓷振蕩器(3.0-8.0MHZ) 1K CK + 4.1 ms CKSEL="111"0 SUT="11"
高頻石英/陶瓷振蕩器(3.0-8.0MHZ) 1K CK + 65 ms CKSEL="1111" SUT="00"
高頻石英/陶瓷振蕩器(3.0-8.0MHZ) 16K CK + 0 ms CKSEL="1111" SUT="01"
高頻石英/陶瓷振蕩器(3.0-8.0MHZ) 16K CK + 4.1ms CKSEL="111"1 SUT="10"
高頻石英/陶瓷振蕩器(3.0-8.0MHZ) 16K CK + 65ms CKSEL="1111" SUT="11"
高位(BOOT區設定):
1、 JTAGEN(JTAG允許):
1:JTAG禁止;
0:JTAG允許
OCDEN(OCD功能允許):
1:OCD功能禁止;
0:OCD功能允許
注:OCDEN(On-chip Debug):片上調試使能位
JTAGEN(JTAG使能): JTAG測試通路端口
使用方法:在JTAG調試時,使能OCDEN JTAGEN兩位(複選框打勾),并保持所有的鎖定位處于非鎖定狀态;在實際使用時為降低功耗,不使能OCDEN JTAGEN,大約減少2-3mA的電流。
2、 SPIEN(SPI下載下傳允許):
1:SPI下載下傳禁止;
0:SPI下載下傳使能
注:在ISP的軟體裡,SPIEN是不能編輯的,預設為0。
3、 CKOPT(選擇放大器模式):
CKOPT=0:高幅度振蕩輸出;
CKOPT=1:低幅度振蕩輸出
當CKOPT 被程式設計時振蕩器在輸出引腳産生滿幅度的振蕩。這種模式适合于噪聲環境,以及需要通過XTAL2 驅動第二個時鐘緩沖器的情況,而且這種模式的頻率範圍比較寬。當保持CKOPT 為未程式設計狀态時,振蕩器的輸出信号幅度比較小。其優點是大大降低了功耗,但是頻率範圍比較窄,而且不能驅動其他時鐘緩沖器。
對于諧振器,當CKOPT未程式設計時的最大頻率為8 MHz,CKOPT程式設計時為16 MHz。内部RC振蕩器工作時不對CKOPT程式設計。
4、EEAVE(燒錄時EEPROM資料保留):
1:不保留;
0:保留
5、BOOTRST(複位入口選擇):
1:程式從0x0000位址開始
0:複位後
從BOOT區執行(參考BOOTSZ0/1)
6、BOOTSZ 1/0(引導區程式大小及入口):
00: 1024Word/0xc00;
01: 512Word/0xe00;
10: 256Word/0xf00;
11: 128Word/0xf80