- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我试图通过 Atmega2560 上的定时器 0 从 PB7 引脚获取 PWM 输出,但没有成功。它应该为连接的再现生成音调。我的 PWM 设置是:
DDRB = 0b11100000;
PORTB = 0b00000000;
OCR0A = 0x04;
TCCR0A = (0 << COM0A1) | (1 << COM0A0) | (1 << WGM01) | (0 << WGM00);
TCCR0B = (0 << WGM02) | (0 << CS02) | (0 << CS01) | (0 << CS00);
然后我有这个函数,它应该生成声音:
void SoundOutput(unsigned int uintTone)
{
if (uintTone != 0)
{
LED_2(1);
OCR0A = uintTone;
TCCR0B |= (1 << CS02) | (1 << CS01) | (1 << CS00);
}
else
{
TCCR0B &= ~((1 << CS02) | (1 << CS01) | (1 << CS00));
}
}
但是当我用tone参数调用它时什么也没有发生。你能帮我么?
最佳答案
根据您的评论,您使用 ~12MHz 时钟作为计时器的输入,并且从您的代码来看,您在 CTC 模式下使用 8 位计时器 0,并以 OCR0A 作为顶部。您已将 OC0A 设置为打开比较匹配。
根据 2560 数据表,定时器的频率由下式给出:
F_CLK/(2*(1 + OCR0A)) | F_CLK~=12MHz
这是一个 8 位定时器,因此这意味着 PWM 可以生成的最小频率由下式给出:
12e6/(2*(1 + 255)) ~= 20KHz
您根本无法通过该配置生成声音,除非您减慢计时器使用的时钟或使用计数更高的计时器。
1) 使用 16 位计数器(即定时器 1)。这将为您提供 ~90Hz 的最小频率和 ~6MHz 的最大频率,这将为您提供足够的范围来生成音调:
/* WGM BITS = 0100: CTC Mode */
/* COMA BITS = 01: Toggle OC1A on compare match */
/* CS BITS = 111: External clock source on rising edge */
TCCR1A = (0 << COM1A1) | (1 << COM1A0) | (0 << WGM01) | (0 << WGM00);
TCCR1B = (1 << WGM12) | (1 << WGM13) | (1 << CS02) | (1 << CS01) | (1 << CS00);
2) 使用内部时钟源作为定时器时钟,而不是外部时钟源。除非您更改了熔丝位或在代码中的某处更改了它,否则时钟将为 1MHz。将时钟预分频 8 即可获得 ~250Hz - ~60KHz 的频率范围。
/* WGM BITS = 010: CTC Mode */
/* COMA BITS = 01: Toggle OC1A on compare match */
/* CS BITS = 010: Prescale the internal clock by 8 */
TCCR0A = (0 << COM0A1) | (1 << COM0A0) | (1 << WGM01) | (0 << WGM00);
TCCR0B = (0 << WGM02) | (0 << CS02) | (1 << CS01) | (0 << CS00);
关于c - PB7 上的 Atmega2560 PWM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44385521/
我有一个关于 Arduino 的一般性问题,如何每秒使用 AnalogRead() 读取一定次数的传感器值。每秒说 10 次,并且还不断地向电机输出 PWM。 如果我尝试延迟循环(),它会影响我与 A
我正在使用 iMX6Q SD 板。而且我必须访问背光驱动程序来控制背光对比度。如何从用户空间或内核空间访问? (背光PWM驱动路径为drivers/video/backlight/pwm_bl.c)。
这应该是一个简单的公式,但我无法理解。 我有一个 16mHZ AVR 芯片。 我需要运行一个 24kHZ 的 PWM 信号.. 决定最佳预分频器的公式是什么。 我正在使用 16 位定时器。 最佳答案
我试图将PWM用于端口B的任何引脚上的ATmega8上的LED。设置计时器一直很烦人,我不知道该如何处理OCR1A。这是我的代码,我希望收到一些反馈。 我只是想弄清楚如何使用PWM。我知道这个概念,O
我一直在 ATMega328P 上试验 PWM 波形生成模式。我得到了一些奇怪的结果,我无法确定是我编写固件的方式有问题还是我解释 datasheet 的方式有问题。 . 这是我为模拟 analogW
我想测量 PWM 信号的频率。为此,我使用了 STM-F401RE 及其 Timer_Input_Capture 函数。 问题是: 输入信号具有相当高的频率(大约 2MHz),并且, STM-F401
我正在使用 MPC 7555 Controller 。它有一个 16 位 Σ-Δ ADC。称为麦克风输入的信号被馈送到该 ADC 引脚。根据该电压,产生与ADC信号采样频率相同的PWM信号。 For
我想创建一个 PWM 信号。我希望频率接近 38 kHz。我的理论计算周期是 26.3 微秒。所以我选择26微秒。我可以观察我的信号。 但我不明白我的代码如何正常工作:) (我的时钟频率是1MHz,所
我正在尝试编写一个程序来生成正弦波,我将通过被动夏季输出这些正弦波,从而在我按下按钮时让微 Controller 播放声音。 我已经让 PWM 正常工作,并且可以使用常量值演奏音符,但我想使用正弦波而
我可能只是在使用这些寄存器之一时遇到了一个看不见森林的时刻,但我无法让 PWM 在 dsPIC33FJ32MC102 上工作微 Controller (警告:大 PDF)我正在玩。我已经遵循了数据表和
如何将字符串输出为列表? (可能很简单,我知道) 我查看了所有 google,NONE 的解决方案有效。 我的代码:(有点意译) import Pmw from tkinter import * ro
我正在尝试为每个对角线(在我的例子中为 PWM1 和 PWM4)使用一个 PWM 发生器来控制 H 桥转换器。 我希望能够同时控制频率和占空比。为此,我在 PWM4 周期开始时生成触发中断,然后更新两
在 Atmel ATmega328P (datasheet) 上,有三个定时器可用于 PWM 生成(定时器 0、定时器 1 和定时器 2)。 我已经有了使用 8 位 timer2 所需的东西,我只关心
我正在尝试用蜂鸣器和 Arduino 制作和弦音乐播放器。我在关注 this教程作为指南,但我无法弄清楚。代码就像: void playTone() { long elapsed_time =
我有一个 STM32F4,我想对一个已与掩码进行“或”运算的 GPIO 端口进行 PWM 处理。 所以,也许我们想要以 200khz 的频率 PWM 0b00100010 一段时间,但是,10khz
我建了this motor shield基于L298N芯片控制坦克的两个电机。一个电机使用引脚 5 和 6,另一个电机使用引脚 10 和 11。 尝试添加TSOP 4838时为了用红外 Remote
我有一个 STM32F4,我想对一个已与掩码进行“或”运算的 GPIO 端口进行 PWM 处理。 所以,也许我们想要以 200khz 的频率 PWM 0b00100010 一段时间,但是,10khz
我是 ARM MCU (STM32F411) 的新手,我一直在尝试使用 STM 的 HAL 库和 STM32Cube 寻找外围设备的方法。 为了使用一些外围设备,我已经配置了我的开发板: Timer
Raspberry pi B+ 有四个硬件 PWM。如何在 C/C++ 中使用它们。解决方案越简单越好。 我用 WiringPi 找到了一个可行的解决方案 gpio mode 1 pwm gpio
我一直在尝试在 PIC16F877 MCU 上使用 PWM 模块,但我得到的只是 CCP1/CCP2 引脚上的平坦低电平。 配置和启动 PWM 模块的代码如下。 // Configure PWM //
我是一名优秀的程序员,十分优秀!