历史上的今天
今天是:2024年10月09日(星期三)
2019年10月09日 | MSP430--ADC程序
2019-10-09 来源:eefocus
1.ADC和P6是复用的。所以要设置P6.0为AD功能,要确保P6DIR=0X00,即为输入。
其次P6SEL |= 0X01;设置需要的A0端口PIN为AD功能。
2.ADC时钟问题,通过ADCSSEL选择进入的时钟源默认为ADC12OSC,经过分频之后才是ADC12CLK.
当SHP=1时,t_sample是由采样定时器来决定的,整个采样周期的长度是4n倍的ADC12CLK,n由SHT决定。
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC12CTL0 = SHT0_2 + ADC12ON; // 设置采样保持的时间为8倍的ADC时钟,Set sampling time, turn on ADC12
ADC12CTL1 = SHP; // 由采样定时器决定采样的时间,Use sampling timer
ADC12IE = 0x01; // 只使能ADC12MEM0中断,即转换的数据存入MEM0时中断可处罚,Enable interrupt
ADC12CTL0 |= ENC; // Conversion enabled
P6SEL |= 0x01;
2.ENC只是使能转换。真正的触发转换需要采样触发信号。
当ADC12CTL中SHS为0时,由采样触发信号为软件触发ADC12SC。
for (;;)
{
ADC12CTL0 |= ADC12SC; // Sampling open
_BIS_SR(CPUOFF + GIE); // LPM0, ADC12_ISR will force exit
}
3.中断程序:转换期间CPU是OFF的,在中断时唤醒了,在中断结束时又CPUOFF。
ADC只有12位,因此最大值为0XFFF,一半为0X7FF。
默认的SREF为AVCC,AVSS。所以0X7FF为AVCC/2。程序含义为当采样到的电压小于AVCC/2,点亮LED。
// ADC12 interrupt service routine
#pragma vector=ADC_VECTOR
__interrupt void ADC12_ISR (void)
{
if (ADC12MEM0 < 0x7FF)
P2OUT &= ~0x01; // Clear P1.0 LED off
else
P2OUT |= 0x01; // Set P1.0 LED on
_BIC_SR_IRQ(CPUOFF); // Clear CPUOFF bit from 0(SR)
}
PS:
板子上顺时针悬RV4,灯会亮,这时P6.0输入的电压是越来越小,并且小于1.65V。
逆时针转RV4,等会灭,这时P6.0输入电压越来越大,大于1.65V。
史海拾趣
|
现已有4k rom大小,现因为程序大于4k了我想换成8k,改了地址线和相关配置,但是程序(5k左右)下进去运行不正常,请问怎么才能正确设置rom大小呢?fpga芯片是EP2C5T144C8… 查看全部问答> |
|
我在程序中使用MmMapIoSpace操纵GPIO, 可是貌似没有效果,请各位老大帮忙看看!谢拉。 volatile static S5PC100_GPIO_REG * pGPIOReg = NULL; &nbs ...… 查看全部问答> |
|
项目所限,必须用UPSD3234A-40U6来开发, 不熟,拿个开发板来熟悉一下. 我找新的很难找到,有谁知道再哪里搞到,不胜感激. 价格没问题 电话联系我: 13560625340… 查看全部问答> |
|
win 7 64位旗舰版不识别cc2430仿真器,无法驱动,有没有64位的驱动? RT,在网上都找不到解决方案,要么就是说已经解决了又不说怎么解决的,受不了了,被个驱动拆腾得,有没有人告诉我一下是怎么解决的。已经解决了,下了一个IAR EW8051 V8.1,装驱动的时候就会有X64的选项,把那个上传一下,不过不知道这样有没有用, ...… 查看全部问答> |
|
Capacitive Touch BoosterPack (430BOOST-SENSE1) for the LaunchPad User\'s Guide (Rev. B) slau337b 第15页 The User Experience application starts in sleep mode, sampling the proximity sensor approximately every 8.3 ms (VLO / 100 = ...… 查看全部问答> |




