在数据采集和测量仪器尤其是便携式设备中,数据存储和传输是不可避免的问题,近年来TI公司推出的低功耗微控制器MSP430,在仪器设计和制造领域引起巨大变革,新型控制器和大容量串行存储器的应用大大提高产品了的性能。本文主要解决两个问题
1、解决经过MSP430采集后的数据与EEPROM24C256的数据接口问题,也就是数据存储问题;
2、解决EEPROM与上位机(普通微机)的数据通信问题,也就是存储后的数据上传问题。
首先对主要的集成电路做简单介绍
MSP430F449简介
MSP430F449是MSP430系列中的一种,MSP430系列是一种具有集成度高,功能丰富、功耗低等特点的16位单片机。它的集成调试环境Embedded Workbench 提供了良好的C语言开发平台。设计中基于程序的复杂性和程序容量大的要求选择了MSP430F449,这款芯片具有64K程序存储器,可以满足大部分复杂控制的需要;它的封装100-PIN QFP具有良好的互换性,与MSP430F437 、MSP430F435等芯片具有完全一致的管脚可以在程序量上进行合理选择。
24C256简介
24C256是支持I2C协议的串行EEPROM,容量32768字节。
以上是24C256的管脚图,其中A0,A1,A2构成存储器的物理地址,作为I2C总线上区分不同存储器的控制地址,可以在I2C总线上同时连接8个设备。 WP是写保护,高电平将禁止对器件的写操作;SCL和SDA是数据传输的控制线,其中SCL是时钟,SDA是双向数据线,用来完成数据的写入和读出,数据的传输按照I2C协议的要求由时钟端SCL配合共同完成。
CP2102简介
CP2102是USB到UART的桥接电路,完成USB数据和UART数据的转换,电路连接简单,数据传输可靠,把下位机串行数据转换成USB数据格式,方便实现数据通信,在上位机上通过运行该芯片的驱动程序把USB数据可以按照简单的串口进行读写操作编程简单,操作灵活。
图1 MSP430F449 接口原理图
以上是MSP430F449与EEPROM以及CP2102的接口原理图,本文重点在于介绍数据采集过程完成以后的数据存贮和数据传输。
数据的采集多种多样,可以经过片内的ADC转换器对模拟量进行采集,也可以通过独立的端口控制线对特殊的传感器比如温度传感器、压力传感器等进行数据转换,这不作为本文介绍的内容。本文主要是针对不同的采集过程完成后数据的存储和传输处理。
数据自动存储的客观要求
在许多测量过程中,不仅要求读取简单的仪表值,而且还需要对一段时间的数据进行科学的分析和处理以取得预测和分析的目的。在这种情况下,可能要求测量时间长,采集要求自动进行,无需人工值守,所以数据必须自动存储;另一个原因,采集数据的频率比较高,人的观察不能满足实际需要,这就要求对采集的数据进行有效的存储。
集成电路合理选择
有很多大容量的FLASH芯片已经得到广泛应用,但是这类芯片口线较多,需要占用较多的控制器资源,在控制外围器件多,接口复杂的情况下,特别是便携式仪器功能全、体积小,为了精简外围电路,在不影响存储量的情况下,具有I2C接口的串行EEPROM就成为了最佳选择。
24C256程序控制原理
24C256是具有I2C接口的512x64存储器,在数据的存储过程中除了遵循I2C协议必须的逻辑以外,一个最容易忽视并且最容易导致出错的问题就是存储地址问题。
24C256的数据容量是32768,即可以存储的有效字节数。所以它的地址是16位整型数,有效范围是0~32768,数据字节为单位存储,在16位地址其中有效数据只有15位,低6(0~5)位地址表示的容量是0~63,然后连续的9(6~14)位地址表示页码的范围是0~511,在数据连续存储过程中,相同的页面内,存储地址自动完成累加过程;数据在不同页面的存储时,地址不能自动累加,如果不做正确处理,数据将从本页开始的地址重新开始覆盖已经存在的数据。例如,地址是63(二进制码111111)表示的是第0页的最后一个存储空间,地址64(二进制码1,000000)表示第1页最开始的存储空间。在当前存储地址是63时如果该器件处于连续存储模式下,数据将出错。
原因是什么呢? 24C256支持数据的连续存储,最大的存贮数量是64即一页的内容,如果在地址选择上超过了这个限制,数据将会覆盖本页开始的位置重新存储,这就造成数据的错误,在使用上,虽然数据是分页存储的,但在形式上是连续数据,所以存储中不需要特意区分页地址和页内地址。
在连续存储中,尽管数据每次存储的数量小于64,数据也可能出错,例如每次存储数量为11,地址的变化是0,11,22,33,44,55,66……,看上去没有什么问题,地址是按照每次11递增的,然而存储的结果还是出错了,原因是什么呢?在地址55开始的空间无法提供连续11个页内存储空间,当地址增加到63以后数据又从该页0地址重新开始,从而导致数据储存的错误。有效的解决办法是如果使用连续存储模式,地址的安排上要使存储块的大小为64,32,16,8,4,2此外都不能使用连续地址存储。如果数据采集中的有效数据位小于64,比如每次采集的结果是30字节,在连续存储模式下要按照32为单位存储,不足的字节补零处理。
以下是24C256数据传输基本控制模块
延时处理模块
void IIC_Delay(void)
{
_NOP();
_NOP();
_NOP();
}
Ø 启动I2C模块
void start_IIC(void) // 启动I2
{
P2OUT&=0xf9; //设置P2输出
P2DIR&=0XFD; //SDA=1, 上拉电阻使得P2.1为H,FD=1111,1101
P2DIR&=0XFB; //SCL=1 FB=1111,1011
P2DIR|=0X02; // SDA=0
P2DIR|=0X04; // SCL=0
}[page]
Ø 停止I2C模块
void stop_IIC(void) //
{
P2DIR|=0X02;//SDA=0
IIC_Delay();
P2DIR&=0XFB;//SCL=1 FB=1111,1011
P2DIR&=0XFD;//SDA=1, 上拉电阻使得P2.1为H,FD=1111,1101
IIC_Delay();
P2DIR|=0X04;// SCL=0
}
Ø 发送 “ 0”模块
void send_zero(void) //
{
P2DIR|=0X02;// SDA=0
IIC_Delay();
P2DIR&=0XFB;//SCL=1 FB=1111,1011
IIC_Delay();
P2DIR|=0X04;// SCL=0
}
Ø 发送 1模块
void send_one(void) //
{
P2DIR&=0XFD;//SDA=1, 上拉电阻使得P2.1为H,FD=1111,1101
IIC_Delay();
P2DIR&=0XFB;//SCL=1 FB=1111,1011
IIC_Delay();
P2DIR|=0X04;// SCL=0
}
Ø 发送单字符数据
void send _char(unsigned char data_out) //
{
unsigned char i,tmp=0x80;
for(i=0;i《8;i++)
{
if((data_out & tmp)》0)
send_one();
else
send_zero();
tmp/=2;
}
}
Ø 读单字符数据
unsigned char read_char(void)
{
unsigned char i,tmp=0x80;
unsigned char data1=0;
for (i=0;i《8;i++)
{
P2DIR&=0XFD;//SDA=1, 11111101
IIC_Delay();//
P2DIR&=0XFB;//SCL=1 FB=1111,1011
IIC_Delay();
if((P2IN&0x02)》0x00)
{
data1|=tmp;
}
P2DIR|=0X04;// SCL=0
IIC_Delay();
tmp/=2;
}
return data1;
}
Ø 检查应答信号模块
void iic_ACK(void)
{
ack_flag=0x00;
P2DIR&=0XFD;//SDA=1, FD=1111,1101
IIC_Delay();
P2DIR&=0XFB;//SCL=1 FB=1111,1011
IIC_Delay();
while((P2IN&BIT1)==BIT1);
P2DIR|=0X04;// SCL=0
IIC_Delay();
}[page]
Ø 拒绝应答模块
void iic_NACK(void) {
P2DIR&=0XFD;//SDA=1,
IIC_Delay();
P2DIR&=0XFB;//SCL=1 FB=1111,1011
IIC_Delay();
P2DIR|=0X04;// SCL=0
IIC_Delay();
P2DIR|=0X02;// SDA=0
IIC_Delay();//
}
Ø 写连续数据模块
void WriteNbyte(unsigned char *p,unsigned int addr,unsigned char number)
{
start_IIC();
send_char(0xa2);
iic_ACK();
send_char(addr/256); //high address byte
iic_ACK();
send_char(addr%256);
iic_ACK();
do
{
send_char(*p);
p++;
iic_ACK();
}
while(--number);
stop_IIC();
delay(10);
}
Ø 发送应答模块:ACK (LOW)
void S_ACK(void)
{
P2DIR|=0X02;// SDA=0
IIC_Delay();
P2DIR&=0XFB;//SCL=1 FB=1111,1011
IIC_Delay();
P2DIR|=0X04;// SCL=0
IIC_Delay();
}
Ø 连续读字符模块
void ReadNbyte(unsigned char *p,unsigned int addr,unsigned char number)
{
start_IIC();
send_char(0xa2);
iic_ACK();
send_char(addr/256);
iic_ACK();
send_char(addr%256);
iic_ACK();
start_IIC();
send_char(0xa3);
iic_ACK();
do
{
*p=read_char();
p++;
if(number!=1)
S_ACK(); //send ACK
}
while(--number);
iic_NACK();
stop_IIC();
}
数据的传输
数据传输是存储在EEPROM中的数据到达计算机的有效途径,数据上传到计算机最常用的是串行(RS232)接口,现在由于USB计数的不断成熟,通过USB可以方便快捷实现数据传输,而且可以满足速率和设备外观的要求,但是USB的驱动程序设计是比较复杂的工作,本例中使用简单的桥接电路,把UART接口的数据经过CP2102的桥接,直接实现数据的USB转换,从430F449异步串口输出的数据自动转化为符合USB协议的数据直接连接到计算机的USB口,上位机应用程序通过CP2102的驱动程序可以象操作串口一样直接读写端口数据。
结论
以上的硬件设计比较简单可靠,可以照搬到同类型的控制芯片上,软件代码也同样具有较好的移植性,只要把控制时钟和数据端口和程序软件设置相一致即可。
上一篇:MSP430F522x关键设计要诀详解
下一篇:基于MSP430系列单片机快速开发红外体温检测仪原型机
推荐阅读
史海拾趣
Abilis Systems公司是一家专注于数字视频和数字广播领域的半导体公司,以下是该公司发展的五个相关故事:
公司成立和初期发展: Abilis Systems公司成立于2004年,总部位于法国索恩-卢瓦尔省的克勒拉克。公司成立之初,致力于研发数字视频和数字广播领域的创新技术,旨在提供先进的芯片解决方案。
技术创新和产品推出: 在成立后的几年里,Abilis Systems公司不断进行技术创新,并推出了一系列创新的数字视频和数字广播芯片产品。这些产品包括数字电视接收器和解调器、数字广播接收器等,为客户提供了高性能和高度集成的解决方案。
市场拓展和国际合作: 随着产品技术的不断成熟和市场需求的增长,Abilis Systems积极拓展国际市场,并与全球各地的客户建立了合作关系。公司的产品被广泛应用于数字电视、数字广播、卫星电视等领域,赢得了客户的信赖和认可。
并购和战略合作: 为了进一步加强技术实力和扩大市场份额,Abilis Systems公司进行了一系列并购和战略合作。通过收购具有相关技术和市场资源的企业,公司拓展了产品线,并加强了在数字视频和数字广播领域的领先地位。
未来展望和发展方向: Abilis Systems将继续致力于技术创新和产品升级,加强在数字视频和数字广播领域的研发投入。公司将不断推出符合市场需求的新产品和解决方案,为客户提供更优质的服务和支持。同时,公司还将积极参与行业标准制定和国际合作,推动数字视频和数字广播技术的发展和应用。
随着全球对可再生能源的日益关注,风电行业得到了迅速发展。Altech公司紧跟时代步伐,投入大量资源研发铝合金风电线导体。这种新型导体材料不仅具有优异的导电性能,还具备出色的耐候性和抗腐蚀性,极大地提高了风电设备的运行效率和稳定性。
自1994年(部分资料显示为1993年,但此处采用最新信息)成立以来,港源公司始终将技术创新视为企业发展的核心驱动力。公司专注于轻触开关、微动开关、AC/DC插座、变压器等开关零组件产品的研发,通过引进国内外先进技术,并自主成功研发了自动化生产设备和检测设备,实现了生产自动化,大幅提升了产品质量和生产效率。港源公司还积极参与国际技术交流与合作,与众多行业标杆客户长期紧密合作,能够尽早了解市场需求,快速响应并推出符合行业标准的新产品,从而引领了电子开关行业的发展方向。
1902年,Joseph C. Belden在美国伊利诺伊州芝加哥创立了Belden公司。在创立初期,公司主要生产电线和电缆产品,并逐渐在行业内崭露头角。1905年,经过大量的实验和研究,Belden公司成功研发出“Beldenamel”绝缘材料,这种灵活的搪瓷绝缘材料极大地提升了线缆的性能和可靠性,为公司的早期发展奠定了坚实的基础。
“绿色陶瓷”公司以其环保理念为核心,致力于研发和生产环保型陶瓷电子材料。该公司采用可再生资源和低能耗生产工艺,成功降低了产品对环境的影响。同时,绿色陶瓷还积极推广循环经济模式,通过回收再利用废旧陶瓷材料,实现了资源的最大化利用。这一环保理念不仅赢得了消费者的青睐,也为公司在电子行业的可持续发展奠定了坚实基础。
面对日益激烈的国际竞争,Eris Tech开始实施全球化战略。公司通过在海外设立研发中心、生产基地和销售网络,加强与国际市场的联系和合作。同时,Eris Tech还积极参与国际标准的制定和技术交流活动,提高了公司的国际影响力和竞争力。随着全球化战略的深入实施,Eris Tech的产品已经远销全球多个国家和地区。
全球首发: 可以永远免费观看网络高清电视的"IPTV机顶盒+网络高清播放机" 本帖最后由 jameswangsynnex 于 2015-3-3 19:59 编辑 同类产品独家卖点: 1.比中国电信IPTV包年业务更超值实惠! * 电信IPTV(深圳)包年1440元, 租一个IP机顶盒给你, 只有国内的不到30个台. * 而你只需要购买一台该IP机顶盒, 个人就能定制或者手动 ...… 查看全部问答∨ |
|
真诚寻找北京创业合伙人,方向为自动化人机界面产品及服务,多年从事的行业,特点是:技术含量低,但门槛高,投资风险低,回报率很高,发展前景广阔,市场容量大,我们追求稳步发展,目前刚成立,本人小公司运营经验很丰富,创业方向已经选好(经过 ...… 查看全部问答∨ |
|
看到例程说load ram之后,reset cpu,再go main, 可是load之后,resetcpu就提示下列错误: Trouble Halting Target CPU: Error 0x00000024/-1031 Error during: Register, Execution, Device driver: Problem with the Emulation Con ...… 查看全部问答∨ |
|
在无线传感器设计传输信息的可靠性与安全性,通过软件对传输数据的信息进行加密是以一种对信息安全性的方法,其中WEP(有线对等加密算法)是一种简易的对无线传感器网络的数据加密的操作。… 查看全部问答∨ |
|