注册 登录
电子工程世界-论坛 返回首页 EEWORLD首页 频道 EE大学堂 下载中心 Datasheet 专题
梦之旅的个人空间 https://home.eeworld.com.cn/space-uid-217607.html [收藏] [复制] [分享] [RSS]
日志

梦之旅同学EZ430系列学习笔记和智能家居系统项目之内部温度采集和串口显示

已有 2056 次阅读2011-5-25 08:15

     收到板子有几天了,一直没时间弄,昨天弄了一下,就有以下方面的结果,本来说是昨天出测评的,但因为有其他事情,只好今天早上一大早跑过来写测评,上午都有课,希望中午回来时候能够看到惊喜。

     首先,来个项目介绍:

     项目:智能家居系统无线温湿度传感器DHT11传感节点

介绍:利用本EZ430系统完成一个温湿度传感节点功能,在从节点采集DHT11的数据,通过无线把他发到AP节点,然后通过上位机在电脑上面显示。

     上位机界面:准备在FXW451的燃气系统的上位机上面进行修改,把从节点采集到的温度,湿度显示在上位机端。

时间安排:尽量在本星期内完成所有的工作和日记的更新,希望各位帮顶。

     下面接着来下msp430的简介

      MSP430可以说是系出名门~~~是TI的拳头产品。TI很多在中国举办的电子设计之类的比赛都指定只能用430单片机,半导体芯片制造行业~~~TI应该算是大名鼎鼎了~~~~~他的DSP也是很牛的。选用大公司的东西最好的好处就是有强大的技术支持(当然,这可能更要建立在你E文不错的基础上~~)在TI的网站上其实已经有不少模块化的代码参考了,作为TI努力推销的产品,TI对他的支持肯定是少不了的

       MSP430的开发环境还是有挺多的,不过用的最多的应该是IAR嵌入式工作室平台了,简称IAR EW。他对430的版本最新为IAR EW FOR MSP430 V5.2。IAR的开发平台还是很人性化的。国外曾经做过调查,关于工程师做项目,选用芯片,除了价格,功能是否强大等以外,开发环境的功能和易用性也是首当其冲的原因,这也就解释了keil为何能风靡全球~~~IAR的开发环境对比keil可以说是不相上下~~不过可能就是要花一点时间去熟悉一下~~相信你也会爱上IAR EW

一下是摘自网上一些对430的简介~~~其实都差不多~~每一本430的书基本上开头的是这些,大概了解一下就可以了~:

1、MSP430 单片机的发展

MSP430 系列是一个 16 位的、具有精简指令集的、超低功耗的混合型单片机,在 1996 年问世,由于它具有极低的功耗、丰富的片内外设和方便灵活的开发手段,已成为众多单片机系列中一颗耀眼的新星。回忆 MSP430 系列单片机的发展过程,可以看出有这样三个阶段:
开始阶段 从 1996 年推出 MSP430 系列开始到 2000 年初,这个阶段首先推出有 33X 、 32X 、 31X 等几个系列,而后于 2000 年初又推出了 11X 、 11X1 系列。

MSP430 的 33X 、 32X 、 31X 等系列具有 LCD 驱动模块,对提高系统的集成度较有利。每一系列有 ROM 型( C )、 OTP 型( P )、和 EPROM 型( E )等芯片。 EPROM 型的价格昂贵,运行环境温度范围窄,主要用于样机开发。这也表明了这几个系列的开发模式,即:用户可以用 EPROM 型开发样机;用 OTP 型进行小批量生产;而 ROM 型适应大批量生产的产品。
2000 年推出了 11X/11X1 系列。这个系列采用 20 脚封装,内存容量、片上功能和 I/O 引脚数比较少,但是价格比较低廉。

这个时期的 MSP430 已经显露出了它的特低功耗等的一系列技术特点,但也有不尽如人意之处。它的许多重要特性,如:片内串行通信接口、硬件乘法器、足够的 I/O 引脚等,只有 33X 系列才具备。 33X 系列价格较高,比较适合于较为复杂的应用系统。当用户设计需要更多考虑成本时, 33X 并不一定是最适合的。而片内高精度 A/D 转换器又只有 32X 系列才有。

寻找突破,引入 Flash 技术 随着 Flash 技术的迅速发展, TI 公司也将这一技术引入 MSP430 系列中。在 2000 年 7 月推出 F13X/F14X 系列,在 2001 年 7 月到 2002 年又相继推出 F41X 、 F43X 、 F44X 这些全部是 Flash 型单片机。
F41X 单片机是目前应用比较广的单片机,它有 48 个 I/O 口, 96 段 LCD 驱动。 F43X 、 F44X 系列是在 13X 、 14X 的基础上,增加了液晶驱动器,将驱动 LCD 的段数由 3XX 系列的最多 120 段增加到 160 段。并且相应地调整了显示存储器在存储区内的地址,为以后的发展拓展了空间。

MSP430 系列由于具有 Flash 存储器,在系统设计、开发调试及实际应用上都表现出较明显的优点。这是 TI 公司推出具有 Flash 型存储器及 JTAG 边界扫描技术的廉价开发工具 MSP-FET430X110 ,将国际上先进的 JTAG 技术和 Flash 在线编程技术引入 MSP430 。
这种以 Flash 技术与 FET 开发工具组合的开发方式,具有方便、廉价、实用等优点,给用户提供了一个较为理想的样机开发方式。

另外, 2001 年 TI 公司又公布了 BOOTSTRAP 技术,利用它可在烧断熔丝以后只要几根线就可更改并运行内部的程序。这为系统软件的升级提供了又一方便的手段。 BOOTSTRAP 具有很高的保密性,口令可达到 32 个字节的长度。

蓬勃发展阶段 在前一阶段,引进新技术和内部进行调整之后,为 MSP430 的功能扩展打下了良好的基础。于是 TI 公司在 2002 年底和 2003 年期间又陆续推出了 F15X 和 F16X 系列的产品。
在这一新的系列中,有了两个方面的发展。一是从存储器方面来说,将 RAM 容量大大增加,如 F1611 的 RAM 容量增加到了 10KB 。这样一来,希望将实时操作系统( RTOS )引入 MSP430 的,就不会因 RAM 不够而发愁了。二是从外围模块来说,增加了 I 2 C 、 DMA 、 DAC12 和 SVS 等模块。

在 2003 年中, TI 公司还推出了专门用于电量计量的 MSP430FE42X 和用于水表、气表、热表上的具有无磁传感模块的 MSP430FW42X 单片机。我们相信由于 MSP430 的开放性的基本架构和新技术的应用,新的 MSP430 的产品品种必将会不断出现。

2、 MSP430 单片机的特点

MSP430 系列单片机的迅速发展和应用范围的不断扩大,主要取决于以下的特点。

强大的处理能力 MSP430 系列单片机是一个 16 位的单片机,采用了精简指令集( RISC )结构,具有丰富的寻址方式( 7 种源操作数寻址、 4 种目的操作数寻址)、简洁的 27 条内核指令以及大量的模拟指令;大量的寄存器以及片内数据存储器都可参加多种运算;还有高效的查表处理指令;有较高的处理速度,在 8MHz 晶体驱动下指令周期为 125 ns 。这些特点保证了可编制出高效率的源程序。

在运算速度方面, MSP430 系列单片机能在 8MHz 晶体的驱动下,实现 125ns 的指令周期。 16 位的数据宽度、 125ns 的指令周期以及多功能的硬件乘法器(能实现乘加)相配合,能实现数字信号处理的某些算法(如 FFT 等)。

MSP430 系列单片机的中断源较多,并且可以任意嵌套,使用时灵活方便。当系统处于省电的备用状态时,用中断请求将它唤醒只用 6us 。

超低功耗 MSP430 单片机之所以有超低的功耗,是因为其在降低芯片的电源电压及灵活而可控的运行时钟方面都有其独到之处。

首先, MSP430 系列单片机的电源电压采用的是 1.8~3.6V 电压。因而可使其在 1MHz 的时钟条件下运行时, 芯片的电流会在 200~400uA 左右,时钟关断模式的最低功耗只有 0.1uA 。
其次,独特的时钟系统设计。在 MSP430 系列中有两个不同的系统时钟系统:基本时钟系统和锁频环( FLL 和 FLL+ )时钟系统或 DCO 数字振荡器时钟系统。有的使用一个晶体振荡器( 32768Hz ) , 有的使用两个晶体振荡器)。由系统时钟系统产生 CPU 和各功能所需的时钟。并且这些时钟可以在指令的控制下,打开和关闭,从而实现对总体功耗的控制。
由于系统运行时打开的功能模块不同,即采用不同的工作模式,芯片的功耗有着显著的不同。在系统中共有一种活动模式( AM )和五种低功耗模式( LPM0~LPM4 )。在等待方式下,耗电为 0.7uA ,在节电方式下,最低可达 0.1uA 。

系统工作稳定 上电复位后,首先由 DCOCLK 启动 CPU ,以保证程序从正确的位置开始执行,保证晶体振荡器有足够的起振及稳定时间。然后软件可设置适当的寄存器的控制位来确定最后的系统时钟频率。如果晶体振荡器在用做 CPU 时钟 MCLK 时发生故障, DCO 会自动启动,以保证系统正常工作;如果程序跑飞,可用看门狗将其复位。

丰富的片上外围模块 MSP430 系列单片机的各成员都集成了较丰富的片内外设。它们分别是看门狗( WDT )、模拟比较器 A 、定时器 A ( Timer_A )、定时器 B ( Timer_B )、串口 0 、 1 ( USART0 、 1 )、硬件乘法器、液晶驱动器、 10 位 /12 位 ADC 、 I 2 C 总线直接数据存取( DMA )、端口 O ( P0 )、端口 1~6 ( P1~P6 )、基本定时器( Basic Timer )等的一些外围模块的不同组合。其中,看门狗可以使程序失控时迅速复位;模拟比较器进行模拟电压的比较,配合定时器,可设计出 A/D 转换器; 16 位定时器( Timer_A 和 Timer_B )具有捕获 / 比较功能,大量的捕获 / 比较寄存器,可用于事件计数、时序发生、 PWM 等;有的器件更具有可实现异步、同步及多址访问串行通信接口可方便的实现多机通信等应用;具有较多的 I/O 端口,最多达 6*8 条 I/O 口线; P0 、 P1 、 P2 端口能够接收外部上升沿或下降沿的中断输入; 12/14 位硬件 A/D 转换器有较高的转换速率,最高可达 200kbps ,能够满足大多数数据采集应用;能直接驱动液晶多达 160 段;实现两路的 12 位 D/A 转换;硬件 I 2 C 串行总线接口实现存储器串行扩展;以及为了增加数据传输速度,而采用直接数据传输( DMA )模块。 MSP430 系列单片机的这些片内外设为系统的单片解决方案提供了极大的方便。

方便高效的开发环境 目前 MSP430 系列有 OPT 型、 FLASH 型和 ROM 型三种类型的器件,这些器件的开发手段不同。对于 OPT 型和 ROM 型的器件是使用仿真器开发成功之后在烧写或掩膜芯片;对于 FLASH 型则有十分方便的开发调试环境,因为器件片内有 JTAG 调试接口,还有可电擦写的 FLASH 存储器,因此采用先下载程序到 FLASH 内,再在器件内通过软件控制程序的运行,由 JTAG 接口读取片内信息供设计者调试使用的方法进行开发。这种方式只需要一台 PC 机和一个 JTAG 调试器,而不需要仿真器和编程器。开发语言有汇编语言和 C 语言。
MSP430 单片机目前主要以 FLASH 型为主。

适应工业级运行环境 MSP430 系列器件均为工业级的,运行环境温度为 -40~+ 85 摄氏度 ,所设计的产品适合用于工业环境下。

⒊ MAP430 系列与 89C 51 系列的比较

我国的多数读者对 89C 51 系列的单片机是很熟悉的,为了加深对 MSP430 系列单片机的认识,我们不妨将两者进行一下比较。

首先, 89C 51 单片机是 8 位单片机。其指令是采用的被称为“ CISC ”的复杂指令集,共具有 111 条指令。而 MSP430 单片机是 16 位的单片机,采用了精简指令集( RISC )结构,只有简洁的 27 条指令,大量的指令则是模拟指令,众多的寄存器以及片内数据存储器都可参加多种运算。这些内核指令均为单周期指令,功能强,运行的速度快。

其次, 89C 51 单片机本身的电源电压是 5 伏,有两种低功耗方式:待机方式和掉电方式。正常情况下消耗的电流为 24mA ,在掉电状态下,其耗电电流仍为 3mA ;即使在掉电方式下,电源电压可以下降到 2V ,但是为了保存内部 RAM 中的数据,还需要提供约 50uA 的电流。而 MSP430 系列单片机在低功耗方面的优越之处,则是 89C 51 系列不可比拟的。正因为如此, MSP430 更适合应用于使用电池供电的仪器、仪表类产品中。

再者, 89C 51 系列单片机由于其内部总线是 8 位的,其内部功能模块基本上都是 8 位的虽然经过各种努力其内部功能模块有了显著增加,但是受其结构本身的限制很大,尤其模拟功能部件的增加更显困难。 MSP430 系列其基本架构是 16 位的,同时在其内部的数据总线经过转换还存在 8 位的总线,在加上本身就是混合型的结构,因而对它这样的开放型的架构来说,无论扩展 8 位的功能模块,还是 16 位的功能模块,即使扩展模 / 数转换或数 / 模转换这类的功能模块也是很方便的。这也就是为什么 MSP430 系列产品和其中功能部件迅速增加的原因。

    最后,就是在开发工具上面。对于 89C 51 来说,由于它是最早进入中国的单片机,人们对它在熟悉不过了,再加上我国各方人士的努力,创造了不少适合我们使用的开发工具。但是如何实现在线编程还是一个很大的问题。对于 MSP430 系列而言,由于引进了 Flash 型程序存储器和 JTAG 技术,不仅使开发工具变得简便,而且价格也相对低廉,并且还可以实现在线编程。


   好了,MSP430就介绍到这里吧,下面来一段我今天主要内容

  本次是利用ADC10模块采集内置温度传感器的温度,并用串口显示,来个ADC10介绍 

ADC10模块的特点是:

最大转换速率200ksps

   固定的10位转换;

   具有采样保持功能,并可选采样周期;

   通过软件或Timer_A初始化转换

   软件选择片内参考电压(1.5V 2.5V

    软件选择内部或外部参考电压;

   8个外部输入通道;

   内部转换通道:温度检测,VCC,外部参考(+,—)

   可选转换时钟源;

   单通道单次,单通道多次,序列通道单次和序列通道多次转换模式;

     ADC内核和参考电压都可以单独关闭;

   自动存储转换结果的数据转换控制器;

转换公式
我们取 IntDegC= ((temp - 673) * 4230) / 1024
然后再来一段串口寄存器的介绍

UxCTL控制寄存器

7:PENA

6:PEV

5:SPB

4:CHAR

3:LISTEN

2:SYNC

1:MM

0:SWRST

UxTCTL发送控制寄存器

6:CKPL

5:SSEL1

4:SSEL0

3:URXSE

2:TXWAKE

0:TXEPT

URCTL接收控制寄存器

7:FE

6:PE

5:OE

4:BRK

3:URXEIE

2:URXWIE

1:RXWAKE

0:RXERR

UxBR0UxBR1波特率选择寄存器

这两个寄存器是用于存放波特率分频因子的整数部分。

UxBR0波特率选择寄存器0

UxBR1波特率选择寄存器1

UxMCTL波特率调整控制寄存器

M7

M6

M5

M4

M3

M2

M1

M0

呵呵,时间不允许,先弄到这里先,希望大家能顶,下面介绍下程序,采集到温度时候,每开一次ad,红色的灯就会发光一次,呵呵,你可以看到红色的发光二级管在不断的闪烁,同时电脑上不断的跳出当前温度,这个没有没有加其他处理,温度最好用个中植滤波等,因为这样跳动太快了,另外我用了该430最高频率16MHZ,呵呵,上代码供大家拍砖,另外回来希望能够看到回复,呵呵。

#include "msp430x22x4.h"

#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long

long temp;

void delay_ms(ulong i)
{
for(;i>0;i--)
{
 __delay_cycles(16000);
}
}
void delay_us(ulong i)
{
for(;i>0;i--)
{
__delay_cycles(16);
}
}
//volatile long IntDegF;
volatile long IntDegC;

void put(uchar *x)
{
  while(*x)
  {
    while (!(IFG2&UCA0TXIFG));                // USCI_A0 TX buffer ready? 
    UCA0TXBUF=*x;
    x++;
  }
}
void wellcome()
{
 put("*************************************\n");
 put("********      hello,eeworld!   ********\n");
 put("********    this is mengzhilv!    ********\n");
 put("********  Copyright @ 2011   ********\n");
 put("*************************************\n\n");
 delay_ms(10);
}

void main(void)
{
  uchar buf[4],i;
  long value=0;
  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  BCSCTL1 = CALBC1_16MHZ;                    // Set DCO
  DCOCTL = CALDCO_16MHZ;
  P1DIR |=BIT0;
  P3SEL = 0x30;                             // P3.4,5 = USCI_A0 TXD/RXD
  P3DIR |=BIT4;                             //P3.4为输出方向
  //Baud rate divider with 1MHz = 1MHz/9600 = ~104.2
  UCA0CTL1 |= UCSSEL_2;                     // SMCLK
  UCA0BR0 = 0x82;                            // 16MHz 9600
  UCA0BR1 = 0x06;                              // 16MHz 9600
  UCA0MCTL = UCBRS1;                        // Modulation UCBRSx = 1
  UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**
  ADC10CTL1 = INCH_10 + ADC10DIV_3;         // Temp Sensor ADC10CLK/4
  ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;
  delay_us(100);
  wellcome();
 
  while(1)
  {
    for(i=0;i<10;i++)
    {
      ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start
      __bis_SR_register(CPUOFF + GIE);        // LPM0 with interrupts enabled
        temp = ADC10MEM;
      IntDegC = ((temp - 673) * 4230) / 1024;
      value+=IntDegC;
    }
    value/=10;
    buf[0]=value/100+0x30;
    buf[1]=value/10%10+0x30;
    buf[2]='.';
    buf[3]=value%10+0x30;
    put(buf);
    P1OUT&=~BIT0;
    delay_ms(100);
    __no_operation();                       // SET BREAKPOINT HERE
  }
}

// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
  P1OUT|=BIT0;
  __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
}

测试效果图:

发表评论 评论 (1 个评论)
回复 在路上的旁观者 2013-4-13 00:25
好东西

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

热门文章