搜索
bottom↓
回复: 16

有谁用过ADNS3080,求教

[复制链接]

出0入0汤圆

发表于 2013-7-8 20:21:08 | 显示全部楼层 |阅读模式
本帖最后由 kanglei79 于 2013-7-9 09:20 编辑

如题,在写固件时老是写不进去,我用的是模拟spi,不知道是spi通信有问题,还是配置有问题,下面是我写的spi读写函数,请用过ADNS3080的朋友们来看看
  1. void Write_A3080(unsigned char data0,unsigned char add)
  2. {
  3.         unsigned char a_add[8];
  4.         unsigned char a_data[8];
  5.         char i;

  6.         a_add[0]=1; //最高位置1,写操作
  7.         a_add[1]=(add & 0x40)>>6;
  8.         a_add[2]=(add & 0x20)>>5;
  9.         a_add[3]=(add & 0x10)>>4;
  10.         a_add[4]=(add & 0x08)>>3;
  11.         a_add[5]=(add & 0x04)>>2;
  12.         a_add[6]=(add & 0x02)>>1;
  13.         a_add[7]=add & 0x01;
  14.         for(i=0;i<8;i++)
  15.         {
  16.                 SCLK_L;
  17.                 if(a_add[i])
  18.                   MOSI_H;
  19.                 else
  20.                   MOSI_L;
  21.                 SCLK_H;
  22.                 //SCLK=0;
  23.         }
  24.         //写数据
  25.         a_data[0]=(data0 & 0x80)>>7;
  26.         a_data[1]=(data0 & 0x40)>>6;
  27.         a_data[2]=(data0 & 0x20)>>5;
  28.         a_data[3]=(data0 & 0x10)>>4;
  29.         a_data[4]=(data0 & 0x08)>>3;
  30.         a_data[5]=(data0 & 0x04)>>2;
  31.         a_data[6]=(data0 & 0x02)>>1;
  32.         a_data[7]=data0 & 0x01;
  33.         for(i=0;i<8;i++)
  34.         {
  35.                 SCLK_L;
  36.                 if(a_data[i])
  37.                   MOSI_H;
  38.                 else
  39.                   MOSI_L;
  40.                 SCLK_H;
  41.                 //SCLK=0;
  42.         }
  43.         delay_100us();
  44. }

  45. unsigned char Read_A3080(unsigned char add)
  46. {
  47.     char b_add[8];
  48.     unsigned char i;
  49.     unsigned char read_data;
  50.     //写地址
  51.             b_add[0]=0; //最高位置0,读操作
  52.         b_add[1]=(add & 0x40)>>6;
  53.         b_add[2]=(add & 0x20)>>5;
  54.         b_add[3]=(add & 0x10)>>4;
  55.         b_add[4]=(add & 0x08)>>3;
  56.         b_add[5]=(add & 0x04)>>2;
  57.         b_add[6]=(add & 0x02)>>1;
  58.         b_add[7]=add & 0x01;
  59.         for(i=0;i<8;i++)
  60.         {
  61.                 SCLK_L;
  62.                 if(b_add[i])
  63.                   MOSI_H;
  64.                 else
  65.                   MOSI_L;
  66.                 SCLK_H;
  67.                 delay_100us();
  68.                 //SCLK=0;
  69.         }
  70.         delay_100us();  //delay>50us,3080准备数据
  71.       //读数据
  72.         for(i=0;i<8;i++)
  73.         {
  74.                 SCLK_H;
  75.                 read_data=(read_data<<1) | MISO;
  76.                 SCLK_L;
  77.         }
  78.         delay_100us();
  79.         return read_data;
  80.         
  81. }
复制代码
下面是写固件部分:
  1. void burst_mode_SROM(const unsigned char data0,unsigned char add)
  2. {
  3.   unsigned char a_add[8]={0,0,0,0,0,0,0,0};
  4.   unsigned char a_data[8]={0,0,0,0,0,0,0,0};

  5.         static unsigned char aa=0;
  6.         char i;

  7.         a_add[0]=1; //最高位置1,写操作
  8.         a_add[1]=(add & 0x40)>>6;
  9.         a_add[2]=(add & 0x20)>>5;
  10.         a_add[3]=(add & 0x10)>>4;
  11.         a_add[4]=(add & 0x08)>>3;
  12.         a_add[5]=(add & 0x04)>>2;
  13.         a_add[6]=(add & 0x02)>>1;
  14.         a_add[7]=add & 0x01;
  15.         
  16.         if(aa==0)
  17.         {
  18.             for(i=0;i<8;i++)
  19.             {
  20.                 SCLK_L;
  21.                 if(a_add[i])
  22.                   MOSI_H;
  23.                 else
  24.                   MOSI_L;
  25.                 SCLK_H;
  26.                 //SCLK=0;
  27.             }
  28.         }
  29.         delay_us(50);
  30.         //写SROM
  31.         a_data[0]=(data0 & 0x80)>>7;
  32.         a_data[1]=(data0 & 0x40)>>6;
  33.         a_data[2]=(data0 & 0x20)>>5;
  34.         a_data[3]=(data0 & 0x10)>>4;
  35.         a_data[4]=(data0 & 0x08)>>3;
  36.         a_data[5]=(data0 & 0x04)>>2;
  37.         a_data[6]=(data0 & 0x02)>>1;
  38.         a_data[7]=data0 & 0x01;      

  39.         for(i=0;i<8;i++)
  40.         {
  41.               SCLK_L;
  42.               if(a_data[i])
  43.               MOSI_H;
  44.               else
  45.               MOSI_L;
  46.               SCLK_H;
  47.               //SCLK=0;
  48.         }
  49.         aa=1;
  50.         
  51. }
  52. void Init_DownloadSROM(void)
  53. {
  54.        
  55.     NPD_L;
  56.     NPD_H;
  57.    
  58.     RESET_H;
  59.     delay_us(100);
  60.     RESET_L;
  61.      
  62.     SCLK_H; //时钟空闲时上拉

  63.     NCS_H;
  64.     NCS_L;

  65.     Write_A3080(0x44,0x22);
  66.     Write_A3080(0x07,0x23);
  67.     Write_A3080(0x88,0x24);
  68.     delay_ms(1); //delay> 1 frame period
  69.     Write_A3080(0x18,0x14);  //使能SROM下载
  70.     delay_us(100);
  71. }

  72. void downloadSROM(void)
  73. {
  74.     unsigned int count; //A3080固件字节数
  75.     Init_DownloadSROM();
  76.     for(count=0;count<1986;count++)
  77.     {
  78.         burst_mode_SROM(SROM[count],0x60);
  79.     }
  80.     NCS_H;
  81.     delay_us(100);
  82. }
复制代码
困扰我好几天了,万分感谢啊!!!

阿莫论坛20周年了!感谢大家的支持与爱护!!

你熬了10碗粥,别人一桶水倒进去,淘走90碗,剩下10碗给你,你看似没亏,其实你那10碗已经没有之前的裹腹了,人家的一桶水换90碗,继续卖。说白了,通货膨胀就是,你的钱是挣来的,他的钱是印来的,掺和在一起,你的钱就贬值了。

出0入0汤圆

发表于 2013-7-9 21:03:41 | 显示全部楼层
帮顶,很好

出0入0汤圆

发表于 2013-7-30 23:57:13 | 显示全部楼层
楼主不好意思本来是你提的问题,我却反过来问你……楼主好心能不能告诉我你是用什么软件和外围硬件来对ADNS光学传感器编程的?我在其datasheet中完全看不到相关说明啊

出0入0汤圆

 楼主| 发表于 2013-8-18 11:28:39 | 显示全部楼层
playlauncher 发表于 2013-7-30 23:57
楼主不好意思本来是你提的问题,我却反过来问你……楼主好心能不能告诉我你是用什么软件和外围硬件来对ADNS ...

adns3080只是个传感器,用什么类型的MCU驱动它是根据你的需求来定的,简单到51单片机都可以驱动它跑起来的,软件就是MCU所运行的环境

出0入0汤圆

发表于 2013-11-26 21:55:53 | 显示全部楼层
你的读时序好像有问题吧,应该是上升沿读取数据,你的写成下降沿了

出0入0汤圆

发表于 2014-3-13 18:02:51 | 显示全部楼层
楼主有ADNS-3080的固件吗 我从网上下了一个 但是鼠标只能一个方向移动 另一个方向是错的

出0入0汤圆

发表于 2014-3-21 14:58:34 | 显示全部楼层
还有人在玩ADNS-3080吗 我现在会玩了 如果有需要资料的我就给上传点资料

出0入0汤圆

发表于 2014-7-28 10:08:04 | 显示全部楼层
Athelloren 发表于 2014-3-21 14:58
还有人在玩ADNS-3080吗 我现在会玩了 如果有需要资料的我就给上传点资料

手里有几颗adns3080 ,能否共享一下资源?

出0入0汤圆

发表于 2014-8-12 18:58:44 | 显示全部楼层
Athelloren 发表于 2014-3-21 14:58
还有人在玩ADNS-3080吗 我现在会玩了 如果有需要资料的我就给上传点资料

急求啊!!!

出0入0汤圆

发表于 2014-8-13 14:30:52 | 显示全部楼层

没时间仔细整理 先上传这么多

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-8-13 14:33:59 | 显示全部楼层
借楼主宝地了

出0入0汤圆

发表于 2014-8-13 15:14:57 | 显示全部楼层

非常感谢!!

出0入0汤圆

发表于 2014-8-14 16:14:56 | 显示全部楼层

很有用,谢谢分享

出0入0汤圆

发表于 2015-3-15 21:35:55 | 显示全部楼层
楼主,传感器配的凸透镜焦距是多少?

出0入0汤圆

发表于 2015-8-1 11:48:56 | 显示全部楼层
Athelloren谢谢分享

出0入10汤圆

发表于 2016-4-23 06:44:40 来自手机 | 显示全部楼层
学习了,感谢

出0入0汤圆

发表于 2018-11-1 20:42:43 | 显示全部楼层
谢谢楼主
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-10-21 06:46

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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