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 ...
随机推荐
- pytho线程信号量
pytho线程信号量 import threading,time def going(num,sleep_time): semaphore.acquire()#启动允许执行 print("g ...
- LigerUI的下拉框行和树的设置(表单生成)
http://blog.csdn.net/dxnn520/article/details/8194767 // ---------------------- // [下拉树设置 -- 单选] {dis ...
- jeesite项目
1,登录页面.最高权限管理员 用户名:thinkgem 密码:admin 2,登陆之后展示的首页 3,分为不同的模块,由不同的入负责,我负责日志管理 已完成功能:模糊查询,分页,导入,导出Excel ...
- 梁勇(Danniel Liang) java教材例题:java程序购买额按税率求营业税 java中数值保留2位小数的方法
package com.swift; import java.util.Scanner; public class PurchaseTaxDecimalsTwo { public static voi ...
- 已解决: idea创建并部署SpringMVC项目时 报错 java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
用IDEA创建并运行SpringMVC项目时,最初发现没有Servlet包,这个问题已在上篇解决,然而当我们尝试去运行此时的SpringMVC项目时,发现仍然有错误.ClassNotFoundExce ...
- C++ 限定名称查找
限定名称查找规则实际归纳下来很简单,先对::左边的名称进行查找(遵循,限定,无限定),然后在左边查找到的(此时只查找类型名称)名字的作用域内(含内联名称空间件)查找右边出现的名字,查找到即存在(故可以 ...
- C/C++程序基础 (九)排序算法简述
排序算法 算法复杂度 算法简述 插入排序 N2 前方有序,依次将后方无序数据插入前方合适位置. 冒泡排序 N2 前方有序,从后方两两比较,将最小泡冒到前方. 选择排序 N2 前方有序,从后方选择最小的 ...
- 【原创】数据处理中判断空值的方法(np.isnan、is np.nan和pd.isna)比较
转载请注明出处:https://www.cnblogs.com/oceanicstar/p/10869725.html 1.np.isnan(只有数组数值运算时可使用) 注意:numpy模块的i ...
- mysql基础,DISTINCT关键字
- 基于flash-marker.js 的地图标注闪烁代码调试
修改网上流传的flash-marker.js (function (global, factory) { typeof exports === 'object' && typeof m ...