这两天在学习AT24C02, 晶振11.0592MHz 写了一段代码, 首先向24C02 0-15地址写入0-15, 再读取出来显示在1602上, 结果发现, 奇数位是正确的, 偶数位错误.经排查发现时写入错误, 即本应写入0123456789abcdef, 实际写入0520456084ace, 困扰我很久. 今天早上突发奇想, 是不是写的太快了, 加延时试试看.问题解决....
总结:
24C02在逐位写入数据时, 必须加延时, 否则器件处理不过来导致偶数位写入失败. 手头的这颗料, 需要加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)));
- }
复制代码
|