占位符

 #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. vue 自定义动态弹框

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. Android驱动开发读书笔记七

    第七章 (一)创建设备文件 1.使用cdev_init函数初始化cdec 描述设备文件需要一个cdev结构体,代码如下: struct cdev{ struct kobject kobj; struc ...

  3. 课时5.什么是URL(理解)

    其实浏览器的地址栏中输入的地址就是一个URL. http://127.0.0.1/index.html(浏览器会自动添加:80) http://127.0.0.1:80/index.html(这是浏览 ...

  4. Yii2.X 如何避开pathinfo不能处理中文名开头的bug

    /** * @return string original file base name */ public function getBaseName() { // https://github.co ...

  5. JZOJ 4757. 树上摩托

    Description Sherco是一位经验丰富的魔♂法师.Sherco在第零次圣杯战争中取得了胜利,并取得了王之宝藏——王の树.他想把这棵树砍去任意条边,拆成若干棵新树,并装饰在他的摩托上,让他的 ...

  6. [BZOJ2947]促销(Splay)

    Description Great Bytelandish的超级市场网络请你编写一个程序模拟促销商品的成本费用(simulating costs of the promotionbeing prepa ...

  7. 读《深入理解jvm虚拟机》之长期存活对象进入老年代,有感!!!!

    关于这一段代码 有几个不是让人很理解的地方,我一一说来. 1.Desired survivor size 524288 bytes 关于这个512KB空间是怎么来的,JVM有这样一个参数: -XX:T ...

  8. JDK各版本新特性浅谈

    JDK 5.0 自动拆装箱 枚举 可变参数 泛型 For -each 内省 静态导入 JDK 6.0 console开发控制台程序 轻量级HTTP ServerAPI 支持脚本语言 使用Compile ...

  9. The DOM in JavaScript

    DOM : Document Object Model   D is for document :  The DOM cant work without a document . When you c ...

  10. “帮你APP”团队冲刺3

    1.整个项目预期的任务量 (任务量 = 所有工作的预期时间)和 目前已经花的时间 (所有记录的 ‘已经花费的时间’),还剩余的时间(所有工作的 ‘剩余时间’) : 所有工作的预期时间:88h 目前已经 ...