搜索
bottom↓
回复: 72

最近做的袖珍示波器

  [复制链接]

出0入0汤圆

发表于 2012-5-6 20:07:14 | 显示全部楼层 |阅读模式
本帖最后由 lcw_swust 于 2012-5-6 20:58 编辑

参照论坛中的袖珍示波器,本人也做了一个.
功能简介:
可测量双通道波形,采样率从75KHz到15Hz,输入电压应该能到50V(本人没有测试过较高的电压)

主要器件:
手机电池供电,PT1301升压到5V,以TL431输出的2.5V为探头的信号地,
运放TL082做信号放大,数字电位器MCP41010做增益调节,
NOKIA1100液晶屏做为显示,96*65像素点,其工作所需3.3V电压是5V电压串联LED后得来的.
STC12C5A50S2做为核心控制,据资料介绍其ADC采样速度可达250KHz.
两路ADC采集波形数据,一路ADC采集2.5V电压,一路ADC采集电池电压.
两路PWM经低通滤波后控制调理电路的偏移.
探头接口是用的双声道耳机接口,比较节省空间,但是通道间会有干扰.

按键有9个
CH:选通道                 Vp/Hp:主菜单选择        POWER:开机
Vs/Hs:(本程序未用)        INC:+                        STOP:关机
SET:进弹出菜单                DEC:-                        ESC:退出/暂停

程序介绍:
        程序中为了方便图形操作,为液晶屏建立了内存缓冲,绘图操做在单片机内存中进行,然后
整体复制到液晶屏.由于内存不太充裕,采用了分块的方法,以时间换取空间:
#define LCD_WIDTH 96
#define LCD_HEIGHT 8
//液晶分区数
#define LCD_PART 2
//U8 lcd_x=0;
//U8 lcd_y=0;
xdata U8 lcd_buf[LCD_HEIGHT/LCD_PART][LCD_WIDTH];//lcd显示缓存(1/LCD_PART屏)
xdata S16 lcd_bufx0=0,lcd_bufy0=0,lcd_bufx1=0,lcd_bufy1=0;//缓冲区对应四角坐标,(去掉右边框)
//x0 <= x < x1;y0 <= y < y1;
//-------------------------------------------------------
//选择液晶屏区域
//s=0~LCD_PART-1
//-------------------------------------------------------
void lcd_buf_sel(U8 s)
{
        if(s>=LCD_PART)return;
        lcd_bufx0=0;
        lcd_bufx1=LCD_WIDTH;
        lcd_bufy0=LCD_HEIGHT*s/LCD_PART;       
        lcd_bufy1=LCD_HEIGHT*(s+1)/LCD_PART;
}

绘图时需遍历每个显示缓存块:
        for(p=0;p<LCD_PART;p++)
        {
                lcd_buf_sel(p);
                //LCD_DrawPic(0,0,160,123,0,gImage_t1);
                lcd_buf_fill(0x04);               
                GUI_SetFont6x8();
                GUI_dispnum(i,3,0,5,13,0);
                GUI_PutStr(5,5,"welcome...");
                GUI_SetFont8x16();
                GUI_PutStr(5,25,"welcome...");
                lcd_refresh();
        }

  程序在timer0中断里采集波形数据,主要代码如下:
//--------------------------------------------------
//定时器中查询AD
//--------------------------------------------------
void timer0(void)        interrupt 1 using 3        //T0中断,用寄存器组0
{
        //while(TF0==0);
        //TF0=0;
        U8 ad;
        //static U8 fp=0;//分频       
        if(T0EXC==0)
        {
                //mmm++;
                TH0=TH0RLD;//重装初值
                TL0=TL0RLD;
                T0EXC=T0EXH;
                //dosamp();
                while(ADC_CONTR&BIT(3));//等待通道0转换完成
                //while(!(ADC_CONTR&BIT(4)));
                ad=ADC_RES;//读通道0
                if(TrigCh==0)//通道1触发
                {
                        if(ChEnable & BIT(1))//通道2使能
                                ADC_CONTR=(0xE8|ADCH2);//选通道2
                        else                //否则选通道1
                                ADC_CONTR=(0xE8|ADCH1);//选通道1
                        ADCBuf[0][BUF_Wps]=ad;//循环存储数据
                }
                else
                {
                        if(ChEnable & BIT(0))//通道1使能
                                ADC_CONTR=(0xE8|ADCH1);//选通道1
                        else                //否则选通道1
                                ADC_CONTR=(0xE8|ADCH2);//选通道2
                        ADCBuf[1][BUF_Wps]=ad;//循环存储数据               
                }
               
               
                //if(BUF_Wps>=ADCBUFSIZE)BUF_Wps=0;
                if(SampState==0)//预采数据
                {
                        //if(ADC_Cnt<ADCBUFSIZE)
                        ADC_Cnt++;        //数据个数加1
                        BUF_Cnt++;
                        if(ADC_Cnt>=TrigPs)//触发位置
                        {
                                if(TrigEdge==0)//上升沿触发
                                        SampState=1;
                                else                        //下降沿触发
                                        SampState=2;
                        }
                }
                //------------------------上升沿状态为1-2-3,下降沿状态为2-1-3
                else if(SampState==1)
                {                       
                        if(ad<=TrigLevel)//低于触发电平
                        {
                                if(TrigEdge==0)//上升沿触发
                                        SampState=2;
                                else                        //下降沿触发
                                        SampState=3;
                                //if(ADC_Cnt<ADCBUFSIZE)
                                ADC_Cnt++;//数据个数加1
                                BUF_Cnt++;
                        }
                        else//否则读取队列,ADC_Cnt,BUF_Cnt就不加了
                        {
                                BUF_Rps++;
                                if(BUF_Rps>=ADCBUFSIZE)BUF_Rps=0;
                        }
                }
                else if(SampState==2)
                {
                        if(ad>TrigLevel)//高于触发电平
                        {
                                if(TrigEdge==0)//上升沿触发
                                        SampState=3;
                                else                        //下降沿触发
                                        SampState=1;
                                //if(ADC_Cnt<ADCBUFSIZE)
                                ADC_Cnt++;//数据个数加1
                                BUF_Cnt++;
                        }
                        else//否则读取队列,ADC_Cnt,BUF_Cnt就不加了
                        {
                                BUF_Rps++;
                                if(BUF_Rps>=ADCBUFSIZE)BUF_Rps=0;
                        }
                }
                else if(SampState==3)//已触发
                {
                        ADC_Cnt++;        //数据个数加1
                        BUF_Cnt++;
                        if(ADC_Cnt>=ADCBUFSIZE)//采了足够的数据
                        {
                                SampState=4;
                                TR0=0;
                        }
                }
                if((TrigMode==0)&&(SampState<3))//自动触发处理
                {               
                        if(TrigWait==0)//等待时间低位
                        {
                                if(TrigWaitH)//等待时间高位
                                {
                                        TrigWaitH--;
                                }
                                else
                                {
                                        SampState=3;
                                }
                        }
                        TrigWait--;
                }
                if(TrigCh==0)//通道1触发
                {
                        if(ChEnable & BIT(1))//通道2使能       
                        {
                                while(ADC_CONTR&BIT(3));//等待通道1转换完成
                                //while(!(ADC_CONTR&BIT(4)));
                                ad=ADC_RES;//读通道1
                                ADC_CONTR=(0xE8|ADCH1);//选通道1
                                ADCBuf[1][BUF_Wps]=ad;//循环存储数据
                        }
                }
                else
                {
                        if(ChEnable & BIT(0))//通道1使能       
                        {
                                while(ADC_CONTR&BIT(3));//等待通道1转换完成
                                //while(!(ADC_CONTR&BIT(4)));
                                ad=ADC_RES;//读通道1
                                ADC_CONTR=(0xE8|ADCH2);//选通道2
                                ADCBuf[0][BUF_Wps]=ad;//循环存储数据
                        }               
                }
                //写指针下移
                BUF_Wps++;
                if(BUF_Wps>=ADCBUFSIZE)BUF_Wps=0;
        }
        else
        {
                T0EXC--;
        }
}

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2012-5-6 20:09:09 | 显示全部楼层
沙发,我是来看图的,结果失望了

出0入0汤圆

发表于 2012-5-6 20:09:31 | 显示全部楼层
没图片,建议发张实物图

出0入0汤圆

发表于 2012-5-6 20:35:11 | 显示全部楼层
同3楼,建议发几张测量实物图上来

出0入0汤圆

发表于 2012-5-6 20:42:14 | 显示全部楼层
谢谢,非常感谢,真的很需要!

出0入0汤圆

发表于 2012-5-6 20:50:30 | 显示全部楼层
代码贴不贴就这样了 倒是想看看实物图 在参数不给力的情况下 袖珍是唯一的亮点 就是不知道。。。。大小如何

出0入0汤圆

 楼主| 发表于 2012-5-6 21:01:24 | 显示全部楼层
报歉,网速太慢,资料已上传

出0入0汤圆

发表于 2012-5-6 21:02:21 | 显示全部楼层
牛人。学习了谢谢。呵。。

出0入0汤圆

发表于 2012-5-7 09:19:52 | 显示全部楼层
真是强大,牛

出0入0汤圆

发表于 2012-5-7 11:56:40 | 显示全部楼层
看到图片了,进来支持

出0入0汤圆

发表于 2012-5-7 16:55:02 来自手机 | 显示全部楼层
楼主真牛

出0入0汤圆

发表于 2012-5-7 18:04:31 | 显示全部楼层
学习一下

出0入0汤圆

发表于 2012-5-7 20:18:42 | 显示全部楼层
看上去DIY的还可以啊!!不错啊!!!

出0入0汤圆

发表于 2012-5-7 21:19:55 | 显示全部楼层

出0入0汤圆

发表于 2012-5-7 21:36:33 | 显示全部楼层
楼主那个以时间换空间的显示方法我要学习下的说

出0入0汤圆

发表于 2012-5-7 21:52:30 | 显示全部楼层
看起来很不错呀

出0入0汤圆

发表于 2012-5-7 21:54:46 | 显示全部楼层
不错,很精致

出0入0汤圆

发表于 2012-6-11 19:13:01 | 显示全部楼层
好厉害哦~顶一个~

出0入0汤圆

发表于 2012-6-11 19:57:21 | 显示全部楼层
真是强大

出0入0汤圆

发表于 2012-6-12 02:28:07 | 显示全部楼层
厉害,佩服

出0入0汤圆

发表于 2012-6-12 07:59:16 | 显示全部楼层
看上去DIY的还可以啊!!不错啊!!!

出0入0汤圆

发表于 2012-6-12 09:05:46 来自手机 | 显示全部楼层
留个记号,谢谢!

出0入0汤圆

发表于 2012-6-14 18:50:23 | 显示全部楼层
不错啊,支持下啊

出0入0汤圆

发表于 2012-6-14 19:13:22 | 显示全部楼层
支持下, 楼主是个有耐心的人

出0入0汤圆

发表于 2012-6-15 12:45:30 | 显示全部楼层
最近有做这个的打算。马克帕克。

出0入0汤圆

发表于 2012-6-22 23:04:44 | 显示全部楼层
mark!做的不错

出0入85汤圆

发表于 2012-6-22 23:23:08 | 显示全部楼层
整屏的刷新是不是麻烦了点,在内存中劈一显示缓冲区,在欲写入的显示地址,先从显示缓冲区 中读出欲写入的显示地址中的内容,操作后写入显示缓冲区,同是写入显示屏,只刷新欲修改处,这样怎么样?

出0入0汤圆

发表于 2012-6-23 10:19:35 | 显示全部楼层
楼主强大~~~佩服啊~~

出0入0汤圆

 楼主| 发表于 2012-6-28 09:07:17 | 显示全部楼层
marshallemon 发表于 2012-6-22 23:23
整屏的刷新是不是麻烦了点,在内存中劈一显示缓冲区,在欲写入的显示地址,先从显示缓冲区 中读出欲写入的 ...

这样也行,只是如何确定"欲修改处"是个麻烦事
对于单色屏来说,整屏刷新的耗时是很小的

出0入0汤圆

发表于 2012-6-28 09:49:21 | 显示全部楼层
顶一个,就是没见过lz用的屏...

出0入0汤圆

 楼主| 发表于 2012-6-28 10:09:58 | 显示全部楼层
mynah 发表于 2012-6-28 09:49
顶一个,就是没见过lz用的屏...

在二手手机市场淘到的一块NOKIA的黑白屏,网上应该有卖的.
其实也可以用12864,只是贵些,COG型的12864要便宜些,如JLX12864

出0入0汤圆

发表于 2012-8-3 10:57:29 | 显示全部楼层
lzv5呀 学习了

出0入0汤圆

发表于 2012-8-3 11:17:25 | 显示全部楼层
牛x的

出90入372汤圆

发表于 2012-8-3 12:27:02 | 显示全部楼层
单位网络不给力,没看到图片

出500入0汤圆

发表于 2012-8-3 12:39:14 | 显示全部楼层
顶……

之前也做过,不过没这么完整……

出0入0汤圆

发表于 2012-9-4 19:11:59 | 显示全部楼层
牛~~~~~~~~

出0入0汤圆

发表于 2012-9-4 21:35:37 | 显示全部楼层
帮顶啦!!!

出0入0汤圆

发表于 2012-9-5 17:10:46 | 显示全部楼层
挺袖珍的,不错~~~

出0入0汤圆

发表于 2012-9-5 17:40:29 | 显示全部楼层
进来看看



~~~~~~~


不错

出0入0汤圆

发表于 2012-9-5 19:50:41 | 显示全部楼层
牛啊。我也想做一个

出0入0汤圆

发表于 2012-9-5 20:07:22 | 显示全部楼层
本帖最后由 sdf159372008 于 2012-9-5 20:12 编辑

好像和牛叉啊~之前有仿制过用12864+12C5A60S2做的,不过精度不高,可测频率也不高……
胜在只用两片芯片救能够解决,一片单片机+一片运放…………

出0入0汤圆

发表于 2012-9-9 16:18:03 | 显示全部楼层
楼主强人呀,可惜我是个小白

出200入0汤圆

发表于 2013-6-15 21:53:22 来自手机 | 显示全部楼层
不错学习

出0入0汤圆

发表于 2013-6-16 12:17:44 | 显示全部楼层
mark学习!!

出0入0汤圆

发表于 2013-11-8 16:09:14 | 显示全部楼层
牛,我也想DIY一个刚好做参考

出0入0汤圆

发表于 2013-11-10 12:26:07 | 显示全部楼层
碉堡了。

出0入0汤圆

发表于 2013-11-10 23:19:36 | 显示全部楼层
不错 学习了

出0入0汤圆

发表于 2013-11-10 23:20:45 | 显示全部楼层
不错,支持!!!!!!!!!!!!

出0入0汤圆

发表于 2013-11-11 13:39:19 | 显示全部楼层
好贴,支持一下

出0入0汤圆

发表于 2013-11-11 22:36:10 | 显示全部楼层
徘徊在NA和NC
之间的人。学习。。。

出0入0汤圆

发表于 2013-11-12 11:34:53 | 显示全部楼层
搞个分辨率高点的屏估计会不错!

出0入0汤圆

发表于 2013-11-12 12:59:33 | 显示全部楼层
牛。。。。。。。

出0入0汤圆

发表于 2013-11-13 18:25:42 来自手机 | 显示全部楼层
真心强大!不知效果如何

出0入0汤圆

发表于 2013-11-13 23:29:58 | 显示全部楼层
不错,学习下

出0入0汤圆

发表于 2013-11-14 06:57:57 来自手机 | 显示全部楼层
做的很好,谢谢分享

出0入0汤圆

发表于 2013-11-14 08:28:43 | 显示全部楼层
小马克一下   回头来学习

先去看那个闹中铁
谢谢分享  

出0入0汤圆

发表于 2013-11-14 08:30:00 | 显示全部楼层
谢谢楼主分享

出0入0汤圆

发表于 2013-11-24 00:39:50 | 显示全部楼层
太霸气了!!下来看看!谢谢了

出0入0汤圆

发表于 2013-11-24 01:01:06 | 显示全部楼层
谢谢,非常感谢

出0入0汤圆

发表于 2013-11-26 13:33:47 | 显示全部楼层
收藏了,谢谢分享

出0入0汤圆

发表于 2014-9-16 17:04:03 | 显示全部楼层
能用么。。

出0入0汤圆

 楼主| 发表于 2014-9-16 17:14:23 | 显示全部楼层

这个做得不够好,如果有兴趣,建议你看看这个:
http://www.amobbs.com/thread-5561706-1-1.html

出0入0汤圆

发表于 2014-9-16 17:15:09 | 显示全部楼层
很好很好很好很好

出0入0汤圆

发表于 2014-9-16 17:18:03 | 显示全部楼层
lcw_swust 发表于 2014-9-16 17:14
这个做得不够好,如果有兴趣,建议你看看这个:
http://www.amobbs.com/thread-5561706-1-1.html ...

原来是 最早版本。

出0入0汤圆

发表于 2014-9-16 18:14:56 | 显示全部楼层
mark                    

出0入0汤圆

发表于 2014-9-16 18:45:15 | 显示全部楼层
nice啊!mark学习!!!!!

出0入0汤圆

发表于 2014-9-16 20:15:04 | 显示全部楼层
高!实在是高!!

出0入0汤圆

发表于 2014-9-16 20:15:38 | 显示全部楼层
挺不错的啊

出0入0汤圆

发表于 2014-9-18 22:54:21 | 显示全部楼层
楼主是个强人啊

出0入0汤圆

发表于 2014-9-20 15:30:31 | 显示全部楼层
液晶的屏幕响应会不会慢啊

出0入0汤圆

 楼主| 发表于 2014-9-20 15:40:38 | 显示全部楼层
eyyhappy 发表于 2014-9-20 15:30
液晶的屏幕响应会不会慢啊

不会                              

出0入0汤圆

发表于 2014-9-20 16:19:22 | 显示全部楼层
做得很漂亮,楼主下了功夫!

出0入0汤圆

发表于 2014-9-20 16:25:25 | 显示全部楼层
已经收藏,感谢分享
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-1 10:42

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

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