查看: 2046|回复: 0
打印 上一主题 下一主题

用excel+m88做示波器

[复制链接]
跳转到指定楼层
沙发
发表于 2016-5-16 19:20:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
突发奇想,想用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.完全无法计算采样时间采样频率。

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

使用道具 举报

您需要登录后才可以回帖 登录 | 加入因仑

本版积分规则

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