原创 用excel+m88做示波器

2008-5-18 23:41 3877 8 8 分类: 测试测量
突发奇想,想用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.完全无法计算采样时间采样频率。

希望有高手能帮忙解决以上问题!
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=844191&bbs_page_no=1&search_mode=1&search_text=示波器&bbs_id=9999

文章评论0条评论)

登录后参与讨论
我要评论
0
8
关闭 站长推荐上一条 /2 下一条