打印

求助16位ADC转8位DAC

[复制链接]
2781|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wxy3051|  楼主 | 2013-4-25 19:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用系统的示例工程“Filter_ADC_VDAC Example Project”做数字滤波 然后用示波器看结果 该示例工程很方便 先赞一个

然后我把ADC设置成16位 但只看最重要的8位信号的DAC转换 对main.c里的中断作如下修改
原中断
CY_ISR(filterVDAC)
{
    /* Convert the 2's complement value to an unsigned 8-bit value
     * The VDAC expects an unsigned 8-bit value as input.
     */
        VDAC8_SetValue(Filter_Read8(Filter_CHANNEL_A) + 128u);
}

我的修改
CY_ISR(filterVDAC)
{
    /* Convert the 2's complement value to an unsigned 8-bit value
     * The VDAC expects an unsigned 8-bit value as input.
     */
        uint8 test;
        test=(Filter_Read16(Filter_CHANNEL_A)>>8);
        VDAC8_SetValue(test + 128u);
}
但是下到板子上用示波器看不到应有的波形啊
到底是哪里有问题?!!求救啊!!
沙发
PSoC小子| | 2013-4-25 20:29 | 只看该作者
本帖最后由 PSoC小子 于 2013-4-25 20:31 编辑

试一下这个程序:
/******************************************************************************/
#include <device.h>
#include <VDAC8.h>

#define REQUEST_PER_BURST        (1u)
#define BYTES_PER_BURST          (2u)
#define UPPER_SRC_ADDRESS        CYDEV_PERIPH_BASE
#define UPPER_DEST_ADDRESS       CYDEV_PERIPH_BASE

void DMA_Config(void);

CY_ISR(filterVDAC)
{

        VDAC8_SetValue((uint8)(Filter_Read16(Filter_CHANNEL_A)>>8));

}

void main()
{
    /* Start all components used on schematic */
    ADC_DelSig_IRQ_Start();
    isr_StartEx(filterVDAC);
    ADC_DelSig_Start();
    ADC_DelSig_StartConvert();
    VDAC8_Start();
    Opamp_Start();
    Filter_Start();
        Filter_DALIGN_REG = 0x00;
        Filter_SetCoherency(Filter_CHANNEL_A, Filter_KEY_LOW);

    /* User-implemented function to set-up DMA */
    DMA_Config();

    /* Enable Global Interrupts */
    CYGlobalIntEnable;

    for(;;)
    {
    }
} /* End of main */

void DMA_Config(void)
{
    /* Declare variable to hold the handle for DMA channel */
    uint8 channelHandle;
    uint8 tdChanA;
    channelHandle = DMA_DmaInitialize(BYTES_PER_BURST, REQUEST_PER_BURST,
                                        HI16(UPPER_SRC_ADDRESS), HI16(UPPER_DEST_ADDRESS));
    tdChanA = CyDmaTdAllocate();
    CyDmaTdSetConfiguration(tdChanA, 2u, DMA_INVALID_TD, 0u);
    CyDmaTdSetAddress(tdChanA, LO16((uint32)ADC_DelSig_DEC_SAMP_PTR), LO16((uint32)Filter_STAGEA_PTR));
    CyDmaChSetInitialTd(channelHandle, tdChanA);

    CyDmaChEnable(channelHandle, 1u);
}

/* [] END OF FILE */
/*************************************************************************************/

使用特权

评论回复
板凳
wxy3051|  楼主 | 2013-4-26 09:44 | 只看该作者
本帖最后由 wxy3051 于 2013-4-26 10:17 编辑
PSoC小子 发表于 2013-4-25 20:29
试一下这个程序:
/******************************************************************************/
#i ...

版主 我用你这个程序试了一下 还是不行啊 从示波器看不到正常输出 实际上是什么输出都没有
是不是哪里还要改啊?:'(
能把你的工程发给我吗?
要不我把工程发给你
压缩工程超过1M,发不了
我也不知道哪里出的问题 求指导 qq591746286

使用特权

评论回复
地板
PSoC小子| | 2013-4-26 13:17 | 只看该作者
wxy3051 发表于 2013-4-26 09:44
版主 我用你这个程序试了一下 还是不行啊 从示波器看不到正常输出 实际上是什么输出都没有
是不是哪里还要 ...

你稍等一下,我等会发个project给你

使用特权

评论回复
5
PSoC小子| | 2013-4-26 13:45 | 只看该作者
试一下这个

Filter_16bit_Demo.zip

1.99 MB

使用特权

评论回复
6
ddb_21ic| | 2013-4-26 15:16 | 只看该作者
ADC和DAC分开验证不就简单了

使用特权

评论回复
7
wxy3051|  楼主 | 2013-5-20 09:55 | 只看该作者
PSoC小子 发表于 2013-4-26 13:45
试一下这个

版主 你这个工程我试过了 在示波器上还是看不到正确的波形啊
另外 你的main.c里的这几句
uint8 temp1;
uint32 temp2;
CY_ISR(filterVDAC)
{
        temp2 = Filter_Read16(Filter_CHANNEL_A);
        temp1 = (uint8) temp2;
        VDAC8_SetValue(temp1);

}
是把filter的16位输出转给temp2,再转给temp1,再在VDAC输出是吧。
可是这中间的位宽不同的变量的相互赋值是怎么取的。
看你的代码,好像是filter的16位输出赋值给uint32 temp2,这里是怎么赋值的?是赋给uint32 temp2的高16位还是低16位?
然后uint32 temp2赋值给uint8 temp1,这里是怎么赋值的?是取uint32 temp2的高8位还是低8位?看你的意图应该是高8位,可c语言不是取低8位吗?

使用特权

评论回复
8
Go_PSoC| | 2013-5-20 16:34 | 只看该作者
楼主在做什么项目,在那个城市?或者你可以联络代理商一下,请他们实地看一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

5

帖子

0

粉丝