話說最近在用AVR開發系統
遇到了一些很不可思議的問題
到目前還是無解的狀態
提供給大家參考看看~~~
1. Reset 的不穩定
ATmega64大概是我目前用到過reset最不正常的MCU
或許是因為內部架構太複雜的關係
也或許是我還沒把硬體與軟體完全搞懂的關係
總覺得好像哪裡怪怪的
從一開始用M64
就發現它在reset時有時候會成功
有時又reset不起來!!
由reset信號去觀察
發現reset信號很穩定
因為有用reset IC的緣故
所以0電位有確實拉到0
石英晶體也有起振
但系統就是沒有reset起來
用mkII去reset也OK
獨獨Power_ON reset就是很不順
不曉得是哪裡出了問題??!!
(赫然發現, Arduino所有版本都有用reset key, 難不成是因為這個問題??)
2. EEPROM 之"隨它高興"存取
這是最詭異的問題
抓了整整一天還沒抓到問題
WinAVR有內建eeprom的函式
一個是eeprom_read_word();
另一個是eeprom_write_word();
使用write再用Studio把資料read回來
OK~~~
確定資料都有順利填入
可是一用了read功能
災難就來了
read 0~7的值OK (該Byte的儲存值是0x00~0x07)
read 8~F的值系統就當掉!!! (該Byte的儲存值是0x08~0x0F)
而且不管換到哪一個位址都一樣
這是相當詭異的!!
而且匪夷所思!!!
連老闆也愛莫能助
只說可能是編譯器版本的問題
用免費的開發工具就是有這樣的缺點
Orz........
ps.
剛剛找到一個解決方案
還沒試過
明天來試一下看看
http://lysoft.g4soft.net/article.asp?id=46
ps2.
上面的方案確定可行
不過建議在函式的最後要加上sei();
因為系統所有的中斷資源都被關掉了
如果不恢復
很多動作都會不正常唷~~~
比較快的解決方法是
直接呼叫原來eeprom.h的內建函式
只是呼叫前加上cli();
呼叫後加上sei();
這樣就不會出問題了~~~
(2008/12/17 更新)
有沒有可能看門狗在搞怪??
回覆刪除我之前也是看門狗沒用好,reset有點問題!!
給你參考看看!!
可能性不大
刪除因為沒有啟動看門狗....
(或者他自己會偷偷啟動??)
使用的AVR為8515
回覆刪除之前也沒啟動...預設是關閉的(沒錯的話)!!!~
誰知道就是有問題,最後FUSES給他再改一次就好了。(WDT &C8515都取消)
就可以了!!參考看看@@~
我有都取消了
刪除一開始設定fuse就有確認過了
謝啦~~
我想他的怪問題還是在硬體上
等我搞清楚再說囉~~