老刘示波器项目开发经验学习

本文介绍了基于51单片机和OLED实现的示波器项目,分享了从资料获取到复现过程的经验,包括EEPROM存储参数、OLED显示操作、编码器使用等关键步骤。详细讲解了程序中涉及的位操作、全局变量管理、51单片机关键字、OLED显示函数以及编码器中断处理。同时,提供了代码段以展示如何读写EEPROM、绘制像素点和处理编码器信号。
摘要由CSDN通过智能技术生成

       最近通过B站下载到“老刘爱鼓捣”的开源资料,是基于51单片机+OLED做的示波器,自己在复现过程中也付出了许多时间和经济成本,现将所学程序中的知识总结如下:

1、如果有需要资料,可自行B站搜索,如也要复现则首先建议直接买51开发板,加上外围器件,我自己买51芯片焊接时,容易出现无法烧写程序和OLED显示屏不亮的情况。

2、通过EEProm 储存 读取设定参数,并且将检查合法性作为一个函数,统一检查各参数。

bit Save_Options()
{
    uint8 ops[15];
    uint8 *p;
    check_Options();
    p = ops;
    *p++ = Lsb >> 8;       //дÈëLsb¸ß8λ uint16
    *p++ = Lsb;            //дÈëLsbµÍ8λ
    *p++ = PlotMode;       //дÈë»æͼģʽ bit
    *p++ = ScaleH;         //дÈëʱ¼äÇø¼ä char
    *p++ = ScaleV_Auto;    //¶ÁÈ¡×Ô¶¯Á¿³Ì±êÖ¾ bit
    *p++ = RulerVMax >> 8; //дÈë×ÝÖáµçѹ¸ß8λ int16
    *p++ = RulerVMax;      //дÈë×ÝÖáµçѹµÍ8λ
    *p++ = RulerVMin >> 8; //дÈë×ÝÖáµçѹ¸ß8λ int16
    *p++ = RulerVMin;      //дÈë×ÝÖáµçѹµÍ8λ
    *p++ = TriLevel >> 8;  //дÈë´¥·¢Öµ¸ß8λ int16
    *p++ = TriLevel;       //дÈë´¥·¢ÖµµÍ8λ
    *p++ = TriMode;        //дÈë´¥·¢·½Ê½ int8
    *p++ = TriSlope;       //дÈë´¥·¢·½Ïò bit
    *p++ = WaveScroll;     //дÈ벨Ðιö¶¯±êÖ¾ bit
    *p = OLED_Brightness;  //дÈëOLEDÁÁ¶È uint8

    //	printf("Lsb=%hu\r\n",Lsb);
    //	printf("DrawMode=%X\r\n",PlotMode);
    //	printf("ScaleH=%bd\r\n",ScaleH);
    //	printf("ScaleV_Auto=%X\r\n",ScaleV_Auto);
    //	printf("RulerVMax=%hd\r\n",RulerVMax);
    //	printf("RulerVMin=%hd\r\n",RulerVMin);
    //	printf("TriLevel=%hd\r\n",TriLevel);
    //	printf("TriMode=%bd\r\n",TriMode);
    //	printf("TriSlope=%X\r\n",TriSlope);
    //	printf("WaveScroll=%X\r\n",WaveScroll);
    //	printf("OLED_Brightness=%bu\r\n",OLED_Brightness);
    //	printf("\r\n");
    return EEPROM_Save(ops, sizeof(ops) / sizeof(ops[0]));
}
void Read_Options()
{
    uint8 ops[15];
    uint8 *p;
    p = ops;
    EEPROM_Read(ops, sizeof(ops) / sizeof(ops[0]));
    Lsb = *p++;           //¶ÁÈ¡Lsb¸ß8λ uint16
    Lsb <<= 8;            //½«µÍ8λÒƵ½¸ß°Ëλ
    Lsb |= *p++;          //¶ÁÈ¡LsbµÍ8λ
    PlotMode = *p++;      //¶ÁÈ¡»æͼģʽ bit
    ScaleH = *p++;        //¶Áȡʱ¼äÇø¼ä char
    ScaleV_Auto = *p++;   //¶ÁÈ¡×Ô¶¯Á¿³Ì±êÖ¾ bit
    RulerVMax = *p++;     //¶ÁÈ¡×ÝÖáµçѹ×î´óÖµ¸ß8λ int16
    RulerVMax <<= 8;      //½«µÍ8λÒƵ½¸ß°Ëλ
    RulerVMax |= *p++;    //¶ÁÈ¡×ÝÖáµçѹ×î´óÖµµÍ8λ
    RulerVMin = *p++;     //¶ÁÈ¡×ÝÖáµçѹ×îС¸ß8λ int16
    RulerVMin <<= 8;      //½«µÍ8λÒƵ½¸ß°Ëλ
    RulerVMin |= *p++;    //¶ÁÈ¡×ÝÖáµçѹ×îСµÍ8λ
    TriLevel = *p++;      //¶ÁÈ¡´¥·¢Öµ¸ß8λ int16
    TriLevel <<= 8;       //½«µÍ8λÒƵ½¸ß°Ëλ
    TriLevel |= *p++;     //¶ÁÈ¡´¥·¢ÖµµÍ8λ
    TriMode = *p++;       //¶ÁÈ¡´¥·¢·½Ê½ int8
    TriSlope = *p++;      //¶ÁÈ¡´¥·¢·½Ïò bit
    Wa
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本资料来源于国外网站,感谢原作者的无私奉献,本人不敢藏私,用了一点时间翻译整理,与广大网友共享。 在其网上看到已经有国内的发烧友制作成功,可以说明其元器件在国内都可以找到,按图施工一般错不了。 另:这个制作本人还没有做过,不过在网上看到过百分之百按此电路制作的成品出售。 1.序言部分 示波器是任何业余电子爱好者都要使用的最重要的工具之一,但不是每个人都能买得起的。因为商业成品示波器往往过于昂贵,几乎每一个电子爱好者都想着,找到一个能自己亲手从头开始来diy的示波器。 传统的示波器(阴极射线管)是很难在家里制作的,因为它的尺寸大,手工不容易操作,又有高电压存在,等等难以处理的问题; 另一种解决方案是:现代的虚拟的“PC示波器”, 有后处理和录音功能,以及降低复杂性等各种优势。然而,此解决方案通常是不可移植,昂贵的 (需要 PC) ,和危险的 (如果处理不好绝缘措施会危及计算机); 第三个解决方案:通常的,现在几乎所有的商业示波器制造商都是用LCD屏幕来做数字示波器的。 因此,笔者决定使用此解决方案,并试图尽量使用商家现有的常用原器件,减少制作难度。 2.功能 最大采样频率:40MSPS 最大输入频率:5MHz 最大不失真显示频率:10MHz的 输入电路带宽:20MHz 显示分辨率:240X128(总),跟踪分辨率200x125 灵敏度:40mV/div 耦合:DC 输入阻抗:10K 供电电源:单直流电源8V .. 10V,1A 增量模式 :无 时间基数:1s/div,500ms/div,200ms/div 100ms/div,50ms/div / 20ms/div,10ms/div,5ms/div,2ms/div,1ms/div,500us/div,200us / DIV,100us/div,50us/div,20us/div,10us/div,5us/div,2us/div,1us/div,500ns/div 触发:数字可调 跟踪偏移:数字可调 3.电气图 简短说明: 输入电路是用德州仪器(TI)的OPA2652运算放大器,和一个RC组成的低通滤波器,设置的带宽到20MHz。 此外,输入电路使用由微控制器产生的PWM信号(引脚15)的输入处理的垂直扫描移位(偏移)。 ADC转换器是一个8位的ADS830,来自德州仪器,能工作到 60MSPS, 在本设计中,ADC工作在最大为40MHz。而这个时钟是由QOS40(塑封)或QOM40(金封)振荡器生成,可通过CPLD电路编程(分频)(Xilinx公司的XC9572)。 在处理ADC高速率采集的大码流的时候,ADC的数字输出连接到一个来自IDT的高速FIFO存储器IDT7201(长达512字节),当存储器的缓冲区写满后,整个内存的内容被放到微控制器的内存,在那里对其中的样品进行进一步处理,然后显示在液晶显示屏上。 微控制器是一个Atmel的ATmega162,广为流行的AVR家族的成员。 显示屏是日立的LMG6402PFLR,但任何其他HD61830B兼容的液晶显示器都可以使用(当然应该检查引脚排列的兼容性)。 电源电路是由两个7805系列稳压块组成的,还有负电压(液晶显示器和输入电路所需的),是从三个英特锡尔的ICL7660A集成电路整合后得到的。 4 .PCB PCB是由两块独立的电路板组成:主板和键盘。 两者都是单面电路板,便于用业余方法制做。 作者认为它们可以使用转印法制作,但如果有足够的精度,任何其他方法都可以(要保证SMD零件在板上的精度)。 因为是单面板,pcb的高复杂性的设计和布线限制,少数的焊点必须要用飞线连接。飞线可以从图片上面看得明白。 5.软件 微控制器的软件用成熟的C语言,使用GCC为AVR编译。 此外,在开发阶段,也使用Avrstudio 4.XX调试工具,(与JTAG ICE仿真器连接)。 微控制器可以使用任何AVR编程器编程,如STK200,PonyProg,AVR910,等。 6.固件 CPLD电路是设计用于为ADC生成时钟的,(时基由XTAL电路进行分频),也用于键盘接口 。CPLD电路必须用Xilinx ISE WebPack软件(免费)的IMPACT模块和一个简单的电路XilinxCable(很容易构建)进行编程。 7.实物图
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值