打印
[活动专区]

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

[复制链接]
478|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本次咱来测试一下板卡的ADC功能,先来看一下拓展板的原理图,分别是两路ADC,AIN6和AIN7,AIN6可以直接旋转可调电阻就可以使AD的值变化,AIN7使外部输入的电压信号。这里就以AIN6为例,使用魔盒测试一下。

使用特权

评论回复

相关帖子

沙发
一路向北lm|  楼主 | 2020-7-16 08:23 | 只看该作者
打开魔盒,配置串口UART0和定时器3以及ADC的AIN6,同时也配置了LED引脚为推挽输出,采样口选择千万不要忘记,具体配置如下:

使用特权

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

使用特权

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

使用特权

评论回复
5
一路向北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*/               
}


使用特权

评论回复
6
一路向北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++;
                }
}


使用特权

评论回复
7
一路向北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*/               
}


使用特权

评论回复
8
一路向北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');
                }        
        }   
}


使用特权

评论回复
9
一路向北lm|  楼主 | 2020-7-16 08:25 | 只看该作者
旋转可调电阻 串口助手打印数据如下,ADC也搞定啦哈!魔盒生成的ADC也没有任何问题。

使用特权

评论回复
10
一路向北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
        }
   
}


使用特权

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

本版积分规则

257

主题

3643

帖子

73

粉丝