⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft_240128.c

📁 用avr调试t6369的240128并将采到的数据用于fft分析的程序
💻 C
字号:
/********16位ad函数*************
sclk     接PD2
DOUT     接PD1
CONV     接PD3
EOC      接PD0
cs		 接PD4
*******************************/
#define uint  unsigned int 
#define uchar unsigned char 
#include <avr/io.h>
#include <util/delay.h>     //头文件
#include <avr/pgmspace.h>	//空间分配定义头文件
#include "240128.h"
#include "ffft.h"
union _my_complex_t {
	complex_t 	bfly_buff[FFT_N];
	uint8_t		lcd_buff[FFT_N * 4];
} my_complex_t ;
int16_t capture[FFT_N];			/* Wave captureing buffer */
//complex_t bfly_buff[FFT_N];		/* FFT buffer */
uint16_t spektrum[FFT_N/2];		/* Spectrum output buffer */
/*-----------------------------------------------------------------------
延时函数
系统时钟:8M
-----------------------------------------------------------------------*/
void delay_1us(void)                 //1us延时函数
  {
   asm("nop");
   asm("nop");
  }

void delay_nus(unsigned int n)       //N us延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1us();
  }
  
void delay_1ms(void)                 //1ms延时函数
  {
   unsigned int i;
   for (i=0;i<1140;i++);
  }
  
void delay_nms(unsigned int n)       //N ms延时函数
  {
   unsigned int i=0;
   for (i=0;i<n;i++)
   delay_1ms();
  }
/**********位操作函数*********/
void set_sclk(uchar i)//clk     接PA2
{	 
	 if(i)
	 PORTD|=0x04;
	 else
	 PORTD&=0xfb;
}
void set_conv(uchar i)
{	 
	 if(i)
	 PORTD|=0x08;
	 else
	 PORTD&=0xf7;
}
void set_cs(uchar i)
{	 
	 if(i)
	 PORTD|=0x10;
	 else
	 PORTD&=0xEF;
}
/*********m16初始化**********/
void m16_init(void)
{
	 DDRD|=0Xfc;
	 DDRD&=0Xfc;//定义pa1 pa2 为输入,其他引脚为输出
	 DDRE=0Xff;
	 DDRF=0Xff;
	 DDRG=0Xff;
	 DDRB=0Xff;
	 DDRC=0Xff;
	 DDRA=0Xff;//端口初始化
	 //PORTD|=0X03;//定义pa1 pa2为带上拉输入
	 //CLI();//关中断
}
/********max195初始化********/ 
void max195_inital(void)
    {
     set_cs(1);
     set_sclk(0);
    }
/**********************
max195转换开始
**********************/
void max195_start(void)
{
     set_conv(0);//,启动转换
     delay_nus(100);
     set_conv(1);
}
/***********************/
uint max195_read(void)
{	 uint num2=0;
	 uchar num1=0,k;
	 while((PIND&0x01)==0x01);
	 set_cs(0);
	 for(k=0;k<16;k++)
	 {
	 set_sclk(1);
	 delay_1us();
	 if((PIND&0x02)==0x02)//判断pa1是否为1
	 {
	 num1=1;
	 //PORTA|=0x20;
	 }
	 else
	 {
	 num1=0;
	 //PORTA&=0xdf;
	 }
	 num2=num2*2+num1;
	 set_sclk(0);//下降沿锁存下一位
	 delay_nus(3);
	 }
	 return num2;
}
static void avr_init(void);
/***************************************************/
void capture_wave (int16_t *buffer, uint16_t count)
{
    uint16_t dat=0;

	do {
			 max195_start();
	         delay_nus(5);//必须加一段延时
	         dat=max195_read();
		     *buffer++ = dat;//vref是avcc
	} while(--count);

	ADCSRA = 0;

//	sei();
}
int main(void)
{	
	 uint average_dat[128]={0};
	 uchar i=0,j=0,k=0;
	 float  average=0.0;
	 volatile float v=0.0;
	 m16_init();
	 avr_init();
	 max195_inital();
	 while(1)
	 {
	 capture_wave(capture, FFT_N);
	 fft_input(capture, my_complex_t.bfly_buff);
	 fft_execute(my_complex_t.bfly_buff);
	 fft_output(my_complex_t.bfly_buff, spektrum);
	 for(i=0;i<240;i++)
	 {
	 k=spektrum[i]/512;
	 glcd_pixel(i,k,1);
	 }
	//glcd_show(testbmp,0,127);
	//delay_nms(1000);
	glcd_clear_ram();
	}
}

static void avr_init(void)
{
    glcd_setup();
	glcd_init();
	glcd_clear_ram();
	glcd_clear_text();
	glcd_clear_graph();
    return;                                 
}
//************************************************

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -