15530|21

9

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

msp430g2553内部AD采集正弦波幅值的程序!!急啊!! [复制链接]

msp430g2553内部AD(10位)采集正弦波幅值的程序!!!电子大赛 ,急啊!!!

最新回复

大神,你好,能不能给我一份2553用矩阵驱动12864的程序  详情 回复 发表于 2016-7-26 11:07
 
点赞 关注

回复
举报

18

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
同求,楼主有了给我发一份好吗 谢了
 
 

回复

182

帖子

0

TA的资源

一粒金砂(高级)

板凳
 
可以搞一个峰值检波电路啊!就是把交流转化为直流,那样就好办多了~

点评

亲,你有这样的电路吗?  详情 回复 发表于 2012-8-5 23:03
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

4
 

回复 板凳 重邮king 的帖子

亲,你有这样的电路吗?

点评

:Sweat: 这些电路去网上一搜就有啊,很多的!:)  详情 回复 发表于 2012-8-6 06:26
 
 
 

回复

182

帖子

0

TA的资源

一粒金砂(高级)

5
 

回复 4楼 李晓卡 的帖子

这些电路去网上一搜就有啊,很多的!

点评

知道啦 ,谢谢啦!:)  详情 回复 发表于 2012-8-6 14:17
 
 
 

回复

9

帖子

0

TA的资源

一粒金砂(初级)

6
 

回复 5楼 重邮king 的帖子

知道啦 ,谢谢啦!
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

7
 
如果测得正弦频率不是特别大,可以直接用AD采,取其中的最大值,就可以搞定。不过最好把负电压去掉,会影响采样精度。我就是这样搞得。

点评

你好,有相关的代码吗? 可以给我发一份吗 谢谢了~~ 263339458@qq.com  详情 回复 发表于 2012-8-6 17:35
 
 
 

回复

18

帖子

0

TA的资源

一粒金砂(中级)

8
 

回复 7楼 armahc 的帖子

你好,有相关的代码吗?  可以给我发一份吗  谢谢了~~
263339458@qq.com
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 

回复楼主

给我一份吧657696893@qq.com
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

10
 
#include "msp430g2553.h"
#define uint unsigned int
#define uchar unsigned char
#define ulong unsigned long

uint aver[64]={0};
uchar flag=0;
uchar zifu[14]={"0123456789ux=z"};
uint maxaver=0;
long dis=0;
double max=0,maxr=0;

#define SID BIT3
#define SCLK BIT2
#define LCDPORT P1OUT
#define SID_1 LCDPORT |= SID
#define SID_0 LCDPORT &= ~SID
#define SCLK_1 LCDPORT |= SCLK
#define SCLK_0 LCDPORT &= ~SCLK


void delay(unsigned char ms)
{
        unsigned char i,j;
        for(i=ms;i>0;i--)
                for(j=120;j>0;j--);
}
/***********************************************************
*名 称:LCD_Write_cmd()
*功 能:写一个命令到LCD12864
*入口参数:cmd:待写入的命令,无符号字节形式
*出口参数:无
*说 明:写入命令时,RW=0,RS=0 扩展成24位串行发送
*格 式:11111 RW0 RS 0 xxxx0000 xxxx0000
* |最高的字节 |命令的bit7~4|命令的bit3~0|
***********************************************************/
void write_cmd(uchar cmd)
{
        uchar i;
        uchar i_data;
        i_data=0xf8;
        SCLK_0;
        for(i=0;i<8;i++)
        {
                SID_0;
                if(i_data&0x80)
                        SID_1 ;
                _delay_cycles(100);
                SCLK_0;
                SCLK_1;
                _delay_cycles(10);
                i_data<<=1;
        }
        i_data=cmd;
        i_data&=0xf0;
        for(i=0;i<8;i++)
        {
                SID_0;
                if(i_data&0x80)
                SID_1 ;
                _delay_cycles(100);
                SCLK_0;
                SCLK_1;
                _delay_cycles(10);
                i_data<<=1;
        }
        i_data=cmd;
        i_data<<=4;
        for(i=0;i<8;i++)
        {
                SID_0;
                if(i_data&0x80)
                        SID_1 ;
                _delay_cycles(100);
                SCLK_0;
                SCLK_1;
                _delay_cycles(10);
                i_data<<=1;
        }
        _delay_cycles(100);
}
/***********************************************************
*名 称:LCD_Write_Byte()
*功 能:向LCD12864写入一个字节数据
*入口参数:byte:待写入的字符,无符号形式
*出口参数:无
*范 例:LCD_Write_Byte('F') //写入字符'F'
***********************************************************/
void write_dat(uchar dat)
{
        uchar i;
        uchar i_data;
        i_data=0xfa;
        SCLK_0;
        for(i=0;i<8;i++)
        {
                SID_0;
                if(i_data&0x80)
                        SID_1 ;
                _delay_cycles(100);
                SCLK_0;
                SCLK_1;
                _delay_cycles(10);
                i_data<<=1;
        }
        i_data=dat;
        i_data&=0xf0;
        for(i=0;i<8;i++)
        {
                SID_0;
                if(i_data&0x80)
                        SID_1 ;
                i_data<<=1;
                _delay_cycles(100);
                SCLK_0;
                SCLK_1;
                _delay_cycles(10);
        }
        i_data=dat;
        i_data<<=4;
        for(i=0;i<8;i++)
        {
                SID_0;
                if(i_data&0x80)
                        SID_1 ;
                i_data<<=1;
                _delay_cycles(100);
                SCLK_0;
                SCLK_1;
                _delay_cycles(10);
        }
        _delay_cycles(100);
}
/***********************************************************
*名 称:LCD_pos()
*功 能:设置液晶的显示位置
*入口参数:x:第几行,1~4对应第1行~第4行
* y:第几列,0~15对应第1列~第16列
*出口参数:无
*范 例:LCD_pos(2,3) //第二行,第四列
***********************************************************/
void lcd_pos(uchar x,uchar y)
{
        uchar pos;
        switch(x)
        {
                case 1:pos=0x80;break;
                case 2:pos=0x90;break;
                case 3:pos=0x88;break;
                case 4:pos=0x98;break;
                default:pos=0x80;
        }
        pos += y;
        write_cmd(pos);
}
void LCD_init(void)
{
        write_cmd(0x30);
        delay(5);
        write_cmd(0x0C);
        delay(5);
        write_cmd(0x01);
        delay(5);
        write_cmd(0x02);
        delay(5);
}
void Sys_clock_init(void)
{
        uint i=0;
        BCSCTL1 |= CALBC1_16MHZ;
        DCOCTL |= CALDCO_16MHZ;
        for(i=0;i<65535;i++);
        BCSCTL2 |= SELM_0;
        BCSCTL2 |= DIVS_0;
}
void AD_init(void)
{
        ADC10CTL0 = ADC10ON + ADC10IE +MSC + ADC10SHT_3;
        ADC10CTL1 |= CONSEQ_3 + INCH_1;;
        ADC10AE0 |= BIT0+BIT1;
        ADC10DTC1 = 0x40;
}
void IO_init(void)
{
        //P1REN |= BIT0+BIT1;
        //P1OUT =0x00;
        //P1DIR |= BIT0+BIT1;

        //P1DIR |=BIT0+BIT1+BIT2+BIT3;
        P1DIR = 0x0C;

}

void jisuan()
{
        uchar j;

        maxr=0;
        maxaver=0;

        for(j=0;j<64;j+=2)
        {
                if(aver[j]>maxaver && aver[j]<1024)
                        maxaver=aver[j];
        }
        maxr=(maxaver*3.56)/1023;
        max=maxr*10000;
        dis=max;

        lcd_pos(2,2);

        write_dat(zifu[dis/10000]);
        write_dat('.');
        write_dat(zifu[dis/1000%10]);
        write_dat(zifu[dis/100%10]);
        write_dat(zifu[dis/10%10]);
        write_dat(zifu[dis%10]);
        write_dat('V');

        maxr=0;
        maxaver=0;
        for(j=1;j<64;j+=2)
        {
                        if(aver[j]>maxaver && aver[j]<1024)
                                maxaver=aver[j];
        }
        maxr=(maxaver*3.56)/1023;
        max=maxr*10000;
        dis=max;
        lcd_pos(4,2);

        write_dat(zifu[dis/10000]);
        write_dat('.');
        write_dat(zifu[dis/1000%10]);
        write_dat(zifu[dis/100%10]);
        write_dat(zifu[dis/10%10]);
        write_dat(zifu[dis%10]);
        write_dat('V');
}

void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;
  IO_init();
  LCD_init();
  delay(100);
  Sys_clock_init();
  lcd_pos(1,0);
  write_dat(zifu[10]);
  write_dat(zifu[11]);
  write_dat(zifu[12]);
  lcd_pos(3,0);
  write_dat(zifu[10]);
  write_dat(zifu[13]);
  write_dat(zifu[12]);

  AD_init();


  while(1)
  {
          ADC10CTL0&=~ENC;
          while(ADC10CTL1&ADC10BUSY);
          ADC10CTL0|=ENC+ADC10SC;
          ADC10SA=(unsigned int)aver;
      _bis_SR_register(LPM0_bits+GIE);//关闭cpu,开启中断

   }



}

#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
        jisuan();
        _bic_SR_register_on_exit(CPUOFF+GIE);
}

点评

想请教一下 为什么jisuan()里面为什么有两个相同的操作呢??求解  详情 回复 发表于 2012-8-22 20:49
好东西 感谢啊  详情 回复 发表于 2012-8-22 20:20
 
 
 

回复

38

帖子

0

TA的资源

一粒金砂(中级)

11
 
我这里用的序列通道多次采样,可以参考下!
我采的是正弦的峰峰值。
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(初级)

12
 
楼主,你的这个程序怎么个接法?
 
 
 

回复

312

帖子

0

TA的资源

纯净的硅(高级)

13
 
楼主可以设定采样周期,采样点数,然后根据算术运算来处理
另外可以在TI的CCSv5集成开发环境下,使用Graph功能读取正弦波波形,并在CCSv5 IDE 下显示
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

14
 

回复 10楼 armahc 的帖子

好东西   感谢啊
 
 
 

回复

27

帖子

0

TA的资源

一粒金砂(中级)

15
 

回复 10楼 armahc 的帖子

想请教一下  为什么jisuan()里面为什么有两个相同的操作呢??求解
 
 
 

回复

7

帖子

0

TA的资源

一粒金砂(初级)

16
 
程序怎么连接
 
 
 

回复

7

帖子

1

TA的资源

一粒金砂(初级)

17
 
赞!!!!!!!!!!!!!!!!
 
 
 

回复

7

帖子

1

TA的资源

一粒金砂(初级)

18
 
赞!!!!!!!!!!!!!!!!
 
 
 

回复

36

帖子

0

TA的资源

一粒金砂(中级)

19
 
好东西,AD交流采样搞了几天还没搞会!!!!

点评

可以单独发帖交流交流:)  详情 回复 发表于 2015-7-2 09:28
 
个人签名左手红颜,右手天下。
 
 

回复

2万

帖子

71

TA的资源

管理员

20
 
devwang 发表于 2015-7-1 21:34
好东西,AD交流采样搞了几天还没搞会!!!!

可以单独发帖交流交流:)
加EE小助手好友,
入技术交流群
EE服务号
精彩活动e手掌握
EE订阅号
热门资讯e网打尽
聚焦汽车电子软硬件开发
认真关注技术本身
 
个人签名

加油!在电子行业默默贡献自己的力量!:)

 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表