历史上的今天
今天是:2024年10月17日(星期四)
2019年10月17日 | ATMEGA16单片机Timer1的OC1A脚输出占空比可调的PWM信号
2019-10-17 来源:51hei
采用快速PWM方式,通过按键设置OCR1A的值,从而改变占空比;
当数值超出界限时,以了LED和LCD的方式报警;
输出经过滤波可以得到直流信号,改变占空比,输出不一样。
仿真原理图如下
单片机源程序如下:
#define MAIN_C
#include "includes.h"
/***************************/
/*PWM*/
/*晶振为4MHz*/
/*利用Timer1的OC1A脚输出占空比可调的信号*/
/*通过按键控制OCR1A的值*/
/***************************/
#define PwmOut PD5 //A通道的PWM输出
#define OCR OCR1A
#define KeyUp PA0 //增大PWM值的按键
#define KeyDown PA1 //减小PWM值的按键
#define Above PA2 //设置位值过高指示
#define Below PA3 //设置位值过低指示
#define STEP 64 //定义按键时的步进值
int OcrReg = 1024; //OCR1A初始值
int Icr1Reg = 0x7ff; //PWM的计数顶部值 Icr1Reg = 2047
//unsigned char *show = "0000";
unsigned char temp;
void init(void) //初始化函数
{
//比较匹配时清零,计数到最大时置位OC1A
TCCR1A |= (1< TCCR1B |= (1< OCR = 0 ; DDRD |= (1< } void ShowValue(int value) { unsigned char *temp = "0000"; temp[0] = value/1000 + 0x30; value = value%1000; temp[1] = value/100 +0x30; value = value%100; temp[2] = value/10 + 0x30; value = value%10; temp[3] = value + 0x30; ClearLine(2); LCD_DisplayString(2,1,"OCR1A = "); LCD_DisplayString(2,9,temp); } void main(void) { unsigned char i; init(); Init_LCD(); OCR = OcrReg; LCD_DisplayString(1,1,"PWM test"); LCD_DisplayString(2,1,"OCR1A = "); ShowValue(OcrReg); while(1) { if(!(PINA&(1< delay_nms(10); //按键消抖 if(!(PINA&(1< while(!(PINA&(1< { for(i=0;i<5;i++) { PORTA ^= (1< } ClearLine(2); LCD_DisplayString(2,1,"Value MAX!"); } else { PORTA |= (1< OCR = OcrReg; ShowValue(OcrReg); } } } if(!(PINA&(1< delay_nms(10); //按键消抖 if(!(PINA&(1< while(!(PINA&(1< { for(i=0;i<5;i++) { PORTA ^= (1< } ClearLine(2); LCD_DisplayString(2,1,"Value MIN!"); } else { PORTA |= (1< OCR = OcrReg; ShowValue(OcrReg); } } } } } //比较中断子程序,可以用来产生正弦波 /*#pragma vector = TIMER1_COMPA_vect __interrupt void CompA_isr( void ) { OcrReg = st[j]; OCR = OcrReg; j++; if(j>88) { j = 0; } }*/
史海拾趣
|
现在coding不再做了,连架构都不做了,专职于做管理还有一些客户交流以及跟公司老总的交流问题,慢慢的,很多技术上的问题就疏远了,都在担心以后技术会不会慢慢就退化了!要跳槽如果没有manager该怎么办呢… 查看全部问答> |
|
我是初次接触这个软件,英文版的有点看不懂,有没有高手能帮忙搞一个,将不胜感激!或者是只要兼容vista系统的版本都可以。急求!!!!!!!!!… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 13:26 编辑 正在做一个DSP--PCI的驱动,应用程序调试时出现如下: ----- damned.pjt - Debug ----------------------------- [async_pci.cdb] \\"E:\\\\CCStudio_v3.1\\\\plugins\ ...… 查看全部问答> |
|
RealView Development Suite 4.0 Professional 软件 RealView Development Suite 4.0 Professional 软件http://www.mcu123.com/news/Soft/embsof/arm/200811/486.html… 查看全部问答> |
|
可能看到我帖子的人,会有些失望,这么久了才提交个led循闪烁的程序,是不太应该,其实这几天都是在看M4的驱动编程,一直在归纳总结自己在M4学习中Keil软件方面的问题,大家也许看看我的文档,就能不这么责怪我了呵 ...… 查看全部问答> |
|
嵌入式学习的点点滴滴(我的学习笔记-《鸟哥的linux私房菜》3) 大家好,抽出一点时间写一下今天的学习笔记,这几天感觉自己挺认真的,晚上决定奖励自己去看场电影 (本想把自己的linux安装方法上传的,想想还是算了,网上有太多太多这样的教程啦,在这里提一个小的建议,就是像我一样的新手,在虚拟机中安装lin ...… 查看全部问答> |
|
本帖最后由 dontium 于 2015-1-23 11:23 编辑 在光电二极管探测电路中,常用上述的电路,将电流转换为电压,通过学习,发现其噪声来源还真不少: 1、反馈电阻的热噪声,电阻热噪声的带宽极限为放大器的信号带宽与砖墙滤波器的矫正系数; 2、电 ...… 查看全部问答> |
|
Ubuntu下vim的安装 参与Helper2416开发板助学计划心得 对于linux的学习,想必不能不对vi的学习,对于新手来说,一般都不习惯vi的应用,特别是系统自带的vi,进入不能按照我们平时的习惯去删除、移动等操作。ubuntu中vi在编辑状态下方向键不能用, ...… 查看全部问答> |




