基于MSP430简易示波器的设计_第1页
基于MSP430简易示波器的设计_第2页
基于MSP430简易示波器的设计_第3页
基于MSP430简易示波器的设计_第4页
基于MSP430简易示波器的设计_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于MSP430简易示波器的设计自动化1107王诗雨2013.121. 硬件设计1.1 单片机选用MSP430G2553单片机,该单片机具有低功耗的特点,内部自带8路10位AD转换器(ADC10),最高主频可达16Mhz,对于一个简易示波器来说这些特点足够我们使用。1.2 程控放大电路程控放大电路的作用是对大信号进行衰减,对小信号进行放大,保证输入到AD转换器的信号幅度在要求的输入电压范围内,以达到最好的测量与观察效果。采用模拟开关CD4051,配合精密电位器实现多挡垂直分辨率。在MSP430单片机中使用寄存器模块设置通道号,通过写入通道号控制模拟开关选通不同的反馈电阻,从而实现不同的放大倍数

2、,对信号进行不同程度的放大(衰减)。电路图如下:1.3 简易调理电路由于示波器观察信号大多是正负电压信号,考虑到ADC10一般使用的是单极性参考电压(也可以使用寄存器设置双极性参考电压,这样就不需要调理电路了,但最好加一级缓冲)。为了采样到信号的负电压,就需要给该信号叠加直流量,将负电压部分信号抬高至零电平以上,因此采用信号调理电路。电路图如下:1.4 LCD显示电路和按键电路利用LCD的SPI通信模式与MSP430单片机连接,这样可以得到不错的通信速度,并且可以尽可能的减少MSP430引脚的占用,具体电路这里就不给出了。(按照spi连接)利用简单独立按键实现放大倍数调节,采样频率设置等功能即

3、可。2.软件设计2.1 单片机初始化对P2口初始化,打开P2口的中断;将通信方式设置为硬件spi通信模式(注意spi通信在上升沿还是在下降沿开始)。WDTCTL=WDTPW+WDTHOLD; /关看门狗P1OUT = 0x00; / P1 setup for LED & reset output P1DIR |= BIT0 + BIT2 + BIT3 + BIT4 + BIT5; P1SEL = BIT1 + BIT2 + BIT4; P1SEL2 = BIT1 + BIT2 + BIT4; P2REN |= 0x38; P2DIR = 0x07; P2OUT = 0; P2IE |=

4、 0x38; / P1.4 interrupt enabled P2IFG &= 0x38; will=0; UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC + UCCKPH ; / 3-pin, 8-bit SPI master UCA0CTL1 |= UCSSEL_2; / SMCLK UCA0BR0 |= 0x04; / /2 UCA0BR1 = 0; / UCA0MCTL = 0; / No modulation UCA0CTL1 &= UCSWRST; / *Initialize USCI state machine* P1OU

5、T &= BIT5; / Now with SPI signals initialized, P1OUT |= BIT5; / reset slaveADC10初始化,开启参考源和中断。ADC10CTL0 = ADC10SHT_0 + REFON + ADC10ON + ADC10IE;ADC10CTL1 = INCH_6;ADC10AE0 |= 0x40; 显示初始化,对LCD的界面显示初始化。Initial_ILI9340C();Delay_ms(300);LCD_TEST_SingleColor(Black);LCD_TEST_SingleColor(Black);LCD_TES

6、T_PartColor(Blue);for(wh=22; wh<220 ;wh+=10)LCD_draw_Line(wh,39,White);LCD_draw_Line(wh,79,White);LCD_draw_Line(wh,119,White);LCD_draw_Line(wh,159,White);LCD_draw_Line(wh,199,White);LCD_draw_Line(wh,239,White);LCD_draw_Line(wh,279,White);Delay_ms(100);for(co=2; co<320 ;co+=10)LCD_draw_Col(69,c

7、o,White);LCD_draw_Col(119,co,White);LCD_draw_Col(169,co,White);Delay_ms(100);2.2 程控选择程序根据按键的次数,在P2口中断改变will的值,并通过P2口输出给CD4051的ABC开关选择端,对放大倍数进行选择。 #pragma vector=PORT2_VECTOR_interrupt void Port_2(void)if(P2IFG & 0x10)while(0x10 & P2IN);will+;if(will=8)will=7;if(P2IFG & 0x20)while(0x20 &a

8、mp; P2IN);will-;if(will=255)will=0;if(P2IFG & 0x08)while(0x08 & P2IN);chan+;if(chan=4)chan=0; P2IFG &= 0x38; P2OUT=will;2.3 采样频率设置通过改变ADC10CTL1,通过按键次数对应值不同改变ADC10时钟的频率来调节电路的采样频率。 switch(chan) case 0: ADC10CTL1 = INCH_6; break;case 1: ADC10CTL1 |= ADC10DIV0 + ADC10DIV1; break;case 2: ADC1

9、0CTL1 |= ADC10DIV0 + ADC10DIV2; break;case 3: ADC10CTL1 |= ADC10DIV0 + ADC10DIV1 + ADC10DIV2; break;2.4 软件触发程序只有在一定条件下才使lcd刷新,保证每次采集到的波形都从一点开始显示,防止由于每次采集到的点不同导致波形一直移动。ADC10CTL0 |= ENC + ADC10SC; / Sampling and conversion start _bis_SR_register(CPUOFF + GIE); if(cir=0) key1 = ADC10MEM/5; if(cir=1) ke

10、y2 = ADC10MEM/5; if(cir=2) key3 = ADC10MEM/5;if(cir>2 && key1>key2 && key2>key3) /(key1-100)/2)>=(key2-100) temp0=key1; temp1=key2; temp2=key3; tempcir=ADC10MEM/5; ADC10CTL0 &= ENC;2.5 显示刷新程序示波器是一个动态显示过程,因此在过程中可能会引起初始界面被部分覆盖,以此需要定时刷新初始界面。trig+;if(trig%20=0)for(wh=22;

11、wh<220 ;wh+=10)LCD_draw_Line(wh,39,White);LCD_draw_Line(wh,79,White);LCD_draw_Line(wh,119,White);LCD_draw_Line(wh,159,White);LCD_draw_Line(wh,199,White);LCD_draw_Line(wh,239,White);LCD_draw_Line(wh,279,White);Delay_ms(300);for(co=2; co<320 ;co+=10)LCD_draw_Col(69,co,White);LCD_draw_Col(119,co,

12、White);LCD_draw_Col(169,co,White);Delay_ms(300);附:源程序#include "msp430g2553.h" /STC12单片机头文件/颜色定义#define Blue 0x001f#define Yellow0xffe0#define Green 0x07e0#define Black0x0000#define White0xffff#define Red0xf800/引脚定义#defineR_ESET1 P1OUT|=BIT5; /液晶RESET引脚,接单片机IO引脚#define R_ESET0 P1OUT&=BI

13、T5;#defineC_D1P1OUT|=BIT3;/液晶D/CX引脚,数据/命令控制,接单片机IO引脚#defineC_D0 P1OUT&=BIT3;#defineC_S1 P1OUT|=BIT0;/液晶片选CS,P1.4为单片机SPI总线的SS引脚,通过MSTR位配置为IO模式#defineC_S0 P1OUT&=BIT0;unsigned char MST_Data, SLV_Data, wh, temp320, trig=0, key1, key2 ,key3 ,will ,chan=0;unsigned int co,cir;void delay(void) unsi

14、gned int j; for(j=100;j>0;j-);void Delay_us(int value)/延时函数_uswhile (value)value-;void Delay_ms(int value)/延时函数_mswhile (value)Delay_us(999);value-;void LCD_Writ_Bus(char a) /数据写入函数 8位 C_S0; UCA0TXBUF = a; _delay_cycles(50); while (!(IFG2 & UCA0TXIFG); C_S1;void LCD_WRITE_CMD(char cmd)/8 bit

15、C_D0; LCD_Writ_Bus(cmd);void LCD_WRITE_COM_DATA(char com_data)/8 bit C_D1; LCD_Writ_Bus(com_data);void LCD_WRITE_DATA(int a)/16位数据,分两次,每次送8位 C_D1; LCD_Writ_Bus(a>>8); LCD_Writ_Bus(a);/设置绘点窗口,x=0239,y=0319void Address_set(unsigned int x1,unsigned int x2,unsigned int y1,unsigned int y2) LCD_WRIT

16、E_CMD(0x2a); /x轴 LCD_WRITE_DATA(x1); LCD_WRITE_DATA(x2); LCD_WRITE_CMD(0x2b); /y轴 LCD_WRITE_DATA(y1); LCD_WRITE_DATA(y2); LCD_WRITE_CMD(0x2c);void LCD_TEST_SingleColor(int Discolor) int i,j;Address_set(0,239,0,319);for (i=0;i<320;i+)for (j=0;j<240;j+)LCD_WRITE_DATA(Discolor);void LCD_TEST_Part

17、Color(int Discolor) int i,j;Address_set(0,19,0,319);for (i=0;i<320;i+)for (j=0;j<20;j+)LCD_WRITE_DATA(Discolor);Address_set(220,239,0,319);for (i=0;i<320;i+)for (j=220;j<240;j+)LCD_WRITE_DATA(Discolor);/画一条横线void LCD_draw_Line(unsigned int x,unsigned int y,unsigned int color)int i;Addres

18、s_set(x,x+4,y,y);for (i=0;i<5;i+)LCD_WRITE_DATA(color);void LCD_draw_Col(unsigned int x,unsigned int y,unsigned int color)int i;Address_set(x,x,y,y+4);for (i=0;i<5;i+)LCD_WRITE_DATA(color);/液晶主控初始化void Initial_ILI9340C(void) LCD_WRITE_CMD(0xCB); LCD_WRITE_COM_DATA(0x39); LCD_WRITE_COM_DATA(0x2

19、C); LCD_WRITE_COM_DATA(0x00); LCD_WRITE_COM_DATA(0x34); LCD_WRITE_COM_DATA(0x02); LCD_WRITE_CMD(0xCF); LCD_WRITE_COM_DATA(0x00); LCD_WRITE_COM_DATA(0XC1); LCD_WRITE_COM_DATA(0X30); LCD_WRITE_CMD(0xE8); LCD_WRITE_COM_DATA(0x85); LCD_WRITE_COM_DATA(0x00); LCD_WRITE_COM_DATA(0x78); LCD_WRITE_CMD(0xEA);

20、 LCD_WRITE_COM_DATA(0x00); LCD_WRITE_COM_DATA(0x00); LCD_WRITE_CMD(0xED); LCD_WRITE_COM_DATA(0x64); LCD_WRITE_COM_DATA(0x03); LCD_WRITE_COM_DATA(0X12); LCD_WRITE_COM_DATA(0X81); LCD_WRITE_CMD(0xF7); LCD_WRITE_COM_DATA(0x20); LCD_WRITE_CMD(0xC0); /Power control LCD_WRITE_COM_DATA(0x23); /VRH5:0 LCD_W

21、RITE_CMD(0xC1); /Power control LCD_WRITE_COM_DATA(0x10); /SAP2:0;BT3:0 LCD_WRITE_CMD(0xC5); /VCM control LCD_WRITE_COM_DATA(0x3e); /对比度调节 LCD_WRITE_COM_DATA(0x28); LCD_WRITE_CMD(0xC7); /VCM control2 LCD_WRITE_COM_DATA(0x86); /- LCD_WRITE_CMD(0x36); / Memory Access Control LCD_WRITE_COM_DATA(0xC8); L

22、CD_WRITE_CMD(0x3A); LCD_WRITE_COM_DATA(0x55); LCD_WRITE_CMD(0xB1); LCD_WRITE_COM_DATA(0x00); LCD_WRITE_COM_DATA(0x18); LCD_WRITE_CMD(0xB6); / Display Function Control LCD_WRITE_COM_DATA(0x08); LCD_WRITE_COM_DATA(0x82); LCD_WRITE_COM_DATA(0x27); LCD_WRITE_CMD(0xF2); / 3Gamma Function Disable LCD_WRIT

23、E_COM_DATA(0x00); LCD_WRITE_CMD(0x26); /Gamma curve selected LCD_WRITE_COM_DATA(0x01); LCD_WRITE_CMD(0xE0); /Set Gamma LCD_WRITE_COM_DATA(0x0F); LCD_WRITE_COM_DATA(0x31); LCD_WRITE_COM_DATA(0x2B); LCD_WRITE_COM_DATA(0x0C); LCD_WRITE_COM_DATA(0x0E); LCD_WRITE_COM_DATA(0x08); LCD_WRITE_COM_DATA(0x4E);

24、 LCD_WRITE_COM_DATA(0xF1); LCD_WRITE_COM_DATA(0x37); LCD_WRITE_COM_DATA(0x07); LCD_WRITE_COM_DATA(0x10); LCD_WRITE_COM_DATA(0x03); LCD_WRITE_COM_DATA(0x0E); LCD_WRITE_COM_DATA(0x09); LCD_WRITE_COM_DATA(0x00); LCD_WRITE_CMD(0XE1); /Set Gamma LCD_WRITE_COM_DATA(0x00); LCD_WRITE_COM_DATA(0x0E); LCD_WRI

25、TE_COM_DATA(0x14); LCD_WRITE_COM_DATA(0x03); LCD_WRITE_COM_DATA(0x11); LCD_WRITE_COM_DATA(0x07); LCD_WRITE_COM_DATA(0x31); LCD_WRITE_COM_DATA(0xC1); LCD_WRITE_COM_DATA(0x48); LCD_WRITE_COM_DATA(0x08); LCD_WRITE_COM_DATA(0x0F); LCD_WRITE_COM_DATA(0x0C); LCD_WRITE_COM_DATA(0x31); LCD_WRITE_COM_DATA(0x

26、36); LCD_WRITE_COM_DATA(0x0F); LCD_WRITE_CMD(0x11); /Exit Sleep Delay_ms(120); LCD_WRITE_CMD(0x29); /Display on LCD_WRITE_CMD(0x2c);/LCD进入休眠状态void LCD_Sleep_ILI9340C(void) LCD_WRITE_CMD(0x28);/Display off Delay_ms(20); LCD_WRITE_CMD(0x10);/Enter Sleep mode/LCD退出休眠状态void LCD_ExitSleep_ILI9340C(void)

27、LCD_WRITE_CMD(0x11);/Exit Sleep Delay_ms(120); LCD_WRITE_CMD(0x29);/Display on LCD_WRITE_CMD(0x2c);void main()WDTCTL=WDTPW+WDTHOLD; /关看门狗P1OUT = 0x00; / P1 setup for LED & reset output P1DIR |= BIT0 + BIT2 + BIT3 + BIT4 + BIT5; P1SEL = BIT1 + BIT2 + BIT4; P1SEL2 = BIT1 + BIT2 + BIT4; P2REN |= 0x

28、38; P2DIR = 0x07; P2OUT = 0; P2IE |= 0x38; / P1.4 interrupt enabled P2IFG &= 0x38; will=0; UCA0CTL0 |= UCCKPL + UCMSB + UCMST + UCSYNC + UCCKPH ; / 3-pin, 8-bit SPI master UCA0CTL1 |= UCSSEL_2; / SMCLK UCA0BR0 |= 0x04; / /2 UCA0BR1 = 0; / UCA0MCTL = 0; / No modulation UCA0CTL1 &= UCSWRST; /

29、*Initialize USCI state machine* P1OUT &= BIT5; / Now with SPI signals initialized, P1OUT |= BIT5; / reset slave _delay_cycles(75); / Wait for slave to initializeInitial_ILI9340C();Delay_ms(300);LCD_TEST_SingleColor(Black);LCD_TEST_SingleColor(Black);LCD_TEST_PartColor(Blue);for(wh=22; wh<220

30、;wh+=10)LCD_draw_Line(wh,39,White);LCD_draw_Line(wh,79,White);LCD_draw_Line(wh,119,White);LCD_draw_Line(wh,159,White);LCD_draw_Line(wh,199,White);LCD_draw_Line(wh,239,White);LCD_draw_Line(wh,279,White);Delay_ms(100);for(co=2; co<320 ;co+=10)LCD_draw_Col(69,co,White);LCD_draw_Col(119,co,White);LCD

31、_draw_Col(169,co,White);Delay_ms(100);ADC10CTL0 = ADC10SHT_0 + REFON + ADC10ON + ADC10IE; ADC10CTL1 = INCH_6; ADC10AE0 |= 0x40; / PA.1 ADC option selectwhile(1)for(cir=0;cir<320;cir+) ADC10CTL0 |= ENC + ADC10SC; / Sampling and conversion start _bis_SR_register(CPUOFF + GIE); / LPM0, ADC10_ISR wil

32、l force exi if(cir=0) key1 = ADC10MEM/5; if(cir=1) key2 = ADC10MEM/5; if(cir=2) key3 = ADC10MEM/5; if(cir>2 && key1>key2 && key2>key3) /(key1-100)/2)>=(key2-100) temp0=key1; temp1=key2; temp2=key3; tempcir=ADC10MEM/5; ADC10CTL0 &= ENC; switch(chan)case 0: ADC10CTL1 =

33、INCH_6; break;case 1: ADC10CTL1 |= ADC10DIV0 + ADC10DIV1; break;case 2: ADC10CTL1 |= ADC10DIV0 + ADC10DIV2; break;case 3: ADC10CTL1 |= ADC10DIV0 + ADC10DIV1 + ADC10DIV2; break;for(cir=0;cir<320;cir+)Address_set(20+tempcir,20+tempcir,cir,cir);LCD_WRITE_DATA(Yellow);Delay_ms(300);for(cir=0;cir<320;cir+)Address_set(20+tempcir,20+tempcir,cir,cir);LCD_WRITE_DATA(Yellow);Delay_ms(300);for(cir=0;c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论