打印
[程序源码]

九齐高手们 NY8B062F的ADC驱动PWM问题 你们有过吗?

[复制链接]
2785|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
boya355|  楼主 | 2024-9-26 09:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 boya355 于 2024-10-3 16:39 编辑

如下的九齐单片机程序,ADC取样控制PWM占空比,  但是就不能实现, 我掉进了什么坑! 出不来呢? ! 请九齐高人指点迷津


// -----------AIN2_Convert----------------
void F_AIN2_Convert(char count)
{   ADC_Initial();
          char i;
          ADMD  = 0x90 | C_ADC_PA2;                        //  also ADMD=92// Select AIN2(PA2) pad as ADC input
          for(i=1;i<=count; i++)
          {                              
           ADMDbits.START = 1;                                  // Start a ADC conversion session
           delay(50);                                                  // Delay 0.56ms(clock=4MHz/2T) for waiting ADC stable
           F_wait_eoc();                                             // Wait for ADC conversion complete
           R_AIN2_DATA += ADD;
           }  
}
//----------read adc----------------  ------
unsigned int ADC_Get_Resault()
{
                CLRWDT();                                     // Clear watchdog timer,                R_AIN2_DATA = 0x00;
                F_AIN2_Convert(8);                         // Execute 8-times of AIN2 ADC conversion
                R_AIN2_DATA >>= 3;                      // R_AIN2_DATA divided 8
                return R_AIN2_DATA;
}
void F_wait_eoc(void)
        {
           while(ADMDbits.EOC==0);
        }

//----------------Pwm_Init----------
void PWM1_Init()
{        TMRH              = 0x00;
        TMR1                = 0xff;  // @ 16KHZ
        PWM1DUTY        = 0x7D;                                                // PWM1DUTY[9:0] = 001h
        T1CR2                = C_PS1_Dis | C_TMR1_ClkSrc_Inst;        // Prescaler 1:1, Timer1 clock source is instruction clock
        T1CR1                = C_PWM1_En | C_PWM1_Active_Hi | C_TMR1_Reload | C_TMR1_En;       // Enable PWM1, Active_High,Reloaded      
}
// --------------interrupt AIN2 - ADC service routine--------------------
void isr(void)__interrupt(0)                                 //  ADC of AIN2  and timer1 together Interrput !!!
{
   if(ADRbits.ADIF)
    {
      ADRbits.ADIF =0;
    }
   if(INTFbits.T1IF)
    { INTFbits.T1IF =0;
    PWM1DUTY =(unsigned short)ADC_Get_Resault();  
   }   
}
//--------------Update_Pwm1()-----------------------------------------
void Update_PWM1()
{
  PWM1DUTY =ADC_Get_Resault();  
  }
以上为关键函数,其他函数基本验证过。 目前问题:ADC读取的数据(疑点一能否读出?), update 不了 PWM1DUTY(疑点二) ?
本程序中使用了两种方法, 其一是中断函数中更新, 其二是 单独void Update_PWM1()   均不能实现
我究竟犯了谁的错???

使用特权

评论回复

相关帖子

沙发
LML20010621| | 2024-11-9 16:55 | 只看该作者
您好这个代码可以分享一下吗

使用特权

评论回复
板凳
boya355|  楼主 | 2024-11-13 23:21 | 只看该作者
可以 的   没问提

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

5

主题

22

帖子

1

粉丝