突发奇想,想用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条评论)
登录后参与讨论