电赛总结(二)——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()
{
//ST²úÉúÉÏÉýÑØºÍϽµÑØ
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() //¶¨Ê±Æ÷ÖжÏÅäÖÃ
{ NVIC_InitTypeDef NVIC_InitStructure; //ÅäÖÃÖжϽṹ
TIM_TimeBaseInitTypeDef TIM_TimeBaseStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3, ENABLE); NVIC_PriorityGroupConfig(NVIC_PriorityGroup_0); //ÅäÖÃÄÚ²¿Ê±ÖÓ
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µÄÖжϳõʼ»¯ TIM_TimeBaseStructure.TIM_Period=100; //ÓëÏÂÒ»ÐÐÓï¾äÅäºÏ£¬µ¥Æ¬»úʱÖÓÐźÅĬÈÏÇé¿öÏÂÊÇ72MHz£¬¸Ä10000Õâ¸öÊý¿ÉÒÔÉèÖÃÖжÏʱ¼ä
TIM_TimeBaseStructure.TIM_Prescaler=72; //ÕâÐÐÒ²¿ÉÒԸ쬵«ÊÇΪÁËÊý¾Ý·ÖÅäÇå³þ£¬»¹ÊÇÉÏÒ»ÐÐÕû°ÙÕû°ÙµØ¸Ä±È½ÏºÃ
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) //È·¶¨½øÈëÁËÕâ¸öÖжÏ
{
TIM_ClearITPendingBit(TIM3, TIM_IT_Update); // Çå³ý±êÖ¾£¬±£ÏÕÆð¼ûÒª¼Ó
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)
{ }
}
电赛总结(二)——AD芯片总结之音频处理芯片ADC8009的更多相关文章
- TI MSP430工程配置及2019年电赛A题编程示例(使用430 F5529)
配置 第一步:右击工程,选择Options 第二步:在General Options的Target选项卡里选择对应的器件Device,这里是MSP430G2231 第三步:在Debugger里选择FE ...
- 【系列】关于NJUPT电赛自控方向第一次积分赛的总结
本人是NJUPT电子科学与技术专业大一摸鱼狗一枚.本博客旨在总结与分享个人准备电赛所学知识,同时也是为了防止遗忘,锻炼写文章的能力.目前电赛方向为自控方向.主要研究方向为单片机.图像处理.自动控制相关 ...
- [2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania
[2018冬令营模拟测试赛(二十一)]Problem A: Decalcomania 试题描述 输入 见"试题描述" 输出 见"试题描述" 输入示例 见&quo ...
- noip2019集训测试赛(二十一)Problem B: 红蓝树
noip2019集训测试赛(二十一)Problem B: 红蓝树 Description 有一棵N个点,顶点标号为1到N的树.N−1条边中的第i条边连接顶点ai和bi.每条边在初始时被染成蓝色.高桥君 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(二)——通讯框架讲解
首先感谢张队@geffzhang公众号转发了上一篇文章,希望广大.neter多多推广dapr,让云原生更快更好的在.net这片土地上落地生根. 目录:一.通过Dapr实现一个简单的基于.net的微服务 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(二十)——Saga框架实现思路分享
今天这篇博文的主要目的是分享一下我设计Saga的实现思路来抛砖引玉,其实Saga本身非常的类似于一个简单的工作流体系,相比工作流不一样的部分在于它没有工作流的复杂逻辑处理机制(比如会签),没有条件分支 ...
- 国产芯片任重道远 国科微SSD主控芯片的“追赶之路”(不能只提供一颗芯片,而是要将芯片、国密算法、固件Firmware、BIOS和操作系统紧密联系在一起,变成完整解决方案交给行业用户,才能真正体现自身的价值)
集微网消息,“中国芯”战略之路道阻且长,踏入这个赛道的攻坚者们需要十年如一日的技术突破,需要集合产业势能,共同协作,方能建立中国核心技术真正的竞争力. 国产化之路任重道远,SSD芯片初见成效 信息时代 ...
- USB Windows驱动 音频解决方案芯片DP108
DP108是一款完全替代CM108的高度集成的单芯片USB音频解决方案芯片.方便的USB即插即用的兼容性,用户可以快速创建易用性,高质量和便携式USB音频产品基于高度集成的单芯片解决方案.所有重要的模 ...
- 电赛总结(二)——AD芯片总结之AD7715
一.特性参数 1.16位无失真AD转换器 2.增益可调,在1,2,32,128可切换. 3.数字地和模拟地分开,可以减少噪声. 4.具有较大的输出电流,有比较好的带载能力. 二.管脚排列 三.引脚功能 ...
随机推荐
- 在.NET 环境中实现每日构建(Daily Build)--ccnet,MSBuild篇(转载)
每日构建,对我们团队来说一个全新的概念.随着项目开发的进展,在开发过 程需要及时反馈一些BUG和功能要求的处理情况.而在这种情况下每天或隔一段时间Build一个版本,工作量还是比较大的,所以就特别有必 ...
- Spring IoC实现解耦合
public class UserDaoImpl implements UserDao{ @Override public void save(User user) { // TODO Auto-ge ...
- Ubuntu格式化分区时的一个小错误
admin@gpc:/$ sudo mkfs -t ext3 -c /dev/sdb1 mkfs.ext3: inode_size (128) * inodes_count (0) too big ...
- Android Studio 设置不自动缩进匿名内部类
Android Studio 会默认缩进匿名内部类代码,这让人感觉有些不大适应,可以使用下面的方法进行取消. 取消选中橙色框前的几个复选框即可.
- 【转】 浅谈Radius协议
浅谈Radius协议 2013-12-03 16:06 5791人阅读 评论(0) 收藏 举报 分类: Radius协议分析(6) 从事Radius协议开发有段时间了,小弟不怕才疏学浅,卖弄一下, ...
- C语言异常处理和连接数据库
#include <stdio.h> #include <setjmp.h> jmp_buf j; void Exception(void); double diva(doub ...
- 关于thinkphp 开发的网站部署问题
公司一个网站用thinkphp 开发的,由wamp环境移植到lamp环境 出现错误.提示无法生成缓存文件. 原因是thinkphp 的一些目录需要重新生成,所以将一个新的thinkphp 核心包应用后 ...
- 【原创】angularjs1.3.0源码解析之directive
# Angular指令编译原理 前言 angular之所以使用起来很方便,是因为通常我们只需要在html里面引入一个或多个(自定义或内置的)指令就可以完成一个特定的功能(这也是angular推荐的方式 ...
- CameraFacingBillboard
原地址:http://www.cnblogs.com/88999660/ 描述 这个脚本使得它被连接到配合本身相机的对象.这对于要经常面对镜头,并以同样的方式了,因为它是有用的广告牌. 用法 将这个脚 ...
- PHP生成CSV文件
CSV文件的定义这里就不多做介绍了,难能可贵的是用Excel可以直接打开CSV文件.用PHP输出CSV文件本身很简单,但是大家如果有业务需求,下面的代码可以作为参考. $tableheader = a ...
