[文章]基于OpenHarmony操作系统的简易示波器开发心得(上)

阅读量0
1
4
      基于OpenHarmony + 小凌派RK2206开发板制作的简易示波器,实时采集波形,实时计算并实时显示对应的波形。OpenHarmony实时性较高,稳定性好,瑞芯微RK2206芯片接口丰富,OpenHarmony芯片适配稳定性好,做出来的简易示波器效果还不错。本文先做第一期的技术文档,后续将持续完善功能和技术文档更新。

一、项目简介
      本文基于OpenHarmony操作系统 + 小凌派RK2206开发板而做的简易示波器开发。
     本开发以瑞芯微RK2206芯片 + OpenHarmony 3.0LTS操作系统 + 小凌派-RK2206开发板为基础,以模数转换芯片ADS1256为采集数据芯片实时采集,然后通过峰值检测和FFT变换算法处理采集数据,最后将处理完成的数据输送到LCD液晶屏上实时显示。

项目实验视频如下所示:

二、模块介绍
    1.ADS1256模块
    ADS1256是一款 24bit ADC转换模块。 ADS1256可以通过SPI进行访问 的高精度的转换器。
图片1.png
     上图为ADS1256芯片结构和引脚图,从图可以看出ADS1256的通道资源比较丰富,可以配置成8个单端ADC通道,也可以配置成4个差分通道。ADS1256的通信接口为串行接口,同时还有4个通用的IO口,不过这四个IO口不经常用到。
    ADS1256内部有许多寄存器需要配置,相较于ADS1232用起来要复杂的多。
    下面介绍一下ADS1256的初始化。
    通过SPI通信配置ADS1256的参数,增益以及转换速率。
  1. void ADS1256_CfgADC(uint8_t gain,uint8_t drate)   // 初始化设置,设置增益以及转换速率
  2. {
  3.     uint8_t buf[4];
  4.     ADS1256_WriteCmd(CMD_RESET);                // 写复位指令
  5.     ADS1256_WriteReg(REG_STATUS,0XF4);          // 写状态,数据传输默认高位在前,启动矫正,禁止使用缓冲
  6.     ADS1256_WriteCmd(CMD_SELFCAL);              // 自校准
  7.     ToyUdelay(20);
  8.     {
  9.         buf[0] = (0 << 3) | (1 << 2) | (0 << 1);
  10.         buf[1] = 0x08;                      //通道设置选择
  11.         buf[2] = (0 << 5) | (0 << 3) | (gain << 0);
  12.         buf[3] = drate; // DRATE_10SPS; /* 选择数据输出速率 */
  13.         CS_L;
  14.         ADS1256_Send8Bit(CMD_WREG|0);          // 写寄存器
  15.         ADS1256_Send8Bit(0x03);                // 连续写入4个数据
  16.         ADS1256_Send8Bit(buf[0]);              // 设置状态寄存器
  17.         ADS1256_Send8Bit(buf[1]);              // 设置输入通道参数
  18.         ADS1256_Send8Bit(buf[2]);              // 设置ADCON控制寄存器,增益
  19.         ADS1256_Send8Bit(buf[3]);                // 设置数据速率
  20.         CS_H;
  21.     }
  22.     ToyUdelay(50);
  23. }
复制代码
然后选择通道0,等待数据转换完成后获取他采集的AD值
  1. uint32_t ADS1256_GetAdc(uint8_t channel)
  2. {
  3.     uint32_t read;
  4.     uint16_t val = 0;
  5.     read = 0;
  6. //  while(DRDY);           //当DRDY变为低电平时,数据开始传输
  7.     ADS1256_WriteReg(REG_MUX,channel);       // 写入读取的通道
  8.     ADS1256_WriteCmd(CMD_SYNC);              //同步A/D转换命令
  9. //  Delay_1us(1);
  10.     ADS1256_WriteCmd(CMD_WAKEUP);            //完成SYNC并退出待机模式
  11.     GpioGetVal(DRDY, &val);
  12.     while(val==1)                             // 等待数据转换完成
  13.     {
  14.         GpioGetVal(DRDY, &val);
  15.     }
  16.     CS_L;                                    //片选拉低
  17.     ADS1256_Send8Bit(CMD_RDATA);             //读取数据命令
  18.     //连续接收3个数据,高字节在前
  19.     read = ((uint32_t)ADS1256_Recive8Bit() << 16);         
  20.     read +=( (uint32_t)ADS1256_Recive8Bit() << 8);
  21.     read += ADS1256_Recive8Bit() ;
  22.     CS_H;
  23.     return read;   
  24. }
复制代码

2.LCD液晶屏模块
本项目使用的是ST7789V, 用于单片驱动262K色图像TFT-LCD, 包含 720(240*3色) x 320 线输出, 可以直接以SPI协议, 或者8位/9位/16位/18位并行连接外部控制器。ST7789V显示数据存储在片内240x320x18 bits内存中, 显示内存的读写不需要外部时钟驱动。
具体接线如下图所示:
图片2.png

其中,LCD液晶屏引脚功能描述,如下表5.3.1所示。
表5.3.1 LCD液晶屏引脚功能表
序号        LCD引脚        功能描述
序号
LCD引脚
功能描述
1
D/C
指令/数据选择端,L:指令,H:数据
2
RESET
复位信号线,低电平有效
3
SPI_MOSI
SPI数据输入信号线
4
SPI_CLK
SPI时钟信号线
5
SPI_CS
SPI片选信号线,低电平有效
6
GND
电源地引脚
7
5V
5V电源输入引脚

其中,LCD液晶屏与小凌派-RK2206开发板连接如下图所示:

图片3.png

回帖

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容图片侵权或者其他问题,请联系本站作侵删。 侵权投诉
链接复制成功,分享给好友