‘壹’ msp430 AD转换最大可转换电压是多少
AD转换电压最大电压就是参考电压.参考电压可以直接取ACC(可在寄存器中设置,430ACC最大可以3.6V),选择外部参考电压最大理论上也可以到VCC,但最好稍小点.如果用内部参考电压可选1.5V和2.5V两档.
‘贰’ msp430的AD转换
是对应的电压数据。传感器出来的已经是电压了,就是AD前端的模拟信号。你要查一下你用的AD芯片datasheet手册看一下输入AD芯片的模拟信号经过AD后换算成的数字信号是多少,如果是8位AD应该是8位2进制数噢。数码管的话去查一下数码管如何点亮的程序即可。
‘叁’ 求msp430的A/D转换C语言程序,即输入模拟电压后单片机能准确判断数字电压
此为单通道单次转换
#include<msp430x14x.h>
#define uchar unsigned char
#define uint unsigned int
void main(void)
{
uint i;
WDTCTL = WDTPW + WDTHOLD;
P6SEL |= 0x01; //使能AD通道A0
ADC12CTL0 |= ADC12ON + SHT0_2; //+ REFON + REF2_5V;
ADC12CTL1 = SHP;
ADC12MCTL0 = SREF_2; //Vr+ = Vref+
for(i = 0; i < 0x3600; i++) //为参考源启动提供延迟17ms以上
{}
ADC12CTL0 |= ENC; //使能转换
while(1)
{
ADC12CTL0 |= ADC12SC; //开启转换
while((ADC12IFG & ADC12BUSY) == 0);
_NOP();
}
}
‘肆’ MSP430 AD转换 原理
第一 你可以将A2设为ADC模式,就可以输入模拟信号。
第二 你用两节干电池供电,通常需要有DCDC稳压电路,也就是DCDC+LDO电源结构为单片机供电,这样就不会存在你担心的问题了。
‘伍’ msp430的AD转换程序中断问题“__bis_SR_register(LPM0_bits + GIE); __no_operation(); ”
__bis_SR_register(LPM0_bits + GIE); //置位SR寄存器,LPM0_bits是低功耗模式中的一种,CPU休息,具体可以查手册;GIE是打开全局中断使能
__no_operation(); //进行一个时钟周期的无操作,一般调试可以把断点打在这
这个主要是用在低功耗上,cpu不需要工作时就打到休眠,打开中断使能,等待中断产生进入中断重新工作,这样减少芯片耗电量,一般装电池的要仔细研究这个。直接电源供电的可以无视这几句,不用写
‘陆’ 求详细解释关于MSP430 AD转换 采样,每一句大概都是什么意思,小弟感激不尽
这是msp430 ad采样的中断服务程序,
其实并不难,你只要多看几个程序就会发现 这是有套路的…………
AD 转换 采样率 200HZ
/////////////////////////////////////////////
#pragma vector=ADC12_VECTOR
__interrupt void ADC12ISR (void) //中断声明
{
float ADdata; // 浮点格式 数据
results[0] = ADC12MEM0; // 将A0通道的数据放入result[0] 中,
results[1] = ADC12MEM1; // 将A1通道的数据放入result[1] 中,
if (BaseParam.stats==0) //不知道变量的声明,不知道具体含义,但大概就是表示某种状态
{
//有毒气体浓度测量
ADdata = results[0] & 0x0fff;
//这个ad精度是12位的,所以与操作后,得到resluts[0]中 断后12bit数据
ADdata /= 100; //根据addata 获得lcd显示的4位数据,并显示,这个与ad 采样没有关系了
lcdData[4]=0;//'blank'
lcdData[3]=ADdata/10;
ADdata = ADdata-lcdData[3];
lcdData[2] = ADdata;
ADdata = ADdata-lcdData[2];
lcdData[1]=ADdata*10;
ADdata = ADdata-lcdData[1]*0.1;
lcdData[0]=ADdata*100;
//更新显示
lcdDatashow();
‘柒’ msp430 AD转换的原理
将A进行量化,然后再编码成D
‘捌’ 如何提高msp430单片机内部ad转换精度,思路是什么
单片机的内置AD转换位数是固定的,也就是精度基本是固定的,要想提高只能从整个系统考虑,如:
1. 提高AD前端运放电路的转换精度,尽量选用精度高的电阻和电容
2. 单片机的基准电压选高点,有助于提高抗干扰性能
3. 电源也很重要,尽量提高电源质量,如纹波等。
‘玖’ 关于msp430的AD多通道转换问题
每次都要开ADC12CTL0 |= ENC + ADC12SC; SHT0_8; 改为SHT0_12;移位求平均不精确,你可以用double型去/32 或者先*100再>>=5
‘拾’ 十万火急【msp430单片机的AD转换程序】!!!!!
这个是F247的程序。
#include "msp430x24x.h"
#define Latch_addr_H P5OUT|=0x10
#define Latch_addr_L P5OUT&=0xef
#define Latch_data_H P5OUT|=0x20
#define Latch_data_L P5OUT&=0xdf
#define uchar unsigned char
void delay(unsigned int i);
void LED_Disp(uchar pos,uchar value);
void init();
void transport();
void ADC12setup(void);
const uchar tab[11]={0x03,0x9f,0x25,0x0d,0x99,0x49,0x41,0x1f,0x01,0x09,0xfe};
uchar shuma[4]={6,7,8,9};
unsigned int shuju;
//主函数
main( void )
{
uchar m;
P5DIR |= 0x30; //定义为输出端口
P4DIR |= 0xff;
P2DIR |=0xff;
P2OUT=0xff;
init();
transport();
delay(2000);
ADC12CTL0 |= ADC12SC; //sampling open,AD转换完成后(ADC12BUSY=0),ADC12SC自动复位;
while((ADC12IFG & BIT0) == 0); //等转换结束
shuju = ADC12MEM0; //读转换数据值,同时清ADC12IFG0标志
while(1)
{
//ADC12CTL0 |= ADC12SC; //sampling open,AD转换完成后(ADC12BUSY=0),ADC12SC自动复位;
//while((ADC12IFG & BIT0) == 0); //等转换结束
//shuju = ADC12MEM0;
transport();
LED_Disp(m,shuma[m]);
delay(5);
m++;
if(m>3)
m=0;
if(m==3)
{
LED_Disp(m,10);
delay(5);
}
}
}
//初始化+采集
void init()
{
WDTCTL = WDTPW + WDTHOLD; // 停止WDT
P1DIR=0x01;P1OUT=0x0f; //LED设置
ADC12setup();
_EINT(); // 全局中断使能
}
//ADC12初始化
void ADC12setup(void)
{
//ADC12设置**************************
P6SEL |= 0x01; //使用A/D通道 A0
ADC12CTL0 = ADC12ON ; //开ADC12内核,设SHT0=2 (N=4)
ADC12CTL1 = SHP ; //SAMPCON信号选为采样定时器输出
//ADC12内部参考电压设置
ADC12CTL0 |= REF2_5V; //选用内部参考电压为2.5V
ADC12CTL0 |= REFON; //内部参考电压打开
ADC12MCTL0 |= SREF_0; //R+=3.3V R-=VSS
//转换允许
ADC12CTL0 |= ENC ; //转换允许(上升沿)
shuju=0x00;
}
//转换
void transport()
{
unsigned int q;
q=(shuju*5)/4;
shuma[0]=q%10;
shuma[1]=(q%100)/10;
shuma[2]=(q%1000)/100;
shuma[3]=q/1000;
}
//显示函数
void LED_Disp(uchar pos,uchar value)
{
P5OUT=0x00;
P4OUT=0x10<<(pos);
Latch_addr_H;
Latch_addr_L;
if( value<=10)
{
P4OUT=tab[value];
Latch_data_H;
Latch_data_L;
}
}
//延时
void delay(unsigned int i)
{ int m,n;
for(m=0;m<i;m++)
for(n=0;n<120;n++);
}
/*adc中断服务程序
#pragma vector=ADC_VECTOR//ADC 中断服务程序
__interrupt void ADC12ISR (void)
{
static unsigned int index = 0; // 中断服务程序中的静态变量
A0results[index] = ADC12MEM0; //移动A0 结果往数组,此操作的同时清除ADC12FIG.0
A1results[index] = ADC12MEM1; //移动A1 结果往数组,此操作的同时清除ADC12FIG.1
A2results[index] = ADC12MEM2; //移动A2 结果往数组,此操作的同时清除ADC12FIG.2
A3results[index] = ADC12MEM3; //移动A3 结果往数组,此操作的同时清除ADC12FIG.3
index = (index+1)%Num_of_Results; // 增加结果的索引,取index 变量的模(余数)
}
*/