求助:如何使用I2C对象 点击:1221 | 回复:4



枫叶

    
  • 精华:0帖
  • 求助:0帖
  • 帖子:1帖 | 2回
  • 年度积分:0
  • 历史总积分:55
  • 注册:2002年6月03日
发表于:2002-07-05 23:20:00
楼主
有谁用过I2C对象,我用他与AT24C02通讯始终无法成功,而用他与另一带I2C接口的CPU通讯,他作主,另一CPU作从,总是出现总线错误的状态不知为什么?请各位大虾帮忙,能给个程序更好,不胜感激!!急盼 my e-mail: zsj-814726@sina.com



xiaobing

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 6回
  • 年度积分:0
  • 历史总积分:6
  • 注册:2002年6月07日
发表于:2002-06-07 23:49:00
1楼
我以前做过,能行,要仔细点。但我记得当时我用的是93LC56。

zw76812

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 567回
  • 年度积分:0
  • 历史总积分:654
  • 注册:2001年7月18日
发表于:2002-06-11 11:40:00
2楼
93lc56应该是 spi接口的吧!!! i2c对象有一点要注意的是,它的地址定义。 我给你发一篇文章吧。有问题再联系。

zw76812

  • 精华:0帖
  • 求助:0帖
  • 帖子:9帖 | 567回
  • 年度积分:0
  • 历史总积分:654
  • 注册:2001年7月18日
发表于:2002-06-11 12:20:00
3楼
抄表控制器的开发和应用 摘 要 主要介绍抄表系统中抄表控制器的开发方案和应用。 关键词 lonworks技术,神经元芯片,面向对象,节点 概 述 echelon公司开发的lonworks网络技术,在国内已经广泛应用到各个领域,包括工业自控、交通运输、楼宇自控等等。国内的oem厂商已经积累了很多的二次开发的宝贵经验,大大增强了我们对国外先进技术的消化吸收能力。本文主要介绍3150的i/o对象之一 i2c object 。 一、 TMPN3150 i/o口的面向对象开发技术 Lonworks的技术核心之一体现在neuron chip 3150身上,而3150的主要特点就是面向对象开发。在神经元芯片3150的系统映像区(system image) 中包括调度程序、lontalk 协议、函数库、34种i/o对象。 其中的i/o对象就是开发节点时3150的11个io脚的“驱动程序“可以分为四类: 1、 直接i/o对象:包括位、字节、电平检测 、、、 2、 并行i/o对象:master/slave、token passing、、、 3、 串行i/o 对象:bitshift、i2c、neuronwire(spi)、touch、、、 4、 定时器/计数器i/o对象:timer/counter、triac、、、、 开发过程中,不需要考虑具体的接口和时序,把主要的精力都放在应用开发上。大大的加快了节点开发的进程。例如: 计数器/计时器I/O 对象-------------------------Triac输出; 实现的功能:根据输入触发信号控制输出脉冲信号的延时。 输出脉冲25微秒宽、常低。 // 定义i/o口 、triac指定i/o对象、sync(IO_4)指定同步输入脚 IO_0 output triac sync(IO_4) triac_control; //实现输出 同步输入信号下降沿延时8.3ms 输出25微秒宽的可控硅的 //触发信号。 io_out(triac_control,325); 在应用程序中直接应用输出信号,大大减少了开发i/o对象的时间。 在开发智能节点的过程中,国内很多厂商在一个节点中集中了很多功能,来降低智能节点的性价比。实际上这种做法不是一种值得提倡的二次开发经验。3150 i/o口是事件驱动,响应比较慢,对于快速信号会出现丢失现象。3150内置watchdog 调度程序自动管理。一个事件的执行时间不得大于watchdog的更新时间否则会引起复位。Neuron C中提供了更新watchdog 的函数。在较大的任务中调用以免引起复位。 二、 i2c接口eeprom 24C02简介: 24c02是采用cmos工艺制成的2k*8位的电可擦除存储器。 工作电源:5.0(4.5----5.5V)DC 自定时写周期:不超过 10ms 、典型周期 5ms 页写入方式: 8 byte ; 数据保持时间:100years; 操作温度: -55°C to +125°C 储藏温度: -65°C to +150°C 引脚说明: SCL: I2C接口的时钟管脚; SDA: I2C接口的数据管脚; A0,A1,A2:芯片地址设置管脚 ; WP: 写保护脚; TEST:测试脚; VCC:电源电压 VSS:接地; NC:not connect ; 芯片地址: MSB LSB 1 0 1 0 A2 A1 A0 R/W 其中:1010是芯片固定地址,A2、A1、A0可设的。总线最多可联8片24C02; 与51系列单片机的接口: 硬件接口:没有I2C接口的51单片机 (2051) 只需将SCL和SDA加各一上拉电阻,于两个IO口连接即可。 有I2C接口的51单片机 (764) 将SCL和SDA加各一上拉电阻,于I2C的SCL和SDA连接即可。 软件接口: 无论使用汇编还是C51,都必须先调试于24C02的接口程序。有I2C接口的单片机的接口程序也需要调试一段时间。而且必须要了解I2C的接口时序。 三、 TMPN3150的I2C object应用: I2C输入\输出对象:在IO0---IO10中,管脚IO8、IO9为I2C总线的SCL、SDA, IO8和IO9硬件是开漏(OPEN_DRAIN)状态. 3150只能作为主控制器(MASTER) 关于I2C OBJCET 的定义 IO_8 i2c 对象名; //定义I/O对象 return_value=io_in(i2c对象名,输入数据指针,设备地址(i2c),读字节数); //输入操作 return_value=io_out(i2c对象名,输入数据指针,设备地址(i2c),写字节数); //输出操作 返回值0:数据传输失败(设备不在总线上,SCL开始为低);1:数据传输成功; I2C器件的地址参数:右对齐的七位设备地址 它的含义就是在控制字中的R/W位,由输入输出函数来控制。 例如:器件地址: 1 0 1 0 0 0 0 R/W. 0XA1读,0XA0写 I2C OBJECT地址 0 1 0 1 0 0 0 0 0X50 I2C的器件地址 例程: #define MEM_ADDR 0X50 //A2—A1—A0---GND IO_8 output bit b_SCL; IO_9 output bit b_SDA; IO_8 i2c obj_i2c_bus; void bus_reset(void) { io_out(b_SCL,1); io_out(b_SDA,1); delay(400); //延时 10ms } when(………) { Boolean re_data; unsigned int addr,data[8]; addr=0x00; //24c02内部存储器数据地址 redata=io_out(obj_i2c_bus,&addr ,MEM_ADDR,1);//输出操作地址 if(redata==1) io_in(obj_i2c_bus,data ,MEM_ADDR,8); //读一页 } when(………) { Boolean re_data; unsigned int addr,data[8]; addr=0x00; //24c02内部存储器数据地址 redata=io_out(obj_i2c_bus,&addr ,MEM_ADDR,1);//输出操作地址 if(redata==1) io_out(obj_i2c_bus,data ,MEM_ADDR,8); //写 一页 } when(………) { //读测试失败 bus_reset( ); } 结束语: 基于面向对象的应用开发是lonworks技术的特点,在开发过程中感到这项技术的益处lonworks技术毕竟是国外技术,国内的二次开发商有很多地方受到不同程度的限制。 在国内应用比较成熟的51系列单片机,中逐步应用这项技术,才是我们真正消化国外先 进技术的必经之路

lhsw

  • 精华:0帖
  • 求助:0帖
  • 帖子:0帖 | 69回
  • 年度积分:0
  • 历史总积分:69
  • 注册:2001年6月29日
发表于:2002-07-05 23:20:00
4楼
neuron chip的I2c对象只能用做主方式,我用过,没什么问题

热门招聘
相关主题

官方公众号

智造工程师