『数字信号处理实践』仅利用ArduinoUNO通过脉宽调制生成DTMF

本文介绍了如何使用ArduinoUNO通过脉宽调制(PWM)生成DTMF信号,由于Arduino没有DAC,作者利用PWM来模拟正弦波叠加。内容包括为何选择定时器以确保采样率,不使用analogWrite的原因,以及正弦表在提高计算效率中的作用。
摘要由CSDN通过智能技术生成

『数字信号处理实践』仅利用ArduinoUNO通过脉宽调制生成DTMF

简述

DTMF是正弦波的叠加,众所周知,Arduino没有DAC,因此要想仅用ArduinoUNO生成DTMF信号,就必须利用PWM这样的方法。

代码

效果:烧进程序后,将喇叭一边接11号,一边接地,可以考虑加几个电容来滤除谐波、阻隔直流。

#include "Arduino.h"

#define WAVE_TABLE_SIZE 200

#define DTMF_PORT PORTD //输出端口PORTD,0-7号
#define DTMF_DDR DDRD //GPIO_PORTD功能配置寄存器

#define BUZZ_TIME 1000
#define DELAY_TIME 2000
//正弦表
unsigned char waveTable[WAVE_TABLE_SIZE] = {
    
   64,  66,  68,  69,  71,  73,  75,  77,  79,  80,  82,  84,  86,  88,  89, 
   91,  93,  94,  96,  97,  99, 101, 102, 103, 105, 106, 107, 109, 110, 111, 
  112, 113, 114, 115, 116, 117, 118, 119, 120, 120, 121, 121, 122, 122, 123, 
  123, 123, 123, 124, 124, 124, 124, 124, 123, 123, 123, 123, 122, 122, 121, 
  121, 120, 120, 119, 118, 117, 116, 115, 114, 113, 112, 111, 110, 109, 107, 
  106, 105, 103, 102, 101
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值