5回答

1收藏

[原创] PSoC4实验:SAR_ADC与模拟示波器

英飞凌 英飞凌 6075 人阅读 | 5 人回复 | 2013-10-05

本次实验的主题是psoc4中的adc模块,利用adc将模拟信号转化为数字信号,并连续的在oled屏幕上绘制出来,就是一个模拟示波器了。
此外,本次实验还需要Timer的配合,用作定时采集数据;改变Timer计时周期就可以改变示波器采样速率(<adc采样速率),由于oled屏幕采用的是IIC通信,上限速率为1Mbps,也成为该模拟示波器的一个局限。

TopDesign:


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, 下载次数: 218)



分享到:
回复

使用道具 举报

回答|共 5 个

倒序浏览

沙发

hjf2002

发表于 2013-10-5 19:44:09 | 只看该作者

谢谢分享!
板凳

fj1161

发表于 2013-10-7 08:35:30 | 只看该作者

牛叉啊~~~~~~~~~~~~~~~·
第五年了,这次一定要坚持到底,不留遗憾!!!
地板

wasd890228

发表于 2013-10-7 20:16:40 | 只看该作者

好东西顶一个。。。。
5#

xzezhen

发表于 2013-10-13 18:41:19 | 只看该作者

不错啊,赞一个
6#

夏醒醒

发表于 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 下一条