打印
[技术问答]

哪位牛人可给个ADC控制PWM的N76E003程序?

[复制链接]
2244|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhang68430|  楼主 | 2017-11-7 16:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
哪位牛人可给个ADC控制PWM的N76E003程序?
感觉好难啊
沙发
heisexingqisi| | 2017-11-7 20:48 | 只看该作者
官方不是有这两个的例子吗,你把两个合并一下啊,把ADC读取的数据传递给PWM的参数就行了。

使用特权

评论回复
板凳
heisexingqisi| | 2017-11-7 20:53 | 只看该作者
/******************************************************************************
* [url=home.php?mod=space&uid=288409]@file[/url]     main.c
* [url=home.php?mod=space&uid=895143]@version[/url]  V1.00
* $Revision: 2 $
* $Date: 15/09/24 5:50p $
* [url=home.php?mod=space&uid=247401]@brief[/url]    Demonstrate ADC function by repeatedly convert the input of ADC
*           channel 5 (P1.5) and shows the result on UART console.
*
* @note
* Copyright (C) 2015 Nuvoton Technology Corp. All rights reserved.
*****************************************************************************/
#include <stdio.h>
#include "Mini51Series.h"

void ADC_IRQHandler(void)
{
    uint32_t u32Flag;

    // Get ADC comparator interrupt flag
    u32Flag = ADC_GET_INT_FLAG(ADC, ADC_ADF_INT);

    // Get ADC convert result
    printf("Convert result is %x\n", (uint32_t)ADC_GET_CONVERSION_DATA(ADC, 0));

    ADC_CLR_INT_FLAG(ADC, u32Flag);
}


void SYS_Init(void)
{
    /*---------------------------------------------------------------------------------------------------------*/
    /* Init System Clock                                                                                       */
    /*---------------------------------------------------------------------------------------------------------*/

    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Set P5 multi-function pins for XTAL1 and XTAL2 */
    SYS->P5_MFP = SYS_MFP_P50_XTAL1 | SYS_MFP_P51_XTAL2;

    /* Enable external 12MHz XTAL, HIRC */
    CLK->PWRCON = CLK_PWRCON_OSC22M_EN_Msk | CLK_PWRCON_HXT;

    /* Waiting for clock ready */
    CLK_WaitClockReady(CLK_CLKSTATUS_OSC22M_STB_Msk | CLK_CLKSTATUS_XTL_STB_Msk);

    /* Switch HCLK clock source to XTL */
    CLK_SetHCLK(CLK_CLKSEL0_HCLK_S_XTAL,CLK_CLKDIV_HCLK(1));

    /* Enable IP clock */
    CLK_EnableModuleClock(UART_MODULE);
    CLK_EnableModuleClock(ADC_MODULE);

    /* Select IP clock source */
    CLK_SetModuleClock(UART_MODULE,CLK_CLKSEL1_UART_S_XTAL,CLK_CLKDIV_UART(1));
    CLK_SetModuleClock(ADC_MODULE,CLK_CLKSEL1_ADC_S_XTAL,CLK_CLKDIV_ADC(6));

    /*---------------------------------------------------------------------------------------------------------*/
    /* Init I/O Multi-function                                                                                 */
    /*---------------------------------------------------------------------------------------------------------*/
    /* Set P0 multi-function pins for UART RXD, TXD */
    SYS->P0_MFP = SYS_MFP_P00_TXD | SYS_MFP_P01_RXD;

    /* Set P1 multi-function pin ADC channel 5 input*/
    SYS->P1_MFP = SYS_MFP_P15_AIN5;

    /* Analog pin OFFD to prevent leakage */
    P1->OFFD |= (1 << 5) << GPIO_OFFD_OFFD_Pos;

    /* To update the variable SystemCoreClock */
    SystemCoreClockUpdate();

    /* Lock protected registers */
    SYS_LockReg();
}

int32_t main (void)
{
    /* Init System, IP clock and multi-function I/O
       In the end of SYS_Init() will issue SYS_LockReg()
       to lock protected register. If user want to write
       protected register, please issue SYS_UnlockReg()
       to unlock protected register if necessary */
    SYS_Init();

    /* Init UART to 115200-8n1 for print message */
    UART_Open(UART0, 115200);

    printf("\nThis sample code demonstrate ADC channel 5 conversion and printf the result on UART\n");

    // Enable channel 5
    ADC_Open(ADC, 0, 0, 0x01 << 5);

    // Power on ADC
    ADC_POWER_ON(ADC);


    // Enable ADC convert complete interrupt
    ADC_EnableInt(ADC, ADC_ADF_INT);
    NVIC_EnableIRQ(ADC_IRQn);

    while(1) {
        // Trigger ADC conversion if it is idle
        if(!ADC_IS_BUSY(ADC)) {
            ADC_START_CONV(ADC);
        }
    }

}

/*** (C) COPYRIGHT 2015 Nuvoton Technology Corp. ***/


使用特权

评论回复
地板
heisexingqisi| | 2017-11-7 21:04 | 只看该作者
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2016 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Nuvoton Technoledge Corp.
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//  Date   : Apr/21/2016
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: N76E003 PWM Output demo code
//***********************************************************************************************************

#include "N76E003.h"
#include "Common.h"
#include "Delay.h"
#include "SFR_Macro.h"
#include "Function_define.h"

//*****************  The Following is in define in Fucntion_define.h  ***************************
//****** Always include Function_define.h call the define you want, detail see main(void) *******
//***********************************************************************************************
#if 0
////--------- PMW clock source select define ---------------------
//#define                PWM_CLOCK_FSYS                                        CKCON&=0xBF
//#define                PWM_CLOCK_TIMER1                                CKCON|=0x40
////--------- PWM clock devide define ----------------------------
//#define                PWM_CLOCK_DIV_2                                        PWMCON1|=0x01;PWMCON1&=0xF9
//#define                PWM_CLOCK_DIV_4                                        PWMCON1|=0x02;PWMCON1&=0xFA
//#define                PWM_CLOCK_DIV_8                                        PWMCON1|=0x03;PWMCON1&=0xFB
//#define                PWM_CLOCK_DIV_16                                PWMCON1|=0x04;PWMCON1&=0xFC
//#define                PWM_CLOCK_DIV_32                                PWMCON1|=0x05;PWMCON1&=0xFD
//#define                PWM_CLOCK_DIV_64                                PWMCON1|=0x06;PWMCON1&=0xFE
//#define                PWM_CLOCK_DIV_128                                PWMCON1|=0x07
////--------- PWM I/O select define ------------------------------
//#define                PWM5_P15_OUTPUT_ENABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1|=0x20;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.5 as PWM5 output enable
//#define                PWM5_P03_OUTPUT_ENABLE                PIOCON0|=0x20                                                                                                                                                                                                                //P0.3 as PWM5
//#define                PWM4_P01_OUTPUT_ENABLE                PIOCON0|=0x10                                                                                                                                                                                                                //P0.1 as PWM4 output enable
//#define                PWM3_P04_OUTPUT_ENABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1|=0x08;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P0.4 as PWM3 output enable
//#define                PWM3_P00_OUTPUT_ENABLE                PIOCON0|=0x08                                                                                                                                                                                                                //P0.0 as PWM3
//#define                PWM2_P05_OUTPUT_ENABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1|=0x04;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.0 as PWM2 output enable
//#define                PWM2_P10_OUTPUT_ENABLE                PIOCON0|=0x04                                                                                                                                                                                                                //P1.0 as PWM2
//#define                PWM1_P14_OUTPUT_ENABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1|=0x02;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.4 as PWM1 output enable
//#define                PWM1_P11_OUTPUT_ENABLE                PIOCON0|=0x02                                                                                                                                                                                                                //P1.1 as PWM1
//#define                PWM0_P12_OUTPUT_ENABLE                PIOCON0|=0x01                                                                                                                                                                                                                //P1.2 as PWM0 output enable
//#define         ALL_PWM_OUTPUT_ENABLE                        PIOCON0=0xFF;PIOCON1=0xFF
//#define                PWM5_P15_OUTPUT_DISABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1&=0xDF;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.5 as PWM5 output disable
//#define                PWM5_P03_OUTPUT_DISABLE                PIOCON0&=0xDF                                                                                                                                                                                                                //P0.3 as PWM5
//#define                PWM4_P01_OUTPUT_DISABLE                PIOCON0&=0xEF                                                                                                                                                                                                                //P0.1 as PWM4 output disable
//#define                PWM3_P04_OUTPUT_DISABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1&=0xF7;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P0.4 as PWM3 output disable
//#define                PWM3_P00_OUTPUT_DISABLE                PIOCON0&=0xF7                                                                                                                                                                                                                //P0.0 as PWM3
//#define                PWM2_P05_OUTPUT_DISABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1&=0xFB;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.0 as PWM2 output disable
//#define                PWM2_P10_OUTPUT_DISABLE                PIOCON0&=0xFB                                                                                                                                                                                                                //P1.0 as PWM2
//#define                PWM1_P14_OUTPUT_DISABLE                BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;SFRS|=0x01;PIOCON1&=0xFD;TA=0xAA;TA=0x55;SFRS&=0xFE;EA=BIT_TMP                                //P1.4 as PWM1 output disable
//#define                PWM1_P11_OUTPUT_DISABLE                PIOCON0&=0xFD                                                                                                                                                                                                                //P1.1 as PWM1
//#define                PWM0_P12_OUTPUT_DISABLE                PIOCON0&=0xFE                                                                                                                                                                                                                //P1.2 as PWM0 output disable
//#define         ALL_PWM_OUTPUT_DISABLE                PIOCON0=0x00;PIOCON1=0x00
////--------- PWM I/O Polarity Control ---------------------------
//#define                PWM5_OUTPUT_INVERSE                        PNP|=0x20                               
//#define                PWM4_OUTPUT_INVERSE                        PNP|=0x10                               
//#define                PWM3_OUTPUT_INVERSE                        PNP|=0x08                               
//#define                PWM2_OUTPUT_INVERSE                        PNP|=0x04                               
//#define                PWM1_OUTPUT_INVERSE                        PNP|=0x02                               
//#define                PWM0_OUTPUT_INVERSE                        PNP|=0x01                               
//#define                PWM_OUTPUT_ALL_INVERSE        PNP=0xFF
//#define                PWM5_OUTPUT_NORMAL                        PNP&=0xDF                               
//#define                PWM4_OUTPUT_NORMAL                        PNP&=0xEF                               
//#define                PWM3_OUTPUT_NORMAL                        PNP&=0xF7                               
//#define                PWM2_OUTPUT_NORMAL                        PNP&=0xFB                               
//#define                PWM1_OUTPUT_NORMAL                        PNP&=0xFD                               
//#define                PWM0_OUTPUT_NORMAL                        PNP&=0xFE                               
//#define                PWM_OUTPUT_ALL_NORMAL                PNP=0x00
////--------- PWM type define ------------------------------------
//#define                PWM_EDGE_TYPE                                                PWMCON1&=~SET_BIT4
//#define                PWM_CENTER_TYPE                                        PWMCON1|=SET_BIT4
////--------- PWM mode define ------------------------------------
//#define                PWM_IMDEPENDENT_MODE                PWMCON1&=0x3F
//#define                PWM_COMPLEMENTARY_MODE        PWMCON1|=0x40;PWMCON1&=0x7F
//#define                PWM_SYNCHRONIZED_MODE                PWMCON1|=0x80;PWMCON1&=0xBF
//#define         PWM_GP_MODE_ENABLE                        PWMCON1|=0x20
//#define                PWM_GP_MODE_DISABLE                        PWMCON1&=0xDF
////--------- PMW interrupt setting ------------------------------
//#define                PWM_FALLING_INT                                        PWMCON0&=0xF3
//#define                PWM_RISING_INT                                        PWMCON0|=0x04;PWMCON0&=0xF7
//#define                PWM_CENTRAL_POINT_INT                PWMCON0|=0x08;PWMCON0&=0xFB
//#define                PWM_PERIOD_END_INT                        PWMCON0|=0x0C
////--------- PWM interrupt pin select ---------------------------
//#define                PWM_INT_PWM0                                                PWMCON0&=0xFC
//#define                PWM_INT_PWM2                                                PWMCON0|=0x01;PWMCON0&=0xFD
//#define                PWM_INT_PWM4                                                PWMCON0|=0x02;PWMCON0&=0xFE
//#define                PWM_INT_PMW6                                                PWMCON0|=0x03
////--------- PWM Dead time setting ------------------------------
//#define         PWM45_DEADTIME_ENABLE                        BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;PDTEN|=0x04;EA=BIT_TMP
//#define         PWM34_DEADTIME_ENABLE                        BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;PDTEN|=0x02;EA=BIT_TMP
//#define         PWM01_DEADTIME_ENABLE                        BIT_TMP=EA;EA=0;TA=0xAA;TA=0x55;PDTEN|=0x01;EA=BIT_TMP
#endif


/************************************************************************************************************
*    Main function
************************************************************************************************************/
void main(void)
{
    Set_All_GPIO_Quasi_Mode;

                PWM0_P12_OUTPUT_ENABLE;
                PWM2_P10_OUTPUT_DISABLE;
                PWM4_P01_OUTPUT_ENABLE;
                PWM5_P03_OUTPUT_ENABLE;
       
                PWM_IMDEPENDENT_MODE;
                PWM_CLOCK_DIV_8;
                PWMPH = 0x07;
                PWMPL = 0xCF;
/**********************************************************************
        PWM frequency = Fpwm/((PWMPH,PWMPL) + 1) <Fpwm = Fsys/PWM_CLOCK_DIV>
                                                                = (16MHz/8)/(0x7CF + 1)
                                                                = 1KHz (1ms)
***********************************************************************/
       
                PWM0H = 0x00;                                       
                PWM0L = 0xCF;
                PWM2H = 0x01;                                               
                PWM2L = 0xCF;
               
                set_SFRPAGE;                                                //PWM4 and PWM5 duty seting is in SFP page 1
                PWM4H = 0x03;                                               
                PWM4L = 0xCF;
                PWM5H = 0x05;                                               
                PWM5L = 0xCF;
                clr_SFRPAGE;                                                                                       
// PWM output inversly enable
                PWM2_OUTPUT_INVERSE;

//-------- PWM start run--------------
    set_LOAD;
    set_PWMRUN;
                while(1);
}

使用特权

评论回复
5
heisexingqisi| | 2017-11-8 16:06 | 只看该作者
不要什么都让人家给你写好吧。官方的例子你自己搭配就行了。

使用特权

评论回复
6
antusheng| | 2017-11-8 22:13 | 只看该作者
上面朋友说的很对,就是这个方法,不一定非要给你做一个你说的,那样你要免费谁都没时间。

使用特权

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

本版积分规则

1

主题

1

帖子

0

粉丝