您好,
我正在使用MSP430FR6989读取8个模拟信号,我需要读取第9个信号,我使用以下引脚来读取:8.7 ,8.6 ,8.5 ,8.4 ,9.1 ,9.2 ,9.3 ,9.5 ,9.0 和引脚1.5 中的输出。
我是否可以使用额外的针来读取第9个信号?
谢谢!
萨利
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
您好,
我正在使用MSP430FR6989读取8个模拟信号,我需要读取第9个信号,我使用以下引脚来读取:8.7 ,8.6 ,8.5 ,8.4 ,9.1 ,9.2 ,9.3 ,9.5 ,9.0 和引脚1.5 中的输出。
我是否可以使用额外的针来读取第9个信号?
谢谢!
萨利
您好,Sali,
MSP430FR698x(1),MSP430FR598x(1)混合信号微控制器数据表 提供了有关哪些引脚可以用作模拟(ADC)输入的信息。 您在帖子中列出的所有引脚(除WFP 1.5 外)都可以用作模拟输入。
此致,
Caleb Overbay
您好,
下面的代码可以完美地读取9个模拟直流信号,然后将其乘以某个系数,之后我对所有这些信号求和(乘后),然后将其转换为PWM。
现在,当我想添加第10个信号时,我开始看到这个错误
****为项目Oleg1构建配置调试****
"C:\\ti\\ccsv7\\utils\\bin\\gmake "-k -j 4 all -o
'构建文件:../main2AddextraInput.c'
'调用:MSP430编译器'
c:\ti/ccsv7/tools/compiler/ti-CGT-MSP430_Silicon.0.sts/bin/cl430" 17.3 -vmspx --data_model=restricted --use_hw_errap=F5 --include_path="C:\ti/ccsl/ccsvsts/ccsvsts 7/ccsvcsilex=base/MSP430/sall_concludi=-workspace_per_conv=-concludi_workstatel=-workse_jet_ps=-workstatus_ps=-worksilit_ps=-worksilit_gf_jet_-workstatus_-ji_-ps=-worksia_gf_jet_-workstaticle_gf_jet_ps=-ji=-jet_gbyclus_gf_ps=-workstaticle_-jet_jet_-jet_-jet_-worksia_-jet_git_-jiextrap-jp_-ji_gbidex-ji_ 17.3
"../main2AddextraInput.c",第55行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第56行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第57行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第58行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第59行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第60行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第61行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第62行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第63行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第64行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第73行:备注#1530-D:(ULP 5.1 Detected Divide operation(s)。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第55行(列 32):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第56行(列 32):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第57行(列 32):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第58行(列 32):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第59行(列 32):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第60行(列 32):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第61行(列 32):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第62行(列 32):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第63行(列 32):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第64行(列 32):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第67行(列 19):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第69行(列 105):备注#1531-D:(ULP 5.2 检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第68行(列 106):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
"../main2AddextraInput.c",第73行(列 49):备注#1531-D:(ULP 5.2)检测到浮点操作。 建议在运行期间或不使用时将其移至RAM,因为这些都是处理/耗电密集型任务
'完工建筑:../main2AddextraInput.c'
''
'构建目标:Oleg1.out '
'调用:MSP430连接器'
c:\ti/ccsv7/tools/compiler/ti-CGT-MSP430_CCSN.0.sts/bin/cl430" 17.3 -vmspx --data_model=restricted --use_HW_勘 误表=F5 --advice:POWER=all --advice:hw_config=all --definit=MSP430_fricon_6.6989万_-g ---gi_cns_cnic_5cret=-/creti=7/cvi_spit_gi=-ccup/cci_cci_cwi_gi=-cci_gi_gi=7/cvi_ccpuli_ccwi_cwi_gi_cwx_cwi=7_gi_cref_gi_cwi_cwx_cwx_cwx_cwx_cwx_cwi=-gi_cwx_cwi=-cwi_cwi_cwi_cwi_cwx_cwx_cwx_cwx 17.3 17.3
链接>
错误#1.0056万:重新定义符号"flag_start":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"__TI_int44":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"__TI_int45":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"__TI_int43":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"init_gPIo":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"init_tim_a":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"init_ADD":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"main":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"ADC_value":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"init_dco":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号“CCR1”:首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号“CCR0”:首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"ADC_ISR":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
错误#1.0056万:重新定义符号"ADC_value_volt":首先在"./main.obj"中定义;在"./main2AddextraInput.obj"中重新定义
备注#1.0371万-D:(ULP 1.1)检测到未使用低功耗模式状态更改指令
错误#1.001万:链接时出错;未生成“Oleg1.out”
说明#1.0372万-D:(ULP 4.1)在此项目中检测到未初始化的端口A。 建议初始化所有未使用的端口,以消除未使用的引脚上浪费的电流消耗。
说明#1.0372万-D:(ULP 4.1)在此项目中检测到未初始化的端口B。 建议初始化所有未使用的端口,以消除未使用的引脚上浪费的电流消耗。
备注#1.0372万-D:(ULP 4.1)在此项目中检测到未初始化的端口C。 建议初始化所有未使用的端口,以消除未使用的引脚上浪费的电流消耗。
备注#1.0372万-D:(ULP 4.1)在此项目中检测到未初始化的端口D。 建议初始化所有未使用的端口,以消除未使用的引脚上浪费的电流消耗。
备注#1.0372万-D:(ULP 4.1)在此项目中检测到未初始化的端口E。 建议初始化所有未使用的端口,以消除未使用的引脚上浪费的电流消耗。
>>编译失败
Makefile:143:目标'Oleg1.OUT.'的配方失败
gmake [1]:***[Oleg1.OUT]错误1
gmake:***[All]错误2
Makefile:139:目标'All'的配方失败
****构建已完成****
#include <msp430fr6989.h>
#define period_PWM 4000
#define FACTOR0 0.05
#define FACTOR1 0.05
#define FACTOR2 0.05
#define FACTOR3 0.05
#define FACTOR4 0.05
#define FACTOR5 0.05
#define FACTOR6 0.05
#define FACTOR7 0.05
#define FACTOR8 0.05
#define FACTOR9 0.05
unsigned int ADC_value[10]={0,0,0,0,0,0,0,0,0};
FLOAT ADC_value_volt[10]={0,0,0,0,0,0,0,0};
浮点U_out;
_Bool flag_start = 0;
void init_tim_A(void);
void init_adc (void);
void init_gpio (void);
void init_dco(void);
Void主(void)
{
WDTCTL = WDTPW | WDTHOLD;//停止看门狗计时器
PM5CTL0 &=~LCKLPM5;/*对于FRAM设备,启动时,GPIO通电默认高阻抗模式
需要禁用才能激活先前配置的端口设置。
这可以通过清除PM5CTL0寄存器中的锁定LPM5位来完成。*/
//初始化功能:
INIT_DCO();//初始化时钟系统
init_gPIO();//初始化gPIO
init_tim_a();//初始化计时器_a.
INIT_ADC();//初始化ADC
//~初始化函数
_enable_interrupt ();//启用全局中断
ADC12CTL0 || ADC12SC;//启动ADC
同时(1)
{
IF (flag_start == 1)
{
Flag_start = 0;
ADC_VALUE_VOLT[0]= ADC_VALUE[0]*ADC/4095;//以[VOLT]为单位的3.3 转换值
ADC_value_volt[1]= ADC_value[1]*ADC/4095 3.3 ;
ADC_value_volt[2]= ADC_value[2]*ADC/4095; 3.3
ADC_value_volt[3]= ADC_value[3]*ADC/4095; 3.3
ADC_value_volt[4]= ADC_value[4]*ADC/4095; 3.3
ADC_value_volt[5]= ADC_value[5]* 3.3 /4095;
ADC_value_volt[6]= ADC_value[6]*ADC/4095; 3.3
ADC_value_volt[7]= ADC_value[7]*ADC/4095 3.3 ;
ADC_value_volt[8]= ADC_value[8]* 3.3 /4095;
ADC_value_volt[9]= ADC_value[9]* 3.3 /4095;
//以[volt]为单位的ADC值的总和,其中每个值乘以一个因子:
u_out = ADC_value_volt[0]*FACTOR0 + ADC_value_volt[1]*FACTOR1 + ADC_value_volt[2]*FACTOR2 +
ADC_value_volt[3]*FACTOR3 + ADC_value_volt[4]*FACTOR4 + ADC_value_volt[5]*FACTOR5 +
ADC_value_volt[6]*FACTOR6 + ADC_value_volt[7]*FACTOR7 + ADC_value_volt[8]*FACTOR8+ADC_value_volt[9]*FACTOR9;
TA0CTL &=~MC_0;//停止计时器
TA0CCR0 =(U_OUT * Period_PWM/TAM 3.3)-1;//更改占空比
TA0CTL |= MC_2;//启动计时器
ADC12CTL0 || ADC12SC;//启动ADC
}
}
}
void init_adc (void)
{
P8SEL0 |= BIT7|BIT6|BIT5|BIT4;// WFP 8.7 8.4 ,WFP 8.6 ,WFP 8.5 ,WFP ADC选项选择
P8SEL1 || BIT7|BIT6|BIT5|BIT4;
P1SEL0 |=BIT3;//添加WFP 1.3
P1SEL1 |=BIT3;
P9SEL0 |= BIT0|BIT1|BIT2|BIT3|BIT5;// 9.0 ,WFP 9.1 9.5 ,9.2 ,WFP,9.3 ,WFP ADC选项选择
P9SEL1 || BIT0|BIT1|BIT2|BIT3|BIT5;
ADC12CTL0 &=~ADC12ENC;//禁用转换以设置ADC控制寄存器
ADC12CTL1 || ADC12CONSEQ_1;//转换模式选择:单序列
ADC12CTL0 |= ADC12SHT0_5|ADC12SHT1_5|ADC12ON|ADC12MSC;//设置采样时间:96 ADC12CLK的时间
//打开ADC12
//使用Multiple Sample和Convert
ADC12CTL1 || ADC12PDIV__1|ADC12SHP|ADC12DIV_5|ADC12SSEL_0;// ADC12时钟分频器选择:1.
// SHI信号用于触发采样计时器
// ADC12CTL0中的SHT0和SHT1位控制的间隔
//定义SAMPCON采样周期的采样计时器。
// ADC12时钟分频器选择:5.
// ADC12SSELx位选择源:内部振荡器ADC12OSC。
ADC12CTL2 || ADC12RES_2;// ADC分辨率:12位
ADC12IER0 |= BIT0|BIT1|BIT2|BIT3|BIT4|BIT5|BIT6|BIT7|BIT8|BIT9;;//为ADC信道启用中断
//为ADC通道选择数据寄存器:
ADC12MCTL0 = ADC12INCH_4;//来自CH4的数据-> ADC12MEM0
ADC12MCTL1 = ADC12INCH_5;//来自CH5的数据-> ADC12MEM1
ADC12MCTL2 = ADC12INCH_6;
ADC12MCTL3 = ADC12INCH_7;
ADC12MCTL4 = ADC12INCH_8;//...
ADC12MCTL5 = ADC12INCH_9;
ADC12MCTL6 = ADC12INCH_10;
ADC12MCTL7 = ADC12INCH_11;//来自CH11的数据-> ADC12MEM7
ADC12MCTL8 = ADC12INCH_12;
ADC12MCTL9 = ADC12INCH_13|ADC12EOS;//来自CH13的数据-> ADC12MEM8;ADC12EOS -序列结束。
ADC12CTL0 |= ADC12ENC;//启用转换
}
void init_dco (void)
{
FRCTL0 = FRCTLPW | NWAITS_2;//写入FRAM控制器控制:
// FRCTLPW -用于写入的FRAM密码
// NWAITS_2 - FRAM等待状态控制:2.
//当MCKL频率大于16 MHz时,需要此功能
CSCTL0_H = CSOKEY >> 8;//解锁时钟系统的控制寄存器
CSCTL1 = DCOFSEL_5|DCORSEL;// DCO = 24 MHz,选择时钟源:DCO
CSCTL3 = DIVA_0 | DIVM_0 | DIVM_0;//用于ACLK,SMCLK,MCLK的分隔符
CSCTL0_H = 0;//锁定时钟系统的控制寄存器
}
void init_tim_a (void)
{
TA0CCR0 = Period_PWM/2 - 1;//在寄存器中写入,比较0以设置占空比
TA0CCR1 = Period_PWM -1;//写入寄存器比较1设置周期
TA0CCTL0 = CCIE;//比较中断0启用
TA0CCTL1 = CCIE;//比较中断1启用
TA0CTL = tassel_2 | ID_0 | MC_2;// tassel_2 -选择时钟源:SMCLK;
// ID_0 -除法器= 1;
// MC_2 -计数模式选择:连续模式
}
void init_gpio (void)
{
P1DIR || BIT5;//适用于WFP 1.5 的输出模式
P1OUT |= BIT5;// WFP 1.5 = 1.
}
//---------------- PWM ---------------------------
#pragma vector = TIMER0_A0_vector
__interrupt void CCR0 (void)
{
P1OUT &=~BIT5;// WFP 1.5 = 0
}
#pragma vector = TIMER0_A1_vector
__interrupt void CCR1 (void)
{
IF (TA0CCTL1&CCIFG == CCIFG)
{
TA0CCTL1 &=~CCIFG;//清除标志中断
P1OUT |= BIT5;// WFP 1.5 = 1.
TA0R = 0;//清除计数寄存器
}
}
//---------------- ~PWM ---------------------------
#pragma vector = ADC12_vector
__interrupt void ADC_ISR(void)// ADC中断:从变量ADC_VALUE中写入ADC值[]
{
开关(ADC12IV)
{
案例0:中断;
案例2:中断;
案例4:中断;
案例6:中断;
案例8:中断;
案例10:中断;
案例12://矢量12:ADC12IFG0
{
ADC_VALUE [0]= ADC12MEM0;
}中断;
案例14://矢量14:ADC12IFG1
{
ADC_VALUE [1]= ADC12MEM1;
}中断;
案例16://矢量16:ADC12IFG2
{
ADC_VALUE [2]= ADC12MEM2;
}中断;
案例18://矢量18:ADC12IFG3
{
ADC_VALUE [3]= ADC12MEM3;
}中断;
案例20:// Vector 20:ADC12IFG4
{
ADC_VALUE [4]= ADC12MEM4;
}中断;
案例22://矢量22:ADC12IFG5
{
ADC_VALUE [5]= ADC12MEM5;
}中断;
案例24://矢量24:ADC12IFG6
{
ADC_VALUE [6]= ADC12MEM6;
}中断;
判例26://矢量26:ADC12IFG7
{
ADC_VALUE [7]= ADC12MEM7;
}中断;
判例28://矢量28:ADC12IFG8
{
ADC_VALUE [8]= ADC12MEM8;
//设置标志启动以开始重复转换
}中断;
判例30:// Vector 28:ADC12IFG8
{
ADC_VALUE [9]= ADC12MEM9;
flag_start = 1;//设置用于开始重复转换的标志start
}中断;
默认值:中断;
}
}