打印
[DemoCode下载]

ML51的ADC使用案例

[复制链接]
1719|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
734774645|  楼主 | 2019-8-31 23:06 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
PWM触发
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: ML51 ADC GPIO tirg demo code
//***********************************************************************************************************
#include "ML51.h"

/******************************************************************************
* FUNCTION_PURPOSE: ADC interrupt Service Routine
******************************************************************************/
void ADC_ISR (void) interrupt 11
{
    clr_ADCCON0_ADCF;                               //clear ADC interrupt flag
    printf ("\n PWM trig ADC = 0x%bx",ADCRH);
}

/******************************************************************************
The main C function.  Program execution starts
here after stack initialization.
******************************************************************************/
void main ()
{
    MFP_P31_UART0_TXD;
    P31_QUASI_MODE;
    UART_Open(24000000,UART0_Timer1,115200);
    ENABLE_UART0_PRINTF;
  
/*-------------------------------------------------------------------------------
  ADC trig by PWM channel 0 falling edge
  Step 1: Setting P2.5 as PWM0 channel 0 output
  Step 2: Enable ADC channel 1 P2.4 input hardware trigger by PWM0 channel0 and FALLING EDGE trig
  Step 3: Enable ADC AIN0
--------------------------------------------------------------------------------*/
// PWM initial setting
    MFP_P25_PWM0_CH0;                                                    //setting P2.5 multi function pin as GPIO
    P25_PUSHPULL_MODE;                                                  //setting P2.5 GPIO as output mode
    PWM0_ConfigOutputChannel(0,Independent,EdgeAligned,0x6FF,10);        //setting PWM0 channel 0 output
    PWM0_RUN();
  
// ADC initial setting  
    ADC_EnableHWTrigger(ADC_HWT_PWM0CH0, ADC_HWT_FALLINGEDGE,0);        //Enable ADC hardware trigger by PWM0 channel 0 FALLING EDGE trig
    ADC_Open(ADC_SINGLE,1);                                              //Enable ADC AIN0
    ADC_Interrupt(Enable,ADC_INT_SINGLE);                                //Enable ADC interrupt
    ENABLE_GLOBAL_INTERRUPT;                                           //Enable global interrupt
  
/* find ADC result in ADC interrupt*/
    while(1);                                                            // Wait GPIO trig and ADC interrupt to check result
}




使用特权

评论回复
沙发
734774645|  楼主 | 2019-8-31 23:07 | 只看该作者
GPIO触发
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

#include "ML51.h"


void ADC_ISR (void) interrupt 11
{
    clr_ADCCON0_ADCF;                               //clear ADC interrupt flag
    printf ("\n ADCRH = 0x%bx",ADCRH);
}

/******************************************************************************
The main C function.  Program execution starts
here after stack initialization.
******************************************************************************/
void main ()
{
    MFP_P31_UART0_TXD;
    P31_QUASI_MODE;
    UART_Open(24000000,UART0_Timer1,115200);
    ENABLE_UART0_PRINTF;;
/*-------------------------------------------------------------------------------
  ADC port trig initial setting toggle P0.3 to start ADC AIN0 channel convert
  * include gpio.c
  * include adc.c
  Step 1: setting P0.3 multi function pin as GPIO
  Step 2: setting P0.3 GPIO as input mode
  Step 3: Enable ADC hardware trigger as STADC and FALLING EDGE trig
  Step 4: enable ADC AIN0
--------------------------------------------------------------------------------*/
    MFP_P03_STADC;                                                   //setting P0.3 multi function pin as start ADC.
    P03_INPUT_MODE;                                                  //setting P0.3 GPIO as input mode
    ADC_EnableHWTrigger(ADC_HWT_STADC, ADC_HWT_FALLINGEDGE,0);       //Enable ADC hardware trigger as STADC and FALLING EDGE trig
    ADC_Open(ADC_SINGLE,0);                                          //Enable ADC AIN0
    ADC_Interrupt(Enable,ADC_INT_SINGLE);                            //Enable ADC interrupt
    ENABLE_GLOBAL_INTERRUPT;                                         // Enable global interrupt
/* find ADC result in ADC interrupt*/
    while(1);                                                        // Wait GPIO trig and ADC interrupt to check result
}




使用特权

评论回复
板凳
734774645|  楼主 | 2019-8-31 23:08 | 只看该作者
ADC的内部参考设置
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: ML51 series ADC software trigger on shot demo code
//***********************************************************************************************************
#include "ML51.h"

/******************************************************************************
The main C function.  Program execution starts
here after stack initialization.
******************************************************************************/
void main ()
{
  unsigned int ADCRESULT;
/*
For UART0 P0.5 TXD output setting
* include gipo.c in Library for GPIO mode setting
* include uart.c in Library Setting for UART0
*/
    MFP_P31_UART0_TXD;                              // UART0 TXD use P0.5
    P31_QUASI_MODE;                                 // set P0.5  as Quasi mode for UART0 trasnfer
    UART_Open(24000000,UART0_Timer3,115200);        // Open UART0 use timer1 as baudrate generate and baud rate = 115200
    ENABLE_UART0_PRINTF;  
/*
  ADCS to trig ADC convert
  * include adc.c in Library for ADC initial setting
*/  
    VREF_Reload(LEVEL1);
    VREF_Open(LEVEL1);
    ADC_Open(ADC_SINGLE,1);                                        //Enable ADC_CH4
    ADC_ConvertTime(3,7);
  
/* find ADC result in ADC interrupt*/
                                            
    while(1)
    {
        set_ADCCON0_ADCS;                           // Software trig adc start
        while((ADCCON0|CLR_BIT7)==CLR_BIT7);         // wait ADCF = 1;
        ADCRESULT = (ADCRH<<4)+ADCRL;
        printf("\n ADC result = 0x%X  ", ADCRESULT);
        Timer0_Delay(24000000,100,1000);
    }
  
}

使用特权

评论回复
地板
734774645|  楼主 | 2019-8-31 23:08 | 只看该作者
ADC的中断
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2019 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

//***********************************************************************************************************
//  Website: http://www.nuvoton.com
//  E-Mail : MicroC-8bit@nuvoton.com
//***********************************************************************************************************

//***********************************************************************************************************
//  File Function: ML51 series ADC software trigger on shot demo code
//***********************************************************************************************************
#include "ML51.h"

/******************************************************************************
* FUNCTION_PURPOSE: ADC interrupt Service Routine
******************************************************************************/
void ADC_ISR (void) interrupt 11
{
    clr_ADCCON0_ADCF;                               //clear ADC interrupt flag
                printf ("ADCRH = 0x%BX  ",ADCRH);                                                   //include uart.c before use printf function.
                printf ("ADCRL = 0x%BX \n ",ADCRL);                                                //include uart.c before use printf function.
}

/******************************************************************************
The main C function.  Program execution starts
here after stack initialization.
******************************************************************************/
void main ()
{
/*
For UART0 P0.5 TXD output setting
* include gipo.c in Library for GPIO mode setting
* include uart.c in Library Setting for UART0
*/
                MFP_P31_UART0_TXD;                                                                                                                        // UART0 TXD use P0.5
                P31_QUASI_MODE;                                                                           // set P0.5  as Quasi mode for UART0 trasnfer
                UART_Open(24000000,UART0_Timer3,115200);                                // Open UART0 use timer1 as baudrate generate and baud rate = 115200
                ENABLE_UART0_PRINTF;       
/*
        ADCS to trig ADC convert
        * include adc.c in Library for ADC initial setting
*/
                ADC_Open(ADC_SINGLE,1);                                                                                                                                                                //Enable ADC_CH4
                ADC_ConvertTime(2,7);
                ADC_Interrupt(Enable,ADC_INT_SINGLE);                                                                                                        //Enable ADC interrupt
                ENABLE_GLOBAL_INTERRUPT;                                                                                                                                                  // Enable global interrupt
/* find ADC result in ADC interrupt*/
                                                                                                                                                                               
                while(1)
                {
                                set_ADCCON0_ADCS;                                             // Software trig adc start
                                Timer0_Delay(24000000,100,1000);
                }
       
}

使用特权

评论回复
5
mintspring| | 2019-9-9 00:06 | 只看该作者
新出的ML和MS,比003的支持更好

使用特权

评论回复
6
mintspring| | 2019-9-9 00:07 | 只看该作者
操作比较容易的很。

使用特权

评论回复
7
xuanhuanzi| | 2019-9-9 21:55 | 只看该作者
好像同一时刻只能有一路。

使用特权

评论回复
8
杨光光光,| | 2021-7-23 14:19 | 只看该作者
这个配置怎么和一般的51配置不太一样啊

使用特权

评论回复
9
asmine| | 2021-7-23 14:42 | 只看该作者
这是几种触发

使用特权

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

本版积分规则

199

主题

3480

帖子

14

粉丝