极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 12584|回复: 8

24c08存储模块问题求助

[复制链接]
发表于 2013-6-17 17:38:39 | 显示全部楼层 |阅读模式
做32X64点阵屏驱动的时候,存储字模需要大量空间,于是在网上淘了一个24c08存储模块,如图:

到手参照芯片资料,该模块芯片地址脚全部悬空,那么地址应该为“0”,试了如下程序:
  1. #include <Wire.h>//声明I2C库文件
  2. #define sda A4  // 24c08 SDA
  3. #define scl A5  // 24c08 SCL
  4. void setup()
  5. {
  6.    //pinMode(sda,OUTPUT);
  7.    //pinMode(scl,OUTPUT);
  8.   Wire.begin();
  9.   Serial.begin(9600);
  10.   Serial.println("Ready");
  11. }
  12. void loop()
  13. {
  14.   Wire.beginTransmission(0);
  15.   Wire.Write(15);
  16.   Wire.endTransmission();
  17.   Wire.requestFrom(0, 1);    //从地址0上传1个字节
  18.   while(Wire.available()>0)    // 当接收到数据时
  19.   {
  20.     byte c = Wire.read(); //接收一个字节赋值给c
  21.     Serial.println(c);
  22.   }
  23. }
复制代码


正常编译,上传,但是无数据反馈。求高手指点。
(找了网上资料,都是51单片机的,有Arduino的吗?)

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-6-18 10:10:55 | 显示全部楼层
没玩过那呢
回复 支持 反对

使用道具 举报

发表于 2013-6-18 19:34:04 | 显示全部楼层
先再三确定 地址 是 0 吗?

回复 支持 反对

使用道具 举报

发表于 2013-6-18 21:10:23 | 显示全部楼层
使用是I2C,一个芯片会有一个芯片地址的,在51程序中找找。楼上说的地址0也许片选
回复 支持 反对

使用道具 举报

发表于 2013-6-19 10:11:34 | 显示全部楼层
你的代码中,I2C寻址部份呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-20 10:16:21 | 显示全部楼层
谢谢楼上,经对比,原程序不完整。现在改为以下程序,但是写入与读出的数据不一致。还在继续研究。
  1. void i2c_eeprom_write_byte( int deviceaddress, unsigned int eeaddress, byte data ) {
  2.     int rdata = data;
  3.     Wire.beginTransmission(deviceaddress);
  4.     Wire.write((int)(eeaddress >> 8)); // MSB
  5.     Wire.write((int)(eeaddress & 0xFF)); // LSB
  6.     Wire.write(rdata);
  7.     Wire.endTransmission();
  8. }
  9. byte i2c_eeprom_read_byte( int deviceaddress, unsigned int eeaddress ) {
  10.     byte rdata = 0xFF;
  11.     Wire.beginTransmission(deviceaddress);
  12.     Wire.write((int)(eeaddress >> 8)); // MSB
  13.     Wire.write((int)(eeaddress & 0xFF)); // LSB
  14.     Wire.endTransmission();
  15.     Wire.requestFrom(deviceaddress,1);
  16.     if (Wire.available()) rdata = Wire.read();
  17.     return rdata;
  18. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-20 13:35:32 | 显示全部楼层
使用如下代码扫描I2C地址:
  1. //*****************************************
  2. //
  3. //      I2C Scaner code
  4. //
  5. //*****************************************
  6. // Scan the I2C bus between addresses from_addr and to_addr.
  7. // On each address, call the callback function with the address and result.
  8. // If result==0, address was found, otherwise, address wasn't found
  9. // (can use result to potentially get other status on the I2C bus, see twi.c)
  10. // Assumes Wire.begin() has already been called
  11. void scanI2CBus(byte from_addr, byte to_addr,
  12.                 void(*callback)(byte address, byte result) )
  13. {
  14.   byte rc;
  15.   byte data = 0; // not used, just an address to feed to twi_writeTo()
  16.   for( byte addr = from_addr; addr <= to_addr; addr++ ) {
  17.     rc = twi_writeTo(addr, &data, 0, 1, 0);
  18.     if(rc==0) callback( addr, rc );
  19.   }
  20. }


  21. // Called when address is found in scanI2CBus()
  22. // Feel free to change this as needed
  23. // (like adding I2C comm code to figure out what kind of I2C device is there)
  24. void scanFunc( byte addr, byte result ) {
  25.        
  26.        
  27.       Serial.print("addr: ");
  28.       Serial.print(addr,DEC);
  29.       Serial.print("\t HEX: 0x");
  30.       Serial.print(addr,HEX);
  31.       Serial.println( (result==0) ? "\t found!":"   ");
  32.      if(addr==80) Serial.println("24cXX on connect!");
  33. //  Serial.print( (addr%4) ? "\t":"\n");
  34. }
复制代码

结果如下:

想请教为什么是4个地址呢

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复 支持 反对

使用道具 举报

发表于 2013-6-25 01:16:28 | 显示全部楼层
全悬空好像不为0,我是玩51的偶尔玩玩ARDUINO水平很菜~我51对单个24C都是全接地,而且读,写;写,写;操作中间是需要给个延时的~好像是480US
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-6-25 14:58:16 | 显示全部楼层
感谢大家。目前已基本解决。借助I2Cdev库来操作的,确实需要延时,不然会丢数据。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-7 09:20 , Processed in 0.057087 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表