搜索
bottom↓
回复: 7

用excel+m88做示波器

[复制链接]

出0入0汤圆

发表于 2007-11-2 21:13:34 | 显示全部楼层 |阅读模式
突发奇想,想用excel+m88来做个简易示波器。虽然还没完善,不过还是放上来,供大家分享。最近公司好忙,没时间想办法解决剩下的问题。希望有高手帮忙一下解决。
原理:用m88的数模转换采样,用excel将数据画成图表。
第一步:用m88数模转换采样,然后将采集到的数据用串口发送到电脑上,电脑用串口调试程序接收数据。源程序如下
//ICC-AVR application builder : 2007-9-23 下午 09:57:54
// Target : M88
// Crystal: 12.000Mhz

#include <iom88v.h>
#include <macros.h>

/*简化定义*/
#define uint    unsigned int      // 无符号短整型
#define uchar    unsigned char      // 无符号字符型

void uart0_init(void);                //串口初始化
void send(unsigned char i) ;//串口发送子程序


void delay(unsigned char i);
unsigned char get_ad(void);

/*主函数*/
void main(void) {

unsigned char i;
uchar temp;
PORTC = 0xff; //m103 output only
DDRC  = 0x01;
PORTB = 0xff; //端口B为上拉输出
DDRB  = 0x00;
uart0_init();
SEI();
delay(5);//等待外部复位
while (1) {
                delay(5);                        /*周期控制*/
                i = get_ad();                        /*获取电压*/
                send(i);
                }
       
}

/*ADC采样函数,采样第1通道信号,采样分辨率256*/
unsigned char get_ad(void) {

        unsigned char i;
       
        ADMUX = 0x60;                        /*基准AVCC、左对齐、通道7*/
        ADCSRA = 0xC2;                        /*使能、开启、4分频*/
        while(!(ADCSRA & (1 << ADIF)));        /*等待*/
        i = ADCH;
        ADCSRA &= ~(1 << ADIF);                /*清标志*/
        ADCSRA &= ~(1 << ADEN);                /*关闭转换*/

        return i;
}

void uart0_init(void)
{
UCSR0B = 0x00; //disable while setting baud rate
UCSR0A = 0x00;
UCSR0C = 0x06;
UBRR0L = 0x4d; //set baud rate lo
UBRR0H = 0x00; //set baud rate hi
UCSR0B = 0x98;
}

/*数据发送,查询方式*/
void send(unsigned char i) {

        while (!(UCSR0A & (1<<UDRE0)));                /* 等待发送缓冲器为空*/
        UDR0 = i;                                /* 发送数据*/
}

/*延时函数*/
void delay(unsigned char i)
{
uchar a,b,c;
for (a = 1; a < i; a++)   
        for (b = 0; b<100; b++)
         for (c = 0; c<255; c++);
}

第二步:用word整理数据。使用word替换功能,将空格替换为段落标记。这样采集到的数据就成一列了。
第三步:将整理好的数据复制到excel里,然后利用宏将串口采集的16进制数转换成10进制数。因为excel不认识16进制数。
这个宏的制作方法如下:

EXCEL中,按ALT+F11, 打开VB编辑器
点菜单中的"插入"——"模块"
然后把下面的代码贴进去..

如果数据在A1, 请在B列输入公式 =H2D(A1)
就可以在B1显示转换后的10进制数了.

Private Function H2D(d)
a = "&H" & d
H2D = Val(a)
End Function

最后一步:框选转换后的数据,点击插入图表,选择合适的图表,点击完成。波形图就出来了!!!
感觉这个原理很简单,不知道以前有没有人试过呢?

虽然是简易示波器,不过还存在着一些致命的缺陷:
1.输入阻抗太小,实际使用中会影响原电路运行。不知道我使用的电路太脆弱还是m88数模采用所需的电流太大,反正一接上去该部分模块就不能正常工作了。如何用最简单的元件做一个高阻抗的输入电路呢?
2.我用串口调试助手接收数据,可是串口调试助手只能接收1k字节左右的数据。如果采样频率快一点或者采样时间长一点,数据一旦超过1k就会自动清屏,导致丢失数据。找了别的串口调试软件,效果也差不多,有些甚至软件停止运行。哪里有可以接收大量串口数据的软件呢?
3.完全无法计算采样时间采样频率。

希望有高手能帮忙解决以上问题!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2007-11-2 21:44:18 | 显示全部楼层
这种显示方案够费劲的。另外示波器应该采集速度非常快才行,你这个好像数据记录仪之类的。不管如何,这种尝试还是很有意思的。

出0入0汤圆

发表于 2007-11-2 21:46:14 | 显示全部楼层
NI有个例子,在excel中动态显示采集数据的波形。
你可以找找,可以参考一下。

出0入0汤圆

发表于 2007-11-2 21:51:58 | 显示全部楼层
还是做个上位机吧

出0入0汤圆

发表于 2007-11-2 23:50:48 | 显示全部楼层
我做过,用M32的AD采集,用CH341 串口转USB(最大速率可达1Mbps)发给上位机,然后用程序显示出来,我是用C#2005里面内置的串口的类编的传输,显示是用的NI的MEASUREMENT STUDIO 8内集成到VS2005中的GRAPH控件做的,程序很简单,能够实时显示出来用它来观察50HZ的波形,可以测量交直流电压,峰峰值,还有有效值,以前记得还发过屏幕的截图的帖子,呵呵,用着还是满是回事的,哈哈   
    可惜的是MEASUREMENT STUDIO 8我是用的评估版,编译后只能在本机运行,并且30天的试用期过了就不好用了,遗憾啊
    现在一直想找个免费的类似MEASUREMENT STUDIO 8内图表曲线的控件一直没能如愿啊,用.NET的GDI+画图在我的笔记本上显示出来好像速度很慢,功能也远远做不到MEASUREMENT STUDIO 8里面的那个这样完善。

出0入0汤圆

发表于 2007-11-5 09:39:33 | 显示全部楼层
阻抗低可以加个场管作缓冲先.

出0入0汤圆

发表于 2007-11-5 11:42:03 | 显示全部楼层
可以MATLAB显示和进行数据处理,另外MATLAB可以读串口的数据

出0入0汤圆

 楼主| 发表于 2007-11-7 22:36:00 | 显示全部楼层
呵呵,多谢各位指点。我还是个菜鸟,还要多多向各位学习
NI、上位机都是第一次听
matlab以前学过,不过学得不认真
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-18 20:28

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表