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波形的台阶,还可以做前置滤波保证带内波动。

max262max262的程序以及软件的用法

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,就介绍到这里啦!感谢大家的阅读!希望能够对大家有所帮助!