這兩天在學習AT24C02, 晶振11.0592MHz 寫了一段代碼, 首先向24C02 0-15地址寫入0-15, 再讀取出來顯示在1602上, 結果發(fā)現(xiàn), 奇數(shù)位是正確的, 偶數(shù)位錯誤.經(jīng)排查發(fā)現(xiàn)時寫入錯誤, 即本應寫入0123456789abcdef, 實際寫入0520456084ace, 困擾我很久. 今天早上突發(fā)奇想, 是不是寫的太快了, 加延時試試看.問題解決....
總結:
24C02在逐位寫入數(shù)據(jù)時, 必須加延時, 否則器件處理不過來導致偶數(shù)位寫入失敗. 手頭的這顆料, 需要加1毫秒延時才能保證寫入正確.
讀取時, 不加延時也能正確讀取到,(可能器件的讀取速度快), 保險起見, 建議加上延時.
以此提醒各位在使用AT24C02時注意寫入延時的問題.
演示代碼:
- for(i=0; i<16; i++)
- {
- at2402_write(i,i);
- delayms(1);
- }
-
- for(i=0; i<16; i++)
- {
- lcdwritechar(2,i,num2str(at2402_read(i)));
- }
復制代碼
|