找回密码
 马上注册

QQ登录

只需一步,快速开始

查看: 12481|回复: 12

I2C测试之一,失败!

  [复制链接]
发表于 2009-4-23 13:01:46 | 显示全部楼层 |阅读模式
想自己DIY一个颜色传感器,由于没能买到合适的I2C芯片,所以电路没弄做出来,现在就只能先写程序。

对我来说,电路制作不是问题,所以得在I2C总线的控制下功夫,以前用C51给单片机写过程序,但是让我用NXC来控制I2C总线还是头一次,困难还是比较大的。
研究了好几天NXC的手册,算是有了一点点了解,决定用自己写的程序去试着和超声波传感器通讯,结果喜忧参半,喜的是,和I2C通讯上了,忧的是,我对函数还是不太明白,通讯不完整,只能对到一位,希望看懂问题在哪的朋友可以帮帮我!
I2C.jpg
根据上图,我把bufout的地址第一位写为0x02,第二位分别写为0x00、0x08、0x10,程序返回的值是V、L、S对应ASCII码的10进制数,如果写成0x42的话,返回的是result1,也就是超声波传感器检测到的值,不过范围是0-40+,很奇怪,这个以后再研究。
还有第三位写的是R + 0x03,我就不知道是什么意思了,想死!
  1. #define I2C_ADDR 0x02
  2. #define port IN_1
  3. byte bufout[]={I2C_ADDR, 0x00};
  4. byte bufin[];
  5. byte nbytes;
  6. task main ()
  7. {
  8.    while(1){
  9.       SetSensorLowspeed(port);
  10.       SetSensorMode(S1, IN_MODE_RAW);
  11.       LowspeedWrite(port, 1, bufout); //ask for 1 bytes - this command read the I2C-Byte to Buffer
  12.       while(LowspeedStatus(port, nbytes)>0);
  13.       if(nbytes == 1){
  14.          LowspeedRead(port, 2, bufin); // this command reads the Byte from Buffer not from BUS!!
  15.          ClearScreen();
  16.          NumOut(0, LCD_LINE1, bufin[0]);
  17.       }
  18.    }
  19. }

复制代码
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
 楼主| 发表于 2009-4-24 19:01:17 | 显示全部楼层
做个这样一个论坛是孤独的,没有人和我一起讨论
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2009-4-24 23:07:25 | 显示全部楼层
呵呵,我这几天忙晕了,下周有点时间我也来试试I2C。。。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

头像被屏蔽
发表于 2009-4-25 16:53:06 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2009-4-25 18:12:21 | 显示全部楼层
看得晕乎乎的
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

 楼主| 发表于 2009-4-25 18:15:19 | 显示全部楼层
不知你想写什么啊~
flexitime 发表于 2009-4-25 16:53


只是在尝试用nxc读超声波传感器EEPROM里的内容,和用自己写I2C函数的方法去获得距离
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2009-5-20 17:34:28 | 显示全部楼层
唐老大您真强,I2c是本人是可望而不可及的啊!!
您是怎么用I2c编程的呢,做一期科普吧,这样兄弟们才能跟上您的脚步啊~~~
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2009-5-20 17:35:59 | 显示全部楼层
做个这样一个论坛是孤独的,没有人和我一起讨论
糖伯虎 发表于 2009-4-24 19:01
高手是最孤独的
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-5-5 10:04:46 | 显示全部楼层
慢慢来
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-5-5 12:20:33 | 显示全部楼层
第一列, Byte 0 0x02是写地址
第二列, Byte 1 是命令字
第三列, Byte 2 “R + 0x03” 指读地址是0x03
超声波传感器接收的命令顺序是0x02 + 0x42 + 0x03
先向I2C总线写入一个命令,告诉它要做什么,然后再去读结果。
NXC程序没编过,目前只知道这些了,希望能有所帮助。
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-6-3 21:42:06 | 显示全部楼层
努力努力
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-6-9 04:24:37 | 显示全部楼层
I2C...暈 高手
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

发表于 2010-9-23 15:41:34 | 显示全部楼层
正在考古中。。。。不知道糖前辈是否解决了这个问题。

LEGO MINDSTORMS NXT Hardware Developer Kit里的Appendix 7(糖前辈上传在论坛里了),详细列出了超声传感器支持的各种读写命令字,根据那个写程序就行了
如果您觉得我的帖子对您有用,请不吝给我一个“赞”!
回复

使用道具 举报

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

本版积分规则

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2025-7-1 20:42 , Processed in 0.204692 second(s), 22 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

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