电赛总结(二)——AD芯片总结之音频处理芯片ADC8009

一、特性参数

1、专门用来用音频处理的AD芯片

2、内部固定好8K的采样速率

3、8位AD芯片

二、内部结构图

三、芯片管脚图

四、管脚功能说明

管脚名称 功能
IN0~IN7 数据输入端
ABC 数据输入端口选择
ST
ST 为转换启动信号。当ST 上跳沿时,所有内部寄存器清零;下跳沿时,开始进行A/D 转换;在转换期间,ST 应保持低电平。

EOC
EOC 为转换结束信号。当EOC 为高电平时,表明转换结束;否则,表明正在进行A/D 转换

OE
OE为输出允许信号,用于控制三条输出锁存器向单片机输出转换得到的数据。OE=1,输出转换得到的数据;OE=0,输出数据线呈高阻状态。D7-D0 为数字量输出线。

D7-D0 数字量输出线
CLK
时钟输入信号线。因ADC0809的内部没有时钟电路,所需时钟信号必须由外界提供,通常使用频率为500KHZ

VREF(+) 参考电压输入正极
VREF(-) 参考电压输入负极

五、STM32F103ZE驱动程序

#include "stm32f10x.h"

#define CLK GPIO_Pin_0
//#define B     GPIO_Pin_1
//#define C        GPIO_Pin_2
#define ALE GPIO_Pin_4
//#define IN0 GPIO_Pin_4
#define ST    GPIO_Pin_5
#define OE    GPIO_Pin_6
//#define A     GPIO_Pin_7

#define D0     GPIO_Pin_0
#define D1     GPIO_Pin_1
#define D2     GPIO_Pin_2
#define D3     GPIO_Pin_3
#define D4    GPIO_Pin_4
#define D5     GPIO_Pin_5
#define D6     GPIO_Pin_6
#define D7     GPIO_Pin_7
#define EOC GPIO_Pin_8

double val=0;

void delay(u32 kk)
{
  while(kk--);
}

/*
const unsigned short CLK= GPIO_Pin_0;
const unsigned short B=GPIO_Pin_1;
const unsigned short C=GPIO_Pin_2;
const unsigned short ALE=GPIO_Pin_3;
const unsigned short IN0=GPIO_Pin_4;
const unsigned short ST=GPIO_Pin_5;
const unsigned short OE=GPIO_Pin_6;
const unsigned short A=GPIO_Pin_7;

const unsigned short D0=GPIO_Pin_0;
const unsigned short D1=GPIO_Pin_1;
const unsigned short D2=GPIO_Pin_2;
const unsigned short D3=GPIO_Pin_3;
const unsigned short D4=GPIO_Pin_4;
const unsigned short D5=GPIO_Pin_5;
const unsigned short D6=GPIO_Pin_6;
const unsigned short D7=GPIO_Pin_7;
const unsigned short EOC=GPIO_Pin_8;
*/

void ad_init()
{

    GPIO_InitTypeDef GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOA, &GPIO_InitStructure);

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5|GPIO_Pin_6|GPIO_Pin_7|GPIO_Pin_8;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOB, &GPIO_InitStructure);

    GPIO_ResetBits(GPIOA, ALE);
//    GPIO_ResetBits(GPIOA, A);
//    GPIO_ResetBits(GPIOA, B);
//    GPIO_ResetBits(GPIOA, C);
     //delay(10);

    GPIO_SetBits(GPIOA, ALE);
    //CLK
}

void adc0809_input()
{
    //ST2úéúé?éy??oí???μ??
    GPIO_ResetBits(GPIOA, ST);
    delay(10);
    GPIO_SetBits(GPIOA,ST);
    delay(10);
    GPIO_ResetBits(GPIOA, ST);
    delay(10);
    while(GPIO_ReadInputDataBit(GPIOB, EOC)==0);

    GPIO_SetBits(GPIOA,OE);
    val=GPIO_ReadInputDataBit(GPIOB, D0)*0x0001+
         GPIO_ReadInputDataBit(GPIOB, D1)*0x0002+
       GPIO_ReadInputDataBit(GPIOB, D2)*0x0004+
       GPIO_ReadInputDataBit(GPIOB, D3)*0x0008+
       GPIO_ReadInputDataBit(GPIOB, D4)*0x0010+
       GPIO_ReadInputDataBit(GPIOB, D5)*0x0020+
       GPIO_ReadInputDataBit(GPIOB, D6)*0x0040+
       GPIO_ReadInputDataBit(GPIOB, D7)*0x0080;

    GPIO_ResetBits(GPIOA,OE);

    //val=val*2*0.98;
}

void timer_init()         //?¨ê±?÷?D??????
{

    NVIC_InitTypeDef NVIC_InitStructure;      //?????D???á11
    TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE);

      NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0);                     //?????ú2?ê±?ó
    NVIC_InitStructure.NVIC_IRQChannel=TIM3_IRQn;
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=0;
    NVIC_InitStructure.NVIC_IRQChannelSubPriority=0;
    NVIC_InitStructure.NVIC_IRQChannelCmd=ENABLE;
    NVIC_Init(&NVIC_InitStructure);//?¨ê±?÷3μ??D??3?ê??ˉ

      TIM_TimeBaseStructure.TIM_Period=100;      //ó???ò?DDó?????o?£?μ¥???úê±?óD?o???è??é????ê?72MHz£???10000?a??êy?éò?éè???D??ê±??
    TIM_TimeBaseStructure.TIM_Prescaler=72;    //?aDDò2?éò???£?μ?ê??aá?êy?Y·?????3t£??1ê?é?ò?DD??°ù??°ùμ???±è??o?
    TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
    TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
    TIM_TimeBaseInit(TIM3, &TIM_TimeBaseStructure);
    TIM_ITConfig(TIM3,TIM_IT_Update|TIM_IT_Trigger,ENABLE);
    TIM_Cmd(TIM3, ENABLE);
}

int i=1;
void TIM3_IRQHandler()
{
  if(TIM_GetITStatus(TIM3,TIM_IT_Update)!=RESET) //è·?¨??è?á??a???D??
  {
    TIM_ClearITPendingBit(TIM3, TIM_IT_Update);            //    ??3y±ê??£?±£???e??òa?ó
    adc0809_input();
        if(i==1)
        {
            GPIO_SetBits(GPIOA, GPIO_Pin_8);
        i=0;
        }

        else
        {
            i=1;
        GPIO_ResetBits(GPIOA, GPIO_Pin_8);
        }
  }
}

void ADC0809_Clock()
{
   TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure;
   TIM_OCInitTypeDef TIM_OCInitStructure;
     GPIO_InitTypeDef GPIO_InitStructure;

  RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);
  RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA|RCC_APB2Periph_AFIO, ENABLE);

    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0;
    GPIO_InitStructure.GPIO_Mode =  GPIO_Mode_AF_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
     GPIO_Init(GPIOA, &GPIO_InitStructure);

      //PWM--->100Hz
  TIM_TimeBaseStructure.TIM_Period=10;
  TIM_TimeBaseStructure.TIM_Prescaler=12;
  TIM_TimeBaseStructure.TIM_ClockDivision=TIM_CKD_DIV1;
  TIM_TimeBaseStructure.TIM_CounterMode=TIM_CounterMode_Up;
  TIM_TimeBaseInit(TIM2, &TIM_TimeBaseStructure);
//  //PA6--->50%                                             //?????
  TIM_OCInitStructure.TIM_OCMode=TIM_OCMode_PWM1;
  TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_Pulse=5;                    //pulse????period??????
    TIM_OCInitStructure.TIM_OutputState=TIM_OutputState_Enable;
  TIM_OCInitStructure.TIM_OCPolarity=TIM_OCPolarity_High;
  TIM_OC1Init(TIM2, &TIM_OCInitStructure);
    //  //PA7--->40%
//  TIM_OCInitStructure.TIM_Pulse=40;
//  TIM_OC2Init(TIM3, &TIM_OCInitStructure);
//  //PB0--->60%
//  TIM_OCInitStructure.TIM_Pulse=60;
//  TIM_OC3Init(TIM3, &TIM_OCInitStructure);
//  //PB1--->80%
//  TIM_OCInitStructure.TIM_Pulse=80;
//  TIM_OC4Init(TIM3, &TIM_OCInitStructure);

     TIM_Cmd(TIM2, ENABLE);
}

int main()
{      

      ad_init();
      GPIO_SetBits(GPIOA, GPIO_Pin_3);
    ADC0809_Clock();
      timer_init();   

    while(1)
        {

        }
}
时间: 2024-10-11 03:52:58

电赛总结(二)——AD芯片总结之音频处理芯片ADC8009的相关文章

2015电赛点滴

2015-7-2第1阶段 初步选题为通信类,和仪器仪表类.做红外光通信和频率特性分析仪两道题. 一.进度: 模拟部分:发送端去掉前面的电位器直接接在电容一侧进行耦合,接收端电路跳过前置放大的三极管. 传输距离较短,70cm左右: 数字部分 :单片机在4800波特率下传输键值,和简单字符进行双机通信没问题: 二.各自分工进展: 马永昊:搭建数字电路,模拟电路并调试 张初瞳:单片机的双机通信,温度显示 陈泽昱:滤波.运放电路.555芯片的使用 三.下一步: 提高模拟部分的传输距离,从前置放大,和lm

TI MSP430工程配置及2019年电赛A题编程示例(使用430 F5529)

配置 第一步:右击工程,选择Options 第二步:在General Options的Target选项卡里选择对应的器件Device,这里是MSP430G2231 第三步:在Debugger里选择FET Debugger: 第四步: 检查FET Debugger里的设置是否正确,这里是Texas Instrument USB-IF采用Automatic方式 这里选择Automatic与Automatic selection,当用串口会自动连接上串口. 第五步:编译程序,下载验证 电赛A题源码 小

模拟赛(二):T118878 阴云密布(代码极度哲学,慎点)

2020.2.6 模拟赛(二) T1 阴云密布(改编) 题目描述 杰哥有三个属性:生命值,魔法值,能量值.杰哥有如下三种基本技能:充能,攻击,魔法.杰哥的初始生命值Ht1,能量值和魔法值为0.阿伟的初始生命值为Ht2. 战斗有n轮,每轮杰哥会发动3个基本技能(杰哥耍赖. 攻击Blast: 对于第i个基本技能,如果它是攻击,设能量值Pw,那么伤害为(Pw+1)?Fst1~i~.然后能量值清0. 充能Charge: 对于第i个基本技能,如果它是充能,那么伤害为Elc~i~.然后能量值增加1. 魔法A

acm集训训练赛(二)D题【并查集】

一.题目 Description There is a town with N citizens. It is known that some pairs of people are friends. According to the famous saying that ?The friends of my friends are my friends, too? it follows that if A and B are friends and B and C are friends th

电赛总结(二)——AD芯片总结之AD7715

一.特性参数 1.16位无失真AD转换器 2.增益可调,在1,2,32,128可切换. 3.数字地和模拟地分开,可以减少噪声. 4.具有较大的输出电流,有比较好的带载能力. 二.管脚排列 三.引脚功能 引脚名称 功能 SCLK 串行时钟,施密特逻辑输入.将一个外部的串行时钟加于这一输入端口,以访问AD7715 的串行数据.和单片机传输数据时的控制时钟 MCLKIN 为转换器提供主时钟信号.能以晶体/谐振器或外部时钟的形式提供.晶体/谐振器可以接在MCLKIN 和MCLKOUT 二引脚之间.此外,

电赛总结(二)——AD芯片总结之高速AD9224

一.特性参数 1.12位高速AD 2.高达40MSPS的高速AD芯片 3.噪声小 二.芯片管脚图 三.管脚功能说明 管脚名称 功能 CLK 参考时钟输入端 BIT12-1 数据输出端(1是低位,12是高位) OTR "1"超出参考电压范围,"0"表示不超出范围 AVDD 模拟电源输入端  +5V AVSS 模拟地 SENSE 参考源选择."1"选择内部的1.225V参考源,否则使用外接参考源 VREF 参考源输入端 REFCOM 参考源地 CAP

电赛总结(二)——AD之STM32F102ZE单片机自带12位AD

直接上程序即可 #ifndef __ADC_H #define __ADC_H #include "stm32f10x.h" #include "LCD3.2.h" void ADC1_Init(void); float adc_output(void); void ADC2_Init(void); float adc2_output(void); #endif /* __ADC_H */ /** **********************************

电赛初探(二)——语音采集回放系统

一.系统结构 1.基本要求 (1)话音/功率放大器增益均可调: (2)带通滤波器:通带为300Hz-3.4kHz : (3)ADC:采样频率f s=8kHz,字长不小于8位: (4)语音存储时间≥10秒: (5)DAC:变换频率f c=8kHz,字长不小于8位: (6)回放语音质量良好. 2.发挥部分 在保证语音质量的前提下: (1)减少系统噪声电平,增加自动音量控制功能: (2)语音存储时间增加至20秒以上: (3)提高存储器的利用率(在原有存储容量不变的前提下,提高语音存储时间): (4)把

电赛总结(四)——波形发生芯片总结之AD9854

一.特性参数 ·300M内部时钟频率 ·可进行频移键控(FSK),二元相移键控(BPSK),相移键控(PSK),脉冲调频(CHIRP),振幅调制(AM)操作 ·正交的双通道12位D/A转换器 ·超高速比较器,3皮秒有效抖动偏差 ·外部动态特性: 80 dB无杂散动态范围(SFDR)@ 100 MHz (±1 MHz) AOUT ·4倍到20倍可编程基准时钟乘法器 ·两个48位可编程频率寄存器 ·两个14位可编程相位补偿寄存器 ·12位振幅调制和可编程的通断整形键控功能 ·单引脚FSK和BPSK数