占位符

 #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. 1412: [ZJOI2009]狼和羊的故事

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 4017  Solved: 2037[Submit][Status][Discuss] Descript ...

  2. 四、Shell 数组

    Shell 数组 数组中可以存放多个值.Bash Shell 只支持一维数组(不支持多维数组),初始化时不需要定义数组大小(与 PHP 类似). 与大部分编程语言类似,数组元素的下标由0开始. She ...

  3. 【函数应用】PHP中关于URL的函数处理

    一,函数介绍 1.解析HTTP头信息:get_header() array get_headers ( string 目标URL [, int $format = 0 [如果将可选的 format 参 ...

  4. javascript 计算倒计时

    function timeDown(second) { var month = '', day = '', hour = '', minute = ''; if (second >= 86400 ...

  5. 虚拟主机的搭建(ubuntu+apache2)

    搭建环境:windows+VMware(Ubuntu)+apache2.(同一IP,不同域名) 1:在VMware的虚拟机Ubuntu下安装apache2(怎么安装百度一下就能找到): 2: apac ...

  6. 查询集 QuerySet和管理器Manager

    查询集 QuerySet 查询集,也称查询结果集.QuerySet,表示从数据库中获取的对象集合. 当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表): all():返回所有数据. ...

  7. [USACO]奶牛抗议(DP+树状数组+离散化)

    Description 约翰家的N头奶牛聚集在一起,排成一列,正在进行一项抗议活动.第i头奶牛的理智度 为Ai,Ai可能是负数.约翰希望奶牛在抗议时保持理性,为此,他打算将所有的奶牛隔离成 若干个小组 ...

  8. dfs 的全排列

    #include <iostream> #include <algorithm> #include <cstdio> #include <string> ...

  9. 用go和zk实现一个简单的分布式server

    golang的zk客户端 最近打算写个简单的配置中心,考虑到实现便捷性,语言选择了go,由于其中计划用到zk,就调研了下golang的zk客户端,并实现了个简单的分布式server.最终找到了两个,地 ...

  10. 动态加载css,js

    function dynamicLoadCss(url) { var head = document.getElementsByTagName('head')[0]; var link = docum ...