CSDN话题挑战赛第2期
目录
前言
1、ADC电压采集实验
1.1、ADC控制器
1.2、ADC类型
1.3、如何获取电压值?
2、ADC资料查询
2.1、ADC转换寄存器
2.2、ADCCON控制寄存器
2.3、ADCMUX通道选择寄存器
2.4、ADC数据寄存器
2.5、ADC实现程序代码
2.6、ADC实验结果
3、蜂鸣器实验
3.1、蜂鸣器种类
3.2、蜂鸣器连接原理图
3.2、PWM时钟配置
3.3、TCFG0
3.4、TCFG1
3.5、TCON
3.6、GPD0CON
3.7、PWM实现程序代码
3.8、蜂鸣器实验结果
?
前言
? ? ? ? 本篇是学习ADC模数转换与PWM控制输出得的实现,本篇共讲述了ADC和PWM两个实验,本篇难度不高,主要是熟悉电路结构和资料的查询,整理此篇学习内容与大家共赏!希望与大家共同进步,一起加油!?
????????除了本篇内容,还有其他ARM学习内容收纳于 🎈ARM学习之路🎈里,欢迎大家查看!
1、ADC电压采集实验
1.1、ADC控制器
????????模数转换器:把模拟信号转为数字信号,把连续变化的模拟量转换为离散数字量(用数字量来表示模拟量)。
1.2、ADC类型
-
逐次逼近型:速度一般,精度一般,体积小,成本低 -
积分微分型:速度慢,精度高,体积大,成本低 -
直接比较型:速度快,精度低,体积中,成本高
1.3、如何获取电压值?
芯片会通过电路中滑动变阻器来获取对应的电压值,将获取的电压值进行模数转换,转换成0、1这样的数字信号值。
(1)电路原理图
(2)与芯片连接的引脚图
2、ADC资料查询
2.1、ADC转换寄存器
2.2、ADCCON控制寄存器
-
转换精度选择:0-----10bit,1 -----12bit -
只读:1-----标志转换完成,0-----标志正在转换 -
使能预分频:0-----关闭预分频,1-----开启预分频 -
工作模式选择: 0-----普通模式
2.3、ADCMUX通道选择寄存器
输入通道选择:
-
0x0----通道0 -
0x1----通道1 -
0x2----通道2 -
0x3----通道3
2.4、ADC数据寄存器
2.5、ADC实现程序代码
#include "exynos_4412.h"
#include "uart.h"
?
void adc_init()
{
//adc初始化
//精度设置 12bit
ADCCON |= 1<<16;
//使能分频
ADCCON |= 1<<14;
//设置预分频
ADCCON = ADCCON & ~(0xff<<6) | 255;
//普通模式
ADCCON &= ~(1<<2);
//不进行连续转换
ADCCON &= ~(1<<1);
?
//通道选择
ADCMUX = 0x3;
}
?
int get_adc()
{
?
//启动转换,设置为[0]:1开启转换
ADCCON |= 1;
?
while( (ADCCON & 1<<15) == 0 );
//ADCDAT & 0xfff ----实际电压值(数字量)
return 1.8 * 1000 / 4096 * (ADCDAT & 0xfff);
?
}
?
int main()
{
//串口初始化
uart_init();
printf("program is start\n");
adc_init();
int V;
while(1)
{
V = get_adc();
printf("V is %d\n",V);//打印对应电压值
}
return 0;
}
?
2.6、ADC实验结果
3、蜂鸣器实验
3.1、蜂鸣器种类
-
无源蜂鸣器:内部无发声源,需要外部加载发声源 -
有源蜂鸣器:内部有发生源,不需要外部加载发声源
3.2、蜂鸣器连接原理图
3.2、PWM时钟配置
3.3、TCFG0
3.4、TCFG1
3.5、TCON
3.6、GPD0CON
3.7、PWM实现程序代码
#include "exynos_4412.h"
#include "uart.h"
?
?
void pwm_init()
{
?
//GPIO
GPD0.CON = GPD0.CON & ~(0xf) | 0x2;
//pwm初始化
//设置自动重载值
PWM.TCNTB0 = 1000;
//设置比较寄存器值
PWM.TCMPB0 = 500;
?
//设置预分频 500 Khz
PWM.TCFG0 = PWM.TCFG0 & ~(0xff) | 199;
//设置固定分频
PWM.TCFG1 &= ~(0xf);
//进入定时的频率为 500k hz
//每一个周期时间为1/500k
//最大能够计数 1000
//一个pwm波形(高低)时间1/500,输出的pwm波形频率为500hz
?
PWM.TCON |= 1<<3;
? //设置使能输出 TOUT0输出
PWM.TCON |= 1<<2;
//设置更新自动装载,和比较寄存器
PWM.TCON |= 1<<1;
//关闭更新自动装载和比较寄存器
PWM.TCON &= ~(1<<1);
//开启pwm
PWM.TCON |= 1;
}
?
void delay()//延时函数
{
int i,j;
for(i = 0;i < 1000;i++)
{
for(j=0;j< 1000;j++);
}
}
?
int main()
{
?
uart_init();
printf("program is start\n");
pwm_init();
delay();
PWM.TCON &= ~1;
while(1);
?
return 0;
}
3.8、蜂鸣器实验结果
?
- ?????????此时蜂鸣器工作起来了,工作一定延时就自动停止工作。
---------------------------本篇到此结束啦,欢迎点赞关注-------------------------
|