• 嵌入式成长轨迹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 Interop 工具集
    关于正弦波的算法
    Windows Phone 系列 本地数据存储
    Xaml cannot create an instance of “X”
    Windows Phone 系列 使用 MVVM绑定时无法获取当前值
    Windows Phone 系列 应用程序图标无法显示
    Windows Phone 系列 WPConnect无法上网的问题
    Windows Phone 系列 使用 Windows Phone 保存铃声任务
    WP7.5提交应用
    Windows Phone 系列 动态删除ObservableCollection
  • 原文地址:https://www.cnblogs.com/zeedmood/p/2666925.html
Copyright © 2020-2023  润新知