boya355 发表于 2024-9-26 09:41

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

本帖最后由 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 = 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 AIN2and 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

可以 的   没问提
页: [1]
查看完整版本: 九齐高手们 NY8B062F的ADC驱动PWM问题 你们有过吗?