main.c

来自「利用ATMEL单片机的pwm功能实现DA.」· C语言 代码 · 共 41 行

C
41
字号
/************************************************************
文   件:main.c
用   途:由TC1产生两路独立的16位PWM输出,通过滤波变成电压
Target : M16
Crystal: 8.0000Mhz
说   明:PD4输出PWMB,PD5输出PWMA
	 	 产生的PWM波形通过滤波后转换成电压
		 因LM358和滤波电路本身的原因,最大电压约能到VCC的3/4
		 这种PWM模拟DA的方式,精度有限
创   建:2008.1.29
修   改:2008.1.29
Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
************************************************************/

#include <iom16v.h>
#include <macros.h>

//主函数
void main(void)
  {

  PORTD = 0x00;
  DDRD = (1<<PD4)|(1<<PD5);    		//PWM引脚PD4,PD5设置为输出
  
  TCCR1A = 0xA2;         			//两路PWM,匹配清零
  TCCR1B = 0x19;         			//快速PWM模式,位数可调,预分频1
  ICR1   = 2048;     				//计数上限值,此数为16位PWM

  OCR1A=512;           				//匹配初值
  OCR1B=1484;
  
  //输出电压计算 占空比*VCC
  //这里为 OCR1n / ICR1 * VCC
  //实测DA2 为1.42V,DA1 为3.73。  3.73 V为LM358在输入为5V的最大输出电压
  
  
  while(1)
    {
	 ;
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?