3426|6

78

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

用定时器实现DA功能 [复制链接]

我现在正在做一个无线对讲,想用定时器实现DA功能,
两块板的单片机都是MSP430F2012,A板用AD采咪头信号,采到的数据再通过CC2500无线发出去,另一块B板子接收,MSP430F2012是没有DA功能的,我想B板通过定时器来实现DA功能,把接到的数据赋值R1,改变PWM的脉宽来还原咪头信号。我现在做到了,A板的AD采样和两板通信都已经正常,定时器来实现DA功能部分还有问题,我不知道频率该怎么设置,或者是还有很多地方没有注意到的,请大家帮帮忙
                                  谢谢!

最新回复

谢谢大家,这个项目已成功完成。  详情 回复 发表于 2010-1-28 22:15
点赞 关注

回复
举报

63

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
这个只要与你的ADC采用的定时器一样设置 就OK

即ADC的采样频率为多少,那么DAC的播放频率也可以设置成一样一样。

另外需要确保你的ADC采样频率正确,别出现太大失真,否则播放肯定存在失真。

另外20Hz_20Khz的声音信号才叫音频,楼主别超过这个范围。
 
 

回复

75

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
楼主可以参考下面的代码:

  1. //======================================================================
  2. //        文件名称:        main.asm
  3. //        功能描述:        通过音频通道输入,同时通过DAC1、DAC2输出
  4. //                                采样率为8KHz
  5. //        维护记录:        2005-09-12        v1.0
  6. //======================================================================

  7. .DEFINE P_TimerA_Data                0x700A
  8. .DEFINE P_TimerA_Ctrl                0x700B

  9. .DEFINE P_ADC                                0x7014
  10. .DEFINE P_ADC_Ctrl                        0x7015
  11. .DEFINE P_DAC2                                0x7016
  12. .DEFINE P_DAC1                                0x7017
  13. .DEFINE P_DAC_Ctrl                        0x702A

  14. .DEFINE P_INT_Ctrl                        0x7010
  15. .DEFINE P_INT_Clear                        0x7011
  16. .DEFINE P_Watchdog_Clear        0x7012

  17. .DEFINE        C_Fosc_2                        0x0000
  18. .DEFINE        C_B1                                0x0030
  19. .DEFINE        C_TIMERA_8KHZ                (0xffff-0x600)

  20. .RAM

  21. .CODE

  22. //==========================================================================
  23. //        汇编格式:        _main
  24. //        C格式:                int main(void);
  25. //        实现功能:        通过音频通道输入,同时通过DAC1、DAC2输出
  26. //                                采样率为8KHz
  27. //        入口参数:        无
  28. //        出口参数:        无
  29. //        破坏寄存器:r1,r2
  30. //==========================================================================

  31. .PUBLIC        _main
  32. _main:
  33.         int off
  34.        
  35.         r1 = C_Fosc_2 | C_B1
  36.         [P_TimerA_Ctrl] = r1
  37.         r1 = C_TIMERA_8KHZ                                //设置定时器计数初值
  38.         [P_TimerA_Data] = r1
  39.        
  40.         r1 = 0x0005                                                //使能自动增益AGC、MIC、ADC
  41.         [P_ADC_Ctrl] = r1
  42.         r1 = 0x00a8                                                //通过定时器A的溢出锁存数据,ADC为自动方式
  43.         [P_DAC_Ctrl] = r1
  44.         r1 = 0x1000
  45.         [P_INT_Ctrl] = r1               //允许IRQ1中断
  46.        
  47.         int irq                         //开IRQ总中断,关FIQ中断
  48.        
  49. ?Loop:
  50.         r1 = 0x0001
  51.         [P_Watchdog_Clear] = r1         //清看门狗
  52.         jmp ?Loop
  53.        
  54. .TEXT
  55. .PUBLIC _IRQ1
  56. _IRQ1:
  57.         push r1,r5 to [sp]
  58.        
  59.         r1 = [P_ADC]                    //取MIC输入并转换后数据
  60.         [P_DAC1] = r1                   //把输入数据送到DAC1和DAC2输出播放
  61.         [P_DAC2] = r1
  62.         r1 = 0x0001
  63.         [P_Watchdog_Clear] = r1         //清看门狗
  64.        
  65.         r1 = 0x1000
  66.         [P_INT_Clear] = r1              //清IRQ1中断标志
  67.         pop r1,r5 from [sp]
  68.         reti
复制代码


关键看下思路,有注释,好好看下,应该能懂,虽然是ASM
 
 
 

回复

79

帖子

0

TA的资源

一粒金砂(初级)

4
 
楼主的DA用的是什么芯片,最大采样速度有多快?
DA用来控制什么,是一个控制环路还是单独的一个控制,在哪个地方对速度有要求?
把接到的数据赋值R1,是把A板采来的AD赋值给R1吗?
 
 
 

回复

98

帖子

0

TA的资源

一粒金砂(初级)

5
 
固定PWM频率,调整脉宽来调整DA输出.
PWM输出端的电路的参数和PWM频率相关.设置好电路参数和频率就可以了.
另外,感觉采样频率的大小,最好PWM频率大于采样频率20倍以上.这样拟合曲线失真度才不会很大
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

6
 
我的AD采样频率最大可以达到200K的速度,请问各位高手,AD采样频率设多少?PWM频率又设为多少?
   我的2500跟单片机的通信是通过SPI,SPI的时钟又设多少?
   急,谢谢
 
 
 

回复

76

帖子

0

TA的资源

一粒金砂(初级)

7
 
谢谢大家,这个项目已成功完成。
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表