一、项目介绍(包括设计思路、软硬件介绍等)
以前搭建过一个Arduino模块,正好利用起来了。美信的MAX4466麦克风前置放大器,搭配一个ADI的AD8531运算放大器,正好进行音频信号的放大,然后通过atmega 328对信号进行采集处理,最后展示在1.8的LCD屏幕上。
二、项目用到的板卡、芯片、模块、仪器、设备等介绍
1、ATMEGA328P-PU
ATMEGA328P-PU是高性能Atmel picoPower 8位AVR基于RISC的微控制器结合了32KB ISP闪存存储器,具有同时读写能力,1024B EEPROM,2KB SRAM,23个通用输入/输出线路,32个通用工作寄存器,3个灵活的比较模式计时器/计数器,内部和外部中断,串行可编程USART,一个字节为主的2线串行接口,SPI串行端口,一个6通道10位模数转换器(8通道以TQFP和QFN/MLF封装),带内部振荡器的可编程看门狗计时器,以及5个可选软件节电模式.设备运行电压:1.8-5.5V.
- 高性能,低功率Atmel®AVR®8位微控制器系列
- 先进的RISC架构
- 高耐用性非易失存储器段\
- 支持Atmel®QTouch®数据库
- 周边设备功能
- 特殊微控制器功能
2、MAX4466
厂家:美信
简介:低成本、微功耗、SC70/SOT23-8封装、麦克风前置放大器,可完全关断。
数据资料:https://datasheets.maximintegrated.com/en/ds/MAX4465-MAX4469.pdf
3、AD8531:250 mA输出、低成本、单电源放大器
厂家:ADI
作用:替换掉原本搭建的TI的运放
简介:AD8531别是单通道轨到轨输入与输出、单电源放大器,具有250 mA输出驱动电流。这种高输出电流特性使这些放大器特别适合驱动阻性或容性负载。交流性能也非常出色,具有3 MHz带宽、5 V/µs压摆率及低失真特性。所有器件均保证可采用3 V单电源和5 V电源工作。
优势和特点:
- 单电源供电:2.7 V至6 V
- 高输出电流:±250 mA
- 低电源电流:每个放大器750 µA
- 宽带宽:3 MHz
- 压摆率:5 V/μs
- 无反相
- 低输入电流
- 单位增益稳定
- 轨到轨输入和输出
官网地址:https://www.analog.com/cn/products/ad8531.html
4、1.8' 128*120 RGB TET_LCD
三、关键性代码及说明
FFT关键代码:
#include "fix_fft.h"
#include <Wire.h>
#include <Adafruit_GFX.h>
#include "ssd1306.h"
//------------------------------------------
//------------------------------------------
char im[128], data[128]; char x = 0, ylim = 60; int i = 0, val;
//==============================================================
void setup()
{
Serial.begin(9600);
display.begin(SSD1306_SWITCHCAPVCC,0x3C);
display.setTextSize(1);
display.setTextColor(WHITE);
display.clearDisplay();
analogReference(DEFAULT);
}
//==============================================================
void loop()
{
int min=1024, max=0;
for (i=0; i <128; i++) //take 128 samples
{
val = analogRead(A0);
data[i] = val/4 - 128;
im[i] = 0;
if(val>max) max=val; //store max & min sample
if(val<min) min=val;
}
//------------------------------------------
fix_fft(data, im, 7, 0); //FFT on data
//------------------------------------------
display.clearDisplay();
for (i=1; i<64; i++) //bar graph sketch on OLED display
{
int dat = sqrt(data[i] * data[i] + im[i] * im[i]);
display.drawLine(i*2 + x, ylim, i*2 + x, ylim - dat, WHITE);
}
display.setCursor(0,0); display.print(" Spectrum Analyzer");
display.display();
}
#include "ssd1306.h"
void setup()
{
/* Replace the line below with ssd1306_128x32_i2c_init() if you need to use 128x32 display */
ssd1306_128x64_i2c_init();
ssd1306_fillScreen(0x00);
ssd1306_setFixedFont(ssd1306xled_font6x8);
}
int progress = 0;
void loop()
{
ssd1306_drawProgressBar( progress );
progress++;
if ( progress > 100 )
{
progress = 0;
delay( 2000 );
}
else
{
delay( 50 );
}
}
四、功能演示结果及说明
不同音量、不同频率的声音在屏幕上的波形各不相相同。
五、对本活动的心得体会
这个一个非常能锻炼都收能力的活动,可以先采购芯片,然后进行项目设计。活动的主题方向都还是比较大的,我做的还只是其中的一小部分,还需要不断的学习去完善这个模块,希望后期整个系统能更加完整。