搜索
bottom↓
回复: 15

阿莫论坛的大虾门,指点一下啦

[复制链接]

出0入0汤圆

发表于 2014-6-25 09:08:33 | 显示全部楼层 |阅读模式
本帖最后由 dhw5qq 于 2014-6-25 09:11 编辑

我昨天也发了帖子的,但是没人理我,很尴尬。
就是说硬件iic中断时间如何减少,BMS系统要求接收命令和发数据合起来在1ms内完成。
我用论坛有个前辈的程序,测试有80ms左右的样子,现在是如何去吧这个时间减少到最小!
贴部分程序
  1. 主机:

  2.             write_gasgauge(0x07);         
  3.                 delay_ms(25);               
  4.                 iic_buf[7]=read_gasgauge();               
  5.                 delay_ms(5);                               
  6.             write_gasgauge(0x08);                       
  7.             delay_ms(25);                                                       
  8.             iic_buf[8]=read_gasgauge();       
  9.             delay_ms(25);                       
  10.                 current=(iic_buf[7]<<8)|iic_buf[8];                 //电流         

  11. 从机:

  12. //中断处理机制,iic产生寻址中断,在接受地址后产生握手,然后收到主机发的命令,然后把数据发给主机!
  13. #pragma interrupt_handler iic_irq:25
  14. void  iic_irq(void)
  15. {
  16.    CLI();
  17.   // ms=0;
  18.     switch(STATUS)                                     //状态采集
  19.     {                                    
  20.     case SR_SLA_ACK:                                                //从机地址写完成
  21.         flag=1;
  22.         //ms=0;
  23.     case SR_ARB_LOST_SLA_ACK:                                //仲裁失败
  24.     case SR_GC_ACK:                                                        //收到主机广播并且ack返回       
  25.         ACK();                                                            //接受到地址并且ack返回给主机
  26.         break;
  27.     case SR_SLA_DATA_ACK:                                          //接受到数据并且ack返回
  28.     case SR_GC_DATA_ACK:                                          //广播形式接受到数据
  29.         temp1=TWDR;                                                            //产生general call地址匹配
  30.         ACK();                                                                 //接受到地址并且ack返回给主机
  31.         break;
  32.     case SR_SLA_DATA_NACK:
  33.     case SR_GC_DATA_NACK:                                           //不读取主机数据就发nack
  34.         NACK();                                                                     //发送nack给主机                                           ;
  35.         break;
  36.     case SR_STOP_REST:
  37.         ACK();
  38.         break;                                                                   
  39.     case ST_SLA_ACK:                                                   // 0xA8: 自己的SLA+R 已经被接收,ACK 已返回
  40.         //flag=1;
  41.     case ST_ARB_LOST_SLA_ACK:                                 // 0xB0: SLA+R/W 作为主机的仲裁失败;自己的SLA+R 已经被接收,ACK 已返回
  42.         switch(temp1)
  43.         {   
  44.             case 0x07:                       
  45.               TWDR=(u8)((current&0xff00)>>8);       
  46.               ACK();
  47.             break;
  48.            case 0x08:
  49.                         //flag=1;
  50.            TWDR=(u8)(current&0x00ff);
  51.               ACK();
  52.             break;        
  53.             default:break;
  54.         }
  55.                 break;
  56.     case ST_DATA_ACK:                                                             // 0xB8: TWDR 里数据已经发送,接收到ACK
  57.     break;
  58.     case ST_DATA_NACK:                                                                                                   // 0xC0: TWDR 里数据已经发送接收到NOT ACK
  59.         NACK();
  60.     case ST_LAST_DATA:                                                             // 0xC8: TWDR 的一字节数据已经发送(TWAE = “0”);接收到ACK
  61.         NACK();
  62.         twi_init();                                                                                                                  //重新回到初始化状态,等待接收模式的到来
  63.         break;
  64.     case NO_INFO:                                                                                                           // 0xF8: 没有相关的状态信息;TWINT = “0”
  65.     break;
  66.     case BUS_ERROR:                                                                                                    // 0x00: 由于非法的START 或STOP 引起的总线错误
  67.         TWCR=(TWCR&TWCR_CMD_MASK)|(1<<TWINT)|(1<<TWSTO)|(1<<TWEA);
  68.         default:break;
  69.     }       
  70.         SEI();
  71. }
复制代码

本帖子中包含更多资源

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

x

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

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

 楼主| 发表于 2014-6-25 09:15:17 | 显示全部楼层
  这是我用逻辑分析仪抓的波形,
中间的时间是100ms,可能就是中断执行的时间,所以对于硬件iic的话,必须吧这段时间减少,还有,就是说我不明白,为什么我主机发命令都没有ff,可是读取的数据却又ff,好奇怪,难道说iic中断里面没有吧数据发出来,还是说有其他某种原因,一直没有弄明白,希望阿莫高手给我指点迷津!
困惑了很久!实验也做了不少,还是 没有进展,这个BMS系统难道真的要换方案了?

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-6-25 09:18:25 | 显示全部楼层
楼主标题不合格,要修改~~~

出0入0汤圆

发表于 2014-6-25 09:28:56 | 显示全部楼层
你中断里面没有很耗时的程序,不可能减少MS级别的时间的

出50入0汤圆

发表于 2014-6-25 09:37:30 | 显示全部楼层
光几个delay已经80ms,要1ms完成,你是在讲笑话吗

出0入0汤圆

 楼主| 发表于 2014-6-25 10:27:28 | 显示全部楼层
zhanglei1986145 发表于 2014-6-25 09:28
你中断里面没有很耗时的程序,不可能减少MS级别的时间的

那最快是多少,还有我的硬件接收和发送,其实也是按照主机的时钟频率来的,对不对?

出0入0汤圆

 楼主| 发表于 2014-6-25 10:31:24 | 显示全部楼层
god-father 发表于 2014-6-25 09:37
光几个delay已经80ms,要1ms完成,你是在讲笑话吗

那时间都到哪去了,不可能在中断就需要那么长时间吧?

出0入0汤圆

 楼主| 发表于 2014-6-25 10:39:59 | 显示全部楼层
  1. 再贴个我主机发数据和读数据的协议,
  2. void write_gasgauge(u8 cmd)
  3. {
  4.          I2C_start();
  5.          I2C_write(0xaa);       
  6.           delay_us1(1);
  7.          I2C_write(cmd);       
  8.          I2C_stop();
  9. }

  10. u8 read_gasgauge(void)
  11. {
  12.      u8 temp=0,temp1=0;   
  13.          I2C_start();       
  14.          I2C_write(0xab);       
  15.         // delay_us1(1);
  16.         //temp1=I2C_read(1);         
  17.         // temp=I2C_read(1);       
  18.           temp=I2C_read(0);         
  19.          I2C_stop();
  20.          return  temp;
  21. }
复制代码

出0入0汤圆

 楼主| 发表于 2014-6-25 10:41:10 | 显示全部楼层
现在不知道哦啊在哪里可以减少时间的开销,无比蛋疼,调试了快半个月了,一点进展都没有,老板都发飙了,昨天还在催着呢!

出0入0汤圆

 楼主| 发表于 2014-6-25 10:52:12 | 显示全部楼层
刚才把时间都调短了,发现有进展了,但是还是100ms左右的样子,1s才读取10次,要是电流的话,那么很有可能你硬件硬件保护 了,你才读取到这个电流数据,完全不可以啊!

本帖子中包含更多资源

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

x

出0入0汤圆

发表于 2014-6-25 11:12:10 | 显示全部楼层
BMS是什么?   蓄电池管理系统吗?

出0入0汤圆

发表于 2014-6-25 11:40:00 | 显示全部楼层
樓主,你提問的方法不對。

提問,衹是希望知道你原本不知道,或想不明白的東西。指望被提問者幫你解決問題,是不可能的。

如果被提問者無辦法在眼睛一掃之下,看明白你的問題,知道你確切想問些甚麼,那麼他很可能不會回答你。
比如這張帖,開頭有四行。
我昨天也发了帖子的,但是没人理我,很尴尬。
就是说硬件iic中断时间如何减少,BMS系统要求接收命令和发数据合起来在1ms内完成。
我用论坛有个前辈的程序,测试有80ms左右的样子,现在是如何去吧这个时间减少到最小!
贴部分程序

第一行完全是廢話。而且被提問者知道你有“前科”的話, 他們的反感程度就更高了。
第二行和第三行,可以歸納爲“如何減少硬件IIC中斷時間”。至於你要求多少毫秒,而今又是多少毫秒,可以放到後面纔詳細描述。
注意!千萬不要有拼寫錯誤!比如你將“IIC”,寫成“iic”,被提問者可能會認爲你是個懶人,連按一下Caps Lock也不肯,想必是個不嚴謹的人。
再注意!千萬不要說你“用了誰誰誰的東西”。如果是個名人,那還好說;倘若被提問者不認識他,那麼他會想“你用他的代碼,關我屌事?有問題直接去找他啊!”然後關掉瀏覽器窗口。

說清楚每一箇細節!
比如,你是怎麼做的?這箇硬件IIC,你是怎麼操控的?貼出這部份代碼,而不是整段代碼。必要時,你應該貼出僞代碼,簡要說明你進行了甚麼操作。
BMS是甚麼?11樓的朋友liyfmc表示不認識。如果你確定BMS和你的問題有莫大關聯,那麼你纔可以加上去。否則,你應該通俗地說“我的硬件IIC和外圍標準設備通訊……”。

你做了些甚麼實驗?你觀察到甚麼現象?
有沒有用示波器,觀察過IIC通訊過程中,沒箇階段的用時各是多少?
如果你觀察過,覺得初始化部份太長,你就可以在問題裏詳細說“初始化部份用了35ms”,然後在問題最後提出你合理的猜測“這箇時間會不會是不正常的?”,以幫助被提問者narrow down。

出0入0汤圆

 楼主| 发表于 2014-6-25 11:40:17 | 显示全部楼层
目前从机读取数据还是比较快的,3ms读取完一个电流数据,

关键是中断那里,怎么提高速度呢?

本帖子中包含更多资源

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

x

出0入0汤圆

 楼主| 发表于 2014-6-25 11:48:17 | 显示全部楼层
谢谢12楼盆友的提醒,也许是我急于求成了,没吧话给说明白。
好,我就仔细的描述下:
我这个BMS系统是用在锂电池管理上面的,实现的功能大致上有检测电流,温度,电压,容量的检测,目前我正在做电流检测,必须在2ms之内读取到电流,而且根据电流做出过流反应。

再说下,我的这个系统大致框架,一个mg48和BQ3050绑定在一起,然后mg16作为主机和mg48的硬件iic接口做通讯。目前我测试是电流,2个字节,所以我就按照主机发一个命令,接收一个字节的方法,代码我贴出来了。
现在问题是mg16要在2ms以内读取出电流数据,我用逻辑分析仪抓了波形,发现中断耗时100ms左右哦,我实在是想不通,为什么中断里面要执行这么长时间,所以恳请了解硬件iic接口的朋友给看一下,因为我这个到时候可能是要做大系统的,比如我mg48要接10个BQ3050呢,那么所有的锂电池的数据如何在最短的时间内发送给主机,然后主机做出相对应的判断!

出50入0汤圆

发表于 2014-6-25 12:45:55 | 显示全部楼层
dhw5qq 发表于 2014-6-25 11:48
谢谢12楼盆友的提醒,也许是我急于求成了,没吧话给说明白。
好,我就仔细的描述下:
我这个BMS系统是用在 ...

i2c总线支持的速率很高(高到你不需要),重点检查你I2C的时序(或许不需要这么长的delay),从机状态可以下载8563之类的手册比较一下。

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-7-23 22:36

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

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