还没过四级 发表于 2024-12-18 10:04

ATmega16定时器1定时问题

我用ATmega16的定时器1定时1us,输出方波,但是实际测量的时候发现本来应该是周期2us的方波,实际输出的是4.75us的周期,一直找不到问题在哪,定时1ms的时候就没有事儿,哪位大佬知道问题可能在哪里?

还没过四级 发表于 2024-12-18 10:06

本帖最后由 还没过四级 于 2024-12-18 10:07 编辑

补充一下,晶振16M的

lcczg 发表于 2024-12-19 09:11

本帖最后由 lcczg 于 2024-12-19 09:12 编辑

把系统时钟初始化和定时器1初始化的代码贴上来,另外还有产生方波的代码,大家看一下。

xch 发表于 2024-12-19 09:16

是不是看不清楚 1 和 7?16分频变成76分频

dongnanxibei 发表于 2024-12-24 16:48

应该是切换过程浪费了时间吧?

dongnanxibei 发表于 2024-12-24 16:48

你延时长点看看准不准

nuan11nuan 发表于 2025-1-15 19:17

在使用 ATmega16 的定时器1生成1us方波时,实际测量到的周期为4.75us,而定时1ms时没有问题,这表明问题可能与定时器的配置或时钟频率有关。

twinkhahale 发表于 2025-1-15 20:23

ATmega16的定时器是基于系统时钟(F_CPU)工作的。如果时钟频率设置不正确,定时器的计时会不准确。确认 F_CPU 的定义是否正确。例如,如果使用8MHz晶振

tiakon 发表于 2025-1-15 21:25

定时器1的配置可能存在问题,导致计时不准确。确保定时器1的预分频器(Prescaler)设置正确。对于1us的定时,通常需要将预分频器设置为1(即不分频)

hhdhy 发表于 2025-1-15 22:34

检查定时器的模式是否正确。例如,使用CTC模式(Clear Timer on Compare Match)来生成精确的方波

星星点点didi 发表于 2025-1-16 09:12

比较匹配寄存器(OCR1A)的值可能计算错误,导致定时不准确。计算 OCR1A 的值时,确保公式正确

nqty 发表于 2025-1-16 11:00

如果使用中断来生成方波,中断处理程序的执行时间可能影响定时精度。确保中断处理程序尽可能简短,避免在中断中执行复杂的操作

yuliangren 发表于 2025-1-16 12:23

如果需要更高的精度,可以考虑使用硬件输出比较功能(如 OC1A 引脚)直接生成方波,而不依赖中断

suiziq 发表于 2025-1-16 13:11

硬件电路可能存在干扰或设计问题,导致信号失真。检查电路连接,确保信号线没有受到干扰。使用示波器观察输出波形,确认是否存在噪声或失真

hight1light 发表于 2025-1-16 14:08

使用示波器测量输出波形,确认周期和占空比。

miltk 发表于 2025-1-16 15:24

逐步调整 OCR1A 的值,观察波形变化,找到最接近1us周期的值。

波尔街道的松柏 发表于 2025-7-28 20:59

ATmega16 定时器 1 为 16 位定时器,可通过设置 CTC 或快速 PWM 模式,配置预分频器及 OCR1A/B 值实现定时。

classroom 发表于 2025-7-30 17:10

ATmega16的定时器1时钟源由TCCR1B寄存器的CS12:CS10位控制。若未正确配置,可能导致实际计数频率低于预期。

flycamelaaa 发表于 2025-7-30 18:10

检查定时器时钟源与分频系数配置是否正确。

powerantone 发表于 2025-7-30 18:11

定时器模式配置错误?
页: [1]
查看完整版本: ATmega16定时器1定时问题