[活动专区]

赛元易码魔盒体验——11.测试拓展板的ADC

[复制链接]
465|9
手机看帖
扫描二维码
随时随地手机跟帖
一路向北lm|  楼主 | 2020-7-16 08:22 | 显示全部楼层 |阅读模式
本次咱来测试一下板卡的ADC功能,先来看一下拓展板的原理图,分别是两路ADC,AIN6和AIN7,AIN6可以直接旋转可调电阻就可以使AD的值变化,AIN7使外部输入的电压信号。这里就以AIN6为例,使用魔盒测试一下。
285425f0f9dc613f6a.png
111495f0f9dccdc143.png

使用特权

评论回复

相关帖子

一路向北lm|  楼主 | 2020-7-16 08:23 | 显示全部楼层
打开魔盒,配置串口UART0和定时器3以及ADC的AIN6,同时也配置了LED引脚为推挽输出,采样口选择千万不要忘记,具体配置如下:
851115f0f9dea38298.png

使用特权

评论回复
一路向北lm|  楼主 | 2020-7-16 08:23 | 显示全部楼层
使用魔盒生成代码,这次我们使用串口来打印ADC的数据,LED作为指示,打开生成的工程,同时有adc、timer、uart0、gpio四个外设驱动文件。
112195f0f9df961e6b.png

使用特权

评论回复
一路向北lm|  楼主 | 2020-7-16 08:23 | 显示全部楼层
在定时器3中断中设计标志位,同时LED翻转,暂且设定为1s打印一次ADC的数据。
生成的工程直接使用是有问题的,需要修改一下1个地方:注释TIM3_WorkMode1Config函数中TLX和THX的赋值
781285f0f9e0eade9f.png

使用特权

评论回复
一路向北lm|  楼主 | 2020-7-16 08:24 | 显示全部楼层
在串口中断服务函数中添加如下代码,完成对串口的发送和接收。
unsigned char UartSendFlag;
unsigned char UartReceiveFlag;
void UART0Interrupt()                interrupt 4               
{
    /*<UserCodeStart>*/
             if(TI)
        {
                TI = 0;        
                UartSendFlag = 1;               
        }
        if(RI)
        {
                RI = 0;        
                UartReceiveFlag = 1;
        }        
    /*<UserCodeEnd>*/
        /*UART0_it write here*/               
}


使用特权

评论回复
一路向北lm|  楼主 | 2020-7-16 08:24 | 显示全部楼层
串口驱动uart0.c文件中添加如下代码支持对字符和字符串的发送
extern unsigned char UartSendFlag;
extern unsigned char UartReceiveFlag;
/*****************************************************
*函数名称:Uart_Send_Byte(unsigned char byte)
*函数功能:串口发送一个字节函数
*入口参数:unsigned char byte
*出口参数:void
*****************************************************/
void Uart_Send_Byte(unsigned char byte)
{
  
          SBUF = byte;
                while(!UartSendFlag);
          UartSendFlag = 0;
  
}
/*****************************************************
*函数名称:void Uart_Send_String(unsigned char *str)
*函数功能:串口发送字符串函数
*入口参数:unsigned char *str
*出口参数:void
*****************************************************/
void Uart_Send_String(unsigned char *str)
{
    while(*str)
                {
                  Uart_Send_Byte(*str);
                        str++;
                }
}


使用特权

评论回复
一路向北lm|  楼主 | 2020-7-16 08:25 | 显示全部楼层
这样的话,定时器和串口都可以正常工作,在定时器3中断服务函数处理如下:
void Timer3Interrupt()                interrupt 13
{
    /*<UserCodeStart>*/
         static unsigned int count = 0;
    TXINX = 0x03;   //选择定时器T3
          TFX = 0;        //溢出清零
        count++;
        if(count == 1000)
        {
          count = 0;
                timeflag = 1;
          LED_TOGGLE;       
        }
    /*<UserCodeEnd>*/
        /*Timer3_it write here*/               
}


使用特权

评论回复
一路向北lm|  楼主 | 2020-7-16 08:25 | 显示全部楼层
主函数中添加串口字符串打印和adc转换函数,具体测试代码如下:
extern unsigned char timeflag;
uint16_t ad_value;

void main(void)
{       
/*<UserCodeStart>*/

/*<UserCodeEnd>*/
    /*** MCU初始化函数 ***/
    SC_Init();
   while(1)
        {
                if(timeflag == 1)
                {
                  timeflag = 0;
                        ADC_StartConversion();
                        Uart_Send_String("ADC AIN6的值为:");
                    ad_value = ADC_GetConversionValue();
                Uart_Send_Byte(ad_value/1000+0x30);
                        Uart_Send_Byte(ad_value%1000/100+0x30);
                        Uart_Send_Byte(ad_value%100/10+0x30);
                        Uart_Send_Byte(ad_value%10+0x30);
                        Uart_Send_Byte('\n');
                }        
        }   
}


使用特权

评论回复
一路向北lm|  楼主 | 2020-7-16 08:25 | 显示全部楼层
旋转可调电阻 串口助手打印数据如下,ADC也搞定啦哈!魔盒生成的ADC也没有任何问题。
337455f0f9e9037fc6.png

使用特权

评论回复
一路向北lm|  楼主 | 2020-7-16 08:26 | 显示全部楼层
到这里,我总结一下:好吧,这里又发现了一个秘密,就是不用注释TIM3_WorkMode1Config函数中TLX和THX的赋值和串口中断的注释也可以正常运行了,前提是你需要在主函数中有个while(1)循环,如果只是简单的初始化,那么定时器中断和串口中断不会触发,我现在都感觉好奇怪。如下,模式1需要注释,模式2不需要注释。
模式1:进不了定时器中断和串口中断,定时器中断必须屏蔽TIM3_WorkMode1Config函数中TLXTHX的赋值,串口不能进入中断。
void main(void)
{       
    /*** MCU初始化函数 ***/
    SC_Init();
   
}
模式2:可正常使用定时器中断和串口中断
void main(void)
{       
/*<UserCodeStart>*/

/*<UserCodeEnd>*/
    /*** MCU初始化函数 ***/
    SC_Init();
   while(1)
        {
                /*********执行代码部分*******************/
       xxxxxxxxxxxxxxxxxxx
        }
   
}


使用特权

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

本版积分规则

256

主题

3639

帖子

72

粉丝