c - 为什么我的 TIMER0 不使用 Atmega644 控制器上 XTAL1 和 XTAL2 之间的振荡器?
问题描述
所以我试图在我的 Atmega644 MCU 的 XTAL1 和 XTAL2 引脚之间放置一个 16 MHz 晶体振荡器。但我不让它工作。
我首先定义
volatile unsigned int input_timer = 150;
ISR (TIMER0_COMPA_vect) {
if (input_timer>0){
input_timer--;
}
}
我已按以下方式启动计时器
TIMSK0 = (1 << OCIE0A); //Compare match enabled
TCCR0A = (1 << WGM01); //CTC mode
TCCR0B = ~(1 << CS02) | (1 << CS01) |( 1 << CS00); //DIVIDE 64
OCR0A = 125;
为了测试它是否有效,我正在执行以下操作
int p = 0;
while(1)
{
if (input_timer == 0) {
lcd_clrscr();
char c[7]
itoa(p,c,10);
lcd_puts(c);
p++;
}
所以基本上每次计数器从 150 倒计时到 0 时,我都会更新 lcd 屏幕。如果使用 16 MHz osc,这应该每 (16e6 / (150*125*64) = 13.3 更新/秒发生一次。
如果它是用 F_CPU 完成的,它应该每 (1e6/(125*150*64))= 0.83 更新/秒发生一次,这就是现在正在发生的事情。
那么我如何才能真正正确地在 XTAL1 和 XTAL2 引脚上实现振荡器。应该注意的是,我现在没有使用正确的去耦电容,不确定它是否重要。
解决方案
您还需要设置保险丝,以让您的微机知道您正在使用外部时钟。
推荐阅读
- javascript - React.js - 是否可以在第一次渲染之前获取元素的大小?
- python - 返回正确日期的函数
- angular - 在没有服务Angular的ngOnInit中创建一个函数
- unified-service-desk - Unified Service Desk 单一登录选项
- powerquery - 电源查询 - 具有动态列数的 List.NonNullCount
- java - 动态报告导出pdf类未找到异常错误
- python - 如何获取来自数组的选定数字的坐标
- php - 递归数组列表类别
- c - C 代码只能在一个项目中工作,不能在任何新项目中工作(不会写 txt 文件)
- javascript - 在 JavaScript 中创建对象数组的所有组合