您的位置:控制工程论坛网论坛 » 现场总线 » 关于can的一些经验总结 2

xilinxue

xilinxue   |   当前状态:在线

总积分:16186  2024年可用积分:0

注册时间: 2008-06-26

最后登录时间: 2020-03-22

空间 发短消息加为好友

关于can的一些经验总结 2

xilinxue  发表于 2008/11/25 13:25:57      2497 查看 5 回复  [上一主题]  [下一主题]

手机阅读

问:SJA1000的双相输出方式具体该如何应用,如果不接PCA250,怎么接到总线上?
答: 还是要接PCA82C250芯片。

问:关于CAN总线供电的请教: 如果用电源耦合能否实现CAN的总线供电?
答:建议用标准双绞线方式;走的人多了,不需要自己研究。

问:光靠标准双绞线怎么能实现总线供电呢?
答:总线供电另外采用独立的电缆,如 DeviceNet 规范;这是国际推荐的标准方式。

问:请问CAN总线两节点间要通信的话,他们的波特率是不是要完全一致?
答:节点有重同步的功能,允许偏差在一定范围内,比如晶振偏差,见SJA1000的位定时文档。

问:请问验收滤波器可不可以屏蔽某些位,就是说不管某些位是什么,只关心其中几位。
答:当然可以啊。


问:我现在调试通过CAN通讯的数据采集板,上位机买的是的PCI_CAN9810卡,用CANalyst分析仪调试自己开发的CAN采集板,我现在调试CAN,还没有调试通,CAN的CS接CPU(P89V51RD)的P2.7(28脚),CAN地址是7fff,应该没错吗?程序如下(用伟福仿真器仿真):
# include<AT89X51.H>
# include<SJA_BCANCONF.H>
# include<SJA_BCANFUNC.C>

# define    uchar    unsigned char

void    InitCpu(void);
void    InitT0(void);
void    Sja1000Init(void);

bit    SecFlag;
//uchar    data    a[5];
uchar    data    SendData[10],RcvData[10];
uchar    DataBuf,SecData,Second;
uchar    data    TmodData;
uchar    bdata    FlagInit;
sbit    RcvFlag=FlagInit^0;
sbit    ErrFlag=FlagInit^2;

void    main(void)
{
    //int    i;
    //for(i=0;i<100;i++)
    //P1_4=1;
    Sja1000Init();
    InitT0();
    InitCpu();
//    flaginit();
    while(1)
    {
        if(RcvFlag)
        {
            RcvFlag=0;
            BCAN_DATA_RECEIVE(RcvData);
            BCAN_CMD_PRG(0x04);    //release buffer
        }
        if(SecFlag)
        {
            SecFlag=0;
            SendData[0]=0xaa;   //send canid
            SendData[1]=0x08;   //send longth
            SendData[2]=Second;  //send data
            BCAN_DATA_WRITE(SendData);
            BCAN_CMD_PRG(0x01);
        }
        if(ErrFlag)
        {
            ErrFlag=0;
            Sja1000Init();
        }
    }
}

void    Ex0Int(void) interrupt 0 using 1
{
    SJA_BCANAdr=REG_INTERRUPT;
    FlagInit=*SJA_BCANAdr;
}

void    T0Init(void)    interrupt 1 using 2
{
    TR0=0;
    SecData--;
    if(SecData==0)
    {
        SecData=0x10;
        TH0=0x80;
        TL0=0x60;
        SecFlag=1;
        Second++;
    }
    TR0=1;
}

void    InitCpu(void)
{
    PX0=1;
    IT0=1;
    EX0=1;
    ET0=1;
    EA=1;
    SecData=0x10;
}

void    InitT0(void)
{
    TmodData =TMOD;
    TmodData &=0xf0;
    TmodData │=0x01;
    TMOD =TmodData;
    TH0 =0x80;
    TL0 =0x60;
    TR0 =1;
    SecData=0x20;
    Second=0x00;
}

void    Sja1000Init(void)
{
    BCAN_ENTER_RETMODEL();
    BCAN_SET_BANDRATE(0x04); //100k
    BCAN_SET_OBJECT(0xaa,0xff);
    BCAN_SET_OUTCLK(0xaa,0x48);
    BCAN_QUIT_RETMODEL();
    SJA_BCANAdr =REG_CONTROL;
    *SJA_BCANAdr │= 0x0a;    //
}
现在用示波器测CAN_H和CAN_L,没有信号,请问是什么问题?

注:这个参考一下吧,呵呵


问: 请教各位大虾:有没有CAN局部测试程或意见?急需!!谢谢!!!
有没有人能给他的自测程序给我看看?帮帮我呀!
答:网上有basicCAN例程,CANstarter-I 工具中有PeliCAN例程。

1楼 0 0 回复
  • xilinxue

    xilinxue   |   当前状态:在线

    总积分:16186  2024年可用积分:0

    注册时间: 2008-06-26

    最后登录时间: 2020-03-22

    空间 发短消息加为好友

    xilinxue   发表于 2008/11/25 13:23:28

    问:我贴一下关于CAN验收滤波器的程序:哪里不对,请指教。多谢多谢了。
    BPS_307K   EQU   0x00F88001  ;波特率307K
    AF_RAM     EQU   0xE0038000  ;验收滤波器RAM起始地址

               LDR  R0, =CANAFMR
               MOV  R1, #0x02
               STR  R1, [R0]
               
               LDR  R0, =AF_RAM
               LDR  R1, =0x25522553
               STR  R1, [R0]
    //我在上面设置了一个25522553,CAN控制1口,只接收标识符为552,553的帧,我不知道这样设置对吗?这算设置了一个表格吗?

               LDR  R0, =CANAFMR
               MOV  R1, #0x00
               STR  R1, [R0]

    //这样算是启动了吧?我没有设置CANSFF_sa滤波器,可以不设置吗?如果需要设置,照我现在的情况,这个滤波器中应该填什么值呢?
    //在以上设置好以后,所有的总线数据都不响应了,急死我了,我看了网上的pdf文档,不过还是没什么启发。希望高手能解答我的疑惑。谢谢了

    答:参考或直接使用CANstarter-II开发套件中提供的资源。


    问:请问各位高手,作为一个初学者应该如何学习CAN总线技术?应该先学习哪一些基本知识,请推荐妨相关书籍一二。谢谢!
    答:现场总线CAN原理与应用技术
    作者:饶运涛 邹继军 郑勇芸
    出版社:北京航空航天大学出版社

    问:又没有带CAN控制器的可在线编程的8位单片机呢,麻烦推荐一款吧 
    答:ATMEL AT89C51CC0X 系列不错!
    答:intel的89C591,89C592都是片内带can的8位单片机。

    问:本来应用了CAN232,但是想提高系统的速度,想用PCI-CAN,做USB-CAN,但是想借此学习PCI,或USB,ZLG这里能想CAN232一样,如果买了板子,提供代码,原理图吗?如果没有哪种开发板有呢,能推荐一下吗?
    答:系统而理论地学习CAN,建议选择CANstarter-I/II开发套件;应用的话,USBCAN、PCICAN都是非常可靠的产品。

    问:请问,在SJA1000软件设计中,把发送信息送入发送缓冲区,启动发送后,为何总是会自动进入复位模式?请哪位大侠帮忙指教一番.
    问:再问一下,之后我重新换了线路板和芯片,复位问题没有了,但启动发送后检测状态位,发现发送状态一直为(始终发送未完成)。需要说明一点,目前我只用了一块线路板加一个仿真器进行发送调试,并没有接上接收的线路板,请问单发行否?请大侠帮忙指点以上问题!谢谢!
    答: 一个节点可以工作在自测试模式,在这个模式下的工作机制跟两点是一样的,然后启动自接收命令即可。
    答: 单发送不可, 正常发送时需要网络上同一速率的工作节点响应. 

    问:第一,接收信息的工作节点需要什么响应来确认?第二,接收的子程序未调好是否意味收发两方均无法调试?如何确认发送成功?
    答:网络上同一速率的正常工作节点响应:1、已设定速率;2、在工作状态。完全是由硬件(比如:SJA1000芯片)完成ACK确认。

    问:请问单个can 节点可以进行调试吗?是一块一路的can适配卡,使用端口地值300h,我使用winio进行读写的,可为什么,所有的单元读出来得数据都是ff?是因为只使用了单个节点can控制器不能正常工作吗?
    答:sja可实现单节点调试;ff应该是地址空间错误;
    问:我还是不太明白,你说的地址空间错误,是说sja1000的地址没有选通,地址没有指向sja1000的寄存器吗?
    答:首先把读写片选信号产生了再去管sja1000吧。

    问:我用验收滤波器来选择接收CAN2.0B的一帧数据,29位中只对其中几位进行判别,其他位又不是定值,请问这该怎么办?可不可以掩住不关心的位?用范围应该也可以实现,不过那样感觉不好,请教大家,谢谢!
    答:相关/不相关位最终都可以转化为范围描述。

    问:请教关于2119 can验收过滤器的问题
    请问:1、在canstarter-ii应用指南第42页中提到的“fullcan标准地址”与“标准单个地址”有何区别?
         2、第45页表2.34的“值”“字”“行”“id索引”是什么概念?
    答:fullcan标准地址放置的是需要自动执行接收存储的id索引表格(fullCAN功能,查看相关的介绍);标准单个地址仅仅是AF接收/屏蔽标准id的索引表格,即和一般的接收过滤理解一致。
    答:fullcan模式下自动把符合的帧放在后面的ram里
       标准单个把符合的数据放在接收寄存器中

    问:将“LPC 系列ARM 微控制器的CAN 接收过滤设置” 一文中的LTU.hpp加入原来的工程中(原来是用c做的),编译时有好多错误,用的确实是C++编译器,可感觉它对c++中的关键词不认识,请大家指教,谢谢!
    答: 里头好像仅仅作用域符号“::”不是C的之外没什么特别之处。
    2楼 回复本楼

    引用 xilinxue 2008/11/25 13:23:28 发表于2楼的内容

  • xilinxue

    xilinxue   |   当前状态:在线

    总积分:16186  2024年可用积分:0

    注册时间: 2008-06-26

    最后登录时间: 2020-03-22

    空间 发短消息加为好友

    xilinxue   发表于 2008/11/25 13:24:57

    问:以前我用的是485通讯,通讯协议里面都定义了包起始和包结束(CRC可以帮助验证是否包结束)。而对于CAN这个东东,比如我要发送一个信息包有100个字节,发送倒没有问题,对于接收端,我怎样去判断包起始和包结束呢?困惑ing
    请斑竹和各位大虾们指教!!
    答:CAN-bus由硬件完成帧的错误控制、数据处理,因此,协议比RS-485会方便许多。
    比如扩展帧格式:
    帧头(源地址、目的地址、命令字、辅参数)    数据场(分段码、0~7个数据)
        超过8个字节/帧时,需要分帧处理。
        具体方式,可以参考网页的《CAN应用方案》中通讯协议篇、RS-485升级篇。


    问:我的应用为:一个主机(计算机)会和很多的从机连接,每个从机都将通过网络连接,所以必须使用HUB,你们的ZNE-100将接在HUB上。计算机只要和HUB连接就可以了。不知道我该如何设置ZNE-100?还有此HUB还能连接其他的计算机吗?
    答:《ZNE-100嵌入式以太网转串口模块使用说明》 http://www.zlgmcu.com.cn/club/bbs/ShowAnnounce.asp?ID=45775


    问:对sja1000进行硬件复位时,要求sja1000的片选同时有效吗?比如用138译码器的y1选通sja1000的复位线,来达到使sja1000复位的目的,那么此时要求片选线有效吗?
    答:见SJA1000数据,异步操作,不要求片选有效。


    问:请问怎样把sja1000分时复用AD总线与pc104的数据线和地址线连接?
    答:周立功公司已经有现成的“PC104-CAN”接口卡提供。


    问:DP51+上BasicCAN测试程序的问题
    在DP51+上用BasicCAN测试程序按键操作向其它节点发送数据时,总出现E-F8的错误,检查连线和波特率的设置也没有问题,真不知道是什么原因?也没法收到其它节点发送过来的数据。有可能这是收发器TJA1050T出现问题了吗?
    答:可能是组建的CAN网络中有其他节点未设置正确,比如波特率.ZLG公布的代码都经过测试,附有文档说明。


    问:在开发过程中遇到如下问题:(公司没有上ARM,出于对其狂热的追求,自己出银子买的DEMO板)
    1:想完成自发自收,CANMOD_STMBIT=1,CANCMR_SRRBIT=1,观察寄存器窗口,接收REG
      内容没有发生变化,(自测模式是否需要搭建一个CAN总线平台??我只有一个DEMO和
      一个自己做的CAN总线收发器),接收中断也未发生,用的是周工最新的驱动.
    2. 如果只想接收ID为0x1234的信息,不用FULLCAN模式,该怎样设置才对呢?是不是这样:eFullCan禁能,则只需设置标准帧单个起始地址REG,把相应的ID填入就行了呢
    3. 每次调用 CanSendData(CAN1,cSlfSendCmd,TempBufPt),都将导致
    CANMOD_RM=1,发送错误计数器累加,好象是总线离线状态.郁闷啊
    还请斑竹和大虾们指点迷津
    答:CAN总线至少需要2个节点才好调试,要不怎样才能组成总线呢?
    答:网站可以下载代码,请参照配套的文档进行测试。
    至少要加CAN收发器、终端电阻,建立再在PC上安装1个CAN接口卡,比如CAN232接口卡。
    回复:原来采用的总线收发器的前端光耦出了问题!
    谢谢大家了!特别感谢周立功的技术支持工程师!


    问:如果要在CANBUS上供电12V或27V,该怎么做?
    因为CAN是平衡传输,要用差分信号来同步,现在要提高电平,该怎么做,以前请教过,但都只是说设计接口电路就可以实现,但是太模糊了,能否有过经验者提供一点有实际操作的思路。感激不尽。。。。
    感谢你的关注!!!
    答:1,加一组电源线;2,收发器就是差分驱动器。


    问:如果加电源线那还是总线供电吗?
    我的意思是两条线上既传信号又传电,请教可以做到吗?
    答:在CAN应用中的总线供电常指的是通过4芯或5芯通信线缆供电;收发器出来的仍然是基带信号没有调制的所以不容易实现线缆复用。


    问:请各位高手解决:SJA1000收发扩展帧正常,但是不接收标准帧
    答:我认为SJA1000不会出现这种现象,除非发送方有错误.


    问:对FullCAN模式不是很理解,哪位老师给详细介绍一下,谢谢!
    答:简而言之,就是验收滤波方式的增强,BasicCAN只有一种滤波,PeliCAN有2种滤波,可以加上广播信息,而FullCAN就是有更多种滤波。



     

    3楼 回复本楼

    引用 xilinxue 2008/11/25 13:24:57 发表于3楼的内容

  • xilinxue

    xilinxue   |   当前状态:在线

    总积分:16186  2024年可用积分:0

    注册时间: 2008-06-26

    最后登录时间: 2020-03-22

    空间 发短消息加为好友

    xilinxue   发表于 2008/11/25 13:25:17

    问:急,请各位老师近来看看2119 CAN验收滤波器问题 
    设置如下:我用的是汇编:
    AF_MEM   EQU   0xE0038000

    LDR   R0,=AF_MEM       ;读取验收滤波器RAM的起始地址
    LDR   R1,#0x25522553   ;我需要标识为552和553的接收,CAN1控制器
    STR   R1,[R0]


    LDR   R0,=AFMR         ;读取验收滤波器模式寄存器地址
    MOV   R1,#0x00         ;这样启动滤波器对吗?
    STR   R1,[R0]


    这样的情况下,CAN1接收中断不响应任何数据,这是为什么?中断机制完好,旁路滤波器时候全部响应的.关于CANSFF_sa寄存器该如何设置才能完成滤波接收?请指教。


    答:修改RAM表格前应该先置位AccBP位
    LDR   R0,=AFMR         ;读取验收滤波器模式寄存器地址
    MOV   R1,#0x02         ;置位AccBP,以便设置过滤表格        
    STR   R1,[R0]
    答:参考<LPC系列ARM微控制器的CAN接收过滤设置>


    问:在使用周的底层驱动时出了点问题,不知是什么原因
    用LPC2119中断方式做了一个转发器件,中断很正常,中断程序调用写环形环形缓冲区;主程序是读环形缓冲区,但是读时发生了数据中止,不解,就是下面第二句出了问题
    stcRxBUF *RxBuf;
    *RxBuf = CANRcvBufApp.RcvBuf[CAN1][CANRcvBufApp.ReadPoint1];
    答:网站资料已更新;查询方式会比较方便。


    问:过载帧与错误帧是怎么使用的啊
    对数据帧,和远程帧很好理解,也很好使用,但是对过载和错误就不知道在什么地方用了,也不知道该怎么用了啊?请各位指点
    答:CAN控制器自己管理


    问:错误消极中断和错误警报中断该怎么处理呢?只是简单的复位么?这两种错误有什么区别呢?不太明白
    答:按流程可以不处理,参考网站示例。


    问:仲裁丢失该怎么理解呢?仲裁丢失算不算是一种错误呢?仲裁丢失一般的处理是怎么样的呢?只是读取仲裁丢失捕捉寄存器么?
    答:不算,仅仅提供一个网络参考信息,例如网络负载/id分配是否合理等。


    问:为什么在分析仪发出第三侦后,2119才产生接收中断,而且收到的是第一侦的数据,WritePoint2 = 1。
    如果分析仪只发出一侦数据,不能产生中断,怎么回事?
    答:第三帧才产生中断可能是溢出中断,因为接收中断和溢出中断的额中断号是不同的,菲利普的早期资料中CAN的中断号有错,请下载最新资料!
    答:我试过中断模式,没问题,可以产生中断,可是周的低层驱动关于环形缓冲区那部分可能有些问题。
    中断后调用写数据缓冲区,然后在主程序里循环读环形缓冲区。忘了是在哪里会出现数据中止,按说是不应该出现的。


    问:请教RTR位在滤波中的作用?
    请教各位老师:滤波器中的rtr位参不参与滤波,我在实验中有两个节点,采用双滤波标准帧通信,我设置接收方的acr0,acr1,acr2,acr3寄存器为00,20,00,00,amr0,amr1,amr2,amr3分别是00,0f,00,ff.发送方ID1,ID2为00,20;但是发送方的ID2,只要是20和30,该帧数据都能接收,其它的如40,50,都不行,我不知道为什么?是不是rtr位不参与滤波,发送方在发送的时间不必要考虑此位。
    郁闷的不行,恳请帮助!
    答:就把它看作像id那样的一个bit看待吧。

    4楼 回复本楼

    引用 xilinxue 2008/11/25 13:25:17 发表于4楼的内容

  • xilinxue

    xilinxue   |   当前状态:在线

    总积分:16186  2024年可用积分:0

    注册时间: 2008-06-26

    最后登录时间: 2020-03-22

    空间 发短消息加为好友

    xilinxue   发表于 2008/11/25 13:25:38

    答:你指的是BasicCAN模式下的"验收过滤";其实,两种模式的所有11位或29位都有效。


    问:BasicCAN模式下的"验收过滤"只能过滤ID10-3,请问ID2-0对接受有影响吗?资料显示并没有对ID2-0进行核对。
    答:BasicCAN模式没有对ID2-0进行核对。


    问:请问在双绞线上传输的CAN信号波形应该是怎么样的?信号的幅值和频率?另外,能否推荐使用在车辆上的电缆型号以及节点与总线相接的接插件型号!谢谢!!
    答:汽车类型不同,应用有所不同,建议参考SAE J1939协议内容中的规定,制定自己的规范。


    问:有没有CAN控制器+单片机(不包括CAN驱动器),成本不超过15元的方案?可付报酬!
    答:目前我们没有能力实现。
    答:io模拟低速can。


    问:请问CAN总线是不是不能提供总线供电?如果希望总线供电该如何做?谁能提供一点关于CAN能总线供电的资料啊?
    答:CAN 或 DeviceNet 都可以总线供电,根据需要选择适合的应用。
    CAN 没有规定物理层.是一种相当灵活的现场总线。DeviceNet、CANopen均是基于CAN-bus协议,自定协议也不难。


    问:请问远程帧的作用是什么?在什么情况下需要使用它?
    答:那是一种可用可不用的帧资源.


    问:基地址选了0xda00,偏移量选择0000后,sja1000得寄存器的地址是从0xda000开始吗?
    答:对的。


    问:在每次只收到一帧的情况下,我置位清除接受缓存都没问题,但是一旦在短时间内接收到2帧或以上时(短时间指,第一帧还未完全被微控制器接收而第二帧已经到来)我收完一帧,置位清缓就会出错。然后我复位继续接收下一帧微控制器就不能从sja1000接收了,为什么会这样那?置位清缓不是只清掉第一帧数据么?如果只清第一帧数据的话,应该第二帧可以收到的啊?这是怎么回事那?要怎么解决那?谢谢了。
    答:不会这样的,查查其他原因。


    问:请教版主CAN总线用于爆炸性气体环境可以吗?
    在网上搜索了一下,看到的 是几年前发表的 文章说CAN总线没有解决防爆问题,不知现在有没解决在爆炸性气体环境使用CAN总线通信。如果没有那只好用以前的 485了 改成hart还是更麻烦
    答:在《现场总线控制系统的调试与开发》--国防工业出版社的技术书籍第8页,列出了CAN-bus是本安的总线之一。


    问:请问Can232和can232B转换器的通讯协议是否必须和计算机相连才能更改我想用转换器直接与PLC相连不知如何设置通讯协议。
    答:看应用场合而定,可以不用设置协议。这一份文档中有很好的说明!


    问:关于节点发送的问题向你请教。
        发现经常我的硬件复位有时不是成功的,导致发送不成功。读状态寄存器SR=0x04,或0x44;请问这种情况是怎么回事??
    答:“硬件复位有时不是成功的”不容易理解;建议看一下前面的贴,或网站的参考程序。


    问:那请问:硬件复位后,我发送前读状态寄存器SR=0x04,也就是“当前请求的发送未处理完”,这种情况下发送时不能成功的。
    有时候硬件复位后发送前读状态寄存器SR=0x0c,这种情况下发送时可以的。
    请教:为什么硬件复位后还会出现像前面的那种状态寄存器SR=0x04,也就是“当前请求的发送未处理完”的情况,
    应该如何处理???
    答:硬件复位成功后 SR= 0X0C ;否则就是硬件方面存在问题。建议用网站公开的电路与程序,或者直接在DP系列实验仪上测试。


    问题1:在通讯时出现错误,用软件复位能否将错误清除?
    问题2:软件复位是否将以前设置的参数改为默认值?是否需要重新初始化?
    答:1.可以;2否,是


    问:为什么我在复位模式下CDR寄存器写不进那?其他寄存器都可以写进去,就是CDR写不进去。。
    不明白为什么,和其他寄存器一样的写法,语句,但是无论写什么进去,读出来都是00H。可以帮忙解答以下么?谢了
    注:无论读写都是在复位模式下
    答:芯片SJA1000的硬件复位会使CDR=0x00。


    求助,为何我写不了CAN地址大于8的寄存器?
    SJA1000的基地址是BF00H,我对SJA1000的寄存器在复位模式下进行写,写完读出(当然是对于可读写的)发现对于CAN地址大于8的写入一定的数之后再读出,读出的数大部分是FF,而不是我写如的数,哪位大侠可以提供帮助?谢谢。在PELICAN模式下。
    答:你在basic模式下试一下。
    答:也可能是硬件接线问题。

    5楼 回复本楼

    引用 xilinxue 2008/11/25 13:25:38 发表于5楼的内容

  • xilinxue

    xilinxue   |   当前状态:在线

    总积分:16186  2024年可用积分:0

    注册时间: 2008-06-26

    最后登录时间: 2020-03-22

    空间 发短消息加为好友

    xilinxue   发表于 2008/11/25 13:25:57

    答:一般不会有中文资料,看网站《应用方案-通讯篇》。


    请问版主及各位大虾:汽车CAN节点与工控CAN节点的?区别在什么地方
    答:通讯距离、应用层协议不同,电路稍有不同,参考网站资料。


    问:我现在正在做与CAN总线相关的课题,买了CANstarter-I 开发套件,现在差不多快看完了。不过现在有一个问题,就是各位在自己做实验时硬件是怎么做的,是自己搭手工焊接的电路板,还是用Protel制作PCB图后印刷出电路板来?Protel我以前从未学过,要按电路图去自己做PCB的话周期太长,可自己焊又不能保证电路板的稳定性?
    答:配套光盘中有PROTEL格式的CAN节点原理图,PCB可以参考实验仪。


    问:我用中断接受can总线发来的数据,可是单片机怎么也进入不了外部中断程序?为什么?
    8051中关于外部中断0的设置我都设置了,可就是进入不了isr,如果我采用查询接受,int/端的电平就显示正常(低到高),一采用中断,int/端的电平就被拉低不会变高,我在isr中设置了点灯测试,当有数据时因为灯没亮,所以我判断是进入不了isr,各位老师看看这是为什么呢?
    答:设置电平触发,确保mcu相应中断的其他设置正确。


    问:再用USBCAN-I时,ZLGCANTest为什么不能设置波特率?那时钟频率是多少啊?说明书上也没有说明啊 ?
    答:打开设备时定时器0、定时器1就是用于设置波特率的。详细请看相关的用户手册。16MHz,在编程接口文档中应该也有说明。


    问:关于SJA1000的错误处理!
    在SJA1000的资料上可以看到,它有一个错误代码捕捉寄存器(ECC),通过查询这个寄存器我们可以知道总线错误的类型和位置信息。但在实际的应用中,我们好像对这方面CAN总线错误处理的功能用的很少,可能有时也没考虑。一方面CAN总线的错误很少发生,另一方面我们缺少这方面总线发生错误的的实际例子,
    在实际的总线应用过程中,CAN总线的错误是应该也必须考虑的,因为这直接影响CAN网通讯的质量和可靠性。
    我希望各位同行能在这方面提出自己的看法。。。。。。
    答:精华区有相关的讨论贴。


    问:正常模式下发送,给命令寄存器赋值0X03,由于没有另一点的响应,这一点会一直发送(在示波器的波形可以看出),
    我现在问题是,这一点在重新软件复位后,就不能发送了,读状态寄存器 ,显示最后一次发送未被处理成功,假如关闭电源硬件复位重新开始又可以发送了。请教大家可以取消CAN节点的发送命令吗?用软件怎样实现?
    答: 请问你所指的软件复位是什么?是进入复位模式吗?如果是的话当然不行。
    答:我说的软件复位是指使仿真器重新编译,程序从头运行。就是MCU给SJA1000复位模式初始化后退出复位模式,进入工作模式后再发送 .


    问:大家好,我最近刚开始用can总线设计一个项目,目前遇到一个很大的困惑,就是在设计can智能节点时(WEE758+SJA1000+TJA1000),两者的接口通讯都有问题,初始化好像过了,但用ZLGTEST软件调试,不能正常收发数据,我查了硬件电路,没有问题,我郁闷死了,请问大家该从哪方面下手去找原因啊,我用的电路是CANSTART-I用户指南里面的那个程序,不知道有没有问题。请有经验的人帮帮忙啊,我的时间太紧了。
    答:先测试你的硬件 物理连接是否通过,可以先给SJA1000写一个值如0xAA,再访问SJA1000读出来看是否是0小AA?
    答:"不能正常收发数据,我查了硬件电路,没有问题...",这不自相矛盾了吗?
    1,把所sja1000当作xdata ram测试看看是否总线连接正常,sja受控?
    2,发送时看看总线是否出现差分信号?物理连接是否正常?
    这就基本把硬件问题定位了。


    问:请帮忙看一下程序,谢谢!
    SJA1000中
    地址16  写入0x88
    地址17  写入0x04
    地址18  写入0x03
    地址19  写入0x02
    地址19  写入0x01
    使用ZLGCANTEST软件得到的ID应该是多少?怎样计算?
    我得出的是0x00806020,好象是右移了五位?是否正确啊?
    答:工作在PeliCAN模块的话,参照产品手册附录2可以获得在总线上的ID值。


    问:输出控制寄存器的OCMODE1和OCMODE0可以设置为四种方式,双相、测试、正常和时钟输出,一般应该选择哪一种输出比较好,通讯可靠性高。
    答:常用push-pull模式,这比较通用,适应性较好。


    问:在用ZLGCANTest 1.4版在调试程序时,下位机发送标准数据帧,USBCAN-II智能卡收此信息.下位机的ID号为:0x00000035,如果将ZLGCANTest的"打开设备"对话框中的验收码设为0x00000035,屏蔽码设为0x00000000,为什么不能收到信息.如何在ZLGCANTest中设置验收滤波器?(发送节点ID为0x00000035,发送标准数据帧,接收端为USBCAN-II智能卡)
    答:验收过滤设置为4个寄存器,但需要根据接收帧格式进行设置,而不是简单地对应关系。请参考提供的《CAN控制SJA1000验收滤波器原理与应用.pdf》资料。

    6楼 回复本楼

    引用 xilinxue 2008/11/25 13:25:57 发表于6楼的内容

总共 , 当前 /