查看: 4949|回复: 5

PSoC4实验:SAR_ADC与模拟示波器

[复制链接]

该用户从未签到

发表于 2013-10-5 15:15:00 | 显示全部楼层 |阅读模式
分享到:
本次实验的主题是psoc4中的adc模块,利用adc将模拟信号转化为数字信号,并连续的在oled屏幕上绘制出来,就是一个模拟示波器了。
此外,本次实验还需要Timer的配合,用作定时采集数据;改变Timer计时周期就可以改变示波器采样速率(<adc采样速率),由于oled屏幕采用的是IIC通信,上限速率为1Mbps,也成为该模拟示波器的一个局限。
VID_20131005_143633.mp4_20131005_144522.624.jpg
TopDesign:
Top.png

PSoC4中ADC_SAR_Seq简介:
Features
 Selectable 8, 10 and 12 bit resolutions
 Sample rates of up to 1 Msps with 12 bit resolution
 Supports both Single Ended and Differential inputs
 Different ranges of inputs with multiple reference options
 Scan up to 8 channels automatically, or just a single input
 Allows an “injection” channel to be added to the scan sequence
with firmware control at runtime
 Hardware averaging support
其中adc设置为:单通道,差分,10bit
主要代码:
#include <project.h>
CY_ISR_PROTO(draw);

int div=0;
int16 value=0;
void main()
{
        CyGlobalIntEnable;
        OLED_Init();
        OLED_clearDisplay();
        OLED_setPos(17,0);
        OLED_print68Str("ADC_read: ");
        OLED_Display();
        isr_timer_Start();
        isr_timer_SetVector(draw);
        ADC_Start();
        ADC_StartConvert();
        Timer_Start();
        while(1)
        {
        OLED_clearPos(72,115,0,0);
        OLED_setPos(72,0);
        OLED_printNumber_sign(value);
        OLED_Display();
        }
}

CY_ISR(draw)
{
        if(div<127)
        {   
                int temp=value;
                value=ADC_GetResult16(0)+3;
                value=64-value/2047.0*56;
                drawLine(div,temp,++div,value,1);       
        }
        else
        {
                div=0;
                OLED_clearPos(0,128,1,7);               
        }
       
}

演示视频与文件文件:

OLED_Wavetest.zip (1.74 MB, 下载次数: 216)
回复

使用道具 举报

  • TA的每日心情
    奋斗
    5 小时前
  • 签到天数: 3875 天

    连续签到: 11 天

    [LV.Master]伴坛终老

    发表于 2013-10-5 19:44:09 | 显示全部楼层
    谢谢分享!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2017-5-12 10:32
  • 签到天数: 295 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-10-7 08:35:30 | 显示全部楼层
    牛叉啊~~~~~~~~~~~~~~~·
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2013-8-26 08:36
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    发表于 2013-10-7 20:16:40 | 显示全部楼层
    好东西顶一个。。。。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-3-14 08:54
  • 签到天数: 247 天

    连续签到: 1 天

    [LV.8]以坛为家I

    发表于 2013-10-13 18:41:19 | 显示全部楼层
    不错啊,赞一个
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    发表于 2015-10-25 21:59:48 | 显示全部楼层
    psoc 5 CY8CKIT-050开发板,

    t1=ADC_GetResult16();
    t2=ADC_CountsTo_mVolts(t1);
    LCD_Position(0,0);
    LCD_PrintNumber(t1);
    LCD_Position(1,0);
    LCD_PrintNumber(t2);
    LCD显示的结果为:
    255(ADC的分辨率是8位)
    5089

    请问,通过滑动变阻器,我的模拟输入明明是0~3.3V,为什么会得出5089mv(5.089V),而不是3300mV呢?在线等,请各位高手帮忙分析一下。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条



    手机版|小黑屋|与非网

    GMT+8, 2024-5-20 15:15 , Processed in 0.149470 second(s), 26 queries , MemCache On.

    ICP经营许可证 苏B2-20140176  苏ICP备14012660号-2   苏州灵动帧格网络科技有限公司 版权所有.

    苏公网安备 32059002001037号

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.