占位符

 #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备份的更多相关文章

  1. MySQL存储过程调试工具-dbForge Studio for MySQL

    工具官网地址:http://www.devart.com/dbforge/mysql/studio/ 对于某些存储过程很多且复杂的SQL的应用,在短时间内要使得所有MySQL存储过程和函数正常运行,那 ...

  2. 别人的Linux私房菜(9)文件与文件系统的压缩

    www网站利用文件压缩技术进行数据传输,提升网络带宽. 压缩命令gzip与显示zcat.zmore.zless.zgrep -c将压缩的数据显示到屏幕上 -d解压缩 -v显示原文件/压缩文件的压缩比等 ...

  3. 多线程pre

    body, table{font-family: 微软雅黑; font-size: 13.5pt} table{border-collapse: collapse; border: solid gra ...

  4. 搭建稳固的MySQL运维体系

    MySQL 监控要点 MySQL 监控要点,主要涉及服务器和 MySQL 两个方向的监控告警. 在这两个监控告警方向需要重点关注监控策略.监控趋势图及报警方式. 监控策略指的是每个监控项的告警阈值,例 ...

  5. 音频自动增益 与 静音检测 算法 附完整C代码

    前面分享过一个算法<音频增益响度分析 ReplayGain 附完整C代码示例> 主要用于评估一定长度音频的音量强度, 而分析之后,很多类似的需求,肯定是做音频增益,提高音量诸如此类做法. ...

  6. 音频自动增益 与 静音检测 算法 附完整C代码【转】

    转自:https://www.cnblogs.com/cpuimage/p/8908551.html 前面分享过一个算法<音频增益响度分析 ReplayGain 附完整C代码示例> 主要用 ...

  7. 分享一个MySQL分库分表备份脚本(原)

    分享一个MySQL分库备份脚本(原) 开发思路: 1.路径:规定备份到什么位置,把路径(先判断是否存在,不存在创建一个目录)先定义好,我的路径:/mysql/backup,每个备份用压缩提升效率,带上 ...

  8. 数据库备份并分离日志表(按月)sh 脚本

    #!/bin/sh year=`date +%Y` month=`date +%m` day=`date +%d` hour=`date +%H` dir="/data/dbbackup/f ...

  9. 数据备份的OSS接口

    最近在做一个新的项目,从RDS备份到OSS,进行数据备份以及后续的还原.这边对阿里云的OSS数据上传接口进行说明,先做下笔记先简单介绍下OSS: ①Object 在OSS中,用户操作的基本数据单元是O ...

随机推荐

  1. cin对象的一些常用方法使用总结

    >> 最初定义的是右移,当但是出现在 cin >>中的时候这个符号被重载了,变成了一个流操作,在用户通过键盘输入信息的时候,所有内容都会先直接存储在一个叫输入缓冲区的的地方,c ...

  2. 学习sqlserver的函数方法

    http://www.w3school.com.cn/sql/func_datediff.asp SQL Server DATEDIFF() 函数 SELECT DATEDIFF(day,'2008- ...

  3. JDBC 基本语法总结

    实现JDBC操作: 静态SQL执行 ① 注册驱动 Class.forName("com.mysql.jdbc.Driver"); ② 创建连接 Connection con = D ...

  4. 2018年ElasticSearch6.2.2教程ELK搭建日志采集分析系统(目录)

    章节一  2018年 ELK课程计划和效果演示 1.课程安排和效果演示 简介:课程介绍和主要知识点说明,ES搜索接口演示,部署的ELK项目演示 章节二 elasticSearch 6.2版本基础讲解到 ...

  5. C的xml编程-libxml2

    这里主要讲述libxml2在linux下的使用. (以下内容除了linux下的安装步骤是自己写的,其余均出自http://www.blogjava.net/wxb_nudt/archive/2007/ ...

  6. 1043: [HAOI2008]下落的圆盘

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1725  Solved: 743[Submit][Status][Discuss] Descripti ...

  7. Python 正则表达式 匹配次数

    管道可以匹配多个正则表达式中的一个 >>> >>> m=re.search(r'Batman|Tina Fey','Batman and Tina Fey')> ...

  8. 【bug】【yii】配置log时,报错 Setting read-only property: yii\web\Application::log

    Setting read-only property: yii\web\Application::log 配置放在了 components 外面,应该放在里面

  9. jQuery具体实例介绍什么时候用ajax,ajax应该在什么地方使用

    网站开发时,ajax是一个非常方便的工具,它具有和表单相同的功能完成前端和后台之间的交互!它起到局部刷新的功能!那什么时候用ajax呢?下面给大家介绍几个实例,首先应该分为两类:  一.在用表单和aj ...

  10. vncserver 启动停止方式

    vnc启停方式:vncserver :1  ; vncserver -kill :1