[AVR单片机] mega16硬件SPI写数据的问题,,SPDR一直是0xFF...

[复制链接]
 楼主| zhao3462910 发表于 2013-5-13 11:13 | 显示全部楼层
huangxz 发表于 2013-5-13 11:08
从波形上看你的SO线一直是高电平,当然SPDR是0xff了。SPDR接收是根据sck时钟信号采样SO信号得到的。
另外 ...

示波器探头只有一个。。。怎么同时采集四路信号。。这我还没玩过。。。求指教?。。。
huangxz 发表于 2013-5-13 11:20 | 显示全部楼层
zhao3462910 发表于 2013-5-13 11:13
示波器探头只有一个。。。怎么同时采集四路信号。。这我还没玩过。。。求指教?。。。 ...

:L,要有那种一个示波器上接四个探头的就可以了,比如我们用的DPO 2014就可以同时采样四路信号

不过楼主的问题应该找的差不多了吧,只要你的SO信号正确了,SPDR里就会有正确的数据

本帖子中包含更多资源

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

×
 楼主| zhao3462910 发表于 2013-5-13 11:31 | 显示全部楼层
huangxz 发表于 2013-5-13 11:20
,要有那种一个示波器上接四个探头的就可以了,比如我们用的DPO 2014就可以同时采样四路信号

不过楼主的 ...

哦。。我这示波器是老古董。。没四路的。。为什么SO没有波形呢?。。原因一:SI脚上没有写进去数据,,但是SI脚上又有波形啊。。。只有这种原因吧?。。我实在找不到问题的突破口。。
huangxz 发表于 2013-5-13 11:34 | 显示全部楼层
zhao3462910 发表于 2013-5-13 11:31
哦。。我这示波器是老古董。。没四路的。。为什么SO没有波形呢?。。原因一:SI脚上没有写进去数据,,但 ...

一般情况下第一个发送的字节是命令,从第二个字节开始才有回复,
楼主可以看下外接的芯片的说明书,看从第几个开始芯片开始输出SO数据
让后连续发送几个字节看看
 楼主| zhao3462910 发表于 2013-5-13 11:40 | 显示全部楼层
huangxz 发表于 2013-5-13 11:34
一般情况下第一个发送的字节是命令,从第二个字节开始才有回复,
楼主可以看下外接的芯片的说明书,看从第几 ...

我发送函数是写在while(1)中的,,连续发送。。并且中间有很长的延时。。。这样间断的发送多次。。一次都收不到。。。SI引脚上又有波形。。比较头痛。。。不知道问题的所在。。。
huangxz 发表于 2013-5-13 11:42 | 显示全部楼层
zhao3462910 发表于 2013-5-13 11:40
我发送函数是写在while(1)中的,,连续发送。。并且中间有很长的延时。。。这样间断的发送多次。。一次都 ...

你用的是啥芯片,(外面的)
 楼主| zhao3462910 发表于 2013-5-13 11:47 | 显示全部楼层
MCP2515 CAN控制器。。。这个芯片只要上电复位。就进去了配置模式了的。。
 楼主| zhao3462910 发表于 2013-5-13 11:47 | 显示全部楼层
huangxz 发表于 2013-5-13 11:42
你用的是啥芯片,(外面的)

MCP2515 CAN控制器。。。这个芯片只要上电复位。就进去了配置模式了的。。
huangxz 发表于 2013-5-13 11:52 | 显示全部楼层
zhao3462910 发表于 2013-5-13 11:47
MCP2515 CAN控制器。。。这个芯片只要上电复位。就进去了配置模式了的。。

呵呵,早说嘛,

你看看,最简单的读状态命令也是从第二个字节开始才有SO输出的
而且重要的是第一个字节和第二个字节之间cs信号不能变
你先调整好你的cs信号,连续发送三个字节,这样你就可以收到数据了

本帖子中包含更多资源

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

×

评分

参与人数 1威望 +6 收起 理由
qin552011373 + 6 很给力!

查看全部评分

 楼主| zhao3462910 发表于 2013-5-13 12:00 | 显示全部楼层
huangxz 发表于 2013-5-13 11:52
呵呵,早说嘛,

你看看,最简单的读状态命令也是从第二个字节开始才有SO输出的
  1. //*******************************CAN读数据**************************************
  2. uchar CAN_Read_SS(uchar address)
  3. {
  4.         uchar ret;
  5.         CANCSUP;                           //片选拉高
  6.         DelayUs(4);
  7.         CANCSDW;                        // 片选拉低,使能MCP2510
  8.         DelayUs(4);

  9.         SPISendByte(0x03);               // 写 0x30读指令         
  10.         SPISendByte(address);            // 写地址
  11.         ret = SPIRecvByte();               //读数据

  12.         CANCSUP;                          //片选拉高
  13.         return ret;           
  14. }
  15. //********************************CAN写数据*************************************
  16. void CAN_Write_SS(uchar address,uchar Value)
  17. {
  18.         CANCSUP;
  19.         DelayUs(4);
  20.         CANCSDW;                        // 片选拉低,使能MCP2510
  21.         DelayUs(4);
  22.        
  23.         SPISendByte(0x02);            //  写命令
  24.         SPISendByte(address);         //  写地址
  25.         SPISendByte(Value);           //  写数据

  26.         CANCSUP;                        // 片选拉高
  27.         DelayUs(5);
  28. }
我是这样的。。。在写指令,写地址,写数据时,CS是一直拉低的。。。读也是一直拉低的。。。
huangxz 发表于 2013-5-13 12:07 | 显示全部楼层
zhao3462910 发表于 2013-5-13 12:00
我是这样的。。。在写指令,写地址,写数据时,CS是一直拉低的。。。读也是一直拉低的。。。
...

avr的spi高位先出啊,
建议楼主
1.确认下是不是0,0 或1,1模式
2.read status是write 0xa0, 还是 0x05
 楼主| zhao3462910 发表于 2013-5-14 08:52 | 显示全部楼层
huangxz 发表于 2013-5-13 12:07
avr的spi高位先出啊,
建议楼主
1.确认下是不是0,0 或1,1模式

配置的是00模式。。。read status是write 0xa0   这个在2515的手册上有。。。我程序里也是0xa0
huangxz 发表于 2013-5-14 09:57 | 显示全部楼层
zhao3462910 发表于 2013-5-14 08:52
配置的是00模式。。。read status是write 0xa0   这个在2515的手册上有。。。我程序里也是0xa0 ...

楼主再不行就只能考虑是不是mcp2515有问题了,我曾经在一家公司用过mega128+mcp2515实现CAN通信,没任何问题
 楼主| zhao3462910 发表于 2013-5-14 11:38 | 显示全部楼层
huangxz 发表于 2013-5-14 09:57
楼主再不行就只能考虑是不是mcp2515有问题了,我曾经在一家公司用过mega128+mcp2515实现CAN通信,没任何问 ...

可否把您的程序给我参考下。。。。
huangxz 发表于 2013-5-14 12:04 | 显示全部楼层
zhao3462910 发表于 2013-5-14 11:38
可否把您的程序给我参考下。。。。

已经离开那家公司很久了,呵呵,没多复杂。除非mcp坏了,肯定会响应的,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部
快速回复 在线客服 返回列表 返回顶部