[技术问答]

N76E的几个基础小问题

[复制链接]
3937|10
手机看帖
扫描二维码
随时随地手机跟帖
mengqi54321|  楼主 | 2018-2-10 14:34 | 显示全部楼层 |阅读模式
本人新手,入门是STC试了几个小程序。还行。 最近入手N76E003,感觉比STC要复杂些。请教几个问题:
1.  IO配置上。多了 输出斜率和输入史密特。   请问其作用是什么? 另外,看他们的0X地址。和PXM1 PXM2是重叠的。改了这个不是把IO口配置也改了?
2,准备用上PWM和ADC。暂时尝试到PWM部份。   问题1,PWM全部共用一个频率,只可单独调占空比。  我现在需要用上两路PWM。例如一路38K,一路3.8K。有时要同时输出,有时会要分别输出。请问能做到吗?并且没看到PWM单独使能。  只能总开关一打开全部打开吗?

void PWM3_LED1(uchar x)
{
        uint c;
        uchar a,b;
        c = 0xffff/x;
        a = c>>8;
        b = c;
        PIOCON0 = 0X80; //P00口用于PWM3输出
        PWMPL =  0XA6;  //产生38K频率  = 16M/38K = 422  (0x1a6 )
        PWMPH =  0X01;
        PWM3H =  a;
        PWM3L =  b;
        PWMCON0 = 0x80;  //使能PWM
}

以上PWM输出失败,请问少了什么配置?

有深圳朋友熟悉N76的接手小程序开发没。可联系Q 327949,  
yjgna| | 2018-2-10 16:04 | 显示全部楼层
PIOCON0 = 0X80; //P00口用于PWM3输出

这句错了 是0x08

使用特权

评论回复
yjgna| | 2018-2-10 16:07 | 显示全部楼层
还有调节占空比,给个参考
/*
        ch: 0~5
        duty: 0~100
*/
void PWM_Set_Duty(uint8_t ch, uint8_t duty)
{
        uint16_t counterTop;
        uint16_t counterSet;
        counterTop = PWMPH;
        counterTop = counterTop<<8;
        counterTop |= PWMPL;
       
        counterSet = (double)counterTop *duty /100 ;
       
        switch(ch)
        {
        case 0:
                PWM0H = counterSet >> 8;
                PWM0L = counterSet & 0xFF;
                break;
        case 1:
                PWM1H = counterSet >> 8;;
                PWM1L = counterSet & 0xFF;
                break;
        case 2:
                PWM2H = counterSet >> 8;;
                PWM2L = counterSet & 0xFF;
                break;
        case 3:
                PWM3H = counterSet >> 8;;
                PWM3L = counterSet & 0xFF;
                break;
        case 4:
                set_SFRPAGE;
                PWM4H = counterSet >> 8;;
                PWM4L = counterSet & 0xFF;
                clr_SFRPAGE;       
                break;
        case 5:
                set_SFRPAGE;
                PWM5H = counterSet >> 8;;
                PWM5L = counterSet & 0xFF;
                clr_SFRPAGE;       
                break;       
        default:
                break;
        }
       
        set_LOAD;
        set_PWMRUN;
}

使用特权

评论回复
dongnanxibei| | 2018-2-10 17:24 | 显示全部楼层
玩这个要配合手册,确实比普通的51复杂,因为功能多了。

使用特权

评论回复
734774645| | 2018-2-10 17:48 | 显示全部楼层
/*---------------------------------------------------------------------------------------------------------*/
/*                                                                                                         */
/* Copyright(c) 2017 Nuvoton Technology Corp. All rights reserved.                                         */
/*                                                                                                         */
/*---------------------------------------------------------------------------------------------------------*/

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

//***********************************************************************************************************
//  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);
}

使用特权

评论回复
yiy| | 2018-2-10 20:16 | 显示全部楼层
所有的PWM使用了一个时钟源,所以频率只能一样。但是占空比可以不同。

使用特权

评论回复
xixi2017| | 2018-2-10 20:24 | 显示全部楼层
第一个应该是设置后,IO速度响应快了。

使用特权

评论回复
mengqi54321|  楼主 | 2018-2-11 07:27 | 显示全部楼层
果然是80 和 08 的问题。新手老是范这种错,唉。。。  PWM两路同时不同频率输出。没有办法吗?           另外,IO口的话。那个什么斜率等配置的地址和 PXM1 PXM2地址一样。这不变成配置IO状态了吗?请点解~~~~  感谢~

使用特权

评论回复
yjgna| | 2018-2-11 08:56 | 显示全部楼层
寄存器地址一样,但是所在的SFR页不一样。要使用SFR 页1的寄存器,要先调用
set_SFRPAGE;
设置完后,再恢复
clr_SFRPAGE;       

使用特权

评论回复
caijie001| | 2018-2-11 09:23 | 显示全部楼层
这个芯片应该有库,demo,你可以试着用一下

使用特权

评论回复
zhuotuzi| | 2018-2-19 17:01 | 显示全部楼层
功能越多,越复杂

使用特权

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

本版积分规则

3

主题

5

帖子

0

粉丝