到底什么水平,能否进军最高水平精密制造WBA,WBC

UID1189913&帖子255&精华0&积分2149&资产2149 信元&发贴收入1325 信元&推广收入0 信元&附件收入0 信元&下载支出476 信元&阅读权限50&在线时间48 小时&注册时间&最后登录&
UID1223455&帖子25&精华0&积分7419&资产7419 信元&发贴收入135 信元&推广收入0 信元&附件收入866 信元&下载支出442 信元&阅读权限50&在线时间129 小时&注册时间&最后登录&
UID2909&帖子832&精华0&积分816&资产816 信元&发贴收入4435 信元&推广收入0 信元&附件收入1808 信元&下载支出6663 信元&阅读权限30&在线时间117 小时&注册时间&最后登录&
呵呵。不错的
UID1247874&帖子33&精华0&积分175&资产175 信元&发贴收入170 信元&推广收入0 信元&附件收入0 信元&下载支出295 信元&阅读权限10&在线时间10 小时&注册时间&最后登录&
感謝~~收下了
UID973418&帖子253&精华0&积分8&资产8 信元&发贴收入2655 信元&推广收入0 信元&附件收入0 信元&下载支出3866 信元&阅读权限10&在线时间325 小时&注册时间&最后登录&
总结得非常好
UID973418&帖子253&精华0&积分8&资产8 信元&发贴收入2655 信元&推广收入0 信元&附件收入0 信元&下载支出3866 信元&阅读权限10&在线时间325 小时&注册时间&最后登录&
UID536330&帖子98&精华0&积分0&资产0 信元&发贴收入540 信元&推广收入0 信元&附件收入0 信元&下载支出759 信元&阅读权限10&在线时间17 小时&注册时间&最后登录&
UID977039&帖子897&精华0&积分2934&资产2934 信元&发贴收入6880 信元&推广收入0 信元&附件收入3608 信元&下载支出15359 信元&阅读权限50&在线时间380 小时&注册时间&最后登录&
谢谢 !!!!!
[通过 QQ、MSN 分享给朋友]
欢迎访问 TI SLL(信号链)专区OD2101 I2C转UART芯片应用详解
一、 &&&&& 概述
&&& OD2101芯片为14脚TSSOP封装的CMOS器件,是一款提供I2C转UART接口方案的专用协议转换芯片。该芯片可以方便用户进行I2C接口的扩展,将数据与RS232,RS485总线进行透明传输。当设计中需要扩展微处理器的串口或希望在单独I2C总线上与UART器件进行数据交换,使用该芯片可以简单的实现方案。
OD2101芯片具有低功耗(关断状态下功耗可降到10μA以下),内部复位,内部晶振等特点,用户可以用非常少的引脚和外围电路就可以实现芯片工作。一条I2C总线可以最多支持8个OD2101芯片。
二、&&&&&& 引脚及说明
&&& 采用14脚TSSOP封装,引脚图如图1所示。其管脚定义如下:
图1 管脚配置-TSSOP
I2C地址输入0
中断输出(开漏极)低有效
复位管脚(需要通过上拉电阻5~10K接VDD)
硬件关断输入脚。当关断产生(SHDN置高),芯片停止工作,所有接口变成高阻态,系统进入节电模式。正常工作需要接低电平。
串行数据线
串行时钟线
串行口输入
串行口输出
电源:2.4V~3.6V
低有效输入管脚。通过CTS寄存器读取。通常用在RS-232的清除输入功能。
低有效输出管脚。通过RTS寄存器控制。通常用在RS-232的输出请求或RS-485的驱动使能。
I2C地址输入2
I2C地址输入1
表1 管脚描述
三、&&&&&& 功能详述
&&& 下面我们根据一个单片机与OD2101芯片通讯的实例,一步步说明如何使用这颗芯片。
电路及说明
&&& 本实例采用8051单片机与OD2101芯片进行通讯连接,相关电路如下图所示:
图2 OD2101电路连接图
&&& 电路连接图采用8051的P1.3和P1.3模拟I2C接口,P0.0作为中断输入信号。A0、A1、A2管脚都接地,因此OD2101的从机地址为0x50。我们可以通过改变A0、A1、A2管脚的高低点平来改变OD2101的从机地址,从而实现控制多个OD2101的目的。如A0、A1、A2管脚高低点平为(100),OD2101的从机地址即为(0x50+0x02=0x52)。
模拟I2C软件库说明
&&& 模拟I2C软件包共有两个文件,分别为VIRTUAL_I2C.C和VIRTUAL_I2C.H。此软件库主要针对12M晶振的8051单片机设计,用户如果采用其他微处理器,可以修改相关部分进行改进。软件包的I2C接口定义如下:
sbit SDA=P1^3;&&&&&&&&&&& &&&&& /*模拟I2C数据传送位*/
sbit SCL=P1^2;&&&&&&&&&&& &&&&& /*模拟I2C时钟控制位*/
& 软件库集成了I2C主机模式下的函数集,由于OD2101的操作需要从机地址和硬件子地址。我们在这里主要使用如下两个函数:
/*******************************************************************
&&&&&&&&&&&&&&&&&&&& 有子地址发送多字节数据函数&&&&&&&&&&&&&& &&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
功能:&&&& 从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
&&&&&&&&& 地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
&&&&&&&&& 如果返回1表示操作成功,否则操作有误。&&&&&&&&&&&&&&&&&&&
*******************************************************************/
extern bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no) ;&&&&&&&&&&&&&&&&&&&
/*******************************************************************
&&&&&&&&&&&&&&&&&&& 有子地址读取多字节数据函数&&&&&&&&&&&&&& &&&&&&&
&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
功能:&&&& 从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
&&&&&&&&& 地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&& 如果返回1表示操作成功,否则操作有误。&&&&&&&&&&&&&&&&&&&
*******************************************************************/
extern bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no);&&&
&&&&&&&&&&&&&&&&&
寄存器读写
&&& 关于OD2101芯片寄存器设置,请参考芯片说明文档。程序中设置寄存器地址如下:
#define WR&&&&&&&& &&&&&& 0x00&&&&& &&&&&& /*数据读寄存器*/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#define RD&&&&&&&&& &&&&&& 0x00&&&&& &&&&&& /*数据写寄存器*/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
#define UARTBUF&&&& 0x01&&&&& &&&&&& /*UART接收缓存接收字节数*/&&&&&&&&&&&&&&&
#define I2CBUF& &&&&&& 0x02&&&&& &&&&&& /*I2C可加载字节数*/&&&&&&&&&&&&&&&&&&& &&&&&&&&
#define CTRL&&&& &&&&&& 0x03&&&&& &&&&&& /*UART接口控制寄存器*/&&&&&&&&&&&&&&&&&&&&&
&&& 需要注意的是,我们在利用这些寄存器读写数据的时候,这些地址都为硬件子地址。在I2C主机控制读写数据时的顺序应为:(从机地址R/W) + 硬件子地址 + 数据….。这种带有硬件子地址的I2C读写顺序与普通只有从机地址的I2C读写顺序有些不同,相关资料请查询I2C总线协议。我们在利用I2C库文件读写就比较方便,例如我们向I2C接口发送“ABCDE”这几个字符,就可用如下方式编写:
ISendStr( OD2101 , WR , "ABCDE", 5);&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&
通讯接口的设置
&&& OD2101通讯接口的设置主要包括:波特率的设置、CTS和RTS的选择设置、数据清空设置选项。
波特率设置
OD2101的UART波特率设置由控制寄存器的0~4位来决定,我们在写入控制字后,波特率立即生效,如我们设置9600的波特率如下所示:
&& IRcvStr( OD2101 , CTRL , &in_dat , 1 ) ;&&&& /*读取OD2101控制寄存器*/&
&& in_dat = ( in_dat & 0xf0 ) | UART_9600 ;&&&&& /*设置OD2101波特率为9600*/
&& ISendStr( OD2101 , CTRL, &in_dat , 1) ;&&&& /*发送控制字节*/&&&&&&&&&&&
&&& OD2101的UART波特率为固定波特率选项,如下表所示:
B3 B2 B1 B0
B3 B2 B1 B0
0& 0& 0& 0
1& 0& 0& 0
0& 0& 0& 1
1& 0& 0& 1
0& 0& 1& 0
1& 0& 1& 0
0& 0& 1& 1
1& 0& 1& 1
0& 1& 0& 0
1& 1& 0& 0
0& 1& 0& 1
1& 1& 0& 1
0& 1& 1& 0
1& 1& 1& 0
0& 1& 1& 1
1& 1& 1& 1
表2:波特率对照表
程序中,波特率对照表如下所示:
/*定义OD2101波特率*/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
enum{ UART_9600,UART_300,UART_600,UART_900,UART_1200,&&&&&&&&
   UART_1800,UART_2400,UART_3600,UART_4800,UART_7200,&&&&&
   UART_14400,UART_19200,UART_28800,UART_38400,&&&&&&&&&&&&
   UART_57600,UART_115200 };&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
CTS和RTS控制
CTS和RTS是串行通讯中流控制的两个管脚,本身成对出现。一般连接方式如下图所示:
图2 UART流控制示意图。
具体地说,就是当接收方(UART2)认为可以接受UART数据时,将RTS置为有效位。发送方(UART1)的CTS管脚接收到此信号后,才将数据进行发送。一般来说,当UART数据接收缓存大于两个字节空余时,就可以将RTS置为有效接收。当然,OD2101的UART接收缓冲区具有64位的字节,用户可以按照自己数据流量的需求定义RTS。CTS和RTS的置位和读取如下代码所示:
&& IRcvStr( OD2101 , CTRL , &in_dat , 1 ) ;&&&& /*读取OD2101控制寄存器*/&&&&&&&&
&& if( in_dat & (1&&4) ) & /* CTS管脚为低& */&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&
&&&&& else &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& /* CTS 管脚为高 */&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&
&& IRcvStr( OD2101 , CTRL , &in_dat , 1 ) ;&&&& /*读取OD2101控制寄存器*/&&&&&&&
&& in_dat |= (1&&5) &;&&&& /*设置RTS为低,置高为in_dat &= (~(1&&5)) ;*/&&&&&&&&
&& ISendStr( OD2101 , CTRL, &in_dat , 1) ;&&&& /*发送控制字节*/&&&&&&&&&&&&&&
数据清空设置
数据清空设置比较简单,只要把控制寄存器相应位置位并发送,相关接口的数据缓冲区的数据立即被清空。
当SHDN管脚置高时,芯片进入关断功能状态。这时所有通讯接口均进入高阻态,系统进入低功耗状态。除了SHDN,其他触发都不能改变芯片状态。当SHDN重新置低后,系统恢复正常工作,所有寄存器恢复到关断前状态(I2C和UART数据缓冲区数据全部清空)。
本试验例程首先设置OD2101的UART波特率为9600,然后发送“good\n”5个字符到I2C接口,用户可以通过OD2101的UART口接收观察数据是否正确发送出去。在大循环中,程序轮询IRQ管脚是否产生中断(建议在开发中采用硬件中断方式),当中断产生时,接收I2C数据,并进行大小写转换,然后将传唤后的数据发送回OD2101。相关试验程序如下:
&& IRQ = 1 ;&&&&&&&& /*将IRQ管脚设置成输入状态*/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& IRcvStr( OD2101 , CTRL , &in_dat , 1 ) ;&&&& /*读取OD2101控制寄存器*/&&&&&&&&&&&&&&
&& in_dat = ( in_dat & 0xf0 ) | UART_9600 ;&&&&& /*设置OD2101UART波特率为9600*/&&&&&
&& ISendStr( OD2101 , CTRL, &in_dat , 1) ;&&&& /*发送控制字节*/&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
& &ISendStr( OD2101 , WR , "good\n", 5);&&&&&&& /*发送"good"字节到OD2101*/&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& while(1)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&& {&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&& if( !IRQ) &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& /*判断是否有接收中断产生*/&&&&&&&&&
&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&& DelayNs(10) ;&&&&&&&&&&&&&&&&&&&&&&&&&&&& /*延时过滤杂波*/&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&& if( !IRQ )&&&&&& &&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&& {&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&& && IRcvStr(OD2101,UARTBUF,&in_dat,1) ;/*UART接收缓存接收字节*/&
&&&&&&&&&&&&&&&&&&&& && for( i = 0 ; i & in_ i++ )&&&&&&&&&&& /*将接收缓冲区的数据读出*/&&&&&
&&&&&&&&&&&&&&&&&&&& && {&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&& &&&&& IRcvStr( OD2101 , RD , &in_dat1 , 1 ) ; /*读取一个字节数据*/&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& & /*将读取出的数据进行大小写转换*/&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& & if( (in_dat1>='A')&&(in_dat1&='Z') )&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& & {&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& & &&& in_dat1 += 'a'-'A' ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& & }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& & else if( (in_dat1>='a')&&(in_dat1&='z') )&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& & {&&&&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& & &&& in_dat1 -= 'a'-'A' ;&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&& & }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&& &&&&& ISendStr(OD2101, WR, &in_dat1, 1);/*将转换后的数据发送给I2C总线*/&&&& &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&& && }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&& }&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& &&&&&&&&&&&&&&&&&&&&&&
&&&&& }&&&&&&&&
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
OD2101是一款简单实用的I2C转UART协议转换芯片,用户可以在缺少UART或需要扩展多串口的场合下使用此芯片。考虑到I2C接口的地址重复问题,如果OD2101地址被占用,客户也可以选择OD2101A(从机地址为0x70)使用。本次试验采用的是模拟I2C接口编程,实际使用中强烈建议客户采用硬件I2C接口进行,因为毕竟UART的软件模拟要比I2C容易的多,何必多此一举呢!:)
相关报道:
新闻热线:010-
责任编辑:
名企动态: |
标志着Windows迈出个性化计算的第一步……
本站特聘法律顾问:于国富律师
Copyright (C) 1997-工具类服务
编辑部专用服务
作者专用服务
用I2C总线转UART芯片实现通用串口扩展
介绍用NXP公司I2C转UART芯片-SC16IS752来实现可适应各种类型串口仪器的ARM单片机串口扩展模块,说明了设计的原理和注意事项,并给出了硬件接口电路图和部分初始化程序.
XU Chang-wei
作者单位:
同济大学,上海,200092
年,卷(期):
机标分类号:
在线出版日期:
本文读者也读过
相关检索词
万方数据知识服务平台--国家科技支撑计划资助项目(编号:2006BAH03B01)(C)北京万方数据股份有限公司
万方数据电子出版社MSP430G2553,I2c接收中断,uart接收中断,共享一个中断向量,无法同时使用? - MSP430(TM)16 位超低功耗 MCU - 德州仪器在线技术支持社区
MSP430G2553,I2c接收中断,uart接收中断,共享一个中断向量,无法同时使用?
发表于1年前
<input type="hidden" id="hGroupID" value="37"
想用TI赠送的MSP430G2 launchpad做个微型四旋翼,iic单独能工作,uart单独也能工作,但同时使用的话,IIC的接收中断和UART的接收中断好像公用一个中断向量,结果只能响应UART的中断,IIC则歇菜了,搞不懂这颗&a href=&.cn/product/cn/MSP430G2553& target=&extwin&>MSP430G2553&/a>这么若吗?&/p>
&p>还有感觉MSP430关于中断的文档很简单,参考资料只有芯片datasheet和user guide两个文档, 关于中断的内容一点也不详细,不想原来&a href=&.cn/product/cn/tms320f2812& target=&extwin&>tms320f2812&/a>,有专门的文档,也很详尽,还是我没找到对的文档?&/p>
&p>是逼我改用st的芯片吗?&/p>&div style=&clear:&>&/div>" />
MSP430G2553,I2c接收中断,uart接收中断,共享一个中断向量,无法同时使用?
此问题尚无答案
All Replies
想用TI赠送的MSP430G2 launchpad做个微型四旋翼,iic单独能工作,uart单独也能工作,但同时使用的话,IIC的接收中断和UART的接收中断好像公用一个中断向量,结果只能响应UART的中断,IIC则歇菜了,搞不懂这颗这么若吗?
还有感觉MSP430关于中断的文档很简单,参考资料只有芯片datasheet和user guide两个文档, 关于中断的内容一点也不详细,不想原来,有专门的文档,也很详尽,还是我没找到对的文档?
是逼我改用st的芯片吗?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元36985分
做四轴会设计到一些算法,这不是msp430的特长。msp430的最大特长是低功耗。
如果必须用msp430做四轴的话,建议选用msp430f5xx/6xx
看你用过,其实用c2000系列作四轴是个很好的选择
昵称:灰小子
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元36985分
MSP430G2 launchpad方面的资料也非常多的。除了官网提供的430ware例有例程,第三方的教材和资料也很多
昵称:灰小子
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
主要是TI赠送了一批 launchpad开发板,想用它来开发些有趣的应用,我看到别人用8位单片机也能用来控制四旋翼,只要做姿态解算和PID控制,我想430处理能力应该够了,这样这些开发板用于教学就更有吸引力。
现在就卡在IIC和UART同时工作上,有高手指点下吗?
如果实在不行,只能用软件模拟IIC工作了,但这样效率又要下降一些。
另外这个20PIN的2553,是不是只能用到3个PWM,控制四旋翼要用4个PWM,缺一个我只能用定时器中断来模拟,还有什么好的办法吗?
要是能提供4个PWM,IIC和UART也都能独立工作,这个launchpad就比较理想了!!!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
终于试成功可以同时uart RX 中断 + i2c RX/TX中断,这款芯片的中断感觉真别扭,稍微复杂的应用,外设使用间就相互掣肘。
既然是推广口袋实验室,找个接口丰富,性能全面点的芯片啊,要不然真玩不出什么花样!
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
請問樓上的前輩! &我目前也碰到中斷的問題!&
可以貼 code 讓我學習學習嗎?
感激了~~~~
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
榜眼18608分
你碰到的是什么中断有问题呢?
我把口袋资料的代码贴出来供你参考:
Michael Qian
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
请问如何做的啊?如何区分这2个中断呢?
You have posted to a forum that requires a moderator to approve posts before they are publicly available.
状元36985分
标志位是不同的
昵称:灰小子
You have posted to a forum that requires a moderator to approve posts before they are publicly available.

我要回帖

更多关于 京东也进军房地产了 的文章

 

随机推荐