msp430单片机基于max262的滤波程序
#includemsp430fg4618.h#definea0BIT0
#definea1BIT1
#definea2BIT2
#definea3BIT3
#defined0BIT4
#defined1BIT5
#definewrBIT6
#definectrlportP5OUT
//addr的取值范围0-15,dat的取值范围0-3
voidmax262writedat(ucharaddr,uchardat)
{
ctrlport=addr+dat*16;
delay_us(5);
ctrlport|=wr;
delay_us(10);
}
//mode=M1M0,q=Q6Q5Q4Q3Q2Q1Q0,ratio=F5F4F3F2F1F0
voidmax262setA(ucharmode,ucharq,ucharratio)
{
max262writedat(0,mode-1);
max262writedat(4,q&0x03);//Q1Q0
max262writedat(5,(q>>2)&0x03);//Q3Q2
max262writedat(6,(q>>4)&0x03);//Q5Q4
max262writedat(7,(q>>6)&0x03);//Q6
max262writedat(1,ratio&0x03);//F1F0
max262writedat(2,(ratio>>2)&0x03);//F3F2
max262writedat(3,(ratio>>4)&0x03);//F5F4
}
voidmax262setB(ucharmode,ucharq,ucharratio)
{
max262writedat(8,mode-1);
max262writedat(12,q&0x03);//Q1Q0
max262writedat(13,(q>>2)&0x03);//Q3Q2
max262writedat(14,(q>>4)&0x03);//Q5Q4
max262writedat(15,(q>>6)&0x03);//Q6
max262writedat(9,ratio&0x03);//F1F0
max262writedat(10,(ratio>>2)&0x03);//F3F2
max262writedat(11,(ratio>>4)&0x03);//F5F4
}
//初始化后滤波器A和B的参数:mode3(LP,BP,HP),Q=1,fclk/f0=40.84
voidmax262init()
{
P5DIR=0xff;
ctrlport=0x00;
max262setA(3,64,0);
max262setB(3,64,0);
}
请教MAX262的问题
MAX262如何设置参数,我想设置为巴特沃斯型的带通滤波器,带通频率5Hz~1.5kHz,具体用法请参考官方技术手册!!没有模式0、只有1、2、3、4模式 选择模式1时可以低通和带通,直接写程序设定fclk/fo值和你好,你们有没有已经编好的程序! 用51单片机! 能不能发给我呀 我的邮箱468926608@qq.com你好,那程序经过测试了吗?那个用过,是的,那个芯片对时钟信号进行了内部整形,效果不错的,电路又简单,还有一个独立的放大器,可以作后置滤波处理DAC波形的台阶,还可以做前置滤波保证带内波动。
MAX262中FCLK啥意思想用单片机控制MAX262滤除啸叫,应该怎么做
fCLK = Frequency of Clock,即振荡电路工作频率……
max262四种模式,但是每种模式几种滤波方式!怎么设置每种模式中具体的滤波方式
没有模式0、只有1、2、3、4模式 选择模式1时可以低通和带通,直接写程序设定fclk/fo值和
Q值就行了 低通输出端自然就输出低通 带通输出端自然就输出带通... 依次类推 都是一样的 只不过高通只能选择模式三~
max262的程序以及软件的用法
/***************************程控滤波函数***********************************************/
/* 使用程控滤波芯片Max262
用IO口方式
MCU --- MAX262
P0.3~P0.0--- A3~A0
P0.5~P0.4--- D1~D0
P1.0 --- WR
*/
#include<c8051f020.h>
#include<absacc.h>
#include<intrins.h>
#define nop _nop_()
#define uchar unsigned char
#define uint unsigned int
#define fclk 2 //2Mhz 即2000khz,和后面0.637恰好抵消小数部分
sbit WrMax262=P1^0;
void Filter(uchar way,float f,float q,uchar whichone);
void TransFilter(uchar ContrData);
uchar Fn(float f);
sfr16 RCAP2 = 0xca;
sfr16 TMR2 = 0xcc;
#define SYSCLK 16000000
/*sbit max262wr=P3^7;
sbit max262a0=P3^6;
sbit max262a1=P3^5;
sbit max262a2=P3^4;
sbit max262a3=P3^3;
sbit max262d0=P3^1;
sbit max262d1=P3^0;*/
uchar Qn(float q) //品质因数关键字
{
uchar temp;
temp=128-64/q;
return temp;
}
/*---------控制方式way,中心频率f,品质因数q,滤波器选择whichone 0表示A,1表示B--------*/
void Filter(uchar way,float f,float q,uchar whichone)
{
uchar i;
uchar fn0;
uchar qn0;
uchar fn[3];
uchar qn[4];
fn0=Fn(f);
fn[0]=fn0&0x03;
fn[1]=(fn0&0x0c)>>2;
fn[2]=(fn0&0x30)>>4;
qn0=Qn(q);
qn[0]=qn0&0x03;
qn[1]=(qn0&0x0c)>>2;
qn[2]=(qn0&0x30)>>4;
qn[3]=(qn0&0x40)>>6;
way=way&0x03;
whichone=whichone&0x01;
TransFilter((way<<4)+(whichone<<3));
for(i=0;i<3;i++)
{
TransFilter((fn[i]<<4)+i+1+(whichone<<3));
}
for(i=0;i<4;i++)
{
TransFilter((qn[i]<<4)+i+4+(whichone<<3));
}
}
uchar Fn(float f) //频率关键字
{
uchar temp;
temp=fclk*637/f-64; //原本是*2/pi;即*0.637 fclk用M单位,f单位khz
return temp;
}
void TransFilter(uchar ContrData) //送关键字函数
{
WrMax262=0;
P0=ContrData;
nop;
nop;
WrMax262=1;
}
/****************************************
系统时钟初始化
*****************************************/
void SYSCLK_Init (void)
{
int i; // 延时计数器
OSCXCN = 0x67; // 启动外部振荡器16MHz晶体
for (i=0; i < 256; i++) ; // 等待振荡器启动
while (!(OSCXCN & 0x80)) ; // 等待振荡器稳定
OSCICN = 0x88; // 选择外部振荡器为时钟源并使能丢失时钟检测器
}
/**************************************
端口引脚初始化
*************************************/
void PORT_Init (void)
{
XBR0 = 0x00;
XBR1 = 0x00;
XBR2 = 0x40; // 使能数据交叉开关和弱上拉
P2MDOUT |= 0xff;
P3MDOUT |=0xff;
//P74OUT |= 0xff; // 使能为推挽输出
}
/**************************************
定时延时函数
*************************************/
void Delay_MS(unsigned int ms) //延时mS
{
CKCON &= ~0x20; // use SYSCLK/12 as timebase
RCAP2 = -(SYSCLK/1000/12); // Timer 2 overflows at 1 kHz
TMR2 = RCAP2;
ET2 = 0; // Disable Timer 2 interrupts
TR2 = 1; // Start Timer 2
while(ms)
{
TF2 = 0; // Clear flag to initialize
while(!TF2); // Wait until timer overflows
ms--; // Decrement ms
}
TR2 = 0; // Stop Timer 2
}
void main()
{
WDTCN = 0xde;
WDTCN = 0xad; //关看门狗
SYSCLK_Init (); //初始化时钟
PORT_Init (); //初始化IO口
Filter(1,11.9,32,0);
while(1);
}
max262的程序以及软件的用法、max262,就介绍到这里啦!感谢大家的阅读!希望能够对大家有所帮助!