IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 嵌入式 -> ARM之ADC模数转换器的实现 -> 正文阅读

[嵌入式]ARM之ADC模数转换器的实现

需求:转动FS4412电阻(蓝色小旋钮),在超级终端显示采集到的电压值

ADC模数转换器:采集电压数据
模拟量-》数据量,电压值-》机器内部能够理解的数值?? ?如:1V-》100?? ??? ?5V-》500
脚:特定功能脚、通用的IO脚、多功能脚(GPIO控制器配置)?? ?精度:12位

备注:

红色:外部管脚(仅仅是名字,与硬件一一对应)?? ?

蓝色:芯片内部管脚 ?连接内部的控制器,也可连接到第3方控制芯片?? ?

特定功能脚:专门实现一种功能的管脚,例如:ADC模数转换器所使用的管脚,XadcAINn
通用管脚:GPIO、PIO、IO开头的管脚

多功能脚:一根管脚可以实现多个功能,以 '/' 连接,如LCD灯的XvSYS_OE

XvSYS_OE/GPF3_5? ? ? ? 多功能管脚/普通IO脚


数值V: 1024/4096 == V/1.8?? ?难点:裸机不支持浮点操作、但需要显示浮点值
解决办法:放大,手动标小数点
ADC模块的选择:General(通用) ADC and MTCADC_ISP?? ?0x10010118 ?[16] ?0
转换模式:ADCCON(ADC控制寄存器) 初始化后,?? ?ADCDAT(数据转换寄存器) read
待命模式:TSADCCON0寄存器的TSSEL位为0、STANDBY位为1,转换数据停止,TSDATXn寄存器保存数据
编程模式:中断和轮询,轮询是 read ADCDATXn寄存器、检查最末端的ADCCONn标志位
ADCCONn标志位启动读时需要设置为1,边读边转换
阅读文档后,初步寄存器筛选:ADCCON ADCDLY(启动或者延时) ADCDAT ADCMUX(指定模拟输入通道)
不确定的便设置为默认,厂家一般给出的默认数值普通适应性都是最好的
ADCCON -》Base Address: 0x126C0000 [16]?? ?1
?? ?1、选择ADC模块:ADCCFG 0x1001_0118 ?[16] ? 0 : General ADC
?? ?2、设置为转换模式: ADCCON
?? ?3、转换后数据存储寄存器: ADCDAT
?? ?4、不需要standy mode?
?? ?5、adc poll(轮询)

?? ?寄存器筛选:
?? ?ADCCFG 0x10010118 ?[16] ? 0 : General ADC
?? ?ADCCON 0x126C0000 ?0x1<<16 | 0x1<<14 | 0xff<<6?
?? ?ADCDLY 0x126C0008 ?X?
?? ?ADCDAT 0x126C000c ?read..
?? ?ADCMUX 0x126C001c ?0x3

?main.c:

#include "uart.h"
//ADC模块寄存器器
#define ADCCFG   *(unsigned int volatile*)0x10010118
//控制寄存器
#define ADCCON   *(unsigned int volatile*)0x126C0000
//数据寄存器
#define ADCDAT  *(unsigned int volatile*)0x126C000c
//指定模拟输入通道寄存器
#define ADCMUX   *(unsigned int volatile*)0x126C001c
//分频寄存器
#define ADCDLY   *(unsigned int volatile*)0x126C0008

//自定义睡眠函数
void delay(){
    int t = 0xfffff*3;
    while(t--);
}
void adc_init()
{
    ADCCFG = ADCCFG & ~(0x1<<16);
    ADCCON = 0x1<<16 | 0x1<<14 | 0xff<<6 ;
    ADCMUX = 0x3;
    ADCCON = ADCCON | (0x1<<1);
}

int adc_read()
{
    return ADCDAT&0xfff;
}

void main()
{
    adc_init();
    while(1)
    {
        int data = adc_read();
        int v = data*18/4096;
        uart_send(v/10 +'0');
        uart_send('.');
        uart_send(v%10+'0');
        uart_send('\n');
        delay();
    }
}

Makefile、myadd.S、test.lds、uart.c、uart.h:ARM之串口的RTC时钟实现_承诺$枷锁的博客-CSDN博客

效果:

## Starting application at 0x41000000 ...
0.0
   1.2
      1.2
         1.2
            1.2
               1.2
                  1.2
                     1.2
                        1.2
                           1.0
                              0.6
                                 0.2
                                    0.0
                                       0.0
                                          0.5
                                             1.0
                                                1.5
                                                   1.7
                                                      1.7
                                                         1.7
  嵌入式 最新文章
基于高精度单片机开发红外测温仪方案
89C51单片机与DAC0832
基于51单片机宠物自动投料喂食器控制系统仿
《痞子衡嵌入式半月刊》 第 68 期
多思计组实验实验七 简单模型机实验
CSC7720
启明智显分享| ESP32学习笔记参考--PWM(脉冲
STM32初探
STM32 总结
【STM32】CubeMX例程四---定时器中断(附工
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:33:13  更:2022-09-13 11:35:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 22:59:40-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码