• 嵌入式成长轨迹47 【Zigbee项目】【CC2430基础实验】【1/3AVDD】


    将AD的源设为1/3 电源电压,并将转换得到温度通过串口送至电脑

    ADCCON1 
    7 EOC  0  R H0 ADC 结束标志位
    0   ADC进行中
    1  ADC 转换结束
    6 ST  0  R W1  手动启动AD转换(读1 表示当前正在进行AD转换)
    0  没有转换
    1  启动 AD 转换
    (STSEL=11)
    5:4 STSEL[1:0]  11  R/W  AD 转换启动方式选择
    00 外部触发
    01 全速转换,不需要触发
    10 T1 通道 0 比较触发
    11  手工触发
    3:2 RCTRL[1:0]  00  R/W  16 位随机数发生器控制位
    (写01,10会在执行后返回00)
    00 普通模式(13x  打开)
    01 开启LFSR 时钟一次
    10 生成调节器种子
    11  信用随机数发生器
    1:0 -  11  R/W  保留,总是写设置为1
     
    ADCCON3
    7:6 SREF[1:0]  00  读/ 写
    选择单次AD 转换参考电压
    00   内部1.25V 电压
    01   外部参考电压 AIN7输入
    10   模拟电源电压
    11   外部参考电压
    AIN6-AIN7 输入
    5:4 SDIV[1:0]  01  读/ 写
    选择单次A/D 转换分辨率
    00  8 位 (64dec)
    01  10 位 (128dec)
    10  12 位 (256dec)
    11  14 位 (512dec)
    3:0 SCH[3:0]  00  读/ 写
    单次A/D 转换选择,如果写入时ADC正在运行,则在完成序列A/D 转换后立刻开始,否则写入后立即开始A/D 转换,转换完成后自动清0 
    0000  AIN0
    0001  AIN1
    0010  AIN2
    0011  AIN3
    0100  AIN4
    0101  AIN5
    0110  AIN6
    0111  AIN7
    1000  AIN0- AIN1
    1001  AIN2- AIN3
    1010  AIN4- AIN5
    1011  AIN6- AIN7
    1100  GND
    1101   正电源参考电压
    1110   温度传感器
    1111  1/3模拟电压


    void InitialAD(void);
    函数原型:

     1 void InitialAD(void) 
     2 { 
     3  //P1 out 
     4   P1DIR = 0x03;      //P1 控制LED 
     5  led1 = 1; 
     6  led2 = 1;  //关LED 
     7  
     8   ADCH &= 0X00;    // 清EOC标志  
     9  ADCCON3=0xbf;  //单次转换, 参考电压为电源电压,对 1/3 AVDD进行A/D 转换 
    10       //14位分辨率 
    11   ADCCON1 = 0X30;    // 停止A/D 
    12  
    13  ADCCON1 |= 0X40; //启动A/D; 
    14 } 

    函数功能:设 P10,P11 设为输出控制 LED 灯,将 AD转换源设为电源电压,ADC结果分辨率设
    为14 位(最高精度),AD模式为单次转换,启动ADC转换。

      1 //main.c
      2 
      3 #include "ioCC2430.h"
      4 #include "stdio.h"
      5 #define uint unsigned int
      6 
      7 #define ConversionNum 20
      8 //定义控制灯的端口
      9 #define led1 P1_0
     10 #define led2 P1_1
     11 
     12 void Delay(uint);
     13 void initUARTtest(void);
     14 void InitialAD(void);
     15 void UartTX_Send_String(char *Data,int len);
     16 
     17 char adcdata[]=" 0.0V ";
     18 
     19 /****************************************************************
     20 *函数功能 :延时                        *
     21 *入口参数 :定性延时                        *
     22 *返 回 值 :无                            *
     23 *说    明 :                            *
     24 ****************************************************************/
     25 void Delay(uint n)
     26 {
     27     uint i;
     28     for(i=0;i<n;i++);
     29     for(i=0;i<n;i++);
     30     for(i=0;i<n;i++);
     31     for(i=0;i<n;i++);
     32     for(i=0;i<n;i++);
     33 }
     34 
     35 /****************************************************************
     36 *函数功能 :初始化串口1                        *
     37 *入口参数 :无                            *
     38 *返 回 值 :无                            *
     39 *说    明 :57600-8-n-1                        *
     40 ****************************************************************/
     41 void initUARTtest(void)
     42 {
     43     CLKCON &= ~0x40;              //晶振
     44     while(!(SLEEP & 0x40));      //等待晶振稳定
     45     CLKCON &= ~0x47;             //TICHSPD128分频,CLKSPD不分频
     46     SLEEP |= 0x04;                  //关闭不用的RC振荡器
     47 
     48     PERCFG = 0x00;                //位置1 P0口
     49     P0SEL = 0x3c;                //P0用作串口
     50 
     51     U0CSR |= 0x80;                //UART方式
     52     U0GCR |= 10;                //baud_e = 11;
     53     U0BAUD |= 216;                //波特率设为57600
     54     UTX0IF = 1;
     55 
     56     U0CSR |= 0X40;                //允许接收
     57     IEN0 |= 0x84;                //开总中断,接收中断
     58 }
     59     
     60 
     61 /****************************************************************
     62 *函数功能 :初始化ADC                        *
     63 *入口参数 :无                                *
     64 *返 回 值 :无                            *
     65 *说    明 :参考电压AVDD,转换对象是1/3AVDD            *
     66 ****************************************************************/
     67 void InitialAD(void)
     68 {
     69     //P1 out
     70     P1DIR = 0x03;         //P1控制LED
     71     led1 = 1;
     72     led2 = 1;        //关LED
     73 
     74     ADCH &= 0X00;        //清EOC标志    
     75     ADCCON3=0xbf;        //单次转换,参考电压为电源电压,对1/3 AVDD进行A/D转换
     76                         //14位分辨率
     77     ADCCON1 = 0X30;        //停止A/D
     78 
     79     ADCCON1 |= 0X40;    //启动A/D
     80 
     81 }
     82 
     83 /****************************************************************
     84 *函数功能 :串口发送字符串函数                    *
     85 *入口参数 : data:数据                        *
     86 *        len :数据长度                        *
     87 *返 回 值 :无                                *
     88 *说    明 :                            *
     89 ****************************************************************/
     90 void UartTX_Send_String(char *Data,int len)
     91 {
     92   int j;
     93   for(j=0;j<len;j++)
     94   {
     95     U0DBUF = *Data++;
     96     while(UTX0IF == 0);
     97     UTX0IF = 0;
     98   }
     99 }
    100 
    101 
    102 /****************************************************************
    103 *函数功能 :主函数                        *
    104 *入口参数 :无                            *
    105 *返 回 值 :无                            *
    106 *说    明 :无                            *
    107 ****************************************************************/
    108 void main(void)
    109 {    
    110     char temp[2];
    111         float num;
    112     initUARTtest();                                 //初始化串口
    113     InitialAD();                                    //初始化ADC
    114 
    115     led1 = 1;
    116     while(1)
    117     {
    118         if(ADCCON1>=0x80)
    119         {
    120             led1 = 1;              //转换完毕指示
    121             temp[1] = ADCL;
    122             temp[0] = ADCH;
    123             ADCCON1 |= 0x40;          //开始下一转换
    124 
    125             
    126             temp[1] = temp[1]>>2;
    127             temp[1] |= temp[0]<<6;
    128 
    129                         temp[0] = temp[0]>>2;    //数据处理
    130                         temp[0] &= 0x3f;
    131 
    132                         num = (temp[0]*256+temp[1])*3.3/8192;  //有一位符号位,取2^13;
    133                         num /= 2;
    134                         //定参考电压为3.3V。14位精确度
    135                         adcdata[1] = (char)(num)%10+48;
    136                         //adcdata[2] = '.';
    137                         adcdata[3] = (char)(num*10)%10+48;
    138     
    139             UartTX_Send_String(adcdata,6);    //串口送数
    140                                                         //包括空格
    141 
    142             Delay(30000);
    143                         led1 = 0;                       //完成数据处理
    144                         Delay(30000);      
    145             }
    146         }
    147 }
  • 相关阅读:
    NET 2.0(C#)调用ffmpeg处理视频的方法(转载)
    ffmpeg编解码详细过程(转载)
    使用FFMPEG SDK解码流数据
    FFMPEG解码流程
    web worker,SSE,WebSocket,AJAX 与后端交互的方式
    jQuery基础篇
    Git的基本命令介绍
    项目配置中 提示access denied的问题 解决方案
    http网络协议 学习摘要
    OSI七层模型 学习摘要
  • 原文地址:https://www.cnblogs.com/zeedmood/p/2666925.html
Copyright © 2020-2023  润新知