MSP430之自动增益程控放大main备份
占位符
#include <msp430.h>
#include "sys.h"
#include "ps2.h"
#include "12864.h"
#include "adc.h"
#include "tlv5638.h"
#include "pid.h"
#include "timera.h"
#include "uart.h"
#include "vosc.h" //#define _DISMAIN_ #define ADCN 10 // ad采集次数 // 在ps2.c里面定义
extern unsigned char ps2_keyvalue;
extern unsigned char ps2_flag; unsigned int m = ; // TLV5638设置值
unsigned char adcnt = ;
unsigned int adcFinish = ;
unsigned int adcValue = , advArr[ADCN] = { }; // ADC采集的值,采集13次保存在数组里
unsigned int ta_flag = , dispFlag = ; // pid参数
unsigned int point = ; // 目标值
float p = 0.1, i = , d = 0.1;
int inc = , tempInc; // 增量
unsigned int out2Osc[] = { }; // 获取键盘输入
void GetInput()
{
unsigned char temp;
temp = PS2_AsiiConvert(ps2_keyvalue); if(temp == '+')
{
point += ;
if(point >= )
point = ;
IncPIDSetPoint(point); //
LCD_Set_Pos(, );
LCD_Show_Num(point);
}
else if(temp == '-')
{
point -= ;
if(point < )
point = ;
IncPIDSetPoint(point);
LCD_Set_Pos(, );
LCD_Show_Num(point);
}
else if(temp == '') //p设置
{
p += 0.01;
IncPIDSet(p, i, d);
LCD_Set_Pos(, );
LCD_Show_Deci2(p);
}
else if(temp == '')
{
p -= 0.01;
IncPIDSet(p, i, d);
LCD_Set_Pos(, );
LCD_Show_Deci2(p);
}
else if(temp == '')
{
i += 0.01;
IncPIDSet(p, i, d);
LCD_Set_Pos(, );
LCD_Show_Deci2(i);
}
else if(temp == '')
{
i -= 0.01;
IncPIDSet(p, i, d);
LCD_Set_Pos(, );
LCD_Show_Deci2(i);
}
else if(temp == '')
{
d += 0.01;
IncPIDSet(p, i, d);
LCD_Set_Pos(, );
LCD_Show_Deci2(d);
}
else if(temp == '')
{
d -= 0.01;
IncPIDSet(p, i, d);
LCD_Set_Pos(, );
LCD_Show_Deci2(d);
}
else
{
}
P2IFG &= ~BIT4;
} /*
* 加权滤波
*/
unsigned int filter(unsigned int arr[])
{
unsigned char i; /* 均值滤波 */
unsigned int temp = ; for (i = ; i < ADCN; i++)
{
temp += arr[i];
}
temp = (unsigned int) (temp * 1.0 / ADCN); return temp;
} /*
* AGC自动调节
*/
void AGC()
{
// 测试用
// P1OUT |= BIT6; adcValue = (unsigned long) (filter(advArr) * 2500.0f / 1024.0f);// * 1000.0f ); // / 1024.0f);
// 计算增量
inc = IncPIDCalc(adcValue);
tempInc += inc; // 增量调节
if(tempInc < )
tempInc = ; // 输出限制>=0V
if(tempInc > )
tempInc = ; // 输出限制<=2V
m = (unsigned int) tempInc; // 设置TLV值
TLV_WriteData(0xd002); // 写入通道A
TLV_WriteData(Volt(m)); // 输出到虚拟示波器
out2Osc[] = point;
out2Osc[] = (unsigned int) adcValue;
out2Osc[] = m;
out2Osc[] = ;
VOSC_Out4Data(out2Osc); // P1OUT &= ~BIT6;
} #ifndef _DISMAIN_
void main()
{
// 测试用
P1DIR |= BIT6;
P1OUT |= BIT6;
// P2DIR |= BIT5;
// P2OUT |= BIT5; System_Init();
LCD_Init();
PS2_Init();
TLV_Init(); // TLV5638控制电压
ADC_Init2(); // P1.310次采集
__delay_cycles();
TA_Init(); // 定时器初始化,10ms
Uart_Init(); // OSC用到串口 // PID初始化
IncPIDInit(p, i, d, point); // UI
LCD_Clear();
LCD_Set_Pos(, );
LCD_Show_String("PointV->"); // 目标值
LCD_Set_Pos(, );
LCD_Show_Num(point);
LCD_Set_Pos(, );
LCD_Show_String("mV");
LCD_Set_Pos(, );
LCD_Show_String("CurSet->"); // 当前设定值
LCD_Set_Pos(, );
LCD_Show_Num(m);
LCD_Set_Pos(, );
LCD_Show_String("mV");
LCD_Set_Pos(, );
LCD_Show_String("ADCapV->"); // 采集电压
LCD_Set_Pos(, );
LCD_Show_Num(adcValue);
LCD_Set_Pos(, );
LCD_Show_String("mV"); // 显示pid参数
LCD_Set_Pos(, );
LCD_Show_Deci2(p);
LCD_Set_Pos(, );
LCD_Show_Deci2(i);
LCD_Set_Pos(, );
LCD_Show_Deci2(d); // 写入初始电压
TLV_WriteData(0xd002);
TLV_WriteData(Volt(m));
LCD_Set_Pos(, );
LCD_Show_Num(m); // agc初始化
tempInc = m; _EINT(); // 使能中断,键盘、定时器
while ()
{
// 键盘
if(ps2_flag == )
{
GetInput(); // 获取按键,处理按键事件
ps2_flag = ;
} // ADC采集
// if(ta_flag == 1)
// {
// ta_flag = 0;
//
// // AD采集
// ADC_Start2(advArr);
// } // AGC调节
// if(adcFinish == 1) // 采集了N次
// {
// adcFinish = 0;
// AGC();
// } // // 设置TLV值
// TLV_WriteData(0xd002); // 写入通道A
// TLV_WriteData(Volt(m)); // 显示延时
if (dispFlag >= )
{
dispFlag = ; // 显示当前设定值
LCD_Set_Pos(, );
LCD_Show_Num(m); // 显示AD采集结果
LCD_Set_Pos(, );
LCD_Show_Num(adcValue);
}
}
} #pragma vector=TIMER0_A0_VECTOR
__interrupt void TIME0_A0_ISR(void)
{
ta_flag = ; // 定时时间到
dispFlag++; // 用于显示延时 // P2OUT |= BIT5; // 准备AGC
ADC_Start2(advArr); // AD采集 // _EINT(); // 测试用
P1OUT ^= BIT6;
} #pragma vector = ADC10_VECTOR
__interrupt void ADC10ISR(void)
{
// adcFinish = 1; ADC10CTL0 &= ~(ENC + ADC10SC); // 停止转换
AGC(); // 采集完成,AGC调节
// P2OUT &= ~BIT5; // adcFinish = 0;
} #endif
MSP430之自动增益程控放大main备份的更多相关文章
- MySQL存储过程调试工具-dbForge Studio for MySQL
工具官网地址:http://www.devart.com/dbforge/mysql/studio/ 对于某些存储过程很多且复杂的SQL的应用,在短时间内要使得所有MySQL存储过程和函数正常运行,那 ...
- 别人的Linux私房菜(9)文件与文件系统的压缩
www网站利用文件压缩技术进行数据传输,提升网络带宽. 压缩命令gzip与显示zcat.zmore.zless.zgrep -c将压缩的数据显示到屏幕上 -d解压缩 -v显示原文件/压缩文件的压缩比等 ...
- 多线程pre
body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...
- 搭建稳固的MySQL运维体系
MySQL 监控要点 MySQL 监控要点,主要涉及服务器和 MySQL 两个方向的监控告警. 在这两个监控告警方向需要重点关注监控策略.监控趋势图及报警方式. 监控策略指的是每个监控项的告警阈值,例 ...
- 音频自动增益 与 静音检测 算法 附完整C代码
前面分享过一个算法<音频增益响度分析 ReplayGain 附完整C代码示例> 主要用于评估一定长度音频的音量强度, 而分析之后,很多类似的需求,肯定是做音频增益,提高音量诸如此类做法. ...
- 音频自动增益 与 静音检测 算法 附完整C代码【转】
转自:https://www.cnblogs.com/cpuimage/p/8908551.html 前面分享过一个算法<音频增益响度分析 ReplayGain 附完整C代码示例> 主要用 ...
- 分享一个MySQL分库分表备份脚本(原)
分享一个MySQL分库备份脚本(原) 开发思路: 1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上 ...
- 数据库备份并分离日志表(按月)sh 脚本
#!/bin/sh year=`date +%Y` month=`date +%m` day=`date +%d` hour=`date +%H` dir="/data/dbbackup/f ...
- 数据备份的OSS接口
最近在做一个新的项目,从RDS备份到OSS,进行数据备份以及后续的还原.这边对阿里云的OSS数据上传接口进行说明,先做下笔记先简单介绍下OSS: ①Object 在OSS中,用户操作的基本数据单元是O ...
随机推荐
- windows下安装php依赖关系管理工具composer
1.安装Composer Composer是PHP的依赖管理工具之一,官方网站 http://getcomposer.org/ .它支持多种安装方式,对于在win下做开发的草来说,最便捷的方式就是下载 ...
- 扩展 -------jQuery
本文摘要:http://www.liaoxuefeng.com/ 编写jQuery插件 为了满足需求,我们经常会调用一些插件,js插件都是别人写的,今天就来了解了解一些方法. 给jQuery对象绑定一 ...
- React后台管理系统-file-uploader组件
1.React文件上传组件github地址: https://github.com/SoAanyip/React-FileUpload 2.Util里边新建file-uploader文件夹,里边新建i ...
- MySQL 5.7 在线启用和关闭GTID
1.相关基础 MySQL 5.7.6之后GTID_MODE提供了两个新的选项分别为ON_PERMISSIVE和OFF_PERMISSIVEOFF_PERMISSIVE:不产生GTID事务, Slave ...
- 博学谷-数据分析numpy
import numpy as np print np.version.version np.array([1,2,3,4]) np.arange(15) np.array(range(10)) = ...
- python 实现简单语音聊天机器人
'''思路:使用百度的文本转音频API,将结果保存成mp3格式,并用mp3play库播放该文件.''' 1 # -*- coding:utf-8 -*- import sys import reque ...
- form中 单选框 input[type="radio"] 分组
在form中有时候需要给单选框分组,这种情况下 可以通过给单选框设置相同的name来进行分组: <html> <head> <title> </title&g ...
- 为什么90%的IT人员都不适合做老大?
什么是格局? 格局就是能够很好的平衡短期利益和长期利益. 过分注重短期利益的人必然会失去长期利益,到头来一定会很普通. 例如:跳槽不断,可能短期薪资会增长,但长期来看后劲可能会不足,未来发展空间会变窄 ...
- mybatis中实现动态SQL
动态SQL语句,也就意味着SQL语句不在是一成不变的而是具有多样性. if if的用法还是跟平常差不多的(不过没有else if也没有else) <update id="modify& ...
- linux常用指令学习记录
前言 本文主要为学习贴,用来记录一些 linux上的常用指令 以供参考. 文件内容查看 cat 从上往下阅读文件内容 cat [-AbEnTv] ${FILE_NAME) cat -n /etc/is ...