专家
公告
财富商城
电子网
旗下网站
首页
问题库
专栏
标签库
话题
专家
NEW
门户
发布
提问题
发文章
MSP430G2553多路ADC问题
2019-03-24 12:05
发布
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
站内问答
/
TI MCU
13324
9
1667
想用MSP430G2553做一个多路ADC,至少8个不同的ADC同时工作,不知道直接接可以实现吗?还是要用多路开关?具体实现思路应该怎样?希望大大们说得详细点,谢谢!
此帖出自
小平头技术问答
友情提示:
此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
9条回答
wstt
2019-03-25 22:25
采样频率
//******************************************************************************
// MSP430G2x33/G2x53 Demo - ADC10, Sample A1, 1.5V, TA1 Trig, Set P1.0 if > 0.5V
//
// Description: A1 is sampled 16/second (ACLK/2048) with reference to 1.5V.
// Timer_A is run in upmode and TA1 is used to automatically trigger
// ADC10 conversion, TA0 defines the period. Internal oscillator times sample
// (16x) and conversion (13x). Inside ADC10_ISR if A1 > 0.5Vcc, P1.0 is set,
// else reset. Normal mode is LPM3.
// //* An external watch crystal on XIN XOUT is required for ACLK *//
//
// MSP430G2x33/G2x53
// -----------------
// /|| XIN|-
// | | | 32kHz
// --|RST XOUT|-
// | |
// >---|P1.1/A1 P1.0 |--> LED
//
// D. Dang
// Texas Instruments Inc.
// December 2010
// Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
//******************************************************************************
#include "msp430g2553.h"
void main(void)
{
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
ADC10CTL1 = SHS_1 + CONSEQ_2 + INCH_1; // TA1 trigger sample start
ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
__enable_interrupt(); // Enable interrupts.
TACCR0 = 30; // Delay to allow Ref to settle
TACCTL0 |= CCIE; // Compare-mode interrupt.
TACTL = TASSEL_2 + MC_1; // TACLK = SMCLK, Up mode.
LPM0; // Wait for delay.
TACCTL0 &= ~CCIE; // Disable timer Interrupt
__disable_interrupt();
ADC10CTL0 |= ENC; // ADC10 Enable
ADC10AE0 |= 0x02; // P1.1 ADC10 option select
P1DIR |= 0x01; // Set P1.0 output
TACCR0 = 2048-1; // PWM Period
TACCTL1 = OUTMOD_3; // TACCR1 set/reset
TACCR1 = 2047; // TACCR1 PWM Duty Cycle
TACTL = TASSEL_1 + MC_1; // ACLK, up mode
__bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupts
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
if (ADC10MEM < 0x155) // ADC10MEM = A1 > 0.5V?
P1OUT &= ~0x01; // Clear P1.0 LED off
else
P1OUT |= 0x01; // Set P1.0 LED on
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void ta0_isr(void)
{
TACTL = 0;
LPM0_EXIT; // Exit LPM0 on return
}
复制代码
加载中...
查看其它9个回答
一周热门
更多
>
相关问题
相关文章
×
关闭
采纳回答
向帮助了您的知道网友说句感谢的话吧!
非常感谢!
确 认
×
关闭
编辑标签
最多设置5个标签!
保存
关闭
×
关闭
举报内容
检举类型
检举内容
检举用户
检举原因
广告推广
恶意灌水
回答内容与提问无关
抄袭答案
其他
检举说明(必填)
提交
关闭
×
打开微信“扫一扫”,打开网页后点击屏幕右上角分享按钮
×
付费偷看金额在0.1-10元之间
确定
×
关闭
您已邀请
0
人回答
查看邀请
擅长该话题的人
回答过该话题的人
我关注的人
- //******************************************************************************
- // MSP430G2x33/G2x53 Demo - ADC10, Sample A1, 1.5V, TA1 Trig, Set P1.0 if > 0.5V
- //
- // Description: A1 is sampled 16/second (ACLK/2048) with reference to 1.5V.
- // Timer_A is run in upmode and TA1 is used to automatically trigger
- // ADC10 conversion, TA0 defines the period. Internal oscillator times sample
- // (16x) and conversion (13x). Inside ADC10_ISR if A1 > 0.5Vcc, P1.0 is set,
- // else reset. Normal mode is LPM3.
- // //* An external watch crystal on XIN XOUT is required for ACLK *//
- //
- // MSP430G2x33/G2x53
- // -----------------
- // /|| XIN|-
- // | | | 32kHz
- // --|RST XOUT|-
- // | |
- // >---|P1.1/A1 P1.0 |--> LED
- //
- // D. Dang
- // Texas Instruments Inc.
- // December 2010
- // Built with CCS Version 4.2.0 and IAR Embedded Workbench Version: 5.10
- //******************************************************************************
- #include "msp430g2553.h"
- void main(void)
- {
- WDTCTL = WDTPW + WDTHOLD; // Stop WDT
- ADC10CTL1 = SHS_1 + CONSEQ_2 + INCH_1; // TA1 trigger sample start
- ADC10CTL0 = SREF_1 + ADC10SHT_2 + REFON + ADC10ON + ADC10IE;
- __enable_interrupt(); // Enable interrupts.
- TACCR0 = 30; // Delay to allow Ref to settle
- TACCTL0 |= CCIE; // Compare-mode interrupt.
- TACTL = TASSEL_2 + MC_1; // TACLK = SMCLK, Up mode.
- LPM0; // Wait for delay.
- TACCTL0 &= ~CCIE; // Disable timer Interrupt
- __disable_interrupt();
- ADC10CTL0 |= ENC; // ADC10 Enable
- ADC10AE0 |= 0x02; // P1.1 ADC10 option select
- P1DIR |= 0x01; // Set P1.0 output
- TACCR0 = 2048-1; // PWM Period
- TACCTL1 = OUTMOD_3; // TACCR1 set/reset
- TACCR1 = 2047; // TACCR1 PWM Duty Cycle
- TACTL = TASSEL_1 + MC_1; // ACLK, up mode
- __bis_SR_register(LPM3_bits + GIE); // Enter LPM3 w/ interrupts
- }
- // ADC10 interrupt service routine
- #pragma vector=ADC10_VECTOR
- __interrupt void ADC10_ISR(void)
- {
- if (ADC10MEM < 0x155) // ADC10MEM = A1 > 0.5V?
- P1OUT &= ~0x01; // Clear P1.0 LED off
- else
- P1OUT |= 0x01; // Set P1.0 LED on
- }
- #pragma vector=TIMER0_A0_VECTOR
- __interrupt void ta0_isr(void)
- {
- TACTL = 0;
- LPM0_EXIT; // Exit LPM0 on return
- }
复制代码一周热门 更多>