电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>通过编程其寄存器在ATtiny上启用PWM

通过编程其寄存器在ATtiny上启用PWM

2023-02-10 | zip | 0.33 MB | 次下载 | 免费

资料介绍

描述

有没有想过在不使用 ArduinoanalogWrite()函数的情况下在微芯片上启用 PWM 有多难?

该项目仅使用本机硬件功能在 ATtiny85 上重新创建 Arduino 的 Fade 示例。在无法访问 Arduino 的语法糖化的情况下,我们需要重新创建 Arduino 的analogWrite()函数。在引擎盖下,此功能通过在 ATtiny85 上设置必要的寄存器来启用脉冲宽度调制 (PWM)。有关 PWM 如何工作的更多信息,请参阅这些精彩教程

您还需要 Atmel 的数据表来了解寄存器的命名方式以及它们控制的功能:

第 1 步:组装电路

按照项目附带的图表组装电路。它看起来应该类似于:

pxl_20220123_140023728_sGwOarZNYW.jpg?auto=compress%2Cformat&w=740&h=555&fit=max
组装电路
 

第 2 步:将您的 Arduino Uno 配置为充当程序员

我们不会将我们的程序上传到 Arduino Uno,而是将其用作编程设备以将我们的代码传输到 ATtiny。要使任何 Arduino 硬件充当程序员,请打开 Arduino IDE 并选择文件 > 示例 > ArduinoISP 验证我们的 Arduino Uno 在Tools > Board and Tools > Port中被正确选择打开示例草图,选择Sketch > Upload 我们的 Arduino Uno 现在充当程序员。

接下来我们需要为 ATtiny 安装核心,这样我们就可以使用它的库了。打开首选项并在其他 Board Manager URL下添加:

https://raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

重启 Arduino IDE,点击Tools > Board > Board Manager…并搜索 ATtiny。您应该找到David A. Mellis 的结果 attiny 点击Install将 ATtiny 的代码添加到 Arduino IDE 中。

现在我们可以选择我们的 ATTiny 作为上传目标。在“工具”>“电路板”中选择ATtiny85 ,在“工具”>“端口”下选择 Arduino Uno。工具 > 程序员下选择 Arduino 作为 ISP。要将代码上传到我们的 ATtiny,请选择Sketch > Upload Using Programmer 打开此项目附带的代码并将其上传到 ATtiny。几秒钟后,LED 应该开始闪烁,因为 ATtiny 开始执行程序代码如果抛出任何错误,通常是因为布线错误。仔细检查所有内容,重新启动 Arduino IDE 并再试一次。

第 3 步:让我们编写代码

由于我们不想使用 Arduino 的任何内置功能,我们现在需要手动包含 avr-libc 库。

#include 
#include 

接下来,我们需要在 ATtiny 上启用脉冲宽度调制 (PWM)。PWM 允许我们像使用 analogWrite() 函数一样控制输出。幕后发生的事情是特殊寄存器中的某些位被设置为启用 PWM:

int main()
{
  DDRB = 1 << DDB0; 
  TCCR0A = 1 << COM0A1 | 1 << WGM01 | 1 << WGM00;
  TCCR0B = 1 << CS00;
}

第一个寄存器是数据方向寄存器端口 B ( DDRB )。这类似于“pinMode(0, OUTPUT)”,它设置引脚的数据方向。我们在 DDBO(端口 B 引脚 0)位置启用该位。接下来的两个寄存器是定时器/计数器控制寄存器 A 和 B ( TCCR0A , TCCR0B) 它们控制 PWM 定时器我们正在启用用于比较匹配输出 A 模式(将 PWM 设置为非反相模式)的位和用于波形生成模式寄存器 0 和 1 的另外两位。这将启用快速 PWM。

我们设置的最后一位是在定时器/计数器控制寄存器 B 中:我们禁用 PWM 定时器的预分频。现在我们不调用 analogWrite()(就像我们使用 Arduino 的函数时那样),而是将输出比较寄存器 A ( OCR0A ) 设置为所需的值:

OCR0A = value;

其余部分类似于 Arduino IDE 中的原始 Fade.ino 示例草图。整个项目代码如下所示:

/*
  Fade for ATtiny85 using only avr-libc
*/

#include 
#include 

int fadeAmount = 5;
int brightness = 0;

int main()
{
 DDRB = 1 << DDB0;
 TCCR0A = 1 << COM0A1 | 1 << WGM01 | 1 << WGM00;
 TCCR0B = 1 << CS00;
 while (1) {
   brightness = brightness + fadeAmount;
   if (brightness <= 0 || brightness >= 255) {
     fadeAmount = -fadeAmount;
   }
   OCR0A = brightness;
   _delay_ms(30);
 }
 return 0;
}

执照

这个项目是在麻省理工学院许可证下发布的。

 


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费