PWM在100%占空比的可能会降低LED亮度
这是手机拍的一张照片,P20使用的100%占空比的PWM,P22使用的是io端口低电平导通,两个端口都是推挽模式,但目测来看,P20的会比较暗一些(手机拍的不一定对比明显,但确实这样)
#include <AI8H.H>
#define MAIN_Fosc 24000000UL
#define PSCR 11
#define ARR 7999
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
u16 CCR = 0;
u8 i = 0;
bit PWM1_Flag = 0;
void Timer0_Init(void) //30毫秒@24.000MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0xA0; //设置定时初始值
TH0 = 0x15; //设置定时初始值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1; //使能定时器0中断
}
void io_init(void)
{
P_SW2 |= 0X80; //扩展寄存器(XFR)访问使能
P2M0 = 0xff; P2M1 = 0x00; //P2端口全部推挽输出模式
}
void PWM_init(void)
{
PWMA_CCER1 = 0x00;
PWMA_CCMR1 = 0x60;
PWMA_CCER1 |= 0x01;
PWMA_CCMR1 |= 0x08;
PWMA_PSCRH = (u8)(PSCR >> 8);
PWMA_PSCRL = (u8)PSCR;
PWMA_ARRH = (u8)(ARR >> 8);
PWMA_ARRL = (u8)ARR;
PWMA_ENO |= 0x01;
PWMA_PS |= 0x01;
PWMA_BKR = 0x80;
PWMA_CR1 |= 0x81;
PWMA_CCR1H = (u8)(CCR >> 8);
PWMA_CCR1L = (u8)CCR;
}
void main(void)
{
// Timer0_Init();
io_init();
PWM_init();
P22 = 0;
EA = 1;
while(1)
{
}
}
void Timer0_Isr(void) interrupt 1
{
i++;
if(i >= 5)
{
if(!PWM1_Flag)
{
CCR += 200;
if(CCR >= ARR) PWM1_Flag = 1;
<p></p> }
else
{
CCR -= 200;
if(CCR <= 1999) PWM1_Flag = 0;
}
PWMA_CCR1H = (u8)(CCR >> 8);
PWMA_CCR1L = (u8)CCR;
i = 0;
}
}
示波器或逻辑分析仪看波形是直线吗? DebugLab 发表于 2024-8-25 20:08
示波器或逻辑分析仪看波形是直线吗?
没有,{:4_196:}你有的话帮我瞅瞅如何 LED是电流器件,电流恒定则亮度不变。你可以测下串联电阻的电压是否变小了导致电流减小。 梁工 发表于 2024-8-27 13:58
LED是电流器件,电流恒定则亮度不变。你可以测下串联电阻的电压是否变小了导致电流减小。 ...
好嘞,谢谢
页:
[1]